OLD | NEW |
| (Empty) |
1 // Copyright 2016 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Flags: --harmony-restrictive-declarations | |
6 | |
7 // ES#sec-functiondeclarations-in-ifstatement-statement-clauses | |
8 // Annex B 3.4 FunctionDeclarations in IfStatement Statement Clauses | |
9 // In sloppy mode, function declarations in if statements act like | |
10 // they have a block around them. Prohibited in strict mode. | |
11 (function() { | |
12 if (false) function f() { }; | |
13 assertEquals(undefined, f); | |
14 })(); | |
15 | |
16 (function() { | |
17 assertEquals(undefined, f); | |
18 if (true) function f() { }; | |
19 assertEquals('function', typeof f); | |
20 })(); | |
21 | |
22 (function() { | |
23 assertEquals(undefined, f); | |
24 if (true) {} else function f() { }; | |
25 assertEquals(undefined, f); | |
26 })(); | |
27 | |
28 (function() { | |
29 assertEquals(undefined, f); | |
30 if (false) {} else function f() { }; | |
31 assertEquals('function', typeof f); | |
32 })(); | |
33 | |
34 // Labeled function declarations undergo the same hoisting/FiB semantics as if | |
35 // they were unalbeled. | |
36 (function() { | |
37 function bar() { | |
38 return f; | |
39 x: function f() {} | |
40 } | |
41 assertEquals('function', typeof bar()); | |
42 })(); | |
43 | |
44 (function() { | |
45 function bar() { | |
46 return f; | |
47 { | |
48 x: function f() {} | |
49 } | |
50 } | |
51 assertEquals(undefined, bar()); | |
52 })(); | |
OLD | NEW |