Index: test/mjsunit/strong/function-arity.js |
diff --git a/test/mjsunit/strong/function-arity.js b/test/mjsunit/strong/function-arity.js |
index e85688aec80814711ad3143d6cbfa54ed4b9b5ff..f6e1b76571ffa1d644f3c5861dd50db10dce50a9 100644 |
--- a/test/mjsunit/strong/function-arity.js |
+++ b/test/mjsunit/strong/function-arity.js |
@@ -3,7 +3,7 @@ |
// found in the LICENSE file. |
// Flags: --strong-mode --harmony-arrow-functions --harmony-reflect |
-// Flags: --harmony-spreadcalls --allow-natives-syntax |
+// Flags: --harmony-spreadcalls --harmony-rest-parameters --allow-natives-syntax |
'use strict'; |
@@ -29,6 +29,16 @@ function generateParams(n) { |
return a.join(', '); |
} |
+function generateParamsWithRest(n) { |
+ let a = []; |
+ let i = 0; |
+ for (; i < n; i++) { |
+ a[i] = `p${i}`; |
+ } |
+ a.push(`...p${i}`) |
+ return a.join(', '); |
+} |
+ |
function generateSpread(n) { |
return `...[${generateArguments(n)}]`; |
@@ -39,7 +49,9 @@ function generateSpread(n) { |
for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
let defs = [ |
`'use strong'; function f(${generateParams(parameter_count)}) {}`, |
+ `'use strong'; function f(${generateParamsWithRest(parameter_count)}) {}`, |
`'use strong'; function* f(${generateParams(parameter_count)}) {}`, |
+ `'use strong'; function* f(${generateParamsWithRest(parameter_count)}) {}`, |
`'use strong'; let f = (${generateParams(parameter_count)}) => {}`, |
`function f(${generateParams(parameter_count)}) { 'use strong'; }`, |
`function* f(${generateParams(parameter_count)}) { 'use strong'; }`, |
@@ -90,89 +102,93 @@ function generateSpread(n) { |
(function MethodCall() { |
- for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
- let defs = [ |
- `let o = new class { |
- m(${generateParams(parameter_count)}) { 'use strong'; } |
- }`, |
- `let o = new class { |
- *m(${generateParams(parameter_count)}) { 'use strong'; } |
- }`, |
- `let o = { m(${generateParams(parameter_count)}) { 'use strong'; } }`, |
- `let o = { *m(${generateParams(parameter_count)}) { 'use strong'; } }`, |
- `'use strong'; |
- let o = new class { m(${generateParams(parameter_count)}) {} }`, |
- `'use strong'; |
- let o = new class { *m(${generateParams(parameter_count)}) {} }`, |
- `'use strong'; let o = { m(${generateParams(parameter_count)}) {} }`, |
- `'use strong'; let o = { *m(${generateParams(parameter_count)}) {} }`, |
- ]; |
- for (let def of defs) { |
- for (let argument_count = 0; argument_count < 3; argument_count++) { |
+ for (let genParams of [generateParams, generateParamsWithRest]) { |
+ for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
+ let defs = [ |
+ `let o = new class { |
+ m(${genParams(parameter_count)}) { 'use strong'; } |
+ }`, |
+ `let o = new class { |
+ *m(${genParams(parameter_count)}) { 'use strong'; } |
+ }`, |
+ `let o = { m(${genParams(parameter_count)}) { 'use strong'; } }`, |
+ `let o = { *m(${genParams(parameter_count)}) { 'use strong'; } }`, |
+ `'use strong'; |
+ let o = new class { m(${genParams(parameter_count)}) {} }`, |
+ `'use strong'; |
+ let o = new class { *m(${genParams(parameter_count)}) {} }`, |
+ `'use strong'; let o = { m(${genParams(parameter_count)}) {} }`, |
+ `'use strong'; let o = { *m(${genParams(parameter_count)}) {} }`, |
+ ]; |
+ for (let def of defs) { |
+ for (let argument_count = 0; argument_count < 3; argument_count++) { |
+ let calls = [ |
+ `o.m(${generateArguments(argument_count)})`, |
+ `o.m(${generateSpread(argument_count)})`, |
+ `o.m.call(${generateArguments(argument_count, 'o')})`, |
+ `o.m.call(o, ${generateSpread(argument_count)})`, |
+ `o.m.apply(o, [${generateArguments(argument_count)}])`, |
+ `o.m.bind(o)(${generateArguments(argument_count)})`, |
+ `%_CallFunction(${generateArguments(argument_count, 'o')}, o.m)`, |
+ `%Call(${generateArguments(argument_count, 'o')}, o.m)`, |
+ `%Apply(o.m, o, [${generateArguments(argument_count)}], 0, |
+ ${argument_count})`, |
+ ]; |
+ |
+ for (let call of calls) { |
+ let code = `'use strict'; ${def}; ${call};`; |
+ if (argument_count < parameter_count) { |
+ assertThrows(code, TypeError); |
+ } else { |
+ assertDoesNotThrow(code); |
+ } |
+ } |
+ } |
+ |
let calls = [ |
- `o.m(${generateArguments(argument_count)})`, |
- `o.m(${generateSpread(argument_count)})`, |
- `o.m.call(${generateArguments(argument_count, 'o')})`, |
- `o.m.call(o, ${generateSpread(argument_count)})`, |
- `o.m.apply(o, [${generateArguments(argument_count)}])`, |
- `o.m.bind(o)(${generateArguments(argument_count)})`, |
- `%_CallFunction(${generateArguments(argument_count, 'o')}, o.m)`, |
- `%Call(${generateArguments(argument_count, 'o')}, o.m)`, |
- `%Apply(o.m, o, [${generateArguments(argument_count)}], 0, |
- ${argument_count})`, |
+ `o.m.call()`, |
+ `o.m.apply()`, |
+ `o.m.apply(o)`, |
]; |
- |
for (let call of calls) { |
let code = `'use strict'; ${def}; ${call};`; |
- if (argument_count < parameter_count) { |
+ if (parameter_count > 0) { |
assertThrows(code, TypeError); |
} else { |
assertDoesNotThrow(code); |
} |
} |
} |
- |
- let calls = [ |
- `o.m.call()`, |
- `o.m.apply()`, |
- `o.m.apply(o)`, |
- ]; |
- for (let call of calls) { |
- let code = `'use strict'; ${def}; ${call};`; |
- if (parameter_count > 0) { |
- assertThrows(code, TypeError); |
- } else { |
- assertDoesNotThrow(code); |
- } |
- } |
} |
} |
})(); |
(function Constructor() { |
- for (let argument_count = 0; argument_count < 3; argument_count++) { |
- for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
- let defs = [ |
- `'use strong'; |
- class C { constructor(${generateParams(parameter_count)}) {} }`, |
- `'use strict'; |
- class C { |
- constructor(${generateParams(parameter_count)}) { 'use strong'; } |
- }`, |
- ]; |
- for (let def of defs) { |
- let calls = [ |
- `new C(${generateArguments(argument_count)})`, |
- `new C(${generateSpread(argument_count)})`, |
- `Reflect.construct(C, [${generateArguments(argument_count)}])`, |
+ for (let genParams of [generateParams, generateParamsWithRest]) { |
+ for (let argument_count = 0; argument_count < 3; argument_count++) { |
+ for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
+ let defs = [ |
+ `'use strong'; |
+ class C { constructor(${genParams(parameter_count)}) {} }`, |
+ `'use strict'; |
+ class C { |
+ constructor(${genParams(parameter_count)}) { 'use strong'; } |
+ }`, |
]; |
- for (let call of calls) { |
- let code = `${def}; ${call};`; |
- if (argument_count < parameter_count) { |
- assertThrows(code, TypeError); |
- } else { |
- assertDoesNotThrow(code); |
+ for (let def of defs) { |
+ let calls = [ |
+ `new C(${generateArguments(argument_count)})`, |
+ `new C(${generateSpread(argument_count)})`, |
+ `Reflect.construct(C, [${generateArguments(argument_count)}])`, |
+ ]; |
+ for (let call of calls) { |
+ let code = `${def}; ${call};`; |
+ if (argument_count < parameter_count) { |
+ assertThrows(code, TypeError); |
+ } else { |
+ assertDoesNotThrow(code); |
+ } |
} |
} |
} |
@@ -182,35 +198,37 @@ function generateSpread(n) { |
(function DerivedConstructor() { |
- for (let genArgs of [generateArguments, generateSpread]) { |
- for (let argument_count = 0; argument_count < 3; argument_count++) { |
- for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
- let defs = [ |
- `'use strong'; |
- class B { |
- constructor(${generateParams(parameter_count)}) {} |
- } |
- class C extends B { |
- constructor() { |
- super(${genArgs(argument_count)}); |
+ for (let genParams of [generateParams, generateParamsWithRest]) { |
+ for (let genArgs of [generateArguments, generateSpread]) { |
+ for (let argument_count = 0; argument_count < 3; argument_count++) { |
+ for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
+ let defs = [ |
+ `'use strong'; |
+ class B { |
+ constructor(${genParams(parameter_count)}) {} |
} |
- }`, |
- `'use strict'; |
- class B { |
- constructor(${generateParams(parameter_count)}) { 'use strong'; } |
- } |
- class C extends B { |
- constructor() { |
- super(${genArgs(argument_count)}); |
+ class C extends B { |
+ constructor() { |
+ super(${genArgs(argument_count)}); |
+ } |
+ }`, |
+ `'use strict'; |
+ class B { |
+ constructor(${genParams(parameter_count)}) { 'use strong'; } |
+ } |
+ class C extends B { |
+ constructor() { |
+ super(${genArgs(argument_count)}); |
+ } |
+ }`, |
+ ]; |
+ for (let def of defs) { |
+ let code = `${def}; new C();`; |
+ if (argument_count < parameter_count) { |
+ assertThrows(code, TypeError); |
+ } else { |
+ assertDoesNotThrow(code); |
} |
- }`, |
- ]; |
- for (let def of defs) { |
- let code = `${def}; new C();`; |
- if (argument_count < parameter_count) { |
- assertThrows(code, TypeError); |
- } else { |
- assertDoesNotThrow(code); |
} |
} |
} |
@@ -220,27 +238,29 @@ function generateSpread(n) { |
(function DerivedConstructorDefaultConstructorInDerivedClass() { |
- for (let genArgs of [generateArguments, generateSpread]) { |
- for (let argument_count = 0; argument_count < 3; argument_count++) { |
- for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
- let defs = [ |
- `'use strong'; |
- class B { |
- constructor(${generateParams(parameter_count)}) {} |
- } |
- class C extends B {}`, |
- `'use strict'; |
- class B { |
- constructor(${generateParams(parameter_count)}) { 'use strong'; } |
- } |
- class C extends B {}`, |
- ]; |
- for (let def of defs) { |
- let code = `${def}; new C(${genArgs(argument_count)})`; |
- if (argument_count < parameter_count) { |
- assertThrows(code, TypeError); |
- } else { |
- assertDoesNotThrow(code); |
+ for (let genParams of [generateParams, generateParamsWithRest]) { |
+ for (let genArgs of [generateArguments, generateSpread]) { |
+ for (let argument_count = 0; argument_count < 3; argument_count++) { |
+ for (let parameter_count = 0; parameter_count < 3; parameter_count++) { |
+ let defs = [ |
+ `'use strong'; |
+ class B { |
+ constructor(${genParams(parameter_count)}) {} |
+ } |
+ class C extends B {}`, |
+ `'use strict'; |
+ class B { |
+ constructor(${genParams(parameter_count)}) { 'use strong'; } |
+ } |
+ class C extends B {}`, |
+ ]; |
+ for (let def of defs) { |
+ let code = `${def}; new C(${genArgs(argument_count)})`; |
+ if (argument_count < parameter_count) { |
+ assertThrows(code, TypeError); |
+ } else { |
+ assertDoesNotThrow(code); |
+ } |
} |
} |
} |