void MCArrayOp::exec_ctxt(MCExecContext &ctxt) { MCAutoStringRef t_element_del; MCAutoStringRef t_key_del; uint4 chunk; chunk = mode; switch(chunk) { case TYPE_USER: if (element != NULL) { if (!ctxt . EvalExprAsStringRef(element, EE_ARRAYOP_BADEXP, &t_element_del)) return; if (!ctxt . EvalOptionalExprAsNullableStringRef(key, EE_ARRAYOP_BADEXP, &t_key_del)) return; } break; case TYPE_ROW: t_element_del = ctxt.GetRowDelimiter(); break; case TYPE_COLUMN: t_element_del = ctxt.GetColumnDelimiter(); break; case TYPE_LINE: t_element_del = ctxt.GetLineDelimiter(); break; case TYPE_ITEM: t_element_del = ctxt.GetItemDelimiter(); break; case TYPE_WORD: case TYPE_TOKEN: case TYPE_CHARACTER: default: ctxt . Throw(); return; } MCContainer t_container; MCAutoValueRef t_container_value; if (!destvar -> evalcontainer(ctxt, t_container)) { ctxt . LegacyThrow(EE_ARRAYOP_BADEXP); return; } if (!t_container.eval(ctxt, &t_container_value)) { ctxt . Throw(); return; } if (is_combine) { MCAutoArrayRef t_array; if (!ctxt . ConvertToArray(*t_container_value, &t_array)) return; MCAutoStringRef t_string; if (form == FORM_NONE) { // SN-2014-09-01: [[ Bug 13297 ]] Combining by column deserves its own function as it is too // different from combining by row if (chunk == TYPE_ROW) MCArraysExecCombineByRow(ctxt, *t_array, &t_string); else if (chunk == TYPE_COLUMN) MCArraysExecCombineByColumn(ctxt, *t_array, &t_string); else MCArraysExecCombine(ctxt, *t_array, *t_element_del, *t_key_del, &t_string); } else if (form == FORM_SET) MCArraysExecCombineAsSet(ctxt, *t_array, *t_element_del, &t_string); if (!ctxt . HasError()) t_container.set(ctxt, *t_string); } else { MCAutoStringRef t_string; if (!ctxt . ConvertToString(*t_container_value, &t_string)) return; MCAutoArrayRef t_array; if (form == FORM_NONE) { if (chunk == TYPE_COLUMN) MCArraysExecSplitByColumn(ctxt, *t_string, &t_array); else MCArraysExecSplit(ctxt, *t_string, *t_element_del, *t_key_del, &t_array); } else if (form == FORM_SET) MCArraysExecSplitAsSet(ctxt, *t_string, *t_element_del, &t_array); if (!ctxt . HasError()) t_container.set(ctxt, *t_array); } }