test262/test/language/eval-code/direct/super-prop-expr-no-home.js
jugglinmike 720c3cc8cc Update for new eval restrictions on super (#781)
A recent change to the specification [1] introduces parse-time errors
for certain usages of `super` within eval code. Modify all tests that
are affected by this change:

- Update the test bodies to accurately enforce the new semantics
- Rename files to better reflect the section of the specification that
  they enforce
- Update test meta-data
  - Change the `esid` meta-data to reflect the location of the relevant
    specification text
  - Remove the `es6id` meta-data as the behavior is no longer relatable
    to that specification
  - Introduce the `features` meta-data in cases where the test file's
    new location no longer reflects all required language features

[1] "Normative: Clarify rules around super inside eval"
    https://github.com/tc39/ecma262/pull/685
2016-10-24 10:43:44 -07:00

48 lines
1.6 KiB
JavaScript

// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-performeval
description: >
SuperProperty may may only occur in eval code for direct eval within a method
info: |
[...]
4. Let inMethod be false.
5. Let inConstructor be false.
6. If thisEnvRec has a [[HomeObject]] field, then
a. Let inMethod be true.
b. If thisEnvRec.[[FunctionObject]] has a [[Construct]] field, let
inConstructor be true.
7. Let script be the ECMAScript code that is the result of parsing x,
interpreted as UTF-16 encoded Unicode text as described in 6.1.4, for the
goal symbol Script. If inMethod is false, additional early error rules
from 18.2.1.1.1 are applied. If inConstructor is false, additional early
error rules from 18.2.1.1.2 are applied. If the parse fails, throw a
SyntaxError exception. If any early errors are detected, throw a
SyntaxError or a ReferenceError exception, depending on the type of the
error (but see also clause 16). Parsing and early error detection may be
interweaved in an implementation dependent manner.
18.2.1.1.1 Additional Early Error Rules for Eval Outside Methods
ScriptBody : StatementList
- It is a Syntax Error if StatementList contains super.
features: [super]
---*/
var caught;
function f() {
// Early errors restricting the usage of SuperProperty necessitate the use of
// `eval`.
try {
eval('super["x"];');
} catch (err) {
caught = err;
}
}
f();
assert.sameValue(typeof caught, 'object');
assert.sameValue(caught.constructor, SyntaxError);