@@ -203,20 +203,24 @@ void MCAdd::exec_ctxt(MCExecContext &ctxt)
203203 MCAutoPointer<MCContainer> t_dst_container;
204204 if (destvar != nil)
205205 {
206- if (!destvar -> evalcontainer (ctxt, &t_dst_container))
206+ bool t_success;
207+ if (destvar -> needsContainer ())
208+ t_success = destvar -> evalcontainer (ctxt, &t_dst_container)
209+ && t_dst_container -> eval_ctxt (ctxt, t_dst);
210+ else
207211 {
208- ctxt . LegacyThrow (EE_ADD_BADDEST);
209- MCExecTypeRelease (t_src);
210- ctxt . SetNumberExpected (t_old_expectation);
211- return ;
212- }
213-
214- if (!t_dst_container -> eval_ctxt (ctxt, t_dst))
212+ destvar -> eval_ctxt (ctxt, t_dst);
213+ t_success = !ctxt . HasError ();
214+ }
215+
216+ if (!t_success)
215217 {
218+ ctxt . LegacyThrow (EE_ADD_BADDEST);
216219 MCExecTypeRelease (t_src);
217220 ctxt . SetNumberExpected (t_old_expectation);
218221 return ;
219222 }
223+
220224 }
221225 else
222226 {
@@ -265,9 +269,14 @@ void MCAdd::exec_ctxt(MCExecContext &ctxt)
265269 {
266270 if (destvar != nil)
267271 {
268- if (t_dst_container -> give_value (ctxt, t_result))
269- return ;
270- ctxt . Throw ();
272+ bool t_success;
273+ if (destvar -> needsContainer ())
274+ t_success = t_dst_container -> give_value (ctxt, t_result);
275+ else
276+ t_success = destvar -> give_value (ctxt, t_result);
277+
278+ if (!t_success)
279+ ctxt . Throw ();
271280 }
272281 else
273282 {
@@ -461,16 +470,19 @@ void MCDivide::exec_ctxt(MCExecContext &ctxt)
461470 MCAutoPointer<MCContainer> t_dst_container;
462471 if (destvar != nil)
463472 {
464- if (!destvar -> evalcontainer (ctxt, &t_dst_container))
465- {
466- ctxt . LegacyThrow (EE_DIVIDE_BADDEST);
467- MCExecTypeRelease (t_src);
468- ctxt . SetNumberExpected (t_old_expectation);
469- return ;
470- }
471-
472- if (!t_dst_container -> eval_ctxt (ctxt, t_dst))
473+ bool t_success;
474+ if (destvar -> needsContainer ())
475+ t_success = destvar -> evalcontainer (ctxt, &t_dst_container)
476+ && t_dst_container -> eval_ctxt (ctxt, t_dst);
477+ else
473478 {
479+ destvar -> eval_ctxt (ctxt, t_dst);
480+ t_success = !ctxt.HasError ();
481+ }
482+
483+ if (!t_success)
484+ {
485+ ctxt . LegacyThrow (EE_DIVIDE_BADDEST);
474486 MCExecTypeRelease (t_src);
475487 ctxt . SetNumberExpected (t_old_expectation);
476488 return ;
@@ -523,9 +535,15 @@ void MCDivide::exec_ctxt(MCExecContext &ctxt)
523535 {
524536 if (destvar != nil)
525537 {
526- if (t_dst_container -> give_value (ctxt, t_result))
527- return ;
528- ctxt . Throw ();
538+ bool t_success;
539+
540+ if (destvar -> needsContainer ())
541+ t_success = t_dst_container -> give_value (ctxt, t_result);
542+ else
543+ t_success = destvar -> give_value (ctxt, t_result);
544+
545+ if (!t_success)
546+ ctxt . Throw ();
529547 }
530548 else
531549 {
@@ -717,16 +735,19 @@ void MCMultiply::exec_ctxt(MCExecContext &ctxt)
717735 MCAutoPointer<MCContainer> t_dst_container;
718736 if (destvar != nil)
719737 {
720- if (!destvar -> evalcontainer (ctxt, &t_dst_container))
721- {
722- ctxt . LegacyThrow (EE_MULTIPLY_BADDEST);
723- MCExecTypeRelease (t_src);
724- ctxt . SetNumberExpected (t_old_expectation);
725- return ;
726- }
727-
728- if (!t_dst_container -> eval_ctxt (ctxt, t_dst))
738+ bool t_success;
739+ if (destvar -> needsContainer ())
740+ t_success = destvar -> evalcontainer (ctxt, &t_dst_container)
741+ && t_dst_container -> eval_ctxt (ctxt, t_dst);
742+ else
729743 {
744+ destvar -> eval_ctxt (ctxt, t_dst);
745+ t_success = !ctxt . HasError ();
746+ }
747+
748+ if (!t_success)
749+ {
750+ ctxt . LegacyThrow (EE_MULTIPLY_BADDEST);
730751 MCExecTypeRelease (t_src);
731752 ctxt . SetNumberExpected (t_old_expectation);
732753 return ;
@@ -779,9 +800,15 @@ void MCMultiply::exec_ctxt(MCExecContext &ctxt)
779800 {
780801 if (destvar != nil)
781802 {
782- if (t_dst_container -> give_value (ctxt, t_result))
783- return ;
784- ctxt . Throw ();
803+ bool t_success;
804+
805+ if (destvar -> needsContainer ())
806+ t_success = t_dst_container -> give_value (ctxt, t_result);
807+ else
808+ t_success = destvar -> give_value (ctxt, t_result);
809+
810+ if (!t_success)
811+ ctxt . Throw ();
785812 }
786813 else
787814 {
@@ -956,16 +983,19 @@ void MCSubtract::exec_ctxt(MCExecContext &ctxt)
956983 MCAutoPointer<MCContainer> t_dst_container;
957984 if (destvar != nil)
958985 {
959- if (!destvar -> evalcontainer (ctxt, &t_dst_container))
960- {
961- ctxt . LegacyThrow (EE_SUBTRACT_BADDEST);
962- MCExecTypeRelease (t_src);
963- ctxt . SetNumberExpected (t_old_expectation);
964- return ;
965- }
966-
967- if (!t_dst_container -> eval_ctxt (ctxt, t_dst))
986+ bool t_success;
987+ if (destvar -> needsContainer ())
988+ t_success = destvar -> evalcontainer (ctxt, &t_dst_container)
989+ && t_dst_container -> eval_ctxt (ctxt, t_dst);
990+ else
991+ {
992+ destvar -> eval_ctxt (ctxt, t_dst);
993+ t_success = !ctxt . HasError ();
994+ }
995+
996+ if (!t_success)
968997 {
998+ ctxt . LegacyThrow (EE_SUBTRACT_BADDEST);
969999 MCExecTypeRelease (t_src);
9701000 ctxt . SetNumberExpected (t_old_expectation);
9711001 return ;
@@ -1018,9 +1048,15 @@ void MCSubtract::exec_ctxt(MCExecContext &ctxt)
10181048 {
10191049 if (destvar != nil)
10201050 {
1021- if (t_dst_container -> give_value (ctxt, t_result))
1022- return ;
1023- ctxt . Throw ();
1051+ bool t_success;
1052+
1053+ if (destvar -> needsContainer ())
1054+ t_success = t_dst_container -> give_value (ctxt, t_result);
1055+ else
1056+ t_success = destvar -> give_value (ctxt, t_result);
1057+
1058+ if (!t_success)
1059+ ctxt . Throw ();
10241060 }
10251061 else
10261062 {
0 commit comments