1 // This file was procedurally generated from the following sources:
2 // - src/annex-b-fns/eval-global-block-scoping.case
3 // - src/annex-b-fns/eval-global/direct-if-decl-else-stmt.template
5 description: A block-scoped binding is created (IfStatement with a declaration in the first statement position in eval code)
6 esid: sec-functiondeclarations-in-ifstatement-statement-clauses
7 flags: [generated, noStrict]
9 The following rules for IfStatement augment those in 13.6:
11 IfStatement[Yield, Return]:
12 if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield] else Statement[?Yield, ?Return]
13 if ( Expression[In, ?Yield] ) Statement[?Yield, ?Return] else FunctionDeclaration[?Yield]
14 if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield] else FunctionDeclaration[?Yield]
15 if ( Expression[In, ?Yield] ) FunctionDeclaration[?Yield]
18 13.2.14 Runtime Semantics: BlockDeclarationInstantiation
21 4. For each element d in declarations do
22 a. For each element dn of the BoundNames of d do
23 i. If IsConstantDeclaration of d is true, then
26 2. Perform ! envRec.CreateMutableBinding(dn, false).
28 b. If d is a GeneratorDeclaration production or a FunctionDeclaration
30 i. Let fn be the sole element of the BoundNames of d.
31 ii. Let fo be the result of performing InstantiateFunctionObject for
33 iii. Perform envRec.InitializeBinding(fn, fo).
35 var initialBV, currentBV;
38 'if (true) function f() { initialBV = f; f = 123; currentBV = f; return "decl"; } else ;'
46 'Block-scoped binding value is function object at execution time'
48 assert.sameValue(currentBV, 123, 'Block-scoped binding is mutable');
52 'Block-scoped binding is independent of outer var-scoped binding'