From 744af5c34d290b25bdf1595390f2e88ffe8d50ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Z=C3=BCnd?= Date: Tue, 23 Apr 2024 08:08:39 +0200 Subject: [PATCH] Support new.target --- src/javascript.grammar | 1 + test/statement.txt | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/javascript.grammar b/src/javascript.grammar index c3aba6f..bf225c9 100644 --- a/src/javascript.grammar +++ b/src/javascript.grammar @@ -285,6 +285,7 @@ expressionNoComma { RegExp | ArrayExpression | ObjectExpression { "{" commaSep ~destructure "}" } | + NewTarget { kw<"new"> "." PropertyName } | NewExpression { kw<"new"> expressionNoComma (!newArgs TypeArgList? ArgList)? } | UnaryExpression | YieldExpression | diff --git a/test/statement.txt b/test/statement.txt index a8313a7..9243488 100644 --- a/test/statement.txt +++ b/test/statement.txt @@ -383,3 +383,18 @@ foo() ==> Script(Hashbang,ExpressionStatement(CallExpression(VariableName,ArgList))) + +# new.target + +function MyObj() { + if (!new.target) { + throw new Error('Must construct MyObj with new'); + } +} + +==> + +Script( + FunctionDeclaration(function,VariableDefinition,ParamList,Block( + IfStatement(if,ParenthesizedExpression(UnaryExpression(LogicOp,NewTarget(new,PropertyName))), Block( + ThrowStatement(throw,NewExpression(new,VariableName,ArgList(String))))))))