The argument production, when evaluated, always returns an (internal) List with zero or more items.
Arguments : ( )
function evaluate(( )) {
return new List();
}
Arguments : ( ArgumentList )
function evaluate(( ArgumentList )) {
return evaluate(ArgumentList);
}
ArgumentList : AssignmentExpression
function evaluate(AssignmentExpression) {
var ref = evaluate(AssignmentExpression);
var arg = GetValue(ref);
return new List(arg);
}
ArgumentList : AssignmentList , AssignmentExpression
function evaluate(AssignmentList , AssignmentExpression) {
var precedingArgs = evaluate(ArgumentList);
var ref = evaluate(AssignmentExpression);
var arg = GetValue(ref);
precedingArgs.push(arg); // although the spec kind of expects a new list here...
return precedingArgs;
}