CallExpression : MemberExpression Arguments
CallExpression : CallExpression Arguments
Both are evaluated the same:
function evaluate(MemberExpression Arguments) {
var ref = evaluate(MemberExpression);
var func = GetValue(ref);
var argList = evaluate(Arguments); // returns List
if (Type(func) != 'object') throw TypeError;
if (!IsCallable(func)) throw TypeError;
var thisValue = undefined;
if (Type(ref) == 'reference') {
if (IsPropertyReference(ref)) thisValue = GetBase(ref);
else thisValue = GetBase(ref).ImplicitThisValue(); // ref is environment record
} // else ref is undefined, so thisValue is undefined as well
return func.[[Call]](thisValue, argList);
}
Native functions will never return a Reference. Host objects (custom by the implementation) may return a Reference but if they do, they must always return a non-strict Reference.