Skip to content

Commit 4b915e7

Browse files
[[ RefactorSyntax ]] MCArrayOp::exec udpated
1 parent fc77b49 commit 4b915e7

2 files changed

Lines changed: 27 additions & 42 deletions

File tree

engine/src/cmds.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ class MCArrayOp : public MCStatement
16841684
}
16851685
virtual ~MCArrayOp();
16861686
virtual Parse_stat parse(MCScriptPoint &);
1687-
virtual Exec_stat exec(MCExecPoint &);
1687+
virtual void exec_ctxt(MCExecContext &ctxt);
16881688
virtual void compile(MCSyntaxFactoryRef);
16891689
};
16901690

engine/src/cmdsm.cpp

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

12151200
void MCArrayOp::compile(MCSyntaxFactoryRef ctxt)

0 commit comments

Comments
 (0)