| 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);
|
| + }
|
| }
|
| }
|
| }
|
|
|