block-decl-func-skip-early-err-try.js (1763B)
1 // This file was procedurally generated from the following sources: 2 // - src/annex-b-fns/func-skip-early-err-try.case 3 // - src/annex-b-fns/func/block.template 4 /*--- 5 description: Extension is observed when creation of variable binding would not produce an early error (try statement) (Block statement in function scope containing a function declaration) 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.throws(ReferenceError, function() { 30 f; 31 }, 'An initialized binding is not created prior to evaluation'); 32 assert.sameValue( 33 typeof f, 34 'undefined', 35 'An uninitialized binding is not created prior to evaluation' 36 ); 37 38 try { 39 throw {}; 40 } catch ({ f }) { 41 42 { 43 function f() { } 44 } 45 46 } 47 48 assert.throws(ReferenceError, function() { 49 f; 50 }, 'An initialized binding is not created following evaluation'); 51 assert.sameValue( 52 typeof f, 53 'undefined', 54 'An uninitialized binding is not created following evaluation' 55 ); 56 }()); 57 58 reportCompare(0, 0);