From d4f6b9b0a66e27de05debaf4ef4e2d733fe1ccfb Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Fri, 27 Jul 2018 21:08:22 +0200 Subject: [PATCH 1/6] allow BindingPattern in FunctionRestParameter also add downlevel emit for the destructured rest param Part of #6275 --- src/compiler/checker.ts | 4 --- src/compiler/transformers/es2015.ts | 26 ++++++++++++++++--- .../iterableArrayPattern14.errors.txt | 23 ---------------- .../iterableArrayPattern15.errors.txt | 23 ---------------- .../iterableArrayPattern16.errors.txt | 5 +--- .../iterableArrayPattern17.errors.txt | 5 +--- .../iterableArrayPattern20.errors.txt | 23 ---------------- .../iterableArrayPattern25.errors.txt | 5 +--- .../iterableArrayPattern26.errors.txt | 5 +--- .../iterableArrayPattern27.errors.txt | 8 ------ .../iterableArrayPattern28.errors.txt | 5 +--- .../iterableArrayPattern29.errors.txt | 5 +--- ...estParameterWithBindingPattern1.errors.txt | 7 ----- .../restParameterWithBindingPattern1.js | 8 +++++- ...estParameterWithBindingPattern2.errors.txt | 7 ----- .../restParameterWithBindingPattern2.js | 8 +++++- 16 files changed, 42 insertions(+), 125 deletions(-) delete mode 100644 tests/baselines/reference/iterableArrayPattern14.errors.txt delete mode 100644 tests/baselines/reference/iterableArrayPattern15.errors.txt delete mode 100644 tests/baselines/reference/iterableArrayPattern20.errors.txt delete mode 100644 tests/baselines/reference/iterableArrayPattern27.errors.txt delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern1.errors.txt delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern2.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2b255da7ae34d..441de3a425358 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -28570,10 +28570,6 @@ namespace ts { checkGrammarForDisallowedTrailingComma(parameters, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); } - if (isBindingPattern(parameter.name)) { - return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); - } - if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, Diagnostics.A_rest_parameter_cannot_be_optional); } diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index bffdc5809b0e8..89c87fa82b3d8 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -1340,8 +1340,8 @@ namespace ts { * part of a constructor declaration with a * synthesized call to `super` */ - function shouldAddRestParameter(node: ParameterDeclaration | undefined, inConstructorWithSynthesizedSuper: boolean) { - return node && node.dotDotDotToken && node.name.kind === SyntaxKind.Identifier && !inConstructorWithSynthesizedSuper; + function shouldAddRestParameter(node: ParameterDeclaration | undefined, inConstructorWithSynthesizedSuper: boolean): node is ParameterDeclaration { + return !!(node && node.dotDotDotToken && !inConstructorWithSynthesizedSuper); } /** @@ -1360,11 +1360,11 @@ namespace ts { } // `declarationName` is the name of the local declaration for the parameter. - const declarationName = getMutableClone(parameter!.name); + const declarationName = parameter.name.kind === SyntaxKind.Identifier ? getMutableClone(parameter.name) : createTempVariable(/*recordTempVariable*/ undefined); setEmitFlags(declarationName, EmitFlags.NoSourceMap); // `expressionName` is the name of the parameter used in expressions. - const expressionName = getSynthesizedClone(parameter!.name); + const expressionName = parameter.name.kind === SyntaxKind.Identifier ? getSynthesizedClone(parameter.name) : declarationName; const restIndex = node.parameters.length - 1; const temp = createLoopVariable(); @@ -1429,6 +1429,24 @@ namespace ts { setEmitFlags(forStatement, EmitFlags.CustomPrologue); startOnNewLine(forStatement); statements.push(forStatement); + + if (parameter.name.kind !== SyntaxKind.Identifier) { + // do the actual destructuring of the rest parameter if necessary + statements.push( + setEmitFlags( + setTextRange( + createVariableStatement( + /*modifiers*/ undefined, + createVariableDeclarationList( + flattenDestructuringBinding(parameter, visitor, context, FlattenLevel.All, expressionName), + ) + ), + parameter + ), + EmitFlags.CustomPrologue + ) + ); + } } /** diff --git a/tests/baselines/reference/iterableArrayPattern14.errors.txt b/tests/baselines/reference/iterableArrayPattern14.errors.txt deleted file mode 100644 index 664f73e13a04f..0000000000000 --- a/tests/baselines/reference/iterableArrayPattern14.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern14.ts(16,17): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern14.ts (1 errors) ==== - class Bar { x } - class Foo extends Bar { y } - class FooIterator { - next() { - return { - value: new Foo, - done: false - }; - } - - [Symbol.iterator]() { - return this; - } - } - - function fun(...[a, ...b]) { } - ~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. - fun(new FooIterator); \ No newline at end of file diff --git a/tests/baselines/reference/iterableArrayPattern15.errors.txt b/tests/baselines/reference/iterableArrayPattern15.errors.txt deleted file mode 100644 index ce7559de94f62..0000000000000 --- a/tests/baselines/reference/iterableArrayPattern15.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern15.ts(16,17): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern15.ts (1 errors) ==== - class Bar { x } - class Foo extends Bar { y } - class FooIterator { - next() { - return { - value: new Foo, - done: false - }; - } - - [Symbol.iterator]() { - return this; - } - } - - function fun(...[a, b]: Bar[]) { } - ~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. - fun(...new FooIterator); \ No newline at end of file diff --git a/tests/baselines/reference/iterableArrayPattern16.errors.txt b/tests/baselines/reference/iterableArrayPattern16.errors.txt index b07d8c976a506..2de26b3a7214f 100644 --- a/tests/baselines/reference/iterableArrayPattern16.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern16.errors.txt @@ -1,13 +1,10 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern16.ts(1,17): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern16.ts(2,5): error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type '[Bar, Bar]'. Property '0' is missing in type 'FooIterator'. tests/cases/conformance/es6/destructuring/iterableArrayPattern16.ts(2,12): error TS2449: Class 'FooIteratorIterator' used before its declaration. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern16.ts (3 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern16.ts (2 errors) ==== function fun(...[a, b]: [Bar, Bar][]) { } - ~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. fun(...new FooIteratorIterator); ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type '[Bar, Bar]'. diff --git a/tests/baselines/reference/iterableArrayPattern17.errors.txt b/tests/baselines/reference/iterableArrayPattern17.errors.txt index d22d8580c719b..09f8b8695a744 100644 --- a/tests/baselines/reference/iterableArrayPattern17.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern17.errors.txt @@ -1,9 +1,8 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern17.ts(16,17): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern17.ts(17,5): error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type 'Bar'. Property 'x' is missing in type 'FooIterator'. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern17.ts (2 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern17.ts (1 errors) ==== class Bar { x } class Foo extends Bar { y } class FooIterator { @@ -20,8 +19,6 @@ tests/cases/conformance/es6/destructuring/iterableArrayPattern17.ts(17,5): error } function fun(...[a, b]: Bar[]) { } - ~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. fun(new FooIterator); ~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type 'Bar'. diff --git a/tests/baselines/reference/iterableArrayPattern20.errors.txt b/tests/baselines/reference/iterableArrayPattern20.errors.txt deleted file mode 100644 index 23f133238cebf..0000000000000 --- a/tests/baselines/reference/iterableArrayPattern20.errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern20.ts(16,17): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern20.ts (1 errors) ==== - class Bar { x } - class Foo extends Bar { y } - class FooArrayIterator { - next() { - return { - value: [new Foo], - done: false - }; - } - - [Symbol.iterator]() { - return this; - } - } - - function fun(...[[a = new Foo], b = [new Foo]]: Bar[][]) { } - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. - fun(...new FooArrayIterator); \ No newline at end of file diff --git a/tests/baselines/reference/iterableArrayPattern25.errors.txt b/tests/baselines/reference/iterableArrayPattern25.errors.txt index 19f2dca07f392..0161be07d4bfa 100644 --- a/tests/baselines/reference/iterableArrayPattern25.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern25.errors.txt @@ -1,11 +1,8 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts(2,1): error TS2554: Expected 2 arguments, but got 1. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts (2 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts (1 errors) ==== function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]) { } - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. takeFirstTwoEntries(new Map([["", 0], ["hello", 1]])); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2554: Expected 2 arguments, but got 1. \ No newline at end of file diff --git a/tests/baselines/reference/iterableArrayPattern26.errors.txt b/tests/baselines/reference/iterableArrayPattern26.errors.txt index a5eff0afb0df0..9fb3e6880398f 100644 --- a/tests/baselines/reference/iterableArrayPattern26.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern26.errors.txt @@ -1,12 +1,9 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern26.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern26.ts(2,21): error TS2345: Argument of type 'Map' is not assignable to parameter of type '[string, number]'. Property '0' is missing in type 'Map'. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern26.ts (2 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern26.ts (1 errors) ==== function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]: [string, number][]) { } - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. takeFirstTwoEntries(new Map([["", 0], ["hello", 1]])); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'Map' is not assignable to parameter of type '[string, number]'. diff --git a/tests/baselines/reference/iterableArrayPattern27.errors.txt b/tests/baselines/reference/iterableArrayPattern27.errors.txt deleted file mode 100644 index 99914ddc50815..0000000000000 --- a/tests/baselines/reference/iterableArrayPattern27.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern27.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern27.ts (1 errors) ==== - function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]: [string, number][]) { } - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. - takeFirstTwoEntries(...new Map([["", 0], ["hello", 1]])); \ No newline at end of file diff --git a/tests/baselines/reference/iterableArrayPattern28.errors.txt b/tests/baselines/reference/iterableArrayPattern28.errors.txt index 7ca750cd81fae..264cb8e788511 100644 --- a/tests/baselines/reference/iterableArrayPattern28.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern28.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts(2,32): error TS2345: Argument of type '([string, number] | [string, boolean])[]' is not assignable to parameter of type 'ReadonlyArray<[string, number]>'. Types of property 'concat' are incompatible. Type '{ (...items: ConcatArray<[string, number] | [string, boolean]>[]): ([string, number] | [string, boolean])[]; (...items: ([string, number] | [string, boolean] | ConcatArray<[string, number] | [string, boolean]>)[]): ([string, number] | [string, boolean])[]; }' is not assignable to type '{ (...items: ConcatArray<[string, number]>[]): [string, number][]; (...items: ([string, number] | ConcatArray<[string, number]>)[]): [string, number][]; }'. @@ -8,10 +7,8 @@ tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts(2,32): error Type 'boolean' is not assignable to type 'number'. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts (2 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts (1 errors) ==== function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]: [string, number][]) { } - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. takeFirstTwoEntries(...new Map([["", 0], ["hello", true]])); ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '([string, number] | [string, boolean])[]' is not assignable to parameter of type 'ReadonlyArray<[string, number]>'. diff --git a/tests/baselines/reference/iterableArrayPattern29.errors.txt b/tests/baselines/reference/iterableArrayPattern29.errors.txt index 29e5d0d2a3f98..a978e357cdf01 100644 --- a/tests/baselines/reference/iterableArrayPattern29.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern29.errors.txt @@ -1,12 +1,9 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern29.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern29.ts(2,21): error TS2345: Argument of type '[string, boolean]' is not assignable to parameter of type '[string, number]'. Type 'boolean' is not assignable to type 'number'. -==== tests/cases/conformance/es6/destructuring/iterableArrayPattern29.ts (2 errors) ==== +==== tests/cases/conformance/es6/destructuring/iterableArrayPattern29.ts (1 errors) ==== function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]: [string, number][]) { } - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. takeFirstTwoEntries(...new Map([["", true], ["hello", true]])); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '[string, boolean]' is not assignable to parameter of type '[string, number]'. diff --git a/tests/baselines/reference/restParameterWithBindingPattern1.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern1.errors.txt deleted file mode 100644 index 7194159a220e3..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern1.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/compiler/restParameterWithBindingPattern1.ts(1,15): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/compiler/restParameterWithBindingPattern1.ts (1 errors) ==== - function a(...{a, b}) { } - ~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern1.js b/tests/baselines/reference/restParameterWithBindingPattern1.js index 9fb45768afe33..eca1a76047152 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern1.js +++ b/tests/baselines/reference/restParameterWithBindingPattern1.js @@ -2,4 +2,10 @@ function a(...{a, b}) { } //// [restParameterWithBindingPattern1.js] -function a() { } +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a.a, b = _a.b; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern2.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern2.errors.txt deleted file mode 100644 index e69e1c2ba78a6..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern2.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/compiler/restParameterWithBindingPattern2.ts(1,15): error TS2501: A rest element cannot contain a binding pattern. - - -==== tests/cases/compiler/restParameterWithBindingPattern2.ts (1 errors) ==== - function a(...[a, b]) { } - ~~~~~~ -!!! error TS2501: A rest element cannot contain a binding pattern. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern2.js b/tests/baselines/reference/restParameterWithBindingPattern2.js index 5c97769acbbb3..348023d7aa48a 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern2.js +++ b/tests/baselines/reference/restParameterWithBindingPattern2.js @@ -2,4 +2,10 @@ function a(...[a, b]) { } //// [restParameterWithBindingPattern2.js] -function a() { } +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a[0], b = _a[1]; +} From 421a5f2698fd3efa7ac2cbd898934d8c2e6d95ac Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Sat, 28 Jul 2018 08:50:08 +0200 Subject: [PATCH 2/6] add additional test for grammar and type checking --- .../restParameterWithBindingPattern3.errors.txt | 10 ++++++++++ .../reference/restParameterWithBindingPattern3.js | 11 +++++++++++ .../restParameterWithBindingPattern3.symbols | 6 ++++++ .../reference/restParameterWithBindingPattern3.types | 8 ++++++++ .../restParameterWithBindingPattern4.errors.txt | 7 +++++++ .../reference/restParameterWithBindingPattern4.js | 11 +++++++++++ .../restParameterWithBindingPattern4.symbols | 5 +++++ .../reference/restParameterWithBindingPattern4.types | 6 ++++++ .../reference/restParameterWithBindingPattern5.js | 11 +++++++++++ .../restParameterWithBindingPattern5.symbols | 7 +++++++ .../reference/restParameterWithBindingPattern5.types | 7 +++++++ .../restParameterWithBindingPattern6.errors.txt | 7 +++++++ .../reference/restParameterWithBindingPattern6.js | 11 +++++++++++ .../restParameterWithBindingPattern6.symbols | 6 ++++++ .../reference/restParameterWithBindingPattern6.types | 8 ++++++++ .../compiler/restParameterWithBindingPattern3.ts | 1 + .../compiler/restParameterWithBindingPattern4.ts | 1 + .../compiler/restParameterWithBindingPattern5.ts | 1 + .../compiler/restParameterWithBindingPattern6.ts | 1 + 19 files changed, 125 insertions(+) create mode 100644 tests/baselines/reference/restParameterWithBindingPattern3.errors.txt create mode 100644 tests/baselines/reference/restParameterWithBindingPattern3.js create mode 100644 tests/baselines/reference/restParameterWithBindingPattern3.symbols create mode 100644 tests/baselines/reference/restParameterWithBindingPattern3.types create mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.errors.txt create mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.js create mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.symbols create mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.types create mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.js create mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.symbols create mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.types create mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.errors.txt create mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.js create mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.symbols create mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.types create mode 100644 tests/cases/compiler/restParameterWithBindingPattern3.ts create mode 100644 tests/cases/compiler/restParameterWithBindingPattern4.ts create mode 100644 tests/cases/compiler/restParameterWithBindingPattern5.ts create mode 100644 tests/cases/compiler/restParameterWithBindingPattern6.ts diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt new file mode 100644 index 0000000000000..8b278ed3783f0 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/restParameterWithBindingPattern3.ts(1,16): error TS2322: Type '1' is not assignable to type 'string'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(1,23): error TS2322: Type 'true' is not assignable to type 'string'. + + +==== tests/cases/compiler/restParameterWithBindingPattern3.ts (2 errors) ==== + function a(...[a = 1, b = true]: string[]) { } + ~ +!!! error TS2322: Type '1' is not assignable to type 'string'. + ~ +!!! error TS2322: Type 'true' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.js b/tests/baselines/reference/restParameterWithBindingPattern3.js new file mode 100644 index 0000000000000..86bda118119a3 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern3.js @@ -0,0 +1,11 @@ +//// [restParameterWithBindingPattern3.ts] +function a(...[a = 1, b = true]: string[]) { } + +//// [restParameterWithBindingPattern3.js] +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], b = _c === void 0 ? true : _c; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.symbols b/tests/baselines/reference/restParameterWithBindingPattern3.symbols new file mode 100644 index 0000000000000..09ffc4d8adc07 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern3.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/restParameterWithBindingPattern3.ts === +function a(...[a = 1, b = true]: string[]) { } +>a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 0, 0)) +>a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 0, 15)) +>b : Symbol(b, Decl(restParameterWithBindingPattern3.ts, 0, 21)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.types b/tests/baselines/reference/restParameterWithBindingPattern3.types new file mode 100644 index 0000000000000..09b2f9143fef0 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern3.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/restParameterWithBindingPattern3.ts === +function a(...[a = 1, b = true]: string[]) { } +>a : (...[a, b]: string[]) => void +>a : string +>1 : 1 +>b : string +>true : true + diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt new file mode 100644 index 0000000000000..355ab26c6c59c --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/restParameterWithBindingPattern4.ts(1,23): error TS1186: A rest element cannot have an initializer. + + +==== tests/cases/compiler/restParameterWithBindingPattern4.ts (1 errors) ==== + function a(...[...foo = []]: string[]) { } + ~ +!!! error TS1186: A rest element cannot have an initializer. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.js b/tests/baselines/reference/restParameterWithBindingPattern4.js new file mode 100644 index 0000000000000..348fa5a02bbc9 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern4.js @@ -0,0 +1,11 @@ +//// [restParameterWithBindingPattern4.ts] +function a(...[...foo = []]: string[]) { } + +//// [restParameterWithBindingPattern4.js] +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var _b = _a.slice(0), foo = _b === void 0 ? [] : _b; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.symbols b/tests/baselines/reference/restParameterWithBindingPattern4.symbols new file mode 100644 index 0000000000000..f281620423ed0 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern4.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/restParameterWithBindingPattern4.ts === +function a(...[...foo = []]: string[]) { } +>a : Symbol(a, Decl(restParameterWithBindingPattern4.ts, 0, 0)) +>foo : Symbol(foo, Decl(restParameterWithBindingPattern4.ts, 0, 15)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.types b/tests/baselines/reference/restParameterWithBindingPattern4.types new file mode 100644 index 0000000000000..f4af66e9be7d0 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern4.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/restParameterWithBindingPattern4.ts === +function a(...[...foo = []]: string[]) { } +>a : (...[...foo]: string[]) => void +>foo : string[] +>[] : undefined[] + diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.js b/tests/baselines/reference/restParameterWithBindingPattern5.js new file mode 100644 index 0000000000000..4bff99068e0ef --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern5.js @@ -0,0 +1,11 @@ +//// [restParameterWithBindingPattern5.ts] +function a(...{0: a, length, 3: d}: [boolean, string, number]) { } + +//// [restParameterWithBindingPattern5.js] +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a[0], length = _a.length, d = _a[3]; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.symbols b/tests/baselines/reference/restParameterWithBindingPattern5.symbols new file mode 100644 index 0000000000000..a59b24f64f43a --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern5.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/restParameterWithBindingPattern5.ts === +function a(...{0: a, length, 3: d}: [boolean, string, number]) { } +>a : Symbol(a, Decl(restParameterWithBindingPattern5.ts, 0, 0)) +>a : Symbol(a, Decl(restParameterWithBindingPattern5.ts, 0, 15)) +>length : Symbol(length, Decl(restParameterWithBindingPattern5.ts, 0, 20)) +>d : Symbol(d, Decl(restParameterWithBindingPattern5.ts, 0, 28)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.types b/tests/baselines/reference/restParameterWithBindingPattern5.types new file mode 100644 index 0000000000000..6986660adcda2 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern5.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/restParameterWithBindingPattern5.ts === +function a(...{0: a, length, 3: d}: [boolean, string, number]) { } +>a : (__0_0: boolean, __0_1: string, __0_2: number) => void +>a : boolean +>length : 3 +>d : string | number | boolean + diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt new file mode 100644 index 0000000000000..6f590b2bb6720 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/restParameterWithBindingPattern6.ts(1,23): error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. + + +==== tests/cases/compiler/restParameterWithBindingPattern6.ts (1 errors) ==== + function a(...[a, , , d]: [boolean, string, number]) { } + ~ +!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.js b/tests/baselines/reference/restParameterWithBindingPattern6.js new file mode 100644 index 0000000000000..02101d0fcdbf0 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern6.js @@ -0,0 +1,11 @@ +//// [restParameterWithBindingPattern6.ts] +function a(...[a, , , d]: [boolean, string, number]) { } + +//// [restParameterWithBindingPattern6.js] +function a() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a[0], d = _a[3]; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.symbols b/tests/baselines/reference/restParameterWithBindingPattern6.symbols new file mode 100644 index 0000000000000..2c16d11e33f12 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern6.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/restParameterWithBindingPattern6.ts === +function a(...[a, , , d]: [boolean, string, number]) { } +>a : Symbol(a, Decl(restParameterWithBindingPattern6.ts, 0, 0)) +>a : Symbol(a, Decl(restParameterWithBindingPattern6.ts, 0, 15)) +>d : Symbol(d, Decl(restParameterWithBindingPattern6.ts, 0, 21)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.types b/tests/baselines/reference/restParameterWithBindingPattern6.types new file mode 100644 index 0000000000000..f0062077458dc --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern6.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/restParameterWithBindingPattern6.ts === +function a(...[a, , , d]: [boolean, string, number]) { } +>a : (__0_0: boolean, __0_1: string, __0_2: number) => void +>a : boolean +> : undefined +> : undefined +>d : any + diff --git a/tests/cases/compiler/restParameterWithBindingPattern3.ts b/tests/cases/compiler/restParameterWithBindingPattern3.ts new file mode 100644 index 0000000000000..920e00ac2e84a --- /dev/null +++ b/tests/cases/compiler/restParameterWithBindingPattern3.ts @@ -0,0 +1 @@ +function a(...[a = 1, b = true]: string[]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern4.ts b/tests/cases/compiler/restParameterWithBindingPattern4.ts new file mode 100644 index 0000000000000..fee0067bd50ea --- /dev/null +++ b/tests/cases/compiler/restParameterWithBindingPattern4.ts @@ -0,0 +1 @@ +function a(...[...foo = []]: string[]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern5.ts b/tests/cases/compiler/restParameterWithBindingPattern5.ts new file mode 100644 index 0000000000000..7707a99b11edb --- /dev/null +++ b/tests/cases/compiler/restParameterWithBindingPattern5.ts @@ -0,0 +1 @@ +function a(...{0: a, length, 3: d}: [boolean, string, number]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern6.ts b/tests/cases/compiler/restParameterWithBindingPattern6.ts new file mode 100644 index 0000000000000..ae95ad8c4d99f --- /dev/null +++ b/tests/cases/compiler/restParameterWithBindingPattern6.ts @@ -0,0 +1 @@ +function a(...[a, , , d]: [boolean, string, number]) { } \ No newline at end of file From 3894d0524c918883763a658bd0c11c3b9cc2af36 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Mon, 30 Jul 2018 16:13:22 +0200 Subject: [PATCH 3/6] merge tests --- ...estParameterWithBindingPattern3.errors.txt | 16 ++++++++-- .../restParameterWithBindingPattern3.js | 29 ++++++++++++++++++- .../restParameterWithBindingPattern3.symbols | 15 ++++++++++ .../restParameterWithBindingPattern3.types | 18 ++++++++++++ ...estParameterWithBindingPattern4.errors.txt | 7 ----- .../restParameterWithBindingPattern4.js | 11 ------- .../restParameterWithBindingPattern4.symbols | 5 ---- .../restParameterWithBindingPattern4.types | 6 ---- .../restParameterWithBindingPattern5.js | 11 ------- .../restParameterWithBindingPattern5.symbols | 7 ----- .../restParameterWithBindingPattern5.types | 7 ----- ...estParameterWithBindingPattern6.errors.txt | 7 ----- .../restParameterWithBindingPattern6.js | 11 ------- .../restParameterWithBindingPattern6.symbols | 6 ---- .../restParameterWithBindingPattern6.types | 8 ----- .../restParameterWithBindingPattern3.ts | 8 ++++- .../restParameterWithBindingPattern4.ts | 1 - .../restParameterWithBindingPattern5.ts | 1 - .../restParameterWithBindingPattern6.ts | 1 - 19 files changed, 82 insertions(+), 93 deletions(-) delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.errors.txt delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.js delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.symbols delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern4.types delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.js delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.symbols delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern5.types delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.errors.txt delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.js delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.symbols delete mode 100644 tests/baselines/reference/restParameterWithBindingPattern6.types delete mode 100644 tests/cases/compiler/restParameterWithBindingPattern4.ts delete mode 100644 tests/cases/compiler/restParameterWithBindingPattern5.ts delete mode 100644 tests/cases/compiler/restParameterWithBindingPattern6.ts diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt index 8b278ed3783f0..ea6bda983d838 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt +++ b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt @@ -1,10 +1,22 @@ tests/cases/compiler/restParameterWithBindingPattern3.ts(1,16): error TS2322: Type '1' is not assignable to type 'string'. tests/cases/compiler/restParameterWithBindingPattern3.ts(1,23): error TS2322: Type 'true' is not assignable to type 'string'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(3,23): error TS1186: A rest element cannot have an initializer. +tests/cases/compiler/restParameterWithBindingPattern3.ts(7,23): error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. -==== tests/cases/compiler/restParameterWithBindingPattern3.ts (2 errors) ==== +==== tests/cases/compiler/restParameterWithBindingPattern3.ts (4 errors) ==== function a(...[a = 1, b = true]: string[]) { } ~ !!! error TS2322: Type '1' is not assignable to type 'string'. ~ -!!! error TS2322: Type 'true' is not assignable to type 'string'. \ No newline at end of file +!!! error TS2322: Type 'true' is not assignable to type 'string'. + + function b(...[...foo = []]: string[]) { } + ~ +!!! error TS1186: A rest element cannot have an initializer. + + function c(...{0: a, length, 3: d}: [boolean, string, number]) { } + + function d(...[a, , , d]: [boolean, string, number]) { } + ~ +!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.js b/tests/baselines/reference/restParameterWithBindingPattern3.js index 86bda118119a3..da3531633b6b7 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.js +++ b/tests/baselines/reference/restParameterWithBindingPattern3.js @@ -1,5 +1,11 @@ //// [restParameterWithBindingPattern3.ts] -function a(...[a = 1, b = true]: string[]) { } +function a(...[a = 1, b = true]: string[]) { } + +function b(...[...foo = []]: string[]) { } + +function c(...{0: a, length, 3: d}: [boolean, string, number]) { } + +function d(...[a, , , d]: [boolean, string, number]) { } //// [restParameterWithBindingPattern3.js] function a() { @@ -9,3 +15,24 @@ function a() { } var _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], b = _c === void 0 ? true : _c; } +function b() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var _b = _a.slice(0), foo = _b === void 0 ? [] : _b; +} +function c() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a[0], length = _a.length, d = _a[3]; +} +function d() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var a = _a[0], d = _a[3]; +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.symbols b/tests/baselines/reference/restParameterWithBindingPattern3.symbols index 09ffc4d8adc07..2694c7327dac3 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.symbols +++ b/tests/baselines/reference/restParameterWithBindingPattern3.symbols @@ -4,3 +4,18 @@ function a(...[a = 1, b = true]: string[]) { } >a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 0, 15)) >b : Symbol(b, Decl(restParameterWithBindingPattern3.ts, 0, 21)) +function b(...[...foo = []]: string[]) { } +>b : Symbol(b, Decl(restParameterWithBindingPattern3.ts, 0, 46)) +>foo : Symbol(foo, Decl(restParameterWithBindingPattern3.ts, 2, 15)) + +function c(...{0: a, length, 3: d}: [boolean, string, number]) { } +>c : Symbol(c, Decl(restParameterWithBindingPattern3.ts, 2, 42)) +>a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 4, 15)) +>length : Symbol(length, Decl(restParameterWithBindingPattern3.ts, 4, 20)) +>d : Symbol(d, Decl(restParameterWithBindingPattern3.ts, 4, 28)) + +function d(...[a, , , d]: [boolean, string, number]) { } +>d : Symbol(d, Decl(restParameterWithBindingPattern3.ts, 4, 66)) +>a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 6, 15)) +>d : Symbol(d, Decl(restParameterWithBindingPattern3.ts, 6, 21)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.types b/tests/baselines/reference/restParameterWithBindingPattern3.types index 09b2f9143fef0..7ab8bdf621a2a 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.types +++ b/tests/baselines/reference/restParameterWithBindingPattern3.types @@ -6,3 +6,21 @@ function a(...[a = 1, b = true]: string[]) { } >b : string >true : true +function b(...[...foo = []]: string[]) { } +>b : (...[...foo]: string[]) => void +>foo : string[] +>[] : undefined[] + +function c(...{0: a, length, 3: d}: [boolean, string, number]) { } +>c : (__0_0: boolean, __0_1: string, __0_2: number) => void +>a : boolean +>length : 3 +>d : string | number | boolean + +function d(...[a, , , d]: [boolean, string, number]) { } +>d : (__0_0: boolean, __0_1: string, __0_2: number) => void +>a : boolean +> : undefined +> : undefined +>d : any + diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt deleted file mode 100644 index 355ab26c6c59c..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern4.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/compiler/restParameterWithBindingPattern4.ts(1,23): error TS1186: A rest element cannot have an initializer. - - -==== tests/cases/compiler/restParameterWithBindingPattern4.ts (1 errors) ==== - function a(...[...foo = []]: string[]) { } - ~ -!!! error TS1186: A rest element cannot have an initializer. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.js b/tests/baselines/reference/restParameterWithBindingPattern4.js deleted file mode 100644 index 348fa5a02bbc9..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern4.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [restParameterWithBindingPattern4.ts] -function a(...[...foo = []]: string[]) { } - -//// [restParameterWithBindingPattern4.js] -function a() { - var _a = []; - for (var _i = 0; _i < arguments.length; _i++) { - _a[_i] = arguments[_i]; - } - var _b = _a.slice(0), foo = _b === void 0 ? [] : _b; -} diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.symbols b/tests/baselines/reference/restParameterWithBindingPattern4.symbols deleted file mode 100644 index f281620423ed0..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern4.symbols +++ /dev/null @@ -1,5 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern4.ts === -function a(...[...foo = []]: string[]) { } ->a : Symbol(a, Decl(restParameterWithBindingPattern4.ts, 0, 0)) ->foo : Symbol(foo, Decl(restParameterWithBindingPattern4.ts, 0, 15)) - diff --git a/tests/baselines/reference/restParameterWithBindingPattern4.types b/tests/baselines/reference/restParameterWithBindingPattern4.types deleted file mode 100644 index f4af66e9be7d0..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern4.types +++ /dev/null @@ -1,6 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern4.ts === -function a(...[...foo = []]: string[]) { } ->a : (...[...foo]: string[]) => void ->foo : string[] ->[] : undefined[] - diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.js b/tests/baselines/reference/restParameterWithBindingPattern5.js deleted file mode 100644 index 4bff99068e0ef..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern5.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [restParameterWithBindingPattern5.ts] -function a(...{0: a, length, 3: d}: [boolean, string, number]) { } - -//// [restParameterWithBindingPattern5.js] -function a() { - var _a = []; - for (var _i = 0; _i < arguments.length; _i++) { - _a[_i] = arguments[_i]; - } - var a = _a[0], length = _a.length, d = _a[3]; -} diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.symbols b/tests/baselines/reference/restParameterWithBindingPattern5.symbols deleted file mode 100644 index a59b24f64f43a..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern5.symbols +++ /dev/null @@ -1,7 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern5.ts === -function a(...{0: a, length, 3: d}: [boolean, string, number]) { } ->a : Symbol(a, Decl(restParameterWithBindingPattern5.ts, 0, 0)) ->a : Symbol(a, Decl(restParameterWithBindingPattern5.ts, 0, 15)) ->length : Symbol(length, Decl(restParameterWithBindingPattern5.ts, 0, 20)) ->d : Symbol(d, Decl(restParameterWithBindingPattern5.ts, 0, 28)) - diff --git a/tests/baselines/reference/restParameterWithBindingPattern5.types b/tests/baselines/reference/restParameterWithBindingPattern5.types deleted file mode 100644 index 6986660adcda2..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern5.types +++ /dev/null @@ -1,7 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern5.ts === -function a(...{0: a, length, 3: d}: [boolean, string, number]) { } ->a : (__0_0: boolean, __0_1: string, __0_2: number) => void ->a : boolean ->length : 3 ->d : string | number | boolean - diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt deleted file mode 100644 index 6f590b2bb6720..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern6.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/compiler/restParameterWithBindingPattern6.ts(1,23): error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. - - -==== tests/cases/compiler/restParameterWithBindingPattern6.ts (1 errors) ==== - function a(...[a, , , d]: [boolean, string, number]) { } - ~ -!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.js b/tests/baselines/reference/restParameterWithBindingPattern6.js deleted file mode 100644 index 02101d0fcdbf0..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern6.js +++ /dev/null @@ -1,11 +0,0 @@ -//// [restParameterWithBindingPattern6.ts] -function a(...[a, , , d]: [boolean, string, number]) { } - -//// [restParameterWithBindingPattern6.js] -function a() { - var _a = []; - for (var _i = 0; _i < arguments.length; _i++) { - _a[_i] = arguments[_i]; - } - var a = _a[0], d = _a[3]; -} diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.symbols b/tests/baselines/reference/restParameterWithBindingPattern6.symbols deleted file mode 100644 index 2c16d11e33f12..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern6.symbols +++ /dev/null @@ -1,6 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern6.ts === -function a(...[a, , , d]: [boolean, string, number]) { } ->a : Symbol(a, Decl(restParameterWithBindingPattern6.ts, 0, 0)) ->a : Symbol(a, Decl(restParameterWithBindingPattern6.ts, 0, 15)) ->d : Symbol(d, Decl(restParameterWithBindingPattern6.ts, 0, 21)) - diff --git a/tests/baselines/reference/restParameterWithBindingPattern6.types b/tests/baselines/reference/restParameterWithBindingPattern6.types deleted file mode 100644 index f0062077458dc..0000000000000 --- a/tests/baselines/reference/restParameterWithBindingPattern6.types +++ /dev/null @@ -1,8 +0,0 @@ -=== tests/cases/compiler/restParameterWithBindingPattern6.ts === -function a(...[a, , , d]: [boolean, string, number]) { } ->a : (__0_0: boolean, __0_1: string, __0_2: number) => void ->a : boolean -> : undefined -> : undefined ->d : any - diff --git a/tests/cases/compiler/restParameterWithBindingPattern3.ts b/tests/cases/compiler/restParameterWithBindingPattern3.ts index 920e00ac2e84a..93d0daae53856 100644 --- a/tests/cases/compiler/restParameterWithBindingPattern3.ts +++ b/tests/cases/compiler/restParameterWithBindingPattern3.ts @@ -1 +1,7 @@ -function a(...[a = 1, b = true]: string[]) { } \ No newline at end of file +function a(...[a = 1, b = true]: string[]) { } + +function b(...[...foo = []]: string[]) { } + +function c(...{0: a, length, 3: d}: [boolean, string, number]) { } + +function d(...[a, , , d]: [boolean, string, number]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern4.ts b/tests/cases/compiler/restParameterWithBindingPattern4.ts deleted file mode 100644 index fee0067bd50ea..0000000000000 --- a/tests/cases/compiler/restParameterWithBindingPattern4.ts +++ /dev/null @@ -1 +0,0 @@ -function a(...[...foo = []]: string[]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern5.ts b/tests/cases/compiler/restParameterWithBindingPattern5.ts deleted file mode 100644 index 7707a99b11edb..0000000000000 --- a/tests/cases/compiler/restParameterWithBindingPattern5.ts +++ /dev/null @@ -1 +0,0 @@ -function a(...{0: a, length, 3: d}: [boolean, string, number]) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern6.ts b/tests/cases/compiler/restParameterWithBindingPattern6.ts deleted file mode 100644 index ae95ad8c4d99f..0000000000000 --- a/tests/cases/compiler/restParameterWithBindingPattern6.ts +++ /dev/null @@ -1 +0,0 @@ -function a(...[a, , , d]: [boolean, string, number]) { } \ No newline at end of file From 5b122dbad6d72e6df49e2e0dc5f07a4f601ba699 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Mon, 30 Jul 2018 16:22:25 +0200 Subject: [PATCH 4/6] test sourceMap --- .../restParameterWithBindingPattern2.js | 1 + .../restParameterWithBindingPattern2.js.map | 2 + ...ParameterWithBindingPattern2.sourcemap.txt | 90 +++++++++++++++++++ .../restParameterWithBindingPattern2.ts | 2 + 4 files changed, 95 insertions(+) create mode 100644 tests/baselines/reference/restParameterWithBindingPattern2.js.map create mode 100644 tests/baselines/reference/restParameterWithBindingPattern2.sourcemap.txt diff --git a/tests/baselines/reference/restParameterWithBindingPattern2.js b/tests/baselines/reference/restParameterWithBindingPattern2.js index 348023d7aa48a..acef0954194c4 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern2.js +++ b/tests/baselines/reference/restParameterWithBindingPattern2.js @@ -9,3 +9,4 @@ function a() { } var a = _a[0], b = _a[1]; } +//# sourceMappingURL=restParameterWithBindingPattern2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern2.js.map b/tests/baselines/reference/restParameterWithBindingPattern2.js.map new file mode 100644 index 0000000000000..1e25b0f14bed3 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern2.js.map @@ -0,0 +1,2 @@ +//// [restParameterWithBindingPattern2.js.map] +{"version":3,"file":"restParameterWithBindingPattern2.js","sourceRoot":"","sources":["restParameterWithBindingPattern2.ts"],"names":[],"mappings":"AAAA,SAAS,CAAC;IAAC,YAAS;SAAT,UAAS,EAAT,qBAAS,EAAT,IAAS;QAAT,uBAAS;;IAAT,IAAI,SAAC,EAAE,SAAC,CAAC;AAAI,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern2.sourcemap.txt b/tests/baselines/reference/restParameterWithBindingPattern2.sourcemap.txt new file mode 100644 index 0000000000000..7cd85ba9debb1 --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern2.sourcemap.txt @@ -0,0 +1,90 @@ +=================================================================== +JsFile: restParameterWithBindingPattern2.js +mapUrl: restParameterWithBindingPattern2.js.map +sourceRoot: +sources: restParameterWithBindingPattern2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/restParameterWithBindingPattern2.js +sourceFile:restParameterWithBindingPattern2.ts +------------------------------------------------------------------- +>>>function a() { +1 > +2 >^^^^^^^^^ +3 > ^ +4 > ^^^^^^^-> +1 > +2 >function +3 > a +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 10) Source(1, 10) + SourceIndex(0) +3 >Emitted(1, 11) Source(1, 11) + SourceIndex(0) +--- +>>> var _a = []; +1->^^^^ +2 > ^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1->( +2 > ...[a, b] +1->Emitted(2, 5) Source(1, 12) + SourceIndex(0) +2 >Emitted(2, 17) Source(1, 21) + SourceIndex(0) +--- +>>> for (var _i = 0; _i < arguments.length; _i++) { +1->^^^^^^^^^ +2 > ^^^^^^^^^^ +3 > ^^ +4 > ^^^^^^^^^^^^^^^^^^^^^ +5 > ^^ +6 > ^^^^ +1-> +2 > ...[a, b] +3 > +4 > ...[a, b] +5 > +6 > ...[a, b] +1->Emitted(3, 10) Source(1, 12) + SourceIndex(0) +2 >Emitted(3, 20) Source(1, 21) + SourceIndex(0) +3 >Emitted(3, 22) Source(1, 12) + SourceIndex(0) +4 >Emitted(3, 43) Source(1, 21) + SourceIndex(0) +5 >Emitted(3, 45) Source(1, 12) + SourceIndex(0) +6 >Emitted(3, 49) Source(1, 21) + SourceIndex(0) +--- +>>> _a[_i] = arguments[_i]; +1 >^^^^^^^^ +2 > ^^^^^^^^^^^^^^^^^^^^^^^ +1 > +2 > ...[a, b] +1 >Emitted(4, 9) Source(1, 12) + SourceIndex(0) +2 >Emitted(4, 32) Source(1, 21) + SourceIndex(0) +--- +>>> } +>>> var a = _a[0], b = _a[1]; +1 >^^^^ +2 > ^^^^ +3 > ^^^^^^^^^ +4 > ^^ +5 > ^^^^^^^^^ +6 > ^ +1 > +2 > ...[ +3 > a +4 > , +5 > b +6 > ] +1 >Emitted(6, 5) Source(1, 12) + SourceIndex(0) +2 >Emitted(6, 9) Source(1, 16) + SourceIndex(0) +3 >Emitted(6, 18) Source(1, 17) + SourceIndex(0) +4 >Emitted(6, 20) Source(1, 19) + SourceIndex(0) +5 >Emitted(6, 29) Source(1, 20) + SourceIndex(0) +6 >Emitted(6, 30) Source(1, 21) + SourceIndex(0) +--- +>>>} +1 > +2 >^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >) { +2 >} +1 >Emitted(7, 1) Source(1, 25) + SourceIndex(0) +2 >Emitted(7, 2) Source(1, 26) + SourceIndex(0) +--- +>>>//# sourceMappingURL=restParameterWithBindingPattern2.js.map \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern2.ts b/tests/cases/compiler/restParameterWithBindingPattern2.ts index 85076703b7963..d7057885040c5 100644 --- a/tests/cases/compiler/restParameterWithBindingPattern2.ts +++ b/tests/cases/compiler/restParameterWithBindingPattern2.ts @@ -1 +1,3 @@ +// @sourcemap: true + function a(...[a, b]) { } \ No newline at end of file From 63c80ddaf5e046befdff3e6c6e19564ff193ea99 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Wed, 1 Aug 2018 11:12:47 +0200 Subject: [PATCH 5/6] additional test --- .../restParameterWithBindingPattern1.js | 1 + .../restParameterWithBindingPattern1.js.map | 2 + ...ParameterWithBindingPattern1.sourcemap.txt | 90 +++++++++++++++++++ ...estParameterWithBindingPattern3.errors.txt | 15 +++- .../restParameterWithBindingPattern3.js | 20 ++++- .../restParameterWithBindingPattern3.symbols | 6 ++ .../restParameterWithBindingPattern3.types | 9 ++ .../restParameterWithBindingPattern1.ts | 2 + .../restParameterWithBindingPattern3.ts | 4 +- 9 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/restParameterWithBindingPattern1.js.map create mode 100644 tests/baselines/reference/restParameterWithBindingPattern1.sourcemap.txt diff --git a/tests/baselines/reference/restParameterWithBindingPattern1.js b/tests/baselines/reference/restParameterWithBindingPattern1.js index eca1a76047152..d872d23245067 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern1.js +++ b/tests/baselines/reference/restParameterWithBindingPattern1.js @@ -9,3 +9,4 @@ function a() { } var a = _a.a, b = _a.b; } +//# sourceMappingURL=restParameterWithBindingPattern1.js.map \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern1.js.map b/tests/baselines/reference/restParameterWithBindingPattern1.js.map new file mode 100644 index 0000000000000..94c277257b9fd --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern1.js.map @@ -0,0 +1,2 @@ +//// [restParameterWithBindingPattern1.js.map] +{"version":3,"file":"restParameterWithBindingPattern1.js","sourceRoot":"","sources":["restParameterWithBindingPattern1.ts"],"names":[],"mappings":"AAAA,SAAS,CAAC;IAAC,YAAS;SAAT,UAAS,EAAT,qBAAS,EAAT,IAAS;QAAT,uBAAS;;IAAT,IAAI,QAAC,EAAE,QAAC,CAAC;AAAI,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern1.sourcemap.txt b/tests/baselines/reference/restParameterWithBindingPattern1.sourcemap.txt new file mode 100644 index 0000000000000..a5aa2351bc08b --- /dev/null +++ b/tests/baselines/reference/restParameterWithBindingPattern1.sourcemap.txt @@ -0,0 +1,90 @@ +=================================================================== +JsFile: restParameterWithBindingPattern1.js +mapUrl: restParameterWithBindingPattern1.js.map +sourceRoot: +sources: restParameterWithBindingPattern1.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/restParameterWithBindingPattern1.js +sourceFile:restParameterWithBindingPattern1.ts +------------------------------------------------------------------- +>>>function a() { +1 > +2 >^^^^^^^^^ +3 > ^ +4 > ^^^^^^^-> +1 > +2 >function +3 > a +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 10) Source(1, 10) + SourceIndex(0) +3 >Emitted(1, 11) Source(1, 11) + SourceIndex(0) +--- +>>> var _a = []; +1->^^^^ +2 > ^^^^^^^^^^^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1->( +2 > ...{a, b} +1->Emitted(2, 5) Source(1, 12) + SourceIndex(0) +2 >Emitted(2, 17) Source(1, 21) + SourceIndex(0) +--- +>>> for (var _i = 0; _i < arguments.length; _i++) { +1->^^^^^^^^^ +2 > ^^^^^^^^^^ +3 > ^^ +4 > ^^^^^^^^^^^^^^^^^^^^^ +5 > ^^ +6 > ^^^^ +1-> +2 > ...{a, b} +3 > +4 > ...{a, b} +5 > +6 > ...{a, b} +1->Emitted(3, 10) Source(1, 12) + SourceIndex(0) +2 >Emitted(3, 20) Source(1, 21) + SourceIndex(0) +3 >Emitted(3, 22) Source(1, 12) + SourceIndex(0) +4 >Emitted(3, 43) Source(1, 21) + SourceIndex(0) +5 >Emitted(3, 45) Source(1, 12) + SourceIndex(0) +6 >Emitted(3, 49) Source(1, 21) + SourceIndex(0) +--- +>>> _a[_i] = arguments[_i]; +1 >^^^^^^^^ +2 > ^^^^^^^^^^^^^^^^^^^^^^^ +1 > +2 > ...{a, b} +1 >Emitted(4, 9) Source(1, 12) + SourceIndex(0) +2 >Emitted(4, 32) Source(1, 21) + SourceIndex(0) +--- +>>> } +>>> var a = _a.a, b = _a.b; +1 >^^^^ +2 > ^^^^ +3 > ^^^^^^^^ +4 > ^^ +5 > ^^^^^^^^ +6 > ^ +1 > +2 > ...{ +3 > a +4 > , +5 > b +6 > } +1 >Emitted(6, 5) Source(1, 12) + SourceIndex(0) +2 >Emitted(6, 9) Source(1, 16) + SourceIndex(0) +3 >Emitted(6, 17) Source(1, 17) + SourceIndex(0) +4 >Emitted(6, 19) Source(1, 19) + SourceIndex(0) +5 >Emitted(6, 27) Source(1, 20) + SourceIndex(0) +6 >Emitted(6, 28) Source(1, 21) + SourceIndex(0) +--- +>>>} +1 > +2 >^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >) { +2 >} +1 >Emitted(7, 1) Source(1, 25) + SourceIndex(0) +2 >Emitted(7, 2) Source(1, 26) + SourceIndex(0) +--- +>>>//# sourceMappingURL=restParameterWithBindingPattern1.js.map \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt index ea6bda983d838..2ad62269f50aa 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt +++ b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt @@ -2,9 +2,12 @@ tests/cases/compiler/restParameterWithBindingPattern3.ts(1,16): error TS2322: Ty tests/cases/compiler/restParameterWithBindingPattern3.ts(1,23): error TS2322: Type 'true' is not assignable to type 'string'. tests/cases/compiler/restParameterWithBindingPattern3.ts(3,23): error TS1186: A rest element cannot have an initializer. tests/cases/compiler/restParameterWithBindingPattern3.ts(7,23): error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(9,19): error TS2322: Type '1' is not assignable to type 'boolean'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(9,29): error TS2322: Type 'true' is not assignable to type 'string'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(9,48): error TS2566: A rest element cannot have a property name. -==== tests/cases/compiler/restParameterWithBindingPattern3.ts (4 errors) ==== +==== tests/cases/compiler/restParameterWithBindingPattern3.ts (7 errors) ==== function a(...[a = 1, b = true]: string[]) { } ~ !!! error TS2322: Type '1' is not assignable to type 'string'. @@ -19,4 +22,12 @@ tests/cases/compiler/restParameterWithBindingPattern3.ts(7,23): error TS2493: Tu function d(...[a, , , d]: [boolean, string, number]) { } ~ -!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. \ No newline at end of file +!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. + + function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } + ~ +!!! error TS2322: Type '1' is not assignable to type 'boolean'. + ~ +!!! error TS2322: Type 'true' is not assignable to type 'string'. + ~~~~ +!!! error TS2566: A rest element cannot have a property name. \ No newline at end of file diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.js b/tests/baselines/reference/restParameterWithBindingPattern3.js index da3531633b6b7..00342e7f741c5 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.js +++ b/tests/baselines/reference/restParameterWithBindingPattern3.js @@ -5,9 +5,20 @@ function b(...[...foo = []]: string[]) { } function c(...{0: a, length, 3: d}: [boolean, string, number]) { } -function d(...[a, , , d]: [boolean, string, number]) { } +function d(...[a, , , d]: [boolean, string, number]) { } + +function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } //// [restParameterWithBindingPattern3.js] +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; function a() { var _a = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -36,3 +47,10 @@ function d() { } var a = _a[0], d = _a[3]; } +function e() { + var _a = []; + for (var _i = 0; _i < arguments.length; _i++) { + _a[_i] = arguments[_i]; + } + var _b = _a[0], a = _b === void 0 ? 1 : _b, _c = _a[1], b = _c === void 0 ? true : _c, rest = __rest(_a, [0, 1]); +} diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.symbols b/tests/baselines/reference/restParameterWithBindingPattern3.symbols index 2694c7327dac3..eecaba6d3392c 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.symbols +++ b/tests/baselines/reference/restParameterWithBindingPattern3.symbols @@ -19,3 +19,9 @@ function d(...[a, , , d]: [boolean, string, number]) { } >a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 6, 15)) >d : Symbol(d, Decl(restParameterWithBindingPattern3.ts, 6, 21)) +function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } +>e : Symbol(e, Decl(restParameterWithBindingPattern3.ts, 6, 56)) +>a : Symbol(a, Decl(restParameterWithBindingPattern3.ts, 8, 15)) +>b : Symbol(b, Decl(restParameterWithBindingPattern3.ts, 8, 24)) +>rest : Symbol(rest, Decl(restParameterWithBindingPattern3.ts, 8, 37)) + diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.types b/tests/baselines/reference/restParameterWithBindingPattern3.types index 7ab8bdf621a2a..95a058dfe5c00 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.types +++ b/tests/baselines/reference/restParameterWithBindingPattern3.types @@ -24,3 +24,12 @@ function d(...[a, , , d]: [boolean, string, number]) { } > : undefined >d : any +function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } +>e : (__0_0: boolean, __0_1: string, __0_2: number) => void +>a : boolean +>1 : 1 +>b : string +>true : true +>rest : any +>rest : { [n: number]: string | number | boolean; 2: number; length: 3; toString(): string; toLocaleString(): string; pop(): string | number | boolean; push(...items: (string | number | boolean)[]): number; concat(...items: ConcatArray[]): (string | number | boolean)[]; concat(...items: (string | number | boolean | ConcatArray)[]): (string | number | boolean)[]; join(separator?: string): string; reverse(): (string | number | boolean)[]; shift(): string | number | boolean; slice(start?: number, end?: number): (string | number | boolean)[]; sort(compareFn?: (a: string | number | boolean, b: string | number | boolean) => number): [boolean, string, number]; splice(start: number, deleteCount?: number): (string | number | boolean)[]; splice(start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; unshift(...items: (string | number | boolean)[]): number; indexOf(searchElement: string | number | boolean, fromIndex?: number): number; lastIndexOf(searchElement: string | number | boolean, fromIndex?: number): number; every(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; some(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; forEach(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any): void; map(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any): U[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => any, thisArg?: any): (string | number | boolean)[]; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; } + diff --git a/tests/cases/compiler/restParameterWithBindingPattern1.ts b/tests/cases/compiler/restParameterWithBindingPattern1.ts index 1004b0478440a..bd6a3b9bbda64 100644 --- a/tests/cases/compiler/restParameterWithBindingPattern1.ts +++ b/tests/cases/compiler/restParameterWithBindingPattern1.ts @@ -1 +1,3 @@ +// @sourcemap: true + function a(...{a, b}) { } \ No newline at end of file diff --git a/tests/cases/compiler/restParameterWithBindingPattern3.ts b/tests/cases/compiler/restParameterWithBindingPattern3.ts index 93d0daae53856..f0792354c40dd 100644 --- a/tests/cases/compiler/restParameterWithBindingPattern3.ts +++ b/tests/cases/compiler/restParameterWithBindingPattern3.ts @@ -4,4 +4,6 @@ function b(...[...foo = []]: string[]) { } function c(...{0: a, length, 3: d}: [boolean, string, number]) { } -function d(...[a, , , d]: [boolean, string, number]) { } \ No newline at end of file +function d(...[a, , , d]: [boolean, string, number]) { } + +function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } \ No newline at end of file From e68f495b44e7306bd138679cbd7170ffe5def689 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Thu, 3 Jan 2019 17:51:13 +0100 Subject: [PATCH 6/6] update baselines --- .../reference/iterableArrayPattern28.errors.txt | 1 - .../restParameterWithBindingPattern3.errors.txt | 9 ++++++--- .../reference/restParameterWithBindingPattern3.types | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/baselines/reference/iterableArrayPattern28.errors.txt b/tests/baselines/reference/iterableArrayPattern28.errors.txt index 886dce4ca1653..f90bba07c1a19 100644 --- a/tests/baselines/reference/iterableArrayPattern28.errors.txt +++ b/tests/baselines/reference/iterableArrayPattern28.errors.txt @@ -1,4 +1,3 @@ -tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts(1,33): error TS2501: A rest element cannot contain a binding pattern. tests/cases/conformance/es6/destructuring/iterableArrayPattern28.ts(2,52): error TS2322: Type 'true' is not assignable to type 'number'. diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt index 2ad62269f50aa..96f066ca194ad 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt +++ b/tests/baselines/reference/restParameterWithBindingPattern3.errors.txt @@ -1,13 +1,14 @@ tests/cases/compiler/restParameterWithBindingPattern3.ts(1,16): error TS2322: Type '1' is not assignable to type 'string'. tests/cases/compiler/restParameterWithBindingPattern3.ts(1,23): error TS2322: Type 'true' is not assignable to type 'string'. tests/cases/compiler/restParameterWithBindingPattern3.ts(3,23): error TS1186: A rest element cannot have an initializer. -tests/cases/compiler/restParameterWithBindingPattern3.ts(7,23): error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(5,30): error TS2493: Tuple type '[boolean, string, number]' of length '3' has no element at index '3'. +tests/cases/compiler/restParameterWithBindingPattern3.ts(7,23): error TS2493: Tuple type '[boolean, string, number]' of length '3' has no element at index '3'. tests/cases/compiler/restParameterWithBindingPattern3.ts(9,19): error TS2322: Type '1' is not assignable to type 'boolean'. tests/cases/compiler/restParameterWithBindingPattern3.ts(9,29): error TS2322: Type 'true' is not assignable to type 'string'. tests/cases/compiler/restParameterWithBindingPattern3.ts(9,48): error TS2566: A rest element cannot have a property name. -==== tests/cases/compiler/restParameterWithBindingPattern3.ts (7 errors) ==== +==== tests/cases/compiler/restParameterWithBindingPattern3.ts (8 errors) ==== function a(...[a = 1, b = true]: string[]) { } ~ !!! error TS2322: Type '1' is not assignable to type 'string'. @@ -19,10 +20,12 @@ tests/cases/compiler/restParameterWithBindingPattern3.ts(9,48): error TS2566: A !!! error TS1186: A rest element cannot have an initializer. function c(...{0: a, length, 3: d}: [boolean, string, number]) { } + ~ +!!! error TS2493: Tuple type '[boolean, string, number]' of length '3' has no element at index '3'. function d(...[a, , , d]: [boolean, string, number]) { } ~ -!!! error TS2493: Tuple type '[boolean, string, number]' with length '3' cannot be assigned to tuple with length '4'. +!!! error TS2493: Tuple type '[boolean, string, number]' of length '3' has no element at index '3'. function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } ~ diff --git a/tests/baselines/reference/restParameterWithBindingPattern3.types b/tests/baselines/reference/restParameterWithBindingPattern3.types index 95a058dfe5c00..1385bde0c3fae 100644 --- a/tests/baselines/reference/restParameterWithBindingPattern3.types +++ b/tests/baselines/reference/restParameterWithBindingPattern3.types @@ -15,14 +15,14 @@ function c(...{0: a, length, 3: d}: [boolean, string, number]) { } >c : (__0_0: boolean, __0_1: string, __0_2: number) => void >a : boolean >length : 3 ->d : string | number | boolean +>d : undefined function d(...[a, , , d]: [boolean, string, number]) { } >d : (__0_0: boolean, __0_1: string, __0_2: number) => void >a : boolean > : undefined > : undefined ->d : any +>d : undefined function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) { } >e : (__0_0: boolean, __0_1: string, __0_2: number) => void @@ -31,5 +31,5 @@ function e(...{0: a = 1, 1: b = true, ...rest: rest}: [boolean, string, number]) >b : string >true : true >rest : any ->rest : { [n: number]: string | number | boolean; 2: number; length: 3; toString(): string; toLocaleString(): string; pop(): string | number | boolean; push(...items: (string | number | boolean)[]): number; concat(...items: ConcatArray[]): (string | number | boolean)[]; concat(...items: (string | number | boolean | ConcatArray)[]): (string | number | boolean)[]; join(separator?: string): string; reverse(): (string | number | boolean)[]; shift(): string | number | boolean; slice(start?: number, end?: number): (string | number | boolean)[]; sort(compareFn?: (a: string | number | boolean, b: string | number | boolean) => number): [boolean, string, number]; splice(start: number, deleteCount?: number): (string | number | boolean)[]; splice(start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; unshift(...items: (string | number | boolean)[]): number; indexOf(searchElement: string | number | boolean, fromIndex?: number): number; lastIndexOf(searchElement: string | number | boolean, fromIndex?: number): number; every(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; some(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; forEach(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any): void; map(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any): U[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => any, thisArg?: any): (string | number | boolean)[]; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; } +>rest : { [n: number]: string | number | boolean; 0: boolean; 1: string; 2: number; length: 3; toString(): string; toLocaleString(): string; pop(): string | number | boolean; push(...items: (string | number | boolean)[]): number; concat(...items: ConcatArray[]): (string | number | boolean)[]; concat(...items: (string | number | boolean | ConcatArray)[]): (string | number | boolean)[]; join(separator?: string): string; reverse(): (string | number | boolean)[]; shift(): string | number | boolean; slice(start?: number, end?: number): (string | number | boolean)[]; sort(compareFn?: (a: string | number | boolean, b: string | number | boolean) => number): [boolean, string, number]; splice(start: number, deleteCount?: number): (string | number | boolean)[]; splice(start: number, deleteCount: number, ...items: (string | number | boolean)[]): (string | number | boolean)[]; unshift(...items: (string | number | boolean)[]): number; indexOf(searchElement: string | number | boolean, fromIndex?: number): number; lastIndexOf(searchElement: string | number | boolean, fromIndex?: number): number; every(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; some(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => boolean, thisArg?: any): boolean; forEach(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => void, thisArg?: any): void; map(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => U, thisArg?: any): U[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => value is S, thisArg?: any): S[]; filter(callbackfn: (value: string | number | boolean, index: number, array: (string | number | boolean)[]) => any, thisArg?: any): (string | number | boolean)[]; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduce(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: string | number | boolean, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => string | number | boolean, initialValue: string | number | boolean): string | number | boolean; reduceRight(callbackfn: (previousValue: U, currentValue: string | number | boolean, currentIndex: number, array: (string | number | boolean)[]) => U, initialValue: U): U; }