switch-dflt-func-no-skip-try.js (1561B)
1 // This file was procedurally generated from the following sources: 2 // - src/annex-b-fns/func-no-skip-try.case 3 // - src/annex-b-fns/func/switch-dflt.template 4 /*--- 5 description: Extension is observed when creation of variable binding would not produce an early error (try statement) (Funtion declaration in the `default` clause of a `switch` statement in function scope) 6 esid: sec-web-compat-functiondeclarationinstantiation 7 flags: [generated, noStrict] 8 info: | 9 B.3.3.1 Changes to FunctionDeclarationInstantiation 10 11 [...] 12 2. If instantiatedVarNames does not contain F, then 13 a. Perform ! varEnvRec.CreateMutableBinding(F, false). 14 b. Perform varEnvRec.InitializeBinding(F, undefined). 15 c. Append F to instantiatedVarNames. 16 [...] 17 18 B.3.5 VariableStatements in Catch Blocks 19 20 [...] 21 - It is a Syntax Error if any element of the BoundNames of CatchParameter 22 also occurs in the VarDeclaredNames of Block unless CatchParameter is 23 CatchParameter:BindingIdentifier and that element is only bound by a 24 VariableStatement, the VariableDeclarationList of a for statement, or the 25 ForBinding of a for-in statement. 26 ---*/ 27 28 (function() { 29 assert.sameValue( 30 f, undefined, 'Initialized binding created prior to evaluation' 31 ); 32 33 try { 34 throw null; 35 } catch (f) { 36 37 switch (1) { 38 default: 39 function f() { return 123; } 40 } 41 42 } 43 44 assert.sameValue( 45 typeof f, 46 'function', 47 'binding value is updated following evaluation' 48 ); 49 assert.sameValue(f(), 123); 50 }()); 51 52 reportCompare(0, 0);