Skip to content

Commit 336303a

Browse files
[[ RefactorSyntax ]] MCMultiply::exec updated
1 parent 19c22aa commit 336303a

File tree

2 files changed

+34
-39
lines changed

2 files changed

+34
-39
lines changed

engine/src/cmds.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1621,7 +1621,7 @@ class MCMultiply : public MCStatement
16211621
}
16221622
virtual ~MCMultiply();
16231623
virtual Parse_stat parse(MCScriptPoint &);
1624-
virtual Exec_stat exec(MCExecPoint &);
1624+
virtual void exec_ctxt(MCExecContext &ctxt);
16251625
virtual void compile(MCSyntaxFactoryRef);
16261626
};
16271627

engine/src/cmdsm.cpp

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ Parse_stat MCMultiply::parse(MCScriptPoint &sp)
561561

562562
// MW-2007-07-03: [[ Bug 5123 ]] - Strict array checking modification
563563
// Here the source can be an array or number so we use 'tona'.
564-
Exec_stat MCMultiply::exec(MCExecPoint &ep)
564+
void MCMultiply::exec_ctxt(MCExecContext &ctxt)
565565
{
566566
#ifdef /* MCMultiply */ LEGACY_EXEC
567567
MCVariable *t_dst_var;
@@ -650,61 +650,55 @@ Exec_stat MCMultiply::exec(MCExecPoint &ep)
650650

651651
return ES_NORMAL;
652652
#endif /* MCMultiply */
653-
MCAutoValueRef t_src;
654-
if (source->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
655-
{
656-
MCeerror->add(EE_MULTIPLY_BADSOURCE, line, pos);
657-
return ES_ERROR;
658-
}
659-
/* UNCHECKED */ ep . copyasvalueref(&t_src);
653+
MCAutoValueRef t_src;
654+
MCAutoValueRef t_src_as_number;
655+
656+
if(!ctxt . EvalExprAsValueRef(source, EE_MULTIPLY_BADSOURCE, &t_src)
657+
|| !valueref_tona(ctxt, EE_MULTIPLY_BADSOURCE, *t_src, &t_src_as_number))
658+
return;
660659

661660
MCAutoValueRef t_dst;
661+
MCAutoValueRef t_dst_as_number;
662662
MCAutoPointer<MCContainer> t_dst_container;
663663
if (destvar != nil)
664664
{
665-
if (destvar -> evalcontainer(ep, &t_dst_container) != ES_NORMAL)
665+
if (destvar -> evalcontainer(ctxt, &t_dst_container))
666666
{
667-
MCeerror->add(EE_MULTIPLY_BADDEST, line, pos);
668-
return ES_ERROR;
667+
ctxt . LegacyThrow(EE_MULTIPLY_BADDEST);
668+
return;
669669
}
670670

671-
if (t_dst_container -> eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
672-
return ES_ERROR;
673-
674-
/* UNCHECKED */ ep . copyasvalueref(&t_dst);
671+
if (t_dst_container -> eval(ctxt, &t_dst))
672+
return;
675673
}
676674
else
677675
{
678-
if (dest->eval(ep) != ES_NORMAL || ep.tona() != ES_NORMAL)
679-
{
680-
MCeerror->add(EE_MULTIPLY_BADDEST, line, pos);
681-
return ES_ERROR;
682-
}
683-
684-
/* UNCHECKED */ ep . copyasvalueref(&t_dst);
676+
if (!ctxt . EvalExprAsValueRef(dest, EE_MULTIPLY_BADDEST, &t_dst))
677+
return;
685678
}
686-
687-
MCExecContext ctxt(ep);
679+
680+
if (!valueref_tona(ctxt, EE_MULTIPLY_BADDEST, *t_dst, &t_dst_as_number))
681+
return;
688682

689683
MCAutoValueRef t_result;
690-
if (MCValueGetTypeCode(*t_src) == kMCValueTypeCodeArray)
684+
if (MCValueIsArray(*t_src_as_number))
691685
{
692-
if (MCValueGetTypeCode(*t_dst) == kMCValueTypeCodeArray)
693-
MCMathExecMultiplyArrayByArray(ctxt, (MCArrayRef)*t_dst, (MCArrayRef)*t_src, (MCArrayRef&)&t_result);
686+
if (MCValueIsArray(*t_dst_as_number))
687+
MCMathExecMultiplyArrayByArray(ctxt, (MCArrayRef)*t_dst_as_number, (MCArrayRef)*t_src_as_number, (MCArrayRef&)&t_result);
694688
else
695689
{
696-
MCeerror->add(EE_MULTIPLY_MISMATCH, line, pos);
697-
return ES_ERROR;
690+
ctxt . LegacyThrow(EE_MULTIPLY_MISMATCH);
691+
return;
698692
}
699693
}
700694
else
701695
{
702-
if (MCValueGetTypeCode(*t_dst) == kMCValueTypeCodeArray)
703-
MCMathExecMultiplyArrayByNumber(ctxt, (MCArrayRef)*t_dst, MCNumberFetchAsReal((MCNumberRef)*t_src), (MCArrayRef&)&t_result);
696+
if (MCValueIsArray(*t_dst_as_number))
697+
MCMathExecMultiplyArrayByNumber(ctxt, (MCArrayRef)*t_dst_as_number, MCNumberFetchAsReal((MCNumberRef)*t_src_as_number), (MCArrayRef&)&t_result);
704698
else
705699
{
706700
double t_real_result;
707-
MCMathExecMultiplyNumberByNumber(ctxt, MCNumberFetchAsReal((MCNumberRef)*t_dst), MCNumberFetchAsReal((MCNumberRef)*t_src), t_real_result);
701+
MCMathExecMultiplyNumberByNumber(ctxt, MCNumberFetchAsReal((MCNumberRef)*t_dst_as_number), MCNumberFetchAsReal((MCNumberRef)*t_src_as_number), t_real_result);
708702
/* UNCHECKED */ MCNumberCreateWithReal(t_real_result, (MCNumberRef&)t_result);
709703
}
710704
}
@@ -714,18 +708,19 @@ Exec_stat MCMultiply::exec(MCExecPoint &ep)
714708
if (destvar != nil)
715709
{
716710
if (t_dst_container -> set_valueref(*t_result))
717-
return ES_NORMAL;
711+
return;
718712
ctxt . Throw();
719713
}
720714
else
721715
{
722-
if (dest->set(ep, PT_INTO, *t_result) == ES_NORMAL)
723-
return ES_NORMAL;
716+
dest->set(ctxt, PT_INTO, *t_result);
717+
718+
if (!ctxt . HasError())
719+
return;
720+
724721
ctxt . LegacyThrow(EE_MULTIPLY_CANTSET);
725722
}
726-
}
727-
728-
return ctxt . Catch(line, pos);
723+
}
729724
}
730725

731726
void MCMultiply::compile(MCSyntaxFactoryRef ctxt)

0 commit comments

Comments
 (0)