mirror of https://github.com/tc39/test262.git
50 lines
1.7 KiB
JavaScript
50 lines
1.7 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: >
|
||
|
SuperCall may may only occur in eval code for direct eval within a
|
||
|
constructor 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 evaluatedArg = false;
|
||
|
var obj = {
|
||
|
method() {
|
||
|
// Early errors restricting the usage of SuperCall necessitate the use of
|
||
|
// `eval`.
|
||
|
eval('super(evaluatedArg = true);');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assert.throws(SyntaxError, function() {
|
||
|
obj.method();
|
||
|
});
|
||
|
|
||
|
assert.sameValue(
|
||
|
evaluatedArg, false, 'did not perform ArgumentsListEvaluation'
|
||
|
);
|