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

Side by Side Diff: test/mjsunit/harmony/class-fields-scoping.js

Issue 2330473002: Class fields, part 3 (backends)
Patch Set: bytecode test Created 4 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
« no previous file with comments | « test/mjsunit/harmony/class-fields-proxy.js ('k') | test/mjsunit/harmony/class-fields-super.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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-class-fields
6
7 // this
8 {
9 class C {
10 a = this;
11 }
12
13 let c = new C;
14 assertEquals(c, c.a);
15 }
16
17 {
18 class C {
19 static a = this;
20 }
21 assertEquals(C, C.a);
22 }
23
24 {
25 let sigil = {};
26
27 function outer() {
28 let stored = null;
29 class C {
30 [stored = this] = 0;
31 }
32
33 assertEquals(sigil, stored);
34 }
35
36 outer.call(sigil);
37 }
38
39 // super
40 {
41 class Base {
42 m() {
43 return 0;
44 }
45 }
46
47 class Derived extends Base {
48 m() {
49 return 1;
50 }
51 a = super.m();
52 }
53
54 let c = new Derived;
55 assertEquals(0, c.a);
56 }
57
58 {
59 class Base {
60 static m() {
61 return 0;
62 }
63 }
64
65 class Derived extends Base {
66 static m() {
67 return 1;
68 }
69 static a = super.m();
70 }
71
72 assertEquals(0, Derived.a);
73 }
74
75 {
76 let stored = null;
77
78 class OuterBase {
79 m() {
80 return 0;
81 }
82 }
83
84 class OuterDerived extends OuterBase {
85 m() {
86 return 1;
87 }
88
89 constructor() {
90 super();
91
92 class InnerBase {
93 m() {
94 return 2;
95 }
96 }
97
98 class InnerDerived extends InnerBase {
99 m() {
100 return 3;
101 }
102 [stored = super.m()] = 0;
103 }
104 }
105 }
106
107 new OuterDerived;
108
109 assertEquals(0, stored);
110 }
111
112 // new.target
113 {
114 function outer() {
115 class C {
116 a = new.target;
117 }
118
119 let c = new C;
120 assertTrue(c.hasOwnProperty('a'));
121 assertEquals(undefined, c.a);
122 }
123
124 new outer;
125 }
126
127 {
128 function outer() {
129 class C {
130 static a = new.target;
131 }
132
133 assertTrue(C.hasOwnProperty('a'));
134 assertEquals(undefined, C.a);
135 }
136
137 new outer;
138 }
139
140 {
141 function outer() {
142 let stored = null;
143
144 class C {
145 [stored = new.target] = 0;
146 }
147 assertEquals(outer, stored);
148 }
149
150 new outer;
151 }
152
153 // arguments
154 {
155 function outer() {
156 let stored_outer = arguments;
157 let stored_ctor;
158
159 class C {
160 a = arguments;
161
162 constructor() {
163 stored_ctor = arguments;
164 }
165 }
166
167 let c = new C;
168 assertEquals('[object Arguments]', Object.prototype.toString.call(c.a));
169 assertFalse(stored_outer === c.a);
170 assertFalse(stored_ctor === c.a);
171 }
172
173 outer();
174 }
175
176 {
177 function outer() {
178 let stored_outer = arguments;
179
180 class C {
181 static a = arguments;
182 }
183
184 assertEquals('[object Arguments]', Object.prototype.toString.call(C.a));
185 assertFalse(stored_outer === C.a);
186 }
187
188 outer();
189 }
190
191 {
192 function outer() {
193 let stored = null;
194
195 class C {
196 [stored = arguments] = 0;
197 }
198
199 assertEquals(arguments, stored);
200 }
201
202 outer();
203 }
204
205
206 // ctor params
207 {
208 let b = 0;
209 class C {
210 a = b;
211
212 constructor(b) {}
213 }
214
215 let c = new C(1);
216 assertEquals(0, c.a);
217 }
218
219 // class declaration name
220 {
221 class C {
222 a = C;
223 }
224 let stored_class = C;
225 C = null;
226
227 let c = new stored_class;
228 assertEquals(stored_class, c.a);
229 }
230
231 {
232 class C {
233 static a = () => C;
234 }
235 let stored_class = C;
236 C = null;
237
238 assertEquals(stored_class, stored_class.a());
239 }
240
241 {
242 let stored = null;
243
244 class C {
245 [stored = () => C] = 0;
246 }
247 let stored_class = C;
248 C = null;
249
250 assertEquals(stored_class, stored());
251 }
252
253 {
254 assertThrows(() => {
255 class C {
256 static a = C;
257 }
258 }, ReferenceError);
259 }
260
261 {
262 assertThrows(() => {
263 class C {
264 [C] = 0;
265 }
266 }, ReferenceError);
267 }
268
269 // class expression name
270 {
271 let C = null;
272 let stored_class = class C {
273 a = C;
274 }
275
276 let c = new stored_class;
277 assertEquals(stored_class, c.a);
278 }
279
280 {
281 let C = null;
282 let stored_class = class C {
283 static a = () => C;
284 }
285
286 assertEquals(stored_class, stored_class.a());
287 }
288
289 {
290 let C = null;
291 let stored = null;
292
293 let stored_class = class C {
294 [stored = () => C] = 0;
295 };
296
297 assertEquals(stored_class, stored());
298 }
299
300 {
301 assertThrows(() => (
302 class C {
303 static a = C;
304 }
305 ), ReferenceError);
306 }
307
308 {
309 assertThrows(() => (
310 class C {
311 [C] = 0;
312 }
313 ), ReferenceError);
314 }
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/class-fields-proxy.js ('k') | test/mjsunit/harmony/class-fields-super.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698