diff --git a/test/annexB/language/eval-code/direct/script-decl-lex-collision-in-sloppy-mode.js b/test/annexB/language/eval-code/direct/script-decl-lex-collision-in-sloppy-mode.js deleted file mode 100644 index bb4489d34a..0000000000 --- a/test/annexB/language/eval-code/direct/script-decl-lex-collision-in-sloppy-mode.js +++ /dev/null @@ -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'); diff --git a/test/annexB/language/eval-code/direct/script-decl-lex-no-collision-in-strict-mode.js b/test/annexB/language/eval-code/direct/script-decl-lex-no-collision.js similarity index 51% rename from test/annexB/language/eval-code/direct/script-decl-lex-no-collision-in-strict-mode.js rename to test/annexB/language/eval-code/direct/script-decl-lex-no-collision.js index a0b854c8ed..3767e8c097 100644 --- a/test/annexB/language/eval-code/direct/script-decl-lex-no-collision-in-strict-mode.js +++ b/test/annexB/language/eval-code/direct/script-decl-lex-no-collision.js @@ -2,8 +2,10 @@ // 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 ) [...] @@ -11,7 +13,17 @@ info: | 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() {} }'); diff --git a/test/language/global-code/script-decl-lex-var-declared-via-eval-sloppy.js b/test/language/global-code/script-decl-lex-var-declared-via-eval-sloppy.js deleted file mode 100644 index cfece095b3..0000000000 --- a/test/language/global-code/script-decl-lex-var-declared-via-eval-sloppy.js +++ /dev/null @@ -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)'); diff --git a/test/language/global-code/script-decl-lex-var-declared-via-eval-strict.js b/test/language/global-code/script-decl-lex-var-declared-via-eval.js similarity index 55% rename from test/language/global-code/script-decl-lex-var-declared-via-eval-strict.js rename to test/language/global-code/script-decl-lex-var-declared-via-eval.js index b0f0ac8a27..bc72124bb8 100644 --- a/test/language/global-code/script-decl-lex-var-declared-via-eval-strict.js +++ b/test/language/global-code/script-decl-lex-var-declared-via-eval.js @@ -2,8 +2,10 @@ // 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 ) [...] @@ -11,7 +13,17 @@ info: | 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;');