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

Side by Side Diff: test/mjsunit/strong/function-arity.js

Issue 1138603003: [strong] Fix super in strong classes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Enable super spread call tests Created 5 years, 7 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 | « src/isolate.cc ('k') | test/mjsunit/strong/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
1 // Copyright 2015 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --strong-mode --harmony-arrow-functions --harmony-reflect 5 // Flags: --strong-mode --harmony-arrow-functions --harmony-reflect
6 // Flags: --harmony-spreadcalls --allow-natives-syntax 6 // Flags: --harmony-spreadcalls --allow-natives-syntax
7 7
8 'use strict'; 8 'use strict';
9 9
10 10
(...skipping 18 matching lines...) Expand all
29 return a.join(', '); 29 return a.join(', ');
30 } 30 }
31 31
32 32
33 function generateSpread(n) { 33 function generateSpread(n) {
34 return `...[${generateArguments(n)}]`; 34 return `...[${generateArguments(n)}]`;
35 } 35 }
36 36
37 37
38 (function FunctionCall() { 38 (function FunctionCall() {
39 for (let parameter_count = 0; parameter_count < 3; parameter_count++) { 39 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
40 let defs = [ 40 let defs = [
41 `'use strong'; function f(${generateParams(parameter_count)}) {}`, 41 `'use strong'; function f(${generateParams(parameterCount)}) {}`,
42 `'use strong'; function* f(${generateParams(parameter_count)}) {}`, 42 `'use strong'; function* f(${generateParams(parameterCount)}) {}`,
43 `'use strong'; let f = (${generateParams(parameter_count)}) => {}`, 43 `'use strong'; let f = (${generateParams(parameterCount)}) => {}`,
44 `function f(${generateParams(parameter_count)}) { 'use strong'; }`, 44 `function f(${generateParams(parameterCount)}) { 'use strong'; }`,
45 `function* f(${generateParams(parameter_count)}) { 'use strong'; }`, 45 `function* f(${generateParams(parameterCount)}) { 'use strong'; }`,
46 `let f = (${generateParams(parameter_count)}) => { 'use strong'; }`, 46 `let f = (${generateParams(parameterCount)}) => { 'use strong'; }`,
47 ]; 47 ];
48 for (let def of defs) { 48 for (let def of defs) {
49 for (let argument_count = 0; argument_count < 3; argument_count++) { 49 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
50 let calls = [ 50 let calls = [
51 `f(${generateArguments(argument_count)})`, 51 `f(${generateArguments(argumentCount)})`,
52 `f(${generateSpread(argument_count)})`, 52 `f(${generateSpread(argumentCount)})`,
53 `f.call(${generateArguments(argument_count, 'undefined')})`, 53 `f.call(${generateArguments(argumentCount, 'undefined')})`,
54 `f.call(undefined, ${generateSpread(argument_count)})`, 54 `f.call(undefined, ${generateSpread(argumentCount)})`,
55 `f.apply(undefined, [${generateArguments(argument_count)}])`, 55 `f.apply(undefined, [${generateArguments(argumentCount)}])`,
56 `f.bind(undefined)(${generateArguments(argument_count)})`, 56 `f.bind(undefined)(${generateArguments(argumentCount)})`,
57 `%_CallFunction(${generateArguments(argument_count, 'undefined')}, 57 `%_CallFunction(${generateArguments(argumentCount, 'undefined')},
58 f)`, 58 f)`,
59 `%Call(${generateArguments(argument_count, 'undefined')}, f)`, 59 `%Call(${generateArguments(argumentCount, 'undefined')}, f)`,
60 `%Apply(f, undefined, [${generateArguments(argument_count)}], 0, 60 `%Apply(f, undefined, [${generateArguments(argumentCount)}], 0,
61 ${argument_count})`, 61 ${argumentCount})`,
62 ]; 62 ];
63 63
64 for (let call of calls) { 64 for (let call of calls) {
65 let code = `'use strict'; ${def}; ${call};`; 65 let code = `'use strict'; ${def}; ${call};`;
66 if (argument_count < parameter_count) { 66 if (argumentCount < parameterCount) {
67 assertThrows(code, TypeError); 67 assertThrows(code, TypeError);
68 } else { 68 } else {
69 assertDoesNotThrow(code); 69 assertDoesNotThrow(code);
70 } 70 }
71 } 71 }
72 } 72 }
73 73
74 let calls = [ 74 let calls = [
75 `f.call()`, 75 `f.call()`,
76 `f.apply()`, 76 `f.apply()`,
77 `f.apply(undefined)`, 77 `f.apply(undefined)`,
78 ]; 78 ];
79 for (let call of calls) { 79 for (let call of calls) {
80 let code = `'use strict'; ${def}; ${call};`; 80 let code = `'use strict'; ${def}; ${call};`;
81 if (parameter_count > 0) { 81 if (parameterCount > 0) {
82 assertThrows(code, TypeError); 82 assertThrows(code, TypeError);
83 } else { 83 } else {
84 assertDoesNotThrow(code); 84 assertDoesNotThrow(code);
85 } 85 }
86 } 86 }
87 } 87 }
88 } 88 }
89 })(); 89 })();
90 90
91 91
92 (function MethodCall() { 92 (function MethodCall() {
93 for (let parameter_count = 0; parameter_count < 3; parameter_count++) { 93 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
94 let defs = [ 94 let defs = [
95 `let o = new class { 95 `let o = new class {
96 m(${generateParams(parameter_count)}) { 'use strong'; } 96 m(${generateParams(parameterCount)}) { 'use strong'; }
97 }`, 97 }`,
98 `let o = new class { 98 `let o = new class {
99 *m(${generateParams(parameter_count)}) { 'use strong'; } 99 *m(${generateParams(parameterCount)}) { 'use strong'; }
100 }`, 100 }`,
101 `let o = { m(${generateParams(parameter_count)}) { 'use strong'; } }`, 101 `let o = { m(${generateParams(parameterCount)}) { 'use strong'; } }`,
102 `let o = { *m(${generateParams(parameter_count)}) { 'use strong'; } }`, 102 `let o = { *m(${generateParams(parameterCount)}) { 'use strong'; } }`,
103 `'use strong'; 103 `'use strong';
104 let o = new class { m(${generateParams(parameter_count)}) {} }`, 104 let o = new class { m(${generateParams(parameterCount)}) {} }`,
105 `'use strong'; 105 `'use strong';
106 let o = new class { *m(${generateParams(parameter_count)}) {} }`, 106 let o = new class { *m(${generateParams(parameterCount)}) {} }`,
107 `'use strong'; let o = { m(${generateParams(parameter_count)}) {} }`, 107 `'use strong'; let o = { m(${generateParams(parameterCount)}) {} }`,
108 `'use strong'; let o = { *m(${generateParams(parameter_count)}) {} }`, 108 `'use strong'; let o = { *m(${generateParams(parameterCount)}) {} }`,
109 ]; 109 ];
110 for (let def of defs) { 110 for (let def of defs) {
111 for (let argument_count = 0; argument_count < 3; argument_count++) { 111 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
112 let calls = [ 112 let calls = [
113 `o.m(${generateArguments(argument_count)})`, 113 `o.m(${generateArguments(argumentCount)})`,
114 `o.m(${generateSpread(argument_count)})`, 114 `o.m(${generateSpread(argumentCount)})`,
115 `o.m.call(${generateArguments(argument_count, 'o')})`, 115 `o.m.call(${generateArguments(argumentCount, 'o')})`,
116 `o.m.call(o, ${generateSpread(argument_count)})`, 116 `o.m.call(o, ${generateSpread(argumentCount)})`,
117 `o.m.apply(o, [${generateArguments(argument_count)}])`, 117 `o.m.apply(o, [${generateArguments(argumentCount)}])`,
118 `o.m.bind(o)(${generateArguments(argument_count)})`, 118 `o.m.bind(o)(${generateArguments(argumentCount)})`,
119 `%_CallFunction(${generateArguments(argument_count, 'o')}, o.m)`, 119 `%_CallFunction(${generateArguments(argumentCount, 'o')}, o.m)`,
120 `%Call(${generateArguments(argument_count, 'o')}, o.m)`, 120 `%Call(${generateArguments(argumentCount, 'o')}, o.m)`,
121 `%Apply(o.m, o, [${generateArguments(argument_count)}], 0, 121 `%Apply(o.m, o, [${generateArguments(argumentCount)}], 0,
122 ${argument_count})`, 122 ${argumentCount})`,
123 ]; 123 ];
124 124
125 for (let call of calls) { 125 for (let call of calls) {
126 let code = `'use strict'; ${def}; ${call};`; 126 let code = `'use strict'; ${def}; ${call};`;
127 if (argument_count < parameter_count) { 127 if (argumentCount < parameterCount) {
128 assertThrows(code, TypeError); 128 assertThrows(code, TypeError);
129 } else { 129 } else {
130 assertDoesNotThrow(code); 130 assertDoesNotThrow(code);
131 } 131 }
132 } 132 }
133 } 133 }
134 134
135 let calls = [ 135 let calls = [
136 `o.m.call()`, 136 `o.m.call()`,
137 `o.m.apply()`, 137 `o.m.apply()`,
138 `o.m.apply(o)`, 138 `o.m.apply(o)`,
139 ]; 139 ];
140 for (let call of calls) { 140 for (let call of calls) {
141 let code = `'use strict'; ${def}; ${call};`; 141 let code = `'use strict'; ${def}; ${call};`;
142 if (parameter_count > 0) { 142 if (parameterCount > 0) {
143 assertThrows(code, TypeError); 143 assertThrows(code, TypeError);
144 } else { 144 } else {
145 assertDoesNotThrow(code); 145 assertDoesNotThrow(code);
146 } 146 }
147 } 147 }
148 } 148 }
149 } 149 }
150 })(); 150 })();
151 151
152 152
153 (function Constructor() { 153 (function Constructor() {
154 for (let argument_count = 0; argument_count < 3; argument_count++) { 154 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
155 for (let parameter_count = 0; parameter_count < 3; parameter_count++) { 155 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
156 let defs = [ 156 let defs = [
157 `'use strong'; 157 `'use strong';
158 class C { constructor(${generateParams(parameter_count)}) {} }`, 158 class C { constructor(${generateParams(parameterCount)}) {} }`,
159 `'use strict'; 159 `'use strict';
160 class C { 160 class C {
161 constructor(${generateParams(parameter_count)}) { 'use strong'; } 161 constructor(${generateParams(parameterCount)}) { 'use strong'; }
162 }`, 162 }`,
163 ]; 163 ];
164 for (let def of defs) { 164 for (let def of defs) {
165 let calls = [ 165 let calls = [
166 `new C(${generateArguments(argument_count)})`, 166 `new C(${generateArguments(argumentCount)})`,
167 `new C(${generateSpread(argument_count)})`, 167 `new C(${generateSpread(argumentCount)})`,
168 `Reflect.construct(C, [${generateArguments(argument_count)}])`, 168 `Reflect.construct(C, [${generateArguments(argumentCount)}])`,
169 ]; 169 ];
170 for (let call of calls) { 170 for (let call of calls) {
171 let code = `${def}; ${call};`; 171 let code = `${def}; ${call};`;
172 if (argument_count < parameter_count) { 172 if (argumentCount < parameterCount) {
173 assertThrows(code, TypeError); 173 assertThrows(code, TypeError);
174 } else { 174 } else {
175 assertDoesNotThrow(code); 175 assertDoesNotThrow(code);
176 } 176 }
177 } 177 }
178 } 178 }
179 } 179 }
180 } 180 }
181 })(); 181 })();
182 182
183 183
184 (function DerivedConstructor() { 184 (function DerivedConstructor() {
185 for (let genArgs of [generateArguments, generateSpread]) { 185 for (let genArgs of [generateArguments, generateSpread]) {
186 for (let argument_count = 0; argument_count < 3; argument_count++) { 186 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
187 for (let parameter_count = 0; parameter_count < 3; parameter_count++) { 187 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
188 let defs = [ 188 let defs = [
189 `'use strong'; 189 `'use strong';
190 class B { 190 class B {
191 constructor(${generateParams(parameter_count)}) {} 191 constructor(${generateParams(parameterCount)}) {}
192 } 192 }
193 class C extends B { 193 class C extends B {
194 constructor() { 194 constructor() {
195 super(${genArgs(argument_count)}); 195 super(${genArgs(argumentCount)});
196 } 196 }
197 }`, 197 }`,
198 `'use strict'; 198 `'use strict';
199 class B { 199 class B {
200 constructor(${generateParams(parameter_count)}) { 'use strong'; } 200 constructor(${generateParams(parameterCount)}) { 'use strong'; }
201 } 201 }
202 class C extends B { 202 class C extends B {
203 constructor() { 203 constructor() {
204 super(${genArgs(argument_count)}); 204 super(${genArgs(argumentCount)});
205 } 205 }
206 }`, 206 }`,
207 ]; 207 ];
208 for (let def of defs) { 208 for (let def of defs) {
209 let code = `${def}; new C();`; 209 let code = `${def}; new C();`;
210 if (argument_count < parameter_count) { 210 if (argumentCount < parameterCount) {
211 assertThrows(code, TypeError); 211 assertThrows(code, TypeError);
212 } else { 212 } else {
213 assertDoesNotThrow(code); 213 assertDoesNotThrow(code);
214 } 214 }
215 } 215 }
216 } 216 }
217 } 217 }
218 } 218 }
219 })(); 219 })();
220 220
221 221
222 (function DerivedConstructorDefaultConstructorInDerivedClass() { 222 (function DerivedConstructorDefaultConstructorInDerivedClass() {
223 for (let genArgs of [generateArguments, generateSpread]) { 223 for (let genArgs of [generateArguments, generateSpread]) {
224 for (let argument_count = 0; argument_count < 3; argument_count++) { 224 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
225 for (let parameter_count = 0; parameter_count < 3; parameter_count++) { 225 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
226 let defs = [ 226 let defs = [
227 `'use strong'; 227 `'use strong';
228 class B { 228 class B {
229 constructor(${generateParams(parameter_count)}) {} 229 constructor(${generateParams(parameterCount)}) {}
230 } 230 }
231 class C extends B {}`, 231 class C extends B {}`,
232 `'use strict'; 232 `'use strict';
233 class B { 233 class B {
234 constructor(${generateParams(parameter_count)}) { 'use strong'; } 234 constructor(${generateParams(parameterCount)}) { 'use strong'; }
235 } 235 }
236 class C extends B {}`, 236 class C extends B {}`,
237 ]; 237 ];
238 for (let def of defs) { 238 for (let def of defs) {
239 let code = `${def}; new C(${genArgs(argument_count)})`; 239 let code = `${def}; new C(${genArgs(argumentCount)})`;
240 if (argument_count < parameter_count) { 240 if (argumentCount < parameterCount) {
241 assertThrows(code, TypeError); 241 assertThrows(code, TypeError);
242 } else { 242 } else {
243 assertDoesNotThrow(code); 243 assertDoesNotThrow(code);
244 } 244 }
245 } 245 }
246 } 246 }
247 } 247 }
248 } 248 }
249 })(); 249 })();
250 250
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 'use strong'; 296 'use strong';
297 f(1); 297 f(1);
298 } 298 }
299 299
300 g(); 300 g();
301 %OptimizeFunctionOnNextCall(f); 301 %OptimizeFunctionOnNextCall(f);
302 g(); 302 g();
303 })(); 303 })();
304 304
305 305
306 // https://code.google.com/p/v8/issues/detail?id=4077 306 (function ParametersSuper() {
307 // (function NoParametersSuper() { 307 for (let genArgs of [generateArguments, generateSpread]) {
308 // 'use strong'; 308 for (let argumentCount = 0; argumentCount < 3; argumentCount++) {
309 // 309 for (let parameterCount = 0; parameterCount < 3; parameterCount++) {
310 // class B { 310 let defs = [
311 // m() {} 311 `'use strict';
312 // } 312 class B {
313 // class D extends B { 313 m(${generateParams(parameterCount)} ){ 'use strong' }
314 // m0() { super.m(); } 314 }`,
315 // m1() { super.m(1); } 315 `'use strong'; class B { m(${generateParams(parameterCount)}) {} }`,
316 // s0() { super.m(); } 316 ];
317 // s1() { super.m(1); } 317 for (let def of defs) {
318 // } 318 let code = `${def};
319 // 319 class D extends B {
320 // new D().m0(); 320 m() {
321 // new D().m1(); 321 super.m(${genArgs(argumentCount)});
322 // 322 }
323 // new D().s0(); 323 }
324 // new D().s1(); 324 new D().m()`;
325 // })(); 325 print('\n\n' + code);
326 326 if (argumentCount < parameterCount) {
327 327 assertThrows(code, TypeError);
328 // https://code.google.com/p/v8/issues/detail?id=4077 328 } else {
329 // (function OneParamentSuper() { 329 assertDoesNotThrow(code);
330 // 'use strong'; 330 }
331 // 331 }
332 // class B { 332 }
333 // m(x) {} 333 }
334 // } 334 }
335 // class D extends B { 335 })();
336 // m0() { super.m(); }
337 // m1() { super.m(1); }
338 // m2() { super.m(1, 2); }
339 // s0() { super.m(...[]); }
340 // s1() { super.m(...[1]); }
341 // s2() { super.m(...[1, 2]); }
342 // }
343 //
344 // assertThrows(function() { new D().m0(); }, TypeError);
345 // new D().m1();
346 // new D().m2();
347 //
348 // assertThrows(function() { new D().s0(); }, TypeError);
349 // new D().s1();
350 // new D().s2();
351 // })();
352
353
354 // https://code.google.com/p/v8/issues/detail?id=4077
355 // (function TwoParametersSuper() {
356 // 'use strong';
357 //
358 // class B {
359 // m(x, y) {}
360 // }
361 // class D extends B {
362 // m0() { super.m(); }
363 // m1() { super.m(1); }
364 // m2() { super.m(1, 2); }
365 // m3() { super.m(1, 2, 3); }
366 // s0() { super.m(...[]); }
367 // s1() { super.m(...[1]); }
368 // s2() { super.m(...[1, 2]); }
369 // s3() { super.m(...[1, 2, 3]); }
370 // }
371 //
372 // assertThrows(function() { new D().m0(); }, TypeError);
373 // assertThrows(function() { new D().m1(); }, TypeError);
374 // new D().m2();
375 // new D().m3();
376 //
377 // assertThrows(function() { new D().s0(); }, TypeError);
378 // assertThrows(function() { new D().s1(); }, TypeError);
379 // new D().s2();
380 // new D().s3();
381 // })();
OLDNEW
« no previous file with comments | « src/isolate.cc ('k') | test/mjsunit/strong/super.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698