Skip to content

Commit

Permalink
Allow global var-via-eval be declared
Browse files Browse the repository at this point in the history
  • Loading branch information
syg authored and ptomato committed Apr 12, 2024
1 parent 046dff4 commit c5a8099
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 55 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,28 @@
// This code is governed by the BSD license found in the LICENSE file.
/*---
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: |
In strict mode:
PerformEval ( x, strictCaller, direct )
[...]
16. If direct is true, then
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
[...]
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() {} }');
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,28 @@
// This code is governed by the BSD license found in the LICENSE file.
/*---
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: |
In strict mode:
PerformEval ( x, strictCaller, direct )
[...]
16. If direct is true, then
a. Let lexEnv be NewDeclarativeEnvironment(runningContext's LexicalEnvironment).
[...]
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;');
Expand Down

0 comments on commit c5a8099

Please sign in to comment.