From 2d4ac25fa0048fff10068e88dda17a1a0ec60cfb Mon Sep 17 00:00:00 2001 From: Thomas Wood <tw1509@doc.ic.ac.uk> Date: Tue, 24 Jul 2018 20:25:22 +0100 Subject: [PATCH] Add feature flags for `new.target` Additionally removed the `arrow-function` feature for test/language/eval-code/direct/new.target-fn.js as it is not testing arrow-functions, but they are mentioned in the preamble. --- src/class-fields/eval-err-contains-newtarget.case | 2 +- test/built-ins/Proxy/construct/trap-is-null.js | 2 +- test/built-ins/Proxy/construct/trap-is-undefined-no-property.js | 2 +- test/built-ins/Proxy/construct/trap-is-undefined.js | 2 +- test/language/eval-code/direct/new.target-arrow.js | 2 +- test/language/eval-code/direct/new.target-fn.js | 2 +- test/language/eval-code/direct/new.target.js | 1 + test/language/eval-code/indirect/new.target.js | 1 + .../arrow-function/lexical-new.target-closure-returned.js | 1 + test/language/expressions/arrow-function/lexical-new.target.js | 1 + test/language/expressions/assignment/target-cover-newtarget.js | 1 + test/language/expressions/assignment/target-newtarget.js | 1 + test/language/expressions/new.target/value-via-call.js | 1 + test/language/expressions/new.target/value-via-fpapply.js | 1 + test/language/expressions/new.target/value-via-fpcall.js | 1 + test/language/expressions/new.target/value-via-member.js | 1 + test/language/expressions/new.target/value-via-new.js | 1 + test/language/expressions/new.target/value-via-reflect-apply.js | 2 +- .../expressions/new.target/value-via-reflect-construct.js | 2 +- test/language/expressions/new.target/value-via-super-call.js | 2 +- .../language/expressions/new.target/value-via-super-property.js | 2 +- .../expressions/new.target/value-via-tagged-template.js | 2 +- .../expressions/postfix-decrement/target-cover-newtarget.js | 1 + test/language/expressions/postfix-decrement/target-newtarget.js | 1 + .../expressions/postfix-increment/target-cover-newtarget.js | 1 + test/language/expressions/postfix-increment/target-newtarget.js | 1 + .../expressions/prefix-decrement/target-cover-newtarget.js | 1 + test/language/expressions/prefix-decrement/target-newtarget.js | 1 + .../expressions/prefix-increment/target-cover-newtarget.js | 1 + test/language/expressions/prefix-increment/target-newtarget.js | 1 + test/language/expressions/super/call-construct-invocation.js | 2 +- test/language/global-code/new.target-arrow.js | 2 +- test/language/global-code/new.target.js | 1 + test/language/module-code/early-new-target.js | 1 + 34 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/class-fields/eval-err-contains-newtarget.case b/src/class-fields/eval-err-contains-newtarget.case index 28688867af..e396fb4fa1 100644 --- a/src/class-fields/eval-err-contains-newtarget.case +++ b/src/class-fields/eval-err-contains-newtarget.case @@ -16,7 +16,7 @@ info: | ScriptBody:StatementList It is a Syntax Error if StatementList Contains NewTarget. -features: [class, class-fields-public] +features: [class, class-fields-public, new.target] template: initializer-eval-newtarget ---*/ diff --git a/test/built-ins/Proxy/construct/trap-is-null.js b/test/built-ins/Proxy/construct/trap-is-null.js index fdd4852738..c5b915adaf 100644 --- a/test/built-ins/Proxy/construct/trap-is-null.js +++ b/test/built-ins/Proxy/construct/trap-is-null.js @@ -21,7 +21,7 @@ info: | ... 3. If func is either undefined or null, return undefined. ... -features: [Proxy, Reflect, Reflect.construct] +features: [Proxy, Reflect, Reflect.construct, new.target] ---*/ var calls = 0; diff --git a/test/built-ins/Proxy/construct/trap-is-undefined-no-property.js b/test/built-ins/Proxy/construct/trap-is-undefined-no-property.js index a6472c1ab3..8b19128db0 100644 --- a/test/built-ins/Proxy/construct/trap-is-undefined-no-property.js +++ b/test/built-ins/Proxy/construct/trap-is-undefined-no-property.js @@ -10,7 +10,7 @@ info: | 7. If trap is undefined, then b. Return Construct(target, argumentsList, newTarget). -features: [Proxy, Reflect, Reflect.construct] +features: [Proxy, Reflect, Reflect.construct, new.target] ---*/ var calls = 0; diff --git a/test/built-ins/Proxy/construct/trap-is-undefined.js b/test/built-ins/Proxy/construct/trap-is-undefined.js index 7c17356267..0dd7b2e4b1 100644 --- a/test/built-ins/Proxy/construct/trap-is-undefined.js +++ b/test/built-ins/Proxy/construct/trap-is-undefined.js @@ -21,7 +21,7 @@ info: | ... 3. If func is either undefined or null, return undefined. ... -features: [Proxy, Reflect, Reflect.construct] +features: [Proxy, Reflect, Reflect.construct, new.target] ---*/ var calls = 0; diff --git a/test/language/eval-code/direct/new.target-arrow.js b/test/language/eval-code/direct/new.target-arrow.js index 2eb465b7a5..a3a52faab5 100644 --- a/test/language/eval-code/direct/new.target-arrow.js +++ b/test/language/eval-code/direct/new.target-arrow.js @@ -11,7 +11,7 @@ info: | code containing NewTarget is eval code that is being processed by a direct eval that is contained in function code that is not the function code of an ArrowFunction. -features: [arrow-function] +features: [arrow-function, new.target] ---*/ var caught; diff --git a/test/language/eval-code/direct/new.target-fn.js b/test/language/eval-code/direct/new.target-fn.js index e09e9462df..c494d08b4f 100644 --- a/test/language/eval-code/direct/new.target-fn.js +++ b/test/language/eval-code/direct/new.target-fn.js @@ -11,7 +11,7 @@ info: | code containing NewTarget is eval code that is being processed by a direct eval that is contained in function code that is not the function code of an ArrowFunction. -features: [arrow-function] +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/eval-code/direct/new.target.js b/test/language/eval-code/direct/new.target.js index 8d308ac904..90604c9e81 100644 --- a/test/language/eval-code/direct/new.target.js +++ b/test/language/eval-code/direct/new.target.js @@ -9,6 +9,7 @@ info: | code containing NewTarget is eval code that is being processed by a direct eval that is contained in function code that is not the function code of an ArrowFunction. +features: [new.target] ---*/ var caught; diff --git a/test/language/eval-code/indirect/new.target.js b/test/language/eval-code/indirect/new.target.js index 5c938c70f2..5172ff2493 100644 --- a/test/language/eval-code/indirect/new.target.js +++ b/test/language/eval-code/indirect/new.target.js @@ -10,6 +10,7 @@ info: | code containing NewTarget is eval code that is being processed by a direct eval that is contained in function code that is not the function code of an ArrowFunction. +features: [new.target] ---*/ var caught; diff --git a/test/language/expressions/arrow-function/lexical-new.target-closure-returned.js b/test/language/expressions/arrow-function/lexical-new.target-closure-returned.js index cbe64efe1d..7cd9d43bf4 100644 --- a/test/language/expressions/arrow-function/lexical-new.target-closure-returned.js +++ b/test/language/expressions/arrow-function/lexical-new.target-closure-returned.js @@ -14,6 +14,7 @@ description: > The non-normative note elaborates on the "scope" argument: An ArrowFunction does not define local bindings for arguments, super, this, or new.target. Any reference to arguments, super, or this within an ArrowFunction must resolve to a binding in a lexically enclosing environment. Typically this will be the Function Environment of an immediately enclosing function. Even though an ArrowFunction may contain references to super, the function object created in step 4 is not made into a method by performing MakeMethod. An ArrowFunction that references super is always contained within a non-ArrowFunction and the necessary state to implement super is accessible via the scope that is captured by the function object of the ArrowFunction. +features: [new.target] ---*/ function F() { diff --git a/test/language/expressions/arrow-function/lexical-new.target.js b/test/language/expressions/arrow-function/lexical-new.target.js index ef76c6bd83..400779bf34 100644 --- a/test/language/expressions/arrow-function/lexical-new.target.js +++ b/test/language/expressions/arrow-function/lexical-new.target.js @@ -14,6 +14,7 @@ description: > The non-normative note elaborates on the "scope" argument: An ArrowFunction does not define local bindings for arguments, super, this, or new.target. Any reference to arguments, super, or this within an ArrowFunction must resolve to a binding in a lexically enclosing environment. Typically this will be the Function Environment of an immediately enclosing function. Even though an ArrowFunction may contain references to super, the function object created in step 4 is not made into a method by performing MakeMethod. An ArrowFunction that references super is always contained within a non-ArrowFunction and the necessary state to implement super is accessible via the scope that is captured by the function object of the ArrowFunction. +features: [new.target] ---*/ var functionInvocationCount = 0; diff --git a/test/language/expressions/assignment/target-cover-newtarget.js b/test/language/expressions/assignment/target-cover-newtarget.js index 03ba2e29f4..34ab263b49 100644 --- a/test/language/expressions/assignment/target-cover-newtarget.js +++ b/test/language/expressions/assignment/target-cover-newtarget.js @@ -21,6 +21,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/assignment/target-newtarget.js b/test/language/expressions/assignment/target-newtarget.js index 822d6a9fb9..1c14fee0f3 100644 --- a/test/language/expressions/assignment/target-newtarget.js +++ b/test/language/expressions/assignment/target-newtarget.js @@ -21,6 +21,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/new.target/value-via-call.js b/test/language/expressions/new.target/value-via-call.js index 40fdf41352..9bd85d05a3 100644 --- a/test/language/expressions/new.target/value-via-call.js +++ b/test/language/expressions/new.target/value-via-call.js @@ -9,6 +9,7 @@ info: | [...] 8. Return ? EvaluateDirectCall(func, thisValue, Arguments, tailCall). +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-fpapply.js b/test/language/expressions/new.target/value-via-fpapply.js index a1b3c1e8ee..7fab5ee16b 100644 --- a/test/language/expressions/new.target/value-via-fpapply.js +++ b/test/language/expressions/new.target/value-via-fpapply.js @@ -7,6 +7,7 @@ description: Value when invoked via `Function.prototype.apply` info: | [...] 5. Return ? Call(func, thisArg, argList). +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-fpcall.js b/test/language/expressions/new.target/value-via-fpcall.js index 7f4d89b51f..5c32d8f3bd 100644 --- a/test/language/expressions/new.target/value-via-fpcall.js +++ b/test/language/expressions/new.target/value-via-fpcall.js @@ -7,6 +7,7 @@ description: Value when invoked via `Function.prototype.call` info: | [...] 5. Return ? Call(func, thisArg, argList). +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-member.js b/test/language/expressions/new.target/value-via-member.js index 2ba06cf2a3..baaedf8e14 100644 --- a/test/language/expressions/new.target/value-via-member.js +++ b/test/language/expressions/new.target/value-via-member.js @@ -18,6 +18,7 @@ info: | 1. Let exprRef be the result of evaluating Expression. 2. Return ? GetValue(exprRef). +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-new.js b/test/language/expressions/new.target/value-via-new.js index 5715b5becb..06af2631d9 100644 --- a/test/language/expressions/new.target/value-via-new.js +++ b/test/language/expressions/new.target/value-via-new.js @@ -21,6 +21,7 @@ info: | 7.3.13 Construct (F [ , argumentsList [ , newTarget ]]) 1. If newTarget was not passed, let newTarget be F. +features: [new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-reflect-apply.js b/test/language/expressions/new.target/value-via-reflect-apply.js index a9b27cb9ce..ed8d37efd6 100644 --- a/test/language/expressions/new.target/value-via-reflect-apply.js +++ b/test/language/expressions/new.target/value-via-reflect-apply.js @@ -7,7 +7,7 @@ description: Value when invoked via `Reflect.apply` info: | [...] 5. Return ? Call(target, thisArgument, args). -features: [Reflect] +features: [Reflect, new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-reflect-construct.js b/test/language/expressions/new.target/value-via-reflect-construct.js index a5240d5694..513ce97d2f 100644 --- a/test/language/expressions/new.target/value-via-reflect-construct.js +++ b/test/language/expressions/new.target/value-via-reflect-construct.js @@ -9,7 +9,7 @@ info: | 2. If newTarget is not present, let newTarget be target. [...] 5. Return ? Construct(target, args, newTarget). -features: [Reflect] +features: [Reflect, new.target] ---*/ var customNewTarget = function() {}; diff --git a/test/language/expressions/new.target/value-via-super-call.js b/test/language/expressions/new.target/value-via-super-call.js index b1a482d3bd..a582c08d00 100644 --- a/test/language/expressions/new.target/value-via-super-call.js +++ b/test/language/expressions/new.target/value-via-super-call.js @@ -11,7 +11,7 @@ info: | [...] 6. Let result be ? Construct(func, argList, newTarget). [...] -features: [class] +features: [class, new.target] ---*/ var baseNewTarget, parentNewTarget; diff --git a/test/language/expressions/new.target/value-via-super-property.js b/test/language/expressions/new.target/value-via-super-property.js index 18eaffbe74..379c3f0dca 100644 --- a/test/language/expressions/new.target/value-via-super-property.js +++ b/test/language/expressions/new.target/value-via-super-property.js @@ -11,7 +11,7 @@ info: | [...] 6. Let result be ? Construct(func, argList, newTarget). [...] -features: [class] +features: [class, new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/new.target/value-via-tagged-template.js b/test/language/expressions/new.target/value-via-tagged-template.js index 62242916b9..b6dfa72843 100644 --- a/test/language/expressions/new.target/value-via-tagged-template.js +++ b/test/language/expressions/new.target/value-via-tagged-template.js @@ -9,7 +9,7 @@ info: | [...] 4. Return ? EvaluateCall(tagRef, TemplateLiteral, tailCall). -features: [template] +features: [template, new.target] ---*/ var newTarget = null; diff --git a/test/language/expressions/postfix-decrement/target-cover-newtarget.js b/test/language/expressions/postfix-decrement/target-cover-newtarget.js index c7c3112ecc..f99504b159 100644 --- a/test/language/expressions/postfix-decrement/target-cover-newtarget.js +++ b/test/language/expressions/postfix-decrement/target-cover-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/postfix-decrement/target-newtarget.js b/test/language/expressions/postfix-decrement/target-newtarget.js index f134d1872b..8d3e98b407 100644 --- a/test/language/expressions/postfix-decrement/target-newtarget.js +++ b/test/language/expressions/postfix-decrement/target-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/postfix-increment/target-cover-newtarget.js b/test/language/expressions/postfix-increment/target-cover-newtarget.js index 359b0fc4b4..84747a21b4 100644 --- a/test/language/expressions/postfix-increment/target-cover-newtarget.js +++ b/test/language/expressions/postfix-increment/target-cover-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/postfix-increment/target-newtarget.js b/test/language/expressions/postfix-increment/target-newtarget.js index a84c784e96..81db503c0d 100644 --- a/test/language/expressions/postfix-increment/target-newtarget.js +++ b/test/language/expressions/postfix-increment/target-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/prefix-decrement/target-cover-newtarget.js b/test/language/expressions/prefix-decrement/target-cover-newtarget.js index 40ae5349a6..c67f787715 100644 --- a/test/language/expressions/prefix-decrement/target-cover-newtarget.js +++ b/test/language/expressions/prefix-decrement/target-cover-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/prefix-decrement/target-newtarget.js b/test/language/expressions/prefix-decrement/target-newtarget.js index c2dadc17bc..4d1b8b06d6 100644 --- a/test/language/expressions/prefix-decrement/target-newtarget.js +++ b/test/language/expressions/prefix-decrement/target-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/prefix-increment/target-cover-newtarget.js b/test/language/expressions/prefix-increment/target-cover-newtarget.js index 0a91e7bd10..fc7295a5e6 100644 --- a/test/language/expressions/prefix-increment/target-cover-newtarget.js +++ b/test/language/expressions/prefix-increment/target-cover-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/prefix-increment/target-newtarget.js b/test/language/expressions/prefix-increment/target-newtarget.js index cbf7a4e9c7..5bb720df9d 100644 --- a/test/language/expressions/prefix-increment/target-newtarget.js +++ b/test/language/expressions/prefix-increment/target-newtarget.js @@ -22,6 +22,7 @@ info: | negative: phase: parse type: ReferenceError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/expressions/super/call-construct-invocation.js b/test/language/expressions/super/call-construct-invocation.js index 4b31ec43fc..4966d0ce3d 100644 --- a/test/language/expressions/super/call-construct-invocation.js +++ b/test/language/expressions/super/call-construct-invocation.js @@ -8,7 +8,7 @@ info: | [...] 6. Let result be ? Construct(func, argList, newTarget). [...] -features: [class, Reflect] +features: [class, Reflect, new.target] ---*/ var expectedNewTarget = function() {}; diff --git a/test/language/global-code/new.target-arrow.js b/test/language/global-code/new.target-arrow.js index 1c9c7c9bfa..a39139a6aa 100644 --- a/test/language/global-code/new.target-arrow.js +++ b/test/language/global-code/new.target-arrow.js @@ -24,7 +24,7 @@ info: | NOTE Normally, Contains does not look inside most function forms. However, Contains is used to detect new.target, this, and super usage within an ArrowFunction. -features: [arrow-function] +features: [arrow-function, new.target] negative: phase: parse type: SyntaxError diff --git a/test/language/global-code/new.target.js b/test/language/global-code/new.target.js index 85a5fdb71b..881c35a61e 100644 --- a/test/language/global-code/new.target.js +++ b/test/language/global-code/new.target.js @@ -12,6 +12,7 @@ info: | negative: phase: parse type: SyntaxError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; diff --git a/test/language/module-code/early-new-target.js b/test/language/module-code/early-new-target.js index ac47e65b31..9acafb7fdc 100644 --- a/test/language/module-code/early-new-target.js +++ b/test/language/module-code/early-new-target.js @@ -8,6 +8,7 @@ flags: [module] negative: phase: parse type: SyntaxError +features: [new.target] ---*/ throw "Test262: This statement should not be evaluated."; -- GitLab