Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: test/mjsunit/harmony/block-sloppy-function.js

Issue 1332873003: Implement sloppy-mode block-defined functions (Annex B 3.3) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: An extra test and comment fix Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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: --no-legacy-const --harmony-sloppy --harmony-sloppy-let --harmony-slop py-function
adamk 2015/09/11 15:42:56 You can have multiple "Flags:" lines to keep this
Dan Ehrenberg 2015/09/17 17:44:10 Done
6
7 // Test Annex B 3.3 semantics for functions declared in blocks in sloppy mode.
adamk 2015/09/11 15:42:56 Can you add tests for shadowing function params, b
Dan Ehrenberg 2015/09/17 18:10:27 Added tests. As you predicted, one of them fails,
8 // http://www.ecma-international.org/ecma-262/6.0/#sec-block-level-function-decl arations-web-legacy-compatibility-semantics
9
10 (function overridingLocalFunction() {
11 var x = [];
12 assertEquals('function', typeof f);
13 function f() {
14 x.push(1);
15 }
16 f();
17 {
18 f();
19 function f() {
20 x.push(2);
21 }
22 f();
23 }
24 f();
25 {
26 f();
27 function f() {
28 x.push(3);
29 }
30 f();
31 }
32 f();
33 assertArrayEquals([1, 2, 2, 2, 3, 3, 3], x);
34 })();
35
36 (function newFunctionBinding() {
37 var x = [];
38 assertEquals('undefined', typeof f);
39 {
40 f();
41 function f() {
42 x.push(2);
43 }
44 f();
45 }
46 f();
47 {
48 f();
49 function f() {
50 x.push(3);
51 }
52 f();
53 }
54 f();
55 assertArrayEquals([2, 2, 2, 3, 3, 3], x);
56 })();
57
58 (function shadowingLetDoesntBind() {
59 let f = 1;
60 assertEquals(1, f);
61 {
62 let y = 3;
63 function f() {
64 y = 2;
65 }
66 f();
67 assertEquals(2, y);
68 }
69 assertEquals(1, f);
70 })();
71
72 (function shadowingClassDoesntBind() {
73 class f { }
74 assertEquals('class f { }', f.toString());
75 {
76 let y = 3;
77 function f() {
78 y = 2;
79 }
80 f();
81 assertEquals(2, y);
82 }
83 assertEquals('class f { }', f.toString());
84 })();
85
86 (function shadowingConstDoesntBind() {
87 const f = 1;
88 assertEquals(1, f);
89 {
90 let y = 3;
91 function f() {
92 y = 2;
93 }
94 f();
95 assertEquals(2, y);
96 }
97 assertEquals(1, f);
98 })();
99
100 (function shadowingVarBinds() {
101 var f = 1;
102 assertEquals(1, f);
103 {
104 let y = 3;
105 function f() {
106 y = 2;
107 }
108 f();
109 assertEquals(2, y);
110 }
111 assertEquals('function', typeof f);
112 })();
113
114 (function conditional() {
115 if (true) {
116 function f() { return 1; }
117 } else {
118 function f() { return 2; }
119 }
120 assertEquals(1, f());
121
122 if (false) {
123 function g() { return 1; }
124 } else {
125 function g() { return 2; }
126 }
127 assertEquals(2, g());
128 })();
129
130 (function skipExecution() {
131 {
132 function f() { return 1; }
133 }
134 assertEquals(1, f());
135 {
136 function f() { return 2; }
137 }
138 assertEquals(2, f());
139 L: {
140 assertEquals(3, f());
141 break L;
142 function f() { return 3; }
143 }
144 assertEquals(2, f());
145 })();
146
147 // Test that hoisting from blocks doesn't happen in global scope
adamk 2015/09/11 15:42:56 How is this effect achieved?
Dan Ehrenberg 2015/09/17 17:44:10 By 'global' I meant 'not in a function'. This is t
148 function globalUnhoisted() { return 0; }
149 {
150 function globalUnhoisted() { return 1; }
151 }
152 assertEquals(0, globalUnhoisted());
OLDNEW
« src/scopes.cc ('K') | « test/mjsunit/harmony/block-let-semantics-sloppy.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698