void MCArraysEvalMatrixMultiply(MCExecContext& ctxt, MCArrayRef p_left, MCArrayRef p_right, MCArrayRef& r_result) { // MW-2014-03-14: [[ Bug 11924 ]] If both are empty arrays, then the result // is empty. if (MCArrayIsEmpty(p_left) && MCArrayIsEmpty(p_right)) { r_result = MCValueRetain(kMCEmptyArray); return; } // MW-2014-03-14: [[ Bug 11924 ]] If either array is empty, then its a mismatch. MCAutoPointer<matrix_t> t_left, t_right, t_product; if (MCArrayIsEmpty(p_left) || MCArrayIsEmpty(p_right) || !MCArraysCopyMatrix(ctxt, p_left, &t_left) || !MCArraysCopyMatrix(ctxt, p_right, &t_right) || !MCMatrixMultiply(*t_left, *t_right, &t_product)) { ctxt.LegacyThrow(EE_MATRIXMULT_MISMATCH); return; } if (MCArraysCreateWithMatrix(*t_product, r_result)) return; ctxt.Throw(); }
void MCSecurityEvalRandomBytes(MCExecContext& ctxt, uinteger_t p_byte_count, MCDataRef& r_bytes) { if (!InitSSLCrypt()) { ctxt.LegacyThrow(EE_SECURITY_NOLIBRARY); return; } if (MCSRandomData (p_byte_count, r_bytes)) { ctxt.SetTheResultToEmpty(); return; } ctxt.SetTheResultToCString("error: could not get random bytes"); }
void MCArraysEvalTransposeMatrix(MCExecContext& ctxt, MCArrayRef p_matrix, MCArrayRef& r_result) { if (!MCArraysCopyTransposed(p_matrix, r_result)) ctxt.LegacyThrow(EE_TRANSPOSE_MISMATCH); }
// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification // Here the source can be an array or number so we use 'tona'. void MCAdd::exec_ctxt(MCExecContext &ctxt) { MCExecValue t_src; if (!ctxt . EvaluateExpression(source, EE_ADD_BADSOURCE, t_src) || !ctxt . ConvertToNumberOrArray(t_src)) { ctxt.LegacyThrow(EE_ADD_BADSOURCE); return; } MCExecValue t_dst; MCContainer t_dst_container; if (destvar != nil) { if (!destvar->evalcontainer(ctxt, t_dst_container) || !t_dst_container.eval_ctxt(ctxt, t_dst)) { ctxt . LegacyThrow(EE_ADD_BADDEST); MCExecTypeRelease(t_src); return; } } else { if (!ctxt . EvaluateExpression(dest, EE_ADD_BADDEST, t_dst)) { MCExecTypeRelease(t_src); return; } } if (!ctxt . ConvertToNumberOrArray(t_dst)) { MCExecTypeRelease(t_src); MCExecTypeRelease(t_dst); ctxt.LegacyThrow(EE_ADD_BADDEST); return; } MCExecValue t_result; t_result . type = t_dst . type; if (t_src . type == kMCExecValueTypeArrayRef) { if (t_dst . type == kMCExecValueTypeArrayRef) MCMathExecAddArrayToArray(ctxt, t_src . arrayref_value, t_dst . arrayref_value, t_result . arrayref_value); else { ctxt . LegacyThrow(EE_ADD_MISMATCH); return; } } else { if (t_dst . type == kMCExecValueTypeArrayRef) MCMathExecAddNumberToArray(ctxt, t_src . double_value, t_dst . arrayref_value, t_result . arrayref_value); else MCMathExecAddNumberToNumber(ctxt, t_src . double_value, t_dst . double_value, t_result . double_value); } MCExecTypeRelease(t_src); MCExecTypeRelease(t_dst); if (!ctxt . HasError()) { if (destvar != nil) { if (!t_dst_container.give_value(ctxt, t_result)) ctxt . Throw(); } else { if (dest->set(ctxt, PT_INTO, t_result)) return; ctxt . LegacyThrow(EE_ADD_CANTSET); } } }