mirror of
https://github.com/tc39/test262.git
synced 2025-07-21 13:04:39 +02:00
Allow global var-via-eval be declared
See https://github.com/tc39/ecma262/pull/3226
This commit is contained in:
parent
046dff4b33
commit
c5a80993cd
@ -1,21 +0,0 @@
|
|||||||
// Copyright (C) 2023 Alexey Shvayka. All rights reserved.
|
|
||||||
// This code is governed by the BSD license found in the LICENSE file.
|
|
||||||
/*---
|
|
||||||
esid: sec-globaldeclarationinstantiation
|
|
||||||
description: Let binding collision with existing var declaration that was created for hoisted function.
|
|
||||||
info: |
|
|
||||||
[...]
|
|
||||||
3. For each element name of lexNames, do
|
|
||||||
a. If env.HasVarDeclaration(name) is true, throw a SyntaxError exception.
|
|
||||||
flags: [noStrict]
|
|
||||||
---*/
|
|
||||||
|
|
||||||
eval('if (true) { function test262Fn() {} }');
|
|
||||||
|
|
||||||
assert.throws(SyntaxError, function() {
|
|
||||||
$262.evalScript('var x; let test262Fn;');
|
|
||||||
});
|
|
||||||
|
|
||||||
assert.throws(ReferenceError, function() {
|
|
||||||
x;
|
|
||||||
}, 'no bindings created');
|
|
@ -2,8 +2,10 @@
|
|||||||
// This code is governed by the BSD license found in the LICENSE file.
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
/*---
|
/*---
|
||||||
esid: sec-globaldeclarationinstantiation
|
esid: sec-globaldeclarationinstantiation
|
||||||
description: No let binding collision with existing var declaration due to strict-mode eval().
|
description: No let binding collision with existing var declaration due to eval().
|
||||||
info: |
|
info: |
|
||||||
|
In strict mode:
|
||||||
|
|
||||||
PerformEval ( x, strictCaller, direct )
|
PerformEval ( x, strictCaller, direct )
|
||||||
|
|
||||||
[...]
|
[...]
|
||||||
@ -11,7 +13,17 @@ info: |
|
|||||||
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
|
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
|
||||||
[...]
|
[...]
|
||||||
18. If strictEval is true, set varEnv to lexEnv.
|
18. If strictEval is true, set varEnv to lexEnv.
|
||||||
flags: [onlyStrict]
|
|
||||||
|
In sloppy mode:
|
||||||
|
|
||||||
|
GlobalDeclarationInstantiation ( script, env )
|
||||||
|
|
||||||
|
[...]
|
||||||
|
3. For each element name of lexNames, do
|
||||||
|
a. If env.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
|
||||||
|
b. Let hasRestrictedGlobal be ? env.HasRestrictedGlobalProperty(name).
|
||||||
|
c. NOTE: Global var and function bindings (except those that are introduced by non-strict direct eval) are non-configurable and are therefore restricted global properties.
|
||||||
|
d. If hasRestrictedGlobal is true, throw a SyntaxError exception.
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
eval('if (true) { function test262Fn() {} }');
|
eval('if (true) { function test262Fn() {} }');
|
@ -1,30 +0,0 @@
|
|||||||
// Copyright (C) 2023 Alexey Shvayka. All rights reserved.
|
|
||||||
// This code is governed by the BSD license found in the LICENSE file.
|
|
||||||
/*---
|
|
||||||
esid: sec-globaldeclarationinstantiation
|
|
||||||
description: Let binding collision with existing var declaration that was created via eval().
|
|
||||||
info: |
|
|
||||||
[...]
|
|
||||||
3. For each element name of lexNames, do
|
|
||||||
a. If env.HasVarDeclaration(name) is true, throw a SyntaxError exception.
|
|
||||||
flags: [noStrict]
|
|
||||||
---*/
|
|
||||||
|
|
||||||
eval('var test262Var;');
|
|
||||||
eval('function test262Fn() {}');
|
|
||||||
|
|
||||||
assert.throws(SyntaxError, function() {
|
|
||||||
$262.evalScript('var x; let test262Var;');
|
|
||||||
}, 'variable');
|
|
||||||
|
|
||||||
assert.throws(ReferenceError, function() {
|
|
||||||
x;
|
|
||||||
}, 'no bindings created (script shadowing variable)');
|
|
||||||
|
|
||||||
assert.throws(SyntaxError, function() {
|
|
||||||
$262.evalScript('var x; let test262Fn;');
|
|
||||||
}, 'function');
|
|
||||||
|
|
||||||
assert.throws(ReferenceError, function() {
|
|
||||||
x;
|
|
||||||
}, 'no bindings created (script shadowing function)');
|
|
@ -2,8 +2,10 @@
|
|||||||
// This code is governed by the BSD license found in the LICENSE file.
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
/*---
|
/*---
|
||||||
esid: sec-globaldeclarationinstantiation
|
esid: sec-globaldeclarationinstantiation
|
||||||
description: No let binding collision with existing var declaration due to strict-mode eval().
|
description: No let binding collision with existing var declaration due to eval().
|
||||||
info: |
|
info: |
|
||||||
|
In strict mode:
|
||||||
|
|
||||||
PerformEval ( x, strictCaller, direct )
|
PerformEval ( x, strictCaller, direct )
|
||||||
|
|
||||||
[...]
|
[...]
|
||||||
@ -11,7 +13,17 @@ info: |
|
|||||||
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
|
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
|
||||||
[...]
|
[...]
|
||||||
18. If strictEval is true, set varEnv to lexEnv.
|
18. If strictEval is true, set varEnv to lexEnv.
|
||||||
flags: [onlyStrict]
|
|
||||||
|
In sloppy mode:
|
||||||
|
|
||||||
|
GlobalDeclarationInstantiation ( script, env )
|
||||||
|
|
||||||
|
[...]
|
||||||
|
3. For each element name of lexNames, do
|
||||||
|
a. If env.HasLexicalDeclaration(name) is true, throw a SyntaxError exception.
|
||||||
|
b. Let hasRestrictedGlobal be ? env.HasRestrictedGlobalProperty(name).
|
||||||
|
c. NOTE: Global var and function bindings (except those that are introduced by non-strict direct eval) are non-configurable and are therefore restricted global properties.
|
||||||
|
d. If hasRestrictedGlobal is true, throw a SyntaxError exception.
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
eval('var test262Var;');
|
eval('var test262Var;');
|
Loading…
x
Reference in New Issue
Block a user