@@ -1025,7 +1025,7 @@ Parse_stat MCArrayOp::parse(MCScriptPoint &sp)
10251025 return PS_NORMAL;
10261026}
10271027
1028- Exec_stat MCArrayOp::exec (MCExecPoint &ep )
1028+ void MCArrayOp::exec_ctxt (MCExecContext &ctxt )
10291029{
10301030#ifdef /* MCArrayOp */ LEGACY_EXEC
10311031 uint1 e;
@@ -1114,7 +1114,6 @@ Exec_stat MCArrayOp::exec(MCExecPoint &ep)
11141114
11151115 return ES_NORMAL;
11161116#endif /* MCArrayOp */
1117- MCExecContext ctxt (ep);
11181117
11191118 MCAutoStringRef t_element_del;
11201119 MCAutoStringRef t_key_del;
@@ -1125,44 +1124,38 @@ Exec_stat MCArrayOp::exec(MCExecPoint &ep)
11251124 case TYPE_USER:
11261125 if (element != NULL )
11271126 {
1128- if (element->eval (ep) != ES_NORMAL ||
1129- !ep . copyasstringref (&t_element_del))
1130- {
1131- MCeerror->add (EE_ARRAYOP_BADEXP, line, pos);
1132- return ES_ERROR;
1133- }
1127+ if (!ctxt . EvalExprAsStringRef (element, EE_ARRAYOP_BADEXP, &t_element_del))
1128+ return ;
11341129
1135- if (key != NULL )
1136- {
1137- if (key->eval (ep) != ES_NORMAL ||
1138- !ep . copyasstringref (&t_key_del))
1139- {
1140- MCeerror->add (EE_ARRAYOP_BADEXP, line, pos);
1141- return ES_ERROR;
1142- }
1143- }
1130+ if (!ctxt . EvalOptionalExprAsNullableStringRef (key, EE_ARRAYOP_BADEXP, &t_key_del))
1131+ return ;
11441132 }
11451133 break ;
11461134 default :
1147- return ES_ERROR;
1135+ ctxt . Throw ();
1136+ return ;
11481137 break ;
11491138 }
11501139
11511140 MCAutoPointer<MCContainer> t_container;
1152- if (destvar -> evalcontainer (ep, &t_container) != ES_NORMAL)
1141+ MCAutoValueRef t_container_value;
1142+ if (!destvar -> evalcontainer (ctxt, &t_container))
11531143 {
1154- MCeerror -> add (EE_ARRAYOP_BADEXP, line, pos );
1155- return ES_ERROR ;
1156- }
1144+ ctxt . LegacyThrow (EE_ARRAYOP_BADEXP );
1145+ return ;
1146+ }
11571147
1158- if (t_container -> eval (ep) != ES_NORMAL)
1159- return ES_ERROR;
1148+ if (!t_container -> eval (ctxt, &t_container_value))
1149+ {
1150+ ctxt . Throw ();
1151+ return ;
1152+ }
11601153
11611154 if (is_combine)
11621155 {
1163- MCAutoArrayRef t_array;
1164- if (!ep . copyasarrayref ( &t_array))
1165- return ES_ERROR ;
1156+ MCAutoArrayRef t_array;
1157+ if (!ctxt . ConvertToArray (*t_container_value, &t_array))
1158+ return ;
11661159
11671160 MCAutoStringRef t_string;
11681161 if (form == FORM_NONE)
@@ -1177,17 +1170,14 @@ Exec_stat MCArrayOp::exec(MCExecPoint &ep)
11771170 else if (form == FORM_SET)
11781171 MCArraysExecCombineAsSet (ctxt, *t_array, *t_element_del, &t_string);
11791172
1180- if (!ctxt . HasError ())
1181- {
1182- ep . setvalueref (*t_string);
1183- return t_container -> set (ep);
1184- }
1173+ if (!ctxt . HasError ())
1174+ t_container -> set (ctxt, *t_string);
11851175 }
11861176 else
11871177 {
11881178 MCAutoStringRef t_string;
1189- if (!ep . copyasstringref ( &t_string))
1190- return ES_ERROR ;
1179+ if (!ctxt . ConvertToString (*t_container_value, &t_string))
1180+ return ;
11911181
11921182 MCAutoArrayRef t_array;
11931183 if (form == FORM_NONE)
@@ -1203,13 +1193,8 @@ Exec_stat MCArrayOp::exec(MCExecPoint &ep)
12031193 MCArraysExecSplitAsSet (ctxt, *t_string, *t_element_del, &t_array);
12041194
12051195 if (!ctxt . HasError ())
1206- {
1207- ep . setvalueref (*t_array);
1208- return t_container -> set (ep);
1209- }
1210- }
1211-
1212- return ES_ERROR;
1196+ t_container -> set (ctxt, *t_array);
1197+ }
12131198}
12141199
12151200void MCArrayOp::compile (MCSyntaxFactoryRef ctxt)
0 commit comments