Bug 1921345 - Remove global constructor from js/src/vm/SavedStacks.cpp r=arai
[gecko.git] / js / src / tests / test262 / annexB / language / eval-code / direct / func-switch-dflt-eval-func-block-scoping.js
blob690c57f19e1b9246d56c5cff4f254f47b0208296
1 // This file was procedurally generated from the following sources:
2 // - src/annex-b-fns/eval-func-block-scoping.case
3 // - src/annex-b-fns/eval-func/direct-switch-dflt.template
4 /*---
5 description: A block-scoped binding is created (Funtion declaration in the `default` clause of a `switch` statement in eval code in the global scope)
6 esid: sec-web-compat-evaldeclarationinstantiation
7 flags: [generated, noStrict]
8 info: |
9     13.2.14 Runtime Semantics: BlockDeclarationInstantiation
11     [...]
12     4. For each element d in declarations do
13        a. For each element dn of the BoundNames of d do
14           i. If IsConstantDeclaration of d is true, then
15              [...]
16           ii. Else,
17               2. Perform ! envRec.CreateMutableBinding(dn, false).
19        b. If d is a GeneratorDeclaration production or a FunctionDeclaration
20           production, then
21           i. Let fn be the sole element of the BoundNames of d.
22           ii. Let fo be the result of performing InstantiateFunctionObject for
23               d with argument env.
24           iii. Perform envRec.InitializeBinding(fn, fo).
25 ---*/
26 var initialBV, currentBV, varBinding;
28 (function() {
29   eval(
30     'switch (1) {' +
31     '  default:' +
32     '    function f() { initialBV = f; f = 123; currentBV = f; return "decl"; }' +
33     '}\
34     varBinding = f;\
35     f();'
36   );
37 }());
40 assert.sameValue(
41   initialBV(),
42   'decl',
43   'Block-scoped binding value is function object at execution time'
45 assert.sameValue(currentBV, 123, 'Block-scoped binding is mutable');
46 assert.sameValue(
47   varBinding(),
48   'decl',
49   'Block-scoped binding is independent of outer var-scoped binding'
52 reportCompare(0, 0);