From 8c1f5da76a6c48f57744d44053a61529ea85e40b Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 5 May 2015 16:54:51 -0700 Subject: [PATCH] Always call getReturnTypeOfSignature on a generator from checkFunctionLikeDeclaration --- src/compiler/checker.ts | 40 +++++++++------- .../YieldExpression10_es6.errors.txt | 5 +- .../YieldExpression11_es6.errors.txt | 5 +- .../reference/YieldExpression6_es6.errors.txt | 5 +- .../reference/YieldExpression9_es6.errors.txt | 5 +- .../YieldStarExpression4_es6.errors.txt | 5 +- .../reference/generatorES6_5.errors.txt | 15 ++++++ .../reference/generatorES6_5.symbols | 6 --- .../baselines/reference/generatorES6_5.types | 11 ----- .../reference/generatorTypeCheck22.errors.txt | 16 +++++++ .../reference/generatorTypeCheck22.symbols | 30 ------------ .../reference/generatorTypeCheck22.types | 42 ---------------- .../reference/generatorTypeCheck23.errors.txt | 17 +++++++ .../reference/generatorTypeCheck23.symbols | 33 ------------- .../reference/generatorTypeCheck23.types | 47 ------------------ .../reference/generatorTypeCheck24.errors.txt | 17 +++++++ .../reference/generatorTypeCheck24.symbols | 33 ------------- .../reference/generatorTypeCheck24.types | 48 ------------------- .../reference/generatorTypeCheck52.errors.txt | 12 +++++ .../reference/generatorTypeCheck52.js | 17 +++++++ .../reference/generatorTypeCheck53.errors.txt | 12 +++++ .../reference/generatorTypeCheck53.js | 17 +++++++ .../reference/generatorTypeCheck54.errors.txt | 12 +++++ .../reference/generatorTypeCheck54.js | 17 +++++++ .../yieldExpressions/generatorTypeCheck52.ts | 7 +++ .../yieldExpressions/generatorTypeCheck53.ts | 7 +++ .../yieldExpressions/generatorTypeCheck54.ts | 7 +++ 27 files changed, 216 insertions(+), 272 deletions(-) create mode 100644 tests/baselines/reference/generatorES6_5.errors.txt delete mode 100644 tests/baselines/reference/generatorES6_5.symbols delete mode 100644 tests/baselines/reference/generatorES6_5.types create mode 100644 tests/baselines/reference/generatorTypeCheck22.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck22.symbols delete mode 100644 tests/baselines/reference/generatorTypeCheck22.types create mode 100644 tests/baselines/reference/generatorTypeCheck23.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck23.symbols delete mode 100644 tests/baselines/reference/generatorTypeCheck23.types create mode 100644 tests/baselines/reference/generatorTypeCheck24.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck24.symbols delete mode 100644 tests/baselines/reference/generatorTypeCheck24.types create mode 100644 tests/baselines/reference/generatorTypeCheck52.errors.txt create mode 100644 tests/baselines/reference/generatorTypeCheck52.js create mode 100644 tests/baselines/reference/generatorTypeCheck53.errors.txt create mode 100644 tests/baselines/reference/generatorTypeCheck53.js create mode 100644 tests/baselines/reference/generatorTypeCheck54.errors.txt create mode 100644 tests/baselines/reference/generatorTypeCheck54.js create mode 100644 tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts create mode 100644 tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ef222898970..5220b42a8e9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8014,18 +8014,23 @@ module ts { let func = getContainingFunction(node); // If this is correct code, the func should always have a star. After all, // we are in a yield context. - // Also, there is no point in doing an assignability check if the function - // has no explicit return type, because the return type is directly computed - // from the yield expressions. - if (func && func.asteriskToken && func.type) { - let signatureElementType = getElementTypeFromIterableIterator(getTypeFromTypeNode(func.type), /*errorNode*/ undefined) || unknownType; + if (func && func.asteriskToken) { let expressionType = checkExpressionCached(node.expression, /*contextualMapper*/ undefined); + let expressionElementType: Type; if (node.asteriskToken) { - let expressionElementType = checkElementTypeOfIterable(expressionType, node.expression); - checkTypeAssignableTo(expressionElementType, signatureElementType, node.expression, /*headMessage*/ undefined); + expressionElementType = checkElementTypeOfIterable(expressionType, node.expression); } - else { - checkTypeAssignableTo(expressionType, signatureElementType, node.expression, /*headMessage*/ undefined); + // There is no point in doing an assignability check if the function + // has no explicit return type, because the return type is directly computed + // from the yield expressions. + if (func.type) { + let signatureElementType = getElementTypeFromIterableIterator(getTypeFromTypeNode(func.type), /*errorNode*/ undefined) || unknownType; + if (node.asteriskToken) { + checkTypeAssignableTo(expressionElementType, signatureElementType, node.expression, /*headMessage*/ undefined); + } + else { + checkTypeAssignableTo(expressionType, signatureElementType, node.expression, /*headMessage*/ undefined); + } } } } @@ -9108,16 +9113,17 @@ module ts { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); } - // Report an implicit any error if there is no body, no explicit return type, and node is not a private method - // in an ambient context - if (produceDiagnostics && compilerOptions.noImplicitAny && !node.type && !isPrivateWithinAmbient(node)) { - if (nodeIsMissing(node.body)) { + if (produceDiagnostics && !node.type) { + // Report an implicit any error if there is no body, no explicit return type, and node is not a private method + // in an ambient context + if (compilerOptions.noImplicitAny && nodeIsMissing(node.body) && !isPrivateWithinAmbient(node)) { reportImplicitAnyError(node, anyType); } - else if (node.asteriskToken) { - // A generator with a body and no type annotation can still cause an implicit any if it is has - // no yield expressions, or its yield expressions do not have operands. The only way to find out - // is to try checking its return type. + + if (node.asteriskToken && nodeIsPresent(node.body)) { + // A generator with a body and no type annotation can still cause errors. It can error if the + // yielded values have no common supertype, or it can give an implicit any error if it has no + // yielded values. The only way to trigger these errors is to try checking its return type. getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } diff --git a/tests/baselines/reference/YieldExpression10_es6.errors.txt b/tests/baselines/reference/YieldExpression10_es6.errors.txt index 012cc92f4f2..a4bf2a8eb8f 100644 --- a/tests/baselines/reference/YieldExpression10_es6.errors.txt +++ b/tests/baselines/reference/YieldExpression10_es6.errors.txt @@ -1,11 +1,14 @@ tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts(1,11): error TS1219: Generators are only available when targeting ECMAScript 6 or higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts(2,11): error TS2304: Cannot find name 'foo'. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts (2 errors) ==== var v = { * foo() { ~ !!! error TS1219: Generators are only available when targeting ECMAScript 6 or higher. yield(foo); + ~~~ +!!! error TS2304: Cannot find name 'foo'. } } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression11_es6.errors.txt b/tests/baselines/reference/YieldExpression11_es6.errors.txt index 810928bf913..1272295fe5f 100644 --- a/tests/baselines/reference/YieldExpression11_es6.errors.txt +++ b/tests/baselines/reference/YieldExpression11_es6.errors.txt @@ -1,11 +1,14 @@ tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts(2,3): error TS1219: Generators are only available when targeting ECMAScript 6 or higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts(3,11): error TS2304: Cannot find name 'foo'. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression11_es6.ts (2 errors) ==== class C { *foo() { ~ !!! error TS1219: Generators are only available when targeting ECMAScript 6 or higher. yield(foo); + ~~~ +!!! error TS2304: Cannot find name 'foo'. } } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression6_es6.errors.txt b/tests/baselines/reference/YieldExpression6_es6.errors.txt index 877c6aeb0ee..a90cc45d24f 100644 --- a/tests/baselines/reference/YieldExpression6_es6.errors.txt +++ b/tests/baselines/reference/YieldExpression6_es6.errors.txt @@ -1,9 +1,12 @@ tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts(1,9): error TS1219: Generators are only available when targeting ECMAScript 6 or higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts(2,9): error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression6_es6.ts (2 errors) ==== function* foo() { ~ !!! error TS1219: Generators are only available when targeting ECMAScript 6 or higher. yield*foo + ~~~ +!!! error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator. } \ No newline at end of file diff --git a/tests/baselines/reference/YieldExpression9_es6.errors.txt b/tests/baselines/reference/YieldExpression9_es6.errors.txt index a7e53670d0d..2bd42847e64 100644 --- a/tests/baselines/reference/YieldExpression9_es6.errors.txt +++ b/tests/baselines/reference/YieldExpression9_es6.errors.txt @@ -1,9 +1,12 @@ tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts(1,17): error TS1219: Generators are only available when targeting ECMAScript 6 or higher. +tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts(2,9): error TS2304: Cannot find name 'foo'. -==== tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts (2 errors) ==== var v = function*() { ~ !!! error TS1219: Generators are only available when targeting ECMAScript 6 or higher. yield(foo); + ~~~ +!!! error TS2304: Cannot find name 'foo'. } \ No newline at end of file diff --git a/tests/baselines/reference/YieldStarExpression4_es6.errors.txt b/tests/baselines/reference/YieldStarExpression4_es6.errors.txt index 15b9c863e62..6247a366ba8 100644 --- a/tests/baselines/reference/YieldStarExpression4_es6.errors.txt +++ b/tests/baselines/reference/YieldStarExpression4_es6.errors.txt @@ -1,9 +1,12 @@ tests/cases/conformance/es6/yieldExpressions/YieldStarExpression4_es6.ts(1,10): error TS1219: Generators are only available when targeting ECMAScript 6 or higher. +tests/cases/conformance/es6/yieldExpressions/YieldStarExpression4_es6.ts(2,13): error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator. -==== tests/cases/conformance/es6/yieldExpressions/YieldStarExpression4_es6.ts (1 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/YieldStarExpression4_es6.ts (2 errors) ==== function *g() { ~ !!! error TS1219: Generators are only available when targeting ECMAScript 6 or higher. yield * []; + ~~ +!!! error TS2488: Type must have a '[Symbol.iterator]()' method that returns an iterator. } \ No newline at end of file diff --git a/tests/baselines/reference/generatorES6_5.errors.txt b/tests/baselines/reference/generatorES6_5.errors.txt new file mode 100644 index 00000000000..20e6f3abe9f --- /dev/null +++ b/tests/baselines/reference/generatorES6_5.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/generatorES6_5.ts(2,11): error TS2304: Cannot find name 'a'. +tests/cases/compiler/generatorES6_5.ts(2,15): error TS2304: Cannot find name 'b'. +tests/cases/compiler/generatorES6_5.ts(2,19): error TS2304: Cannot find name 'c'. + + +==== tests/cases/compiler/generatorES6_5.ts (3 errors) ==== + function* foo() { + yield a ? b : c; + ~ +!!! error TS2304: Cannot find name 'a'. + ~ +!!! error TS2304: Cannot find name 'b'. + ~ +!!! error TS2304: Cannot find name 'c'. + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorES6_5.symbols b/tests/baselines/reference/generatorES6_5.symbols deleted file mode 100644 index 7ed7fe3ab8c..00000000000 --- a/tests/baselines/reference/generatorES6_5.symbols +++ /dev/null @@ -1,6 +0,0 @@ -=== tests/cases/compiler/generatorES6_5.ts === -function* foo() { ->foo : Symbol(foo, Decl(generatorES6_5.ts, 0, 0)) - - yield a ? b : c; -} diff --git a/tests/baselines/reference/generatorES6_5.types b/tests/baselines/reference/generatorES6_5.types deleted file mode 100644 index 12396f69e24..00000000000 --- a/tests/baselines/reference/generatorES6_5.types +++ /dev/null @@ -1,11 +0,0 @@ -=== tests/cases/compiler/generatorES6_5.ts === -function* foo() { ->foo : () => IterableIterator - - yield a ? b : c; ->yield a ? b : c : any ->a ? b : c : any ->a : any ->b : any ->c : any -} diff --git a/tests/baselines/reference/generatorTypeCheck22.errors.txt b/tests/baselines/reference/generatorTypeCheck22.errors.txt new file mode 100644 index 00000000000..dea4d8d6587 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck22.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck22.ts(4,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck22.ts (1 errors) ==== + class Foo { x: number } + class Bar extends Foo { y: string } + class Baz { z: number } + function* g3() { + ~~ +!!! error TS2503: No best common type exists among yield expressions. + yield; + yield new Bar; + yield new Baz; + yield *[new Bar]; + yield *[new Baz]; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck22.symbols b/tests/baselines/reference/generatorTypeCheck22.symbols deleted file mode 100644 index 24ed2f13404..00000000000 --- a/tests/baselines/reference/generatorTypeCheck22.symbols +++ /dev/null @@ -1,30 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck22.ts === -class Foo { x: number } ->Foo : Symbol(Foo, Decl(generatorTypeCheck22.ts, 0, 0)) ->x : Symbol(x, Decl(generatorTypeCheck22.ts, 0, 11)) - -class Bar extends Foo { y: string } ->Bar : Symbol(Bar, Decl(generatorTypeCheck22.ts, 0, 23)) ->Foo : Symbol(Foo, Decl(generatorTypeCheck22.ts, 0, 0)) ->y : Symbol(y, Decl(generatorTypeCheck22.ts, 1, 23)) - -class Baz { z: number } ->Baz : Symbol(Baz, Decl(generatorTypeCheck22.ts, 1, 35)) ->z : Symbol(z, Decl(generatorTypeCheck22.ts, 2, 11)) - -function* g3() { ->g3 : Symbol(g3, Decl(generatorTypeCheck22.ts, 2, 23)) - - yield; - yield new Bar; ->Bar : Symbol(Bar, Decl(generatorTypeCheck22.ts, 0, 23)) - - yield new Baz; ->Baz : Symbol(Baz, Decl(generatorTypeCheck22.ts, 1, 35)) - - yield *[new Bar]; ->Bar : Symbol(Bar, Decl(generatorTypeCheck22.ts, 0, 23)) - - yield *[new Baz]; ->Baz : Symbol(Baz, Decl(generatorTypeCheck22.ts, 1, 35)) -} diff --git a/tests/baselines/reference/generatorTypeCheck22.types b/tests/baselines/reference/generatorTypeCheck22.types deleted file mode 100644 index 897d5f9400c..00000000000 --- a/tests/baselines/reference/generatorTypeCheck22.types +++ /dev/null @@ -1,42 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck22.ts === -class Foo { x: number } ->Foo : Foo ->x : number - -class Bar extends Foo { y: string } ->Bar : Bar ->Foo : Foo ->y : string - -class Baz { z: number } ->Baz : Baz ->z : number - -function* g3() { ->g3 : () => IterableIterator - - yield; ->yield : any - - yield new Bar; ->yield new Bar : any ->new Bar : Bar ->Bar : typeof Bar - - yield new Baz; ->yield new Baz : any ->new Baz : Baz ->Baz : typeof Baz - - yield *[new Bar]; ->yield *[new Bar] : any ->[new Bar] : Bar[] ->new Bar : Bar ->Bar : typeof Bar - - yield *[new Baz]; ->yield *[new Baz] : any ->[new Baz] : Baz[] ->new Baz : Baz ->Baz : typeof Baz -} diff --git a/tests/baselines/reference/generatorTypeCheck23.errors.txt b/tests/baselines/reference/generatorTypeCheck23.errors.txt new file mode 100644 index 00000000000..b9a459a09b9 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck23.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck23.ts(4,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck23.ts (1 errors) ==== + class Foo { x: number } + class Bar extends Foo { y: string } + class Baz { z: number } + function* g3() { + ~~ +!!! error TS2503: No best common type exists among yield expressions. + yield; + yield new Foo; + yield new Bar; + yield new Baz; + yield *[new Bar]; + yield *[new Baz]; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck23.symbols b/tests/baselines/reference/generatorTypeCheck23.symbols deleted file mode 100644 index f0ce785a845..00000000000 --- a/tests/baselines/reference/generatorTypeCheck23.symbols +++ /dev/null @@ -1,33 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck23.ts === -class Foo { x: number } ->Foo : Symbol(Foo, Decl(generatorTypeCheck23.ts, 0, 0)) ->x : Symbol(x, Decl(generatorTypeCheck23.ts, 0, 11)) - -class Bar extends Foo { y: string } ->Bar : Symbol(Bar, Decl(generatorTypeCheck23.ts, 0, 23)) ->Foo : Symbol(Foo, Decl(generatorTypeCheck23.ts, 0, 0)) ->y : Symbol(y, Decl(generatorTypeCheck23.ts, 1, 23)) - -class Baz { z: number } ->Baz : Symbol(Baz, Decl(generatorTypeCheck23.ts, 1, 35)) ->z : Symbol(z, Decl(generatorTypeCheck23.ts, 2, 11)) - -function* g3() { ->g3 : Symbol(g3, Decl(generatorTypeCheck23.ts, 2, 23)) - - yield; - yield new Foo; ->Foo : Symbol(Foo, Decl(generatorTypeCheck23.ts, 0, 0)) - - yield new Bar; ->Bar : Symbol(Bar, Decl(generatorTypeCheck23.ts, 0, 23)) - - yield new Baz; ->Baz : Symbol(Baz, Decl(generatorTypeCheck23.ts, 1, 35)) - - yield *[new Bar]; ->Bar : Symbol(Bar, Decl(generatorTypeCheck23.ts, 0, 23)) - - yield *[new Baz]; ->Baz : Symbol(Baz, Decl(generatorTypeCheck23.ts, 1, 35)) -} diff --git a/tests/baselines/reference/generatorTypeCheck23.types b/tests/baselines/reference/generatorTypeCheck23.types deleted file mode 100644 index 47df973efb9..00000000000 --- a/tests/baselines/reference/generatorTypeCheck23.types +++ /dev/null @@ -1,47 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck23.ts === -class Foo { x: number } ->Foo : Foo ->x : number - -class Bar extends Foo { y: string } ->Bar : Bar ->Foo : Foo ->y : string - -class Baz { z: number } ->Baz : Baz ->z : number - -function* g3() { ->g3 : () => IterableIterator - - yield; ->yield : any - - yield new Foo; ->yield new Foo : any ->new Foo : Foo ->Foo : typeof Foo - - yield new Bar; ->yield new Bar : any ->new Bar : Bar ->Bar : typeof Bar - - yield new Baz; ->yield new Baz : any ->new Baz : Baz ->Baz : typeof Baz - - yield *[new Bar]; ->yield *[new Bar] : any ->[new Bar] : Bar[] ->new Bar : Bar ->Bar : typeof Bar - - yield *[new Baz]; ->yield *[new Baz] : any ->[new Baz] : Baz[] ->new Baz : Baz ->Baz : typeof Baz -} diff --git a/tests/baselines/reference/generatorTypeCheck24.errors.txt b/tests/baselines/reference/generatorTypeCheck24.errors.txt new file mode 100644 index 00000000000..04e876977e3 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck24.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck24.ts(4,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck24.ts (1 errors) ==== + class Foo { x: number } + class Bar extends Foo { y: string } + class Baz { z: number } + function* g3() { + ~~ +!!! error TS2503: No best common type exists among yield expressions. + yield; + yield * [new Foo]; + yield new Bar; + yield new Baz; + yield *[new Bar]; + yield *[new Baz]; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck24.symbols b/tests/baselines/reference/generatorTypeCheck24.symbols deleted file mode 100644 index db8be576a99..00000000000 --- a/tests/baselines/reference/generatorTypeCheck24.symbols +++ /dev/null @@ -1,33 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck24.ts === -class Foo { x: number } ->Foo : Symbol(Foo, Decl(generatorTypeCheck24.ts, 0, 0)) ->x : Symbol(x, Decl(generatorTypeCheck24.ts, 0, 11)) - -class Bar extends Foo { y: string } ->Bar : Symbol(Bar, Decl(generatorTypeCheck24.ts, 0, 23)) ->Foo : Symbol(Foo, Decl(generatorTypeCheck24.ts, 0, 0)) ->y : Symbol(y, Decl(generatorTypeCheck24.ts, 1, 23)) - -class Baz { z: number } ->Baz : Symbol(Baz, Decl(generatorTypeCheck24.ts, 1, 35)) ->z : Symbol(z, Decl(generatorTypeCheck24.ts, 2, 11)) - -function* g3() { ->g3 : Symbol(g3, Decl(generatorTypeCheck24.ts, 2, 23)) - - yield; - yield * [new Foo]; ->Foo : Symbol(Foo, Decl(generatorTypeCheck24.ts, 0, 0)) - - yield new Bar; ->Bar : Symbol(Bar, Decl(generatorTypeCheck24.ts, 0, 23)) - - yield new Baz; ->Baz : Symbol(Baz, Decl(generatorTypeCheck24.ts, 1, 35)) - - yield *[new Bar]; ->Bar : Symbol(Bar, Decl(generatorTypeCheck24.ts, 0, 23)) - - yield *[new Baz]; ->Baz : Symbol(Baz, Decl(generatorTypeCheck24.ts, 1, 35)) -} diff --git a/tests/baselines/reference/generatorTypeCheck24.types b/tests/baselines/reference/generatorTypeCheck24.types deleted file mode 100644 index a82470b23b6..00000000000 --- a/tests/baselines/reference/generatorTypeCheck24.types +++ /dev/null @@ -1,48 +0,0 @@ -=== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck24.ts === -class Foo { x: number } ->Foo : Foo ->x : number - -class Bar extends Foo { y: string } ->Bar : Bar ->Foo : Foo ->y : string - -class Baz { z: number } ->Baz : Baz ->z : number - -function* g3() { ->g3 : () => IterableIterator - - yield; ->yield : any - - yield * [new Foo]; ->yield * [new Foo] : any ->[new Foo] : Foo[] ->new Foo : Foo ->Foo : typeof Foo - - yield new Bar; ->yield new Bar : any ->new Bar : Bar ->Bar : typeof Bar - - yield new Baz; ->yield new Baz : any ->new Baz : Baz ->Baz : typeof Baz - - yield *[new Bar]; ->yield *[new Bar] : any ->[new Bar] : Bar[] ->new Bar : Bar ->Bar : typeof Bar - - yield *[new Baz]; ->yield *[new Baz] : any ->[new Baz] : Baz[] ->new Baz : Baz ->Baz : typeof Baz -} diff --git a/tests/baselines/reference/generatorTypeCheck52.errors.txt b/tests/baselines/reference/generatorTypeCheck52.errors.txt new file mode 100644 index 00000000000..2308e115bd7 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck52.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts(3,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts (1 errors) ==== + class Foo { x: number } + class Baz { z: number } + function* g() { + ~ +!!! error TS2503: No best common type exists among yield expressions. + yield new Foo; + yield new Baz; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck52.js b/tests/baselines/reference/generatorTypeCheck52.js new file mode 100644 index 00000000000..751e12c471f --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck52.js @@ -0,0 +1,17 @@ +//// [generatorTypeCheck52.ts] +class Foo { x: number } +class Baz { z: number } +function* g() { + yield new Foo; + yield new Baz; +} + +//// [generatorTypeCheck52.js] +class Foo { +} +class Baz { +} +function* g() { + yield new Foo; + yield new Baz; +} diff --git a/tests/baselines/reference/generatorTypeCheck53.errors.txt b/tests/baselines/reference/generatorTypeCheck53.errors.txt new file mode 100644 index 00000000000..6c0b441c612 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck53.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts(3,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts (1 errors) ==== + class Foo { x: number } + class Baz { z: number } + function* g() { + ~ +!!! error TS2503: No best common type exists among yield expressions. + yield new Foo; + yield* [new Baz]; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck53.js b/tests/baselines/reference/generatorTypeCheck53.js new file mode 100644 index 00000000000..f26b3b60806 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck53.js @@ -0,0 +1,17 @@ +//// [generatorTypeCheck53.ts] +class Foo { x: number } +class Baz { z: number } +function* g() { + yield new Foo; + yield* [new Baz]; +} + +//// [generatorTypeCheck53.js] +class Foo { +} +class Baz { +} +function* g() { + yield new Foo; + yield* [new Baz]; +} diff --git a/tests/baselines/reference/generatorTypeCheck54.errors.txt b/tests/baselines/reference/generatorTypeCheck54.errors.txt new file mode 100644 index 00000000000..ec6cfe997af --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck54.errors.txt @@ -0,0 +1,12 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts(3,11): error TS2503: No best common type exists among yield expressions. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts (1 errors) ==== + class Foo { x: number } + class Baz { z: number } + function* g() { + ~ +!!! error TS2503: No best common type exists among yield expressions. + yield* [new Foo]; + yield* [new Baz]; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck54.js b/tests/baselines/reference/generatorTypeCheck54.js new file mode 100644 index 00000000000..f53215404ef --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck54.js @@ -0,0 +1,17 @@ +//// [generatorTypeCheck54.ts] +class Foo { x: number } +class Baz { z: number } +function* g() { + yield* [new Foo]; + yield* [new Baz]; +} + +//// [generatorTypeCheck54.js] +class Foo { +} +class Baz { +} +function* g() { + yield* [new Foo]; + yield* [new Baz]; +} diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts new file mode 100644 index 00000000000..4e985dca921 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck52.ts @@ -0,0 +1,7 @@ +//@target: ES6 +class Foo { x: number } +class Baz { z: number } +function* g() { + yield new Foo; + yield new Baz; +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts new file mode 100644 index 00000000000..9c75afe9ef1 --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck53.ts @@ -0,0 +1,7 @@ +//@target: ES6 +class Foo { x: number } +class Baz { z: number } +function* g() { + yield new Foo; + yield* [new Baz]; +} \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts new file mode 100644 index 00000000000..b5f47f76b3d --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck54.ts @@ -0,0 +1,7 @@ +//@target: ES6 +class Foo { x: number } +class Baz { z: number } +function* g() { + yield* [new Foo]; + yield* [new Baz]; +} \ No newline at end of file