// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification // Here the source can be an array or number so we use 'tona'. Exec_stat MCSubtract::exec(MCExecPoint &ep) { #ifdef /* MCSubtract */ LEGACY_EXEC MCVariable *t_dst_var; MCVariableValue *t_dst_ref; t_dst_ref = NULL; if (source->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL) { MCeerror->add(EE_SUBTRACT_BADSOURCE, line, pos); return ES_ERROR; } if (overlap) ep . grab(); if (destvar != NULL && destvar -> evalcontainer(ep, t_dst_var, t_dst_ref) != ES_NORMAL) { MCeerror->add(EE_SUBTRACT_BADDEST, line, pos); return ES_ERROR; } if (t_dst_ref != NULL && t_dst_ref -> is_array()) { if (t_dst_ref->factorarray(ep, O_MINUS) != ES_NORMAL) { MCeerror->add(EE_SUBTRACT_BADARRAY, line, pos); return ES_ERROR; } return ES_NORMAL; } if (ep.getformat() == VF_ARRAY) { MCeerror->add(EE_SUBTRACT_MISMATCH, line, pos); return ES_ERROR; } // Variable case real8 n1 = ep.getnvalue(); if (t_dst_ref != NULL) { real8 n2; if (!t_dst_ref -> get_as_real(ep, n2)) { MCeerror -> add(EE_SUBTRACT_BADDEST, line, pos); return ES_ERROR; } t_dst_ref -> assign_real(n2 - n1); if (t_dst_var != NULL) t_dst_var -> synchronize(ep, True); return ES_NORMAL; } // Chunk case if (dest->eval(ep) != ES_NORMAL || ep.ton() != ES_NORMAL) { MCeerror->add(EE_SUBTRACT_BADDEST, line, pos); return ES_ERROR; } real8 n2 = ep.getnvalue(); ep.setnvalue(n2 - n1); if (dest->set(ep, PT_INTO) != ES_NORMAL) { MCeerror->add(EE_SUBTRACT_CANTSET, line, pos); return ES_ERROR; } return ES_NORMAL; #endif /* MCSubtract */ }
// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification // Here the source can be an array or number so we use 'tona'. Exec_stat MCMultiply::exec(MCExecPoint &ep) { #ifdef /* MCMultiply */ LEGACY_EXEC MCVariable *t_dst_var; MCVariableValue *t_dst_ref; t_dst_ref = NULL; if (source->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL) { MCeerror->add(EE_MULTIPLY_BADSOURCE, line, pos); return ES_ERROR; } if (overlap) ep . grab(); if (destvar != NULL && destvar -> evalcontainer(ep, t_dst_var, t_dst_ref) != ES_NORMAL) { MCeerror->add(EE_MULTIPLY_BADDEST, line, pos); return ES_ERROR; } if (t_dst_ref != NULL && t_dst_ref -> is_array()) { if (t_dst_ref->factorarray(ep, O_TIMES) != ES_NORMAL) { MCeerror->add(EE_MULTIPLY_BADARRAY, line, pos); return ES_ERROR; } return ES_NORMAL; } if (ep.getformat() == VF_ARRAY) { MCeerror->add(EE_MULTIPLY_MISMATCH, line, pos); return ES_ERROR; } // Variable case real8 n2 = ep.getnvalue(); if (t_dst_ref != NULL) { real8 n1; if (!t_dst_ref -> get_as_real(ep, n1)) { MCeerror -> add(EE_MULTIPLY_BADDEST, line, pos); return ES_ERROR; } MCS_seterrno(0); n1 *= n2; if (n1 == MCinfinity || MCS_geterrno() != 0) { MCS_seterrno(0); MCeerror->add(EE_MULTIPLY_RANGE, line, pos); return ES_ERROR; } t_dst_ref -> assign_real(n1); if (t_dst_var != NULL) t_dst_var -> synchronize(ep, True); return ES_NORMAL; } // Chunk case if (dest->eval(ep) != ES_NORMAL || ep.ton() != ES_NORMAL) { MCeerror->add(EE_MULTIPLY_BADDEST, line, pos); return ES_ERROR; } real8 n1 = ep.getnvalue(); MCS_seterrno(0); n1 *= n2; if (n1 == MCinfinity || MCS_geterrno() != 0) { MCS_seterrno(0); MCeerror->add(EE_MULTIPLY_RANGE, line, pos); return ES_ERROR; } ep.setnvalue(n1); if (dest->set(ep, PT_INTO) != ES_NORMAL) { MCeerror->add(EE_MULTIPLY_CANTSET, line, pos); return ES_ERROR; } return ES_NORMAL; #endif /* MCMultiply */ }