From 6f56a494e6e69e7798fce21e591fff4a29046c16 Mon Sep 17 00:00:00 2001 From: Martok Date: Sat, 8 Apr 2023 02:06:06 +0200 Subject: [PATCH] Issue #2142 - Extend newSuperCall for JSOP_SPREADSUPERCALL Based-on: m-c 1537936 --- js/src/frontend/FullParseHandler.h | 6 ++++-- js/src/frontend/Parser.cpp | 5 +---- js/src/frontend/SyntaxParseHandler.h | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/js/src/frontend/FullParseHandler.h b/js/src/frontend/FullParseHandler.h index 173ffcb8d7..a9f7c6de09 100644 --- a/js/src/frontend/FullParseHandler.h +++ b/js/src/frontend/FullParseHandler.h @@ -345,8 +345,10 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return new_(PNK_ARGUMENTS, JSOP_NOP, pos); } - BinaryNodeType newSuperCall(Node callee, Node args) { - return new_(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_(PNK_SUPERCALL, op, pos, callee, args); } BinaryNodeType newTaggedTemplate(Node tag, Node args) { diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index cbdd40089e..94f798e754 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -9448,13 +9448,10 @@ Parser::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(); diff --git a/js/src/frontend/SyntaxParseHandler.h b/js/src/frontend/SyntaxParseHandler.h index e364f9d680..d8bc3e4959 100644 --- a/js/src/frontend/SyntaxParseHandler.h +++ b/js/src/frontend/SyntaxParseHandler.h @@ -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; }