11.5 Multiplicative Operators

2010-05-17

MultiplicativeExpression :
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression

All three MultiplicativeExpression @ UnaryExpression are evaluated equally, only replacing @ by the actual operator.

Code: (Meta Ecma)
function (MultiplicativeExpression @ UnaryExpression) {
var left = evaluate(MultiplicativeExpression);
var leftValue = GetValue(left);
var right = evaluate(UnaryExpression);
var rightValue = GetValue(right);
var leftNum = ToNumber(leftValue);
var rightNum = ToNumber(rightValue);
// the next functions are defined in the next paragraphs
if (@ == '*') return ApplyMultiplication(leftVal, rightVal); // 11.5.1
if (@ == '/') return ApplyDevision(leftVal, rightVal); // 11.5.2
if (@ == '%') return ApplyRemainder(leftVal, rightVal); // 11.5.3
// should not reach here.
}

The specific operator functions make use of the following functions, not explicitly defined in the specification:

Code: (Meta Ecma)
// determine infiniteness
function IsInfinite(val) {
return (val === infinite || val === -infinite);
}
// determine whether value has a sign (true = negative)
function Sign(val) {
if (val < 0 || val === -0) return true;
return false;
}