Skip to content

Commit 19c22aa

Browse files
[[ RefactorSyntax ]] MCDivide::exec updated
1 parent b825440 commit 19c22aa

File tree

2 files changed

+33
-42
lines changed

2 files changed

+33
-42
lines changed

engine/src/cmds.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1601,7 +1601,7 @@ class MCDivide : public MCStatement
16011601
}
16021602
virtual ~MCDivide();
16031603
virtual Parse_stat parse(MCScriptPoint &);
1604-
virtual Exec_stat exec(MCExecPoint &);
1604+
virtual void exec_ctxt(MCExecContext &ctxt);
16051605
virtual void compile(MCSyntaxFactoryRef);
16061606
};
16071607

engine/src/cmdsm.cpp

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,8 @@ void MCAdd::exec_ctxt(MCExecContext &ctxt)
221221
return;
222222
}
223223

224-
if (!valueref_tona(ctxt, *t_dst, &t_dst_as_number))
225-
{
226-
ctxt . LegacyThrow(EE_ADD_BADDEST);
224+
if (!valueref_tona(ctxt, EE_ADD_BADDEST, *t_dst, &t_dst_as_number))
227225
return;
228-
}
229226

230227
MCAutoValueRef t_result;
231228
if (MCValueIsArray(*t_src_as_number))
@@ -332,7 +329,7 @@ Parse_stat MCDivide::parse(MCScriptPoint &sp)
332329

333330
// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification
334331
// Here the source can be an array or number so we use 'tona'.
335-
Exec_stat MCDivide::exec(MCExecPoint &ep)
332+
void MCDivide::exec_ctxt(MCExecContext &ctxt)
336333
{
337334
#ifdef /* MCDivide */ LEGACY_EXEC
338335
MCVariable *t_dst_var;
@@ -428,60 +425,53 @@ Exec_stat MCDivide::exec(MCExecPoint &ep)
428425
return ES_NORMAL;
429426
#endif /* MCDivide */
430427
MCAutoValueRef t_src;
431-
if (source->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
432-
{
433-
MCeerror->add(EE_DIVIDE_BADSOURCE, line, pos);
434-
return ES_ERROR;
435-
}
436-
/* UNCHECKED */ ep . copyasvalueref(&t_src);
428+
MCAutoValueRef t_src_as_number;
429+
if (!ctxt . EvalExprAsValueRef(source, EE_DIVIDE_BADSOURCE, &t_src)
430+
|| !valueref_tona(ctxt, EE_DIVIDE_BADSOURCE, *t_src, &t_src_as_number))
431+
return;
437432

438433
MCAutoValueRef t_dst;
434+
MCAutoValueRef t_dst_as_number;
439435
MCAutoPointer<MCContainer> t_dst_container;
440436
if (destvar != nil)
441437
{
442-
if (destvar -> evalcontainer(ep, &t_dst_container) != ES_NORMAL)
438+
if (!destvar -> evalcontainer(ctxt, &t_dst_container))
443439
{
444-
MCeerror->add(EE_DIVIDE_BADDEST, line, pos);
445-
return ES_ERROR;
440+
ctxt . LegacyThrow(EE_DIVIDE_BADDEST);
441+
return;
446442
}
447443

448-
if (t_dst_container -> eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
449-
return ES_ERROR;
450-
451-
/* UNCHECKED */ ep . copyasvalueref(&t_dst);
444+
if (t_dst_container -> eval(ctxt, &t_dst))
445+
return;
452446
}
453447
else
454448
{
455-
if (dest->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
456-
{
457-
MCeerror->add(EE_DIVIDE_BADDEST, line, pos);
458-
return ES_ERROR;
459-
}
460-
461-
/* UNCHECKED */ ep . copyasvalueref(&t_dst);
449+
if (!ctxt . EvalExprAsValueRef(dest, EE_DIVIDE_BADDEST, &t_dst))
450+
return;
462451
}
463-
464-
MCExecContext ctxt(ep);
452+
453+
if (!valueref_tona(ctxt, EE_DIVIDE_BADDEST, *t_dst, &t_dst_as_number))
454+
return;
465455

466456
MCAutoValueRef t_result;
467-
if (MCValueGetTypeCode(*t_src) == kMCValueTypeCodeArray)
457+
if (MCValueIsArray(*t_src_as_number))
468458
{
469-
if (MCValueGetTypeCode(*t_dst) == kMCValueTypeCodeArray)
470-
MCMathExecDivideArrayByArray(ctxt, (MCArrayRef)*t_dst, (MCArrayRef)*t_src, (MCArrayRef&)&t_result);
459+
if (MCValueIsArray(*t_dst_as_number))
460+
MCMathExecDivideArrayByArray(ctxt, (MCArrayRef)*t_dst_as_number, (MCArrayRef)*t_src_as_number, (MCArrayRef&)&t_result);
471461
else
472462
{
473-
MCeerror->add(EE_DIVIDE_MISMATCH, line, pos);
474-
return ES_ERROR;
463+
ctxt . LegacyThrow(EE_DIVIDE_MISMATCH);
464+
return;
475465
}
476466
}
477467
else
478468
{
479-
if (MCValueGetTypeCode(*t_dst) == kMCValueTypeCodeArray)
480-
MCMathExecDivideArrayByNumber(ctxt, (MCArrayRef)*t_dst, MCNumberFetchAsReal((MCNumberRef)*t_src), (MCArrayRef&)&t_result);
469+
if (MCValueIsArray(*t_dst_as_number))
470+
MCMathExecDivideArrayByNumber(ctxt, (MCArrayRef)*t_dst_as_number, MCNumberFetchAsReal((MCNumberRef)*t_src_as_number), (MCArrayRef&)&t_result);
481471
else
482472
{
483473
double t_real_result;
484-
MCMathExecDivideNumberByNumber(ctxt, MCNumberFetchAsReal((MCNumberRef)*t_dst), MCNumberFetchAsReal((MCNumberRef)*t_src), t_real_result);
474+
MCMathExecDivideNumberByNumber(ctxt, MCNumberFetchAsReal((MCNumberRef)*t_dst_as_number), MCNumberFetchAsReal((MCNumberRef)*t_src_as_number), t_real_result);
485475
/* UNCHECKED */ MCNumberCreateWithReal(t_real_result, (MCNumberRef&)t_result);
486476
}
487477
}
@@ -491,18 +481,19 @@ Exec_stat MCDivide::exec(MCExecPoint &ep)
491481
if (destvar != nil)
492482
{
493483
if (t_dst_container -> set_valueref(*t_result))
494-
return ES_NORMAL;
484+
return;
495485
ctxt . Throw();
496486
}
497487
else
498488
{
499-
if (dest->set(ep, PT_INTO, *t_result) == ES_NORMAL)
500-
return ES_NORMAL;
489+
dest->set(ctxt, PT_INTO, *t_result);
490+
491+
if (!ctxt . HasError())
492+
return;
493+
501494
ctxt . LegacyThrow(EE_DIVIDE_CANTSET);
502495
}
503-
}
504-
505-
return ctxt . Catch(line, pos);
496+
}
506497
}
507498

508499
void MCDivide::compile(MCSyntaxFactoryRef ctxt)

0 commit comments

Comments
 (0)