Issue #2142 - Extend newSuperCall for JSOP_SPREADSUPERCALL

Based-on: m-c 1537936
This commit is contained in:
Martok 2023-04-08 02:06:06 +02:00 • committed by roytam1
commit 6f56a494e6
3 changed files with 6 additions and 7 deletions

View file

@ -345,8 +345,10 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS)
return new_<ListNode>(PNK_ARGUMENTS, JSOP_NOP, pos);
}
BinaryNodeType newSuperCall(Node callee, Node args) {
return new_<BinaryNode>(PNK_SUPERCALL, JSOP_SUPERCALL, callee, args);
BinaryNodeType newSuperCall(Node callee, Node args, bool isSpread) {
JSOp op = isSpread ? JSOP_SPREADSUPERCALL : JSOP_SUPERCALL;
TokenPos pos(callee->pn_pos.begin, args->pn_pos.end);
return new_<BinaryNode>(PNK_SUPERCALL, op, pos, callee, args);
}
BinaryNodeType newTaggedTemplate(Node tag, Node args) {

View file

@ -9448,13 +9448,10 @@ Parser<ParseHandler>::memberExpr(YieldHandling yieldHandling, TripledotHandling
if (!args)
return null();
nextMember = handler.newSuperCall(lhs, args);
nextMember = handler.newSuperCall(lhs, args, isSpread);
if (!nextMember)
return null();
if (isSpread)
handler.setOp(nextMember, JSOP_SPREADSUPERCALL);
NameNodeType thisName = newThisName();
if (!thisName)
return null();

View file

@ -307,7 +307,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS)
BinaryNodeType newCall(Node callee, Node args) { return NodeFunctionCall; }
BinaryNodeType newOptionalCall(Node callee, Node args) { return NodeOptionalFunctionCall; }
ListNodeType newArguments(const TokenPos& pos) { return NodeGeneric; }
BinaryNodeType newSuperCall(Node callee, Node args) { return NodeGeneric; }
BinaryNodeType newSuperCall(Node callee, Node args, bool isSpread) { return NodeGeneric; }
BinaryNodeType newTaggedTemplate(Node callee, Node args) { return NodeGeneric; }
Node newGenExp(Node callee, Node args) { return NodeGeneric; }