@@ -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
508499void MCDivide::compile (MCSyntaxFactoryRef ctxt)
0 commit comments