@@ -561,7 +561,7 @@ Parse_stat MCMultiply::parse(MCScriptPoint &sp)
561561
562562// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification
563563// Here the source can be an array or number so we use 'tona'.
564- Exec_stat MCMultiply::exec (MCExecPoint &ep )
564+ void MCMultiply::exec_ctxt (MCExecContext &ctxt )
565565{
566566#ifdef /* MCMultiply */ LEGACY_EXEC
567567 MCVariable *t_dst_var;
@@ -650,61 +650,55 @@ Exec_stat MCMultiply::exec(MCExecPoint &ep)
650650
651651 return ES_NORMAL;
652652#endif /* MCMultiply */
653- MCAutoValueRef t_src;
654- if (source->eval (ep) != ES_NORMAL || ep.tona () != ES_NORMAL)
655- {
656- MCeerror->add (EE_MULTIPLY_BADSOURCE, line, pos);
657- return ES_ERROR;
658- }
659- /* UNCHECKED */ ep . copyasvalueref (&t_src);
653+ MCAutoValueRef t_src;
654+ MCAutoValueRef t_src_as_number;
655+
656+ if (!ctxt . EvalExprAsValueRef (source, EE_MULTIPLY_BADSOURCE, &t_src)
657+ || !valueref_tona (ctxt, EE_MULTIPLY_BADSOURCE, *t_src, &t_src_as_number))
658+ return ;
660659
661660 MCAutoValueRef t_dst;
661+ MCAutoValueRef t_dst_as_number;
662662 MCAutoPointer<MCContainer> t_dst_container;
663663 if (destvar != nil)
664664 {
665- if (destvar -> evalcontainer (ep , &t_dst_container) != ES_NORMAL )
665+ if (destvar -> evalcontainer (ctxt , &t_dst_container))
666666 {
667- MCeerror-> add (EE_MULTIPLY_BADDEST, line, pos );
668- return ES_ERROR ;
667+ ctxt . LegacyThrow (EE_MULTIPLY_BADDEST );
668+ return ;
669669 }
670670
671- if (t_dst_container -> eval (ep) != ES_NORMAL || ep.tona () != ES_NORMAL)
672- return ES_ERROR;
673-
674- /* UNCHECKED */ ep . copyasvalueref (&t_dst);
671+ if (t_dst_container -> eval (ctxt, &t_dst))
672+ return ;
675673 }
676674 else
677675 {
678- if (dest->eval (ep) != ES_NORMAL || ep.tona () != ES_NORMAL)
679- {
680- MCeerror->add (EE_MULTIPLY_BADDEST, line, pos);
681- return ES_ERROR;
682- }
683-
684- /* UNCHECKED */ ep . copyasvalueref (&t_dst);
676+ if (!ctxt . EvalExprAsValueRef (dest, EE_MULTIPLY_BADDEST, &t_dst))
677+ return ;
685678 }
686-
687- MCExecContext ctxt (ep);
679+
680+ if (!valueref_tona (ctxt, EE_MULTIPLY_BADDEST, *t_dst, &t_dst_as_number))
681+ return ;
688682
689683 MCAutoValueRef t_result;
690- if (MCValueGetTypeCode (*t_src) == kMCValueTypeCodeArray )
684+ if (MCValueIsArray (*t_src_as_number) )
691685 {
692- if (MCValueGetTypeCode (*t_dst) == kMCValueTypeCodeArray )
693- MCMathExecMultiplyArrayByArray (ctxt, (MCArrayRef)*t_dst , (MCArrayRef)*t_src , (MCArrayRef&)&t_result);
686+ if (MCValueIsArray (*t_dst_as_number) )
687+ MCMathExecMultiplyArrayByArray (ctxt, (MCArrayRef)*t_dst_as_number , (MCArrayRef)*t_src_as_number , (MCArrayRef&)&t_result);
694688 else
695689 {
696- MCeerror-> add (EE_MULTIPLY_MISMATCH, line, pos );
697- return ES_ERROR ;
690+ ctxt . LegacyThrow (EE_MULTIPLY_MISMATCH );
691+ return ;
698692 }
699693 }
700694 else
701695 {
702- if (MCValueGetTypeCode (*t_dst) == kMCValueTypeCodeArray )
703- MCMathExecMultiplyArrayByNumber (ctxt, (MCArrayRef)*t_dst , MCNumberFetchAsReal ((MCNumberRef)*t_src ), (MCArrayRef&)&t_result);
696+ if (MCValueIsArray (*t_dst_as_number) )
697+ MCMathExecMultiplyArrayByNumber (ctxt, (MCArrayRef)*t_dst_as_number , MCNumberFetchAsReal ((MCNumberRef)*t_src_as_number ), (MCArrayRef&)&t_result);
704698 else
705699 {
706700 double t_real_result;
707- MCMathExecMultiplyNumberByNumber (ctxt, MCNumberFetchAsReal ((MCNumberRef)*t_dst ), MCNumberFetchAsReal ((MCNumberRef)*t_src ), t_real_result);
701+ MCMathExecMultiplyNumberByNumber (ctxt, MCNumberFetchAsReal ((MCNumberRef)*t_dst_as_number ), MCNumberFetchAsReal ((MCNumberRef)*t_src_as_number ), t_real_result);
708702 /* UNCHECKED */ MCNumberCreateWithReal (t_real_result, (MCNumberRef&)t_result);
709703 }
710704 }
@@ -714,18 +708,19 @@ Exec_stat MCMultiply::exec(MCExecPoint &ep)
714708 if (destvar != nil)
715709 {
716710 if (t_dst_container -> set_valueref (*t_result))
717- return ES_NORMAL ;
711+ return ;
718712 ctxt . Throw ();
719713 }
720714 else
721715 {
722- if (dest->set (ep, PT_INTO, *t_result) == ES_NORMAL)
723- return ES_NORMAL;
716+ dest->set (ctxt, PT_INTO, *t_result);
717+
718+ if (!ctxt . HasError ())
719+ return ;
720+
724721 ctxt . LegacyThrow (EE_MULTIPLY_CANTSET);
725722 }
726- }
727-
728- return ctxt . Catch (line, pos);
723+ }
729724}
730725
731726void MCMultiply::compile (MCSyntaxFactoryRef ctxt)
0 commit comments