Previously, call lowering created FUNCTION_FRAME and METHOD_FRAME before
argument evaluation. This made call ordering observably wrong: for
non-callable callees, the error was thrown before arguments with side
effects were evaluated, violating the ECMAScript specification. It also
prevented await expressions in call arguments, which were rejected at
parse time because suspending inside a half-created frame was not
supported.
The fix evaluates arguments first, then emits the frame, PUT_ARG, and
FUNCTION_CALL. Callee and receiver values are captured into temporaries
before argument evaluation to guard against argument side effects.
Method properties are resolved via PROPERTY_GET before arguments.
METHOD_FRAME is redefined from a composite opcode (property lookup +
callability check + frame creation) to a pure frame-creation opcode
that takes an already-resolved function and explicit "this" value.
The parser always wraps call expressions in a NJS_TOKEN_FUNCTION_CALL
node, removing the NJS_TOKEN_NAME special case.