From ea9d519424a249933547d3765e2f8228f5c5ce90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0=C3=A1ndor?= Date: Sun, 3 Feb 2019 20:44:07 +0100 Subject: [PATCH 01/22] Support email in author JSDoc tag - fixes #17244 --- src/compiler/parser.ts | 66 +++++++++++++++++++ src/compiler/scanner.ts | 2 + src/compiler/types.ts | 6 ++ src/compiler/utilities.ts | 4 ++ src/testRunner/unittests/jsDocParsing.ts | 4 ++ ...DocComments.parsesCorrectly.authorTag.json | 22 +++++++ .../reference/api/tsserverlibrary.d.ts | 6 +- tests/baselines/reference/api/typescript.d.ts | 6 +- .../reference/quickInfoJsDocTags.baseline | 6 +- tests/cases/fourslash/quickInfoJsDocTags.ts | 2 +- 10 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ada42889032..f8ffddaa600 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6611,6 +6611,9 @@ namespace ts { let tag: JSDocTag | undefined; switch (tagName.escapedText) { + case "author": + tag = parseAuthorTag(start, tagName); + break; case "augments": case "extends": tag = parseAugmentsTag(start, tagName); @@ -6874,6 +6877,69 @@ namespace ts { return finishNode(result); } + function parseAuthorTag(start: number, tagName: Identifier): JSDocAuthorTag { + const result = createNode(SyntaxKind.JSDocAuthorTag, start); + result.tagName = tagName; + + const comment = tryParse(() => tryParseAuthorNameAndEmail()); + + if (comment) { + result.comment = comment; + } + + return finishNode(result); + } + + function tryParseAuthorNameAndEmail(): string | undefined { + const comments: string[] = []; + let seenLessThan = false; + let seenGreaterThan = false; + let seenAtToken = false; + let token = scanner.getToken(); + + loop: while (true) { + switch (token) { + case SyntaxKind.Identifier: + case SyntaxKind.WhitespaceTrivia: + case SyntaxKind.DotToken: + comments.push(scanner.getTokenText()); + break; + case SyntaxKind.LessThanToken: + if (seenLessThan || seenAtToken || seenGreaterThan) { + return; + } + seenLessThan = true; + comments.push(scanner.getTokenText()); + break; + case SyntaxKind.GreaterThanToken: + if (!seenLessThan || !seenAtToken || seenGreaterThan) { + return; + } + + seenGreaterThan = true; + comments.push(scanner.getTokenText()); + break loop; + case SyntaxKind.AtToken: + if (seenAtToken || !seenLessThan || seenGreaterThan) { + return; + } + + seenAtToken = true; + comments.push(scanner.getTokenText()); + break; + case SyntaxKind.NewLineTrivia: + case SyntaxKind.EndOfFileToken: + break loop; + } + + token = nextJSDocToken(); + } + + if (seenLessThan && seenAtToken && seenGreaterThan) { + return comments.length === 0 ? undefined : comments.join(""); + } + } + function parseAugmentsTag(start: number, tagName: Identifier): JSDocAugmentsTag { const result = createNode(SyntaxKind.JSDocAugmentsTag, start); result.tagName = tagName; diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 36ac8adfa90..256e41629a1 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -2086,6 +2086,8 @@ namespace ts { return token = SyntaxKind.CloseBracketToken; case CharacterCodes.lessThan: return token = SyntaxKind.LessThanToken; + case CharacterCodes.greaterThan: + return token = SyntaxKind.GreaterThanToken; case CharacterCodes.equals: return token = SyntaxKind.EqualsToken; case CharacterCodes.comma: diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0b952a4d009..432d1dccba7 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -17,6 +17,7 @@ namespace ts { | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken + | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken @@ -459,6 +460,7 @@ namespace ts { JSDocSignature, JSDocTag, JSDocAugmentsTag, + JSDocAuthorTag, JSDocClassTag, JSDocCallbackTag, JSDocEnumTag, @@ -2455,6 +2457,10 @@ namespace ts { class: ExpressionWithTypeArguments & { expression: Identifier | PropertyAccessEntityNameExpression }; } + export interface JSDocAuthorTag extends JSDocTag { + kind: SyntaxKind.JSDocAuthorTag; + } + export interface JSDocClassTag extends JSDocTag { kind: SyntaxKind.JSDocClassTag; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 2e6c3ae4f86..b72a30ffba4 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -6116,6 +6116,10 @@ namespace ts { return node.kind === SyntaxKind.JSDocComment; } + export function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag { + return node.kind === SyntaxKind.JSDocAuthorTag; + } + export function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag { return node.kind === SyntaxKind.JSDocAugmentsTag; } diff --git a/src/testRunner/unittests/jsDocParsing.ts b/src/testRunner/unittests/jsDocParsing.ts index 4171a330f32..59775862e99 100644 --- a/src/testRunner/unittests/jsDocParsing.ts +++ b/src/testRunner/unittests/jsDocParsing.ts @@ -313,6 +313,10 @@ namespace ts { * {@link first link} * Inside {@link link text} thing * @see {@link second link text} and {@link Foo|a foo} as well. + */`); + parsesCorrectly("authorTag", +`/** + * @author John Doe */`); }); }); diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json new file mode 100644 index 00000000000..5239e57649c --- /dev/null +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json @@ -0,0 +1,22 @@ +{ + "kind": "JSDocComment", + "pos": 0, + "end": 50, + "tags": { + "0": { + "kind": "JSDocAuthorTag", + "pos": 7, + "end": 45, + "tagName": { + "kind": "Identifier", + "pos": 8, + "end": 14, + "escapedText": "author" + }, + "comment": "John Doe " + }, + "length": 1, + "pos": 7, + "end": 45 + } +} \ No newline at end of file diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 3f31d83d4f3..0d55487a4a7 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -72,7 +72,7 @@ declare namespace ts { pos: number; end: number; } - type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind; + type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind; type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InKeyword | SyntaxKind.InferKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.RequireKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.OfKeyword; type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken; enum SyntaxKind { @@ -1581,6 +1581,9 @@ declare namespace ts { expression: Identifier | PropertyAccessEntityNameExpression; }; } + interface JSDocAuthorTag extends JSDocTag { + kind: SyntaxKind.JSDocAuthorTag; + } interface JSDocClassTag extends JSDocTag { kind: SyntaxKind.JSDocClassTag; } @@ -3521,6 +3524,7 @@ declare namespace ts { function isJSDocFunctionType(node: Node): node is JSDocFunctionType; function isJSDocVariadicType(node: Node): node is JSDocVariadicType; function isJSDoc(node: Node): node is JSDoc; + function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag; function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag; function isJSDocClassTag(node: Node): node is JSDocClassTag; function isJSDocEnumTag(node: Node): node is JSDocEnumTag; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index ab4faf036b1..579b3276185 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -72,7 +72,7 @@ declare namespace ts { pos: number; end: number; } - type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind; + type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind; type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InKeyword | SyntaxKind.InferKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.RequireKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.OfKeyword; type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken; enum SyntaxKind { @@ -1581,6 +1581,9 @@ declare namespace ts { expression: Identifier | PropertyAccessEntityNameExpression; }; } + interface JSDocAuthorTag extends JSDocTag { + kind: SyntaxKind.JSDocAuthorTag; + } interface JSDocClassTag extends JSDocTag { kind: SyntaxKind.JSDocClassTag; } @@ -3521,6 +3524,7 @@ declare namespace ts { function isJSDocFunctionType(node: Node): node is JSDocFunctionType; function isJSDocVariadicType(node: Node): node is JSDocVariadicType; function isJSDoc(node: Node): node is JSDoc; + function isJSDocAuthorTag(node: Node): node is JSDocAuthorTag; function isJSDocAugmentsTag(node: Node): node is JSDocAugmentsTag; function isJSDocClassTag(node: Node): node is JSDocClassTag; function isJSDocEnumTag(node: Node): node is JSDocEnumTag; diff --git a/tests/baselines/reference/quickInfoJsDocTags.baseline b/tests/baselines/reference/quickInfoJsDocTags.baseline index d3ed4ad5ef1..a146e8e1876 100644 --- a/tests/baselines/reference/quickInfoJsDocTags.baseline +++ b/tests/baselines/reference/quickInfoJsDocTags.baseline @@ -2,13 +2,13 @@ { "marker": { "fileName": "/tests/cases/fourslash/quickInfoJsDocTags.ts", - "position": 256 + "position": 272 }, "quickInfo": { "kind": "function", "kindModifiers": "", "textSpan": { - "start": 256, + "start": 272, "length": 3 }, "displayParts": [ @@ -70,7 +70,7 @@ "tags": [ { "name": "author", - "text": "Me" + "text": "Me " }, { "name": "augments", diff --git a/tests/cases/fourslash/quickInfoJsDocTags.ts b/tests/cases/fourslash/quickInfoJsDocTags.ts index 798a850a310..2d81cb23679 100644 --- a/tests/cases/fourslash/quickInfoJsDocTags.ts +++ b/tests/cases/fourslash/quickInfoJsDocTags.ts @@ -3,7 +3,7 @@ // @Filename: quickInfoJsDocTags.ts /////** //// * Doc -//// * @author Me +//// * @author Me //// * @augments {C} Augments it //// * @template T A template //// * @type {number | string} A type From 00279e9eca77a6107f62ee40d2b05de6ea5f19ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0=C3=A1ndor?= Date: Sat, 9 Feb 2019 17:17:09 +0100 Subject: [PATCH 02/22] Parse unexpected comments after email in author JSDoc tag (#17244) --- src/compiler/parser.ts | 38 ++++++++++--------- src/testRunner/unittests/jsDocParsing.ts | 1 + ...DocComments.parsesCorrectly.authorTag.json | 30 +++++++++++++-- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f8ffddaa600..a3f8c950c36 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -468,6 +468,8 @@ namespace ts { visitNode(cbNode, (node).typeExpression) : visitNode(cbNode, (node).typeExpression) || visitNode(cbNode, (node).name)); + case SyntaxKind.JSDocAuthorTag: + return visitNode(cbNode, (node as JSDocTag).tagName); case SyntaxKind.JSDocAugmentsTag: return visitNode(cbNode, (node as JSDocTag).tagName) || visitNode(cbNode, (node).class); @@ -6612,7 +6614,7 @@ namespace ts { let tag: JSDocTag | undefined; switch (tagName.escapedText) { case "author": - tag = parseAuthorTag(start, tagName); + tag = parseAuthorTag(start, tagName, indent); break; case "augments": case "extends": @@ -6877,14 +6879,22 @@ namespace ts { return finishNode(result); } - function parseAuthorTag(start: number, tagName: Identifier): JSDocAuthorTag { + function parseAuthorTag(start: number, tagName: Identifier, indent: number): JSDocAuthorTag { const result = createNode(SyntaxKind.JSDocAuthorTag, start); result.tagName = tagName; - const comment = tryParse(() => tryParseAuthorNameAndEmail()); + const authorInfoWithEmail = tryParse(() => tryParseAuthorNameAndEmail()); + if (!authorInfoWithEmail) { + return finishNode(result); + } - if (comment) { - result.comment = comment; + result.comment = authorInfoWithEmail; + + if (lookAhead(() => nextToken() !== SyntaxKind.NewLineTrivia)) { + const comment = parseTagComments(indent); + if (comment) { + result.comment += comment; + } } return finishNode(result); @@ -6894,7 +6904,6 @@ namespace ts { const comments: string[] = []; let seenLessThan = false; let seenGreaterThan = false; - let seenAtToken = false; let token = scanner.getToken(); loop: while (true) { @@ -6902,31 +6911,24 @@ namespace ts { case SyntaxKind.Identifier: case SyntaxKind.WhitespaceTrivia: case SyntaxKind.DotToken: + case SyntaxKind.AtToken: comments.push(scanner.getTokenText()); break; case SyntaxKind.LessThanToken: - if (seenLessThan || seenAtToken || seenGreaterThan) { + if (seenLessThan || seenGreaterThan) { return; } seenLessThan = true; comments.push(scanner.getTokenText()); break; case SyntaxKind.GreaterThanToken: - if (!seenLessThan || !seenAtToken || seenGreaterThan) { + if (!seenLessThan || seenGreaterThan) { return; } - seenGreaterThan = true; comments.push(scanner.getTokenText()); + scanner.setTextPos(scanner.getTokenPos() + 1); break loop; - case SyntaxKind.AtToken: - if (seenAtToken || !seenLessThan || seenGreaterThan) { - return; - } - - seenAtToken = true; - comments.push(scanner.getTokenText()); - break; case SyntaxKind.NewLineTrivia: case SyntaxKind.EndOfFileToken: break loop; @@ -6935,7 +6937,7 @@ namespace ts { token = nextJSDocToken(); } - if (seenLessThan && seenAtToken && seenGreaterThan) { + if (seenLessThan && seenGreaterThan) { return comments.length === 0 ? undefined : comments.join(""); } } diff --git a/src/testRunner/unittests/jsDocParsing.ts b/src/testRunner/unittests/jsDocParsing.ts index 59775862e99..41e09f5f9fe 100644 --- a/src/testRunner/unittests/jsDocParsing.ts +++ b/src/testRunner/unittests/jsDocParsing.ts @@ -317,6 +317,7 @@ namespace ts { parsesCorrectly("authorTag", `/** * @author John Doe + * @author John Doe unexpected comment */`); }); }); diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json index 5239e57649c..54e06da0465 100644 --- a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.authorTag.json @@ -1,22 +1,44 @@ { "kind": "JSDocComment", "pos": 0, - "end": 50, + "end": 112, + "modifierFlagsCache": 0, + "transformFlags": 0, "tags": { "0": { "kind": "JSDocAuthorTag", "pos": 7, - "end": 45, + "end": 50, + "modifierFlagsCache": 0, + "transformFlags": 0, "tagName": { "kind": "Identifier", "pos": 8, "end": 14, + "modifierFlagsCache": 0, + "transformFlags": 0, "escapedText": "author" }, "comment": "John Doe " }, - "length": 1, + "1": { + "kind": "JSDocAuthorTag", + "pos": 50, + "end": 110, + "modifierFlagsCache": 0, + "transformFlags": 0, + "tagName": { + "kind": "Identifier", + "pos": 51, + "end": 57, + "modifierFlagsCache": 0, + "transformFlags": 0, + "escapedText": "author" + }, + "comment": "John Doe unexpected comment" + }, + "length": 2, "pos": 7, - "end": 45 + "end": 110 } } \ No newline at end of file From 08bd017db97445709cc249d3c0c9661ff962c009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0=C3=A1ndor?= Date: Fri, 19 Apr 2019 12:03:33 +0200 Subject: [PATCH 03/22] JSDoc author tag parsing updates (#17244) --- src/compiler/parser.ts | 4 +- .../reference/api/tsserverlibrary.d.ts | 39 ++++++++++--------- tests/baselines/reference/api/typescript.d.ts | 39 ++++++++++--------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a3f8c950c36..ce50eeac19d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6614,7 +6614,7 @@ namespace ts { let tag: JSDocTag | undefined; switch (tagName.escapedText) { case "author": - tag = parseAuthorTag(start, tagName, indent); + tag = parseAuthorTag(start, tagName, margin); break; case "augments": case "extends": @@ -6934,7 +6934,7 @@ namespace ts { break loop; } - token = nextJSDocToken(); + token = nextTokenJSDoc(); } if (seenLessThan && seenGreaterThan) { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 0d55487a4a7..b557509f8ce 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -379,23 +379,24 @@ declare namespace ts { JSDocSignature = 299, JSDocTag = 300, JSDocAugmentsTag = 301, - JSDocClassTag = 302, - JSDocCallbackTag = 303, - JSDocEnumTag = 304, - JSDocParameterTag = 305, - JSDocReturnTag = 306, - JSDocThisTag = 307, - JSDocTypeTag = 308, - JSDocTemplateTag = 309, - JSDocTypedefTag = 310, - JSDocPropertyTag = 311, - SyntaxList = 312, - NotEmittedStatement = 313, - PartiallyEmittedExpression = 314, - CommaListExpression = 315, - MergeDeclarationMarker = 316, - EndOfDeclarationMarker = 317, - Count = 318, + JSDocAuthorTag = 302, + JSDocClassTag = 303, + JSDocCallbackTag = 304, + JSDocEnumTag = 305, + JSDocParameterTag = 306, + JSDocReturnTag = 307, + JSDocThisTag = 308, + JSDocTypeTag = 309, + JSDocTemplateTag = 310, + JSDocTypedefTag = 311, + JSDocPropertyTag = 312, + SyntaxList = 313, + NotEmittedStatement = 314, + PartiallyEmittedExpression = 315, + CommaListExpression = 316, + MergeDeclarationMarker = 317, + EndOfDeclarationMarker = 318, + Count = 319, FirstAssignment = 60, LastAssignment = 72, FirstCompoundAssignment = 61, @@ -422,9 +423,9 @@ declare namespace ts { LastBinaryOperator = 72, FirstNode = 149, FirstJSDocNode = 289, - LastJSDocNode = 311, + LastJSDocNode = 312, FirstJSDocTagNode = 300, - LastJSDocTagNode = 311, + LastJSDocTagNode = 312, } enum NodeFlags { None = 0, diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 579b3276185..de6b2b187c2 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -379,23 +379,24 @@ declare namespace ts { JSDocSignature = 299, JSDocTag = 300, JSDocAugmentsTag = 301, - JSDocClassTag = 302, - JSDocCallbackTag = 303, - JSDocEnumTag = 304, - JSDocParameterTag = 305, - JSDocReturnTag = 306, - JSDocThisTag = 307, - JSDocTypeTag = 308, - JSDocTemplateTag = 309, - JSDocTypedefTag = 310, - JSDocPropertyTag = 311, - SyntaxList = 312, - NotEmittedStatement = 313, - PartiallyEmittedExpression = 314, - CommaListExpression = 315, - MergeDeclarationMarker = 316, - EndOfDeclarationMarker = 317, - Count = 318, + JSDocAuthorTag = 302, + JSDocClassTag = 303, + JSDocCallbackTag = 304, + JSDocEnumTag = 305, + JSDocParameterTag = 306, + JSDocReturnTag = 307, + JSDocThisTag = 308, + JSDocTypeTag = 309, + JSDocTemplateTag = 310, + JSDocTypedefTag = 311, + JSDocPropertyTag = 312, + SyntaxList = 313, + NotEmittedStatement = 314, + PartiallyEmittedExpression = 315, + CommaListExpression = 316, + MergeDeclarationMarker = 317, + EndOfDeclarationMarker = 318, + Count = 319, FirstAssignment = 60, LastAssignment = 72, FirstCompoundAssignment = 61, @@ -422,9 +423,9 @@ declare namespace ts { LastBinaryOperator = 72, FirstNode = 149, FirstJSDocNode = 289, - LastJSDocNode = 311, + LastJSDocNode = 312, FirstJSDocTagNode = 300, - LastJSDocTagNode = 311, + LastJSDocTagNode = 312, } enum NodeFlags { None = 0, From 252840ad40f33518b5efd47a9d2a9c7c8d1514ab Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Mon, 24 Jun 2019 17:37:14 -0700 Subject: [PATCH 04/22] Fix incorrect noImplicitAny error on contextual union function signature --- src/compiler/checker.ts | 4 +++- .../functionExpressionContextualTyping3.js | 8 ++++++++ .../functionExpressionContextualTyping3.symbols | 12 ++++++++++++ .../functionExpressionContextualTyping3.types | 13 +++++++++++++ .../functionExpressionContextualTyping3.ts | 5 +++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/functionExpressionContextualTyping3.js create mode 100644 tests/baselines/reference/functionExpressionContextualTyping3.symbols create mode 100644 tests/baselines/reference/functionExpressionContextualTyping3.types create mode 100644 tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a3abe1dc5b5..534e5e2f067 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -19095,7 +19095,9 @@ namespace ts { } } // Result is union of signatures collected (return type is union of return types of this signature set) - return signatureList && createUnionSignature(signatureList[0], signatureList); + if (signatureList) { + return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList); + } } function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type { diff --git a/tests/baselines/reference/functionExpressionContextualTyping3.js b/tests/baselines/reference/functionExpressionContextualTyping3.js new file mode 100644 index 00000000000..b25754b568f --- /dev/null +++ b/tests/baselines/reference/functionExpressionContextualTyping3.js @@ -0,0 +1,8 @@ +//// [functionExpressionContextualTyping3.ts] +// #31114 +declare function f(value: T | number): void; +f((a: any) => "") + + +//// [functionExpressionContextualTyping3.js] +f(function (a) { return ""; }); diff --git a/tests/baselines/reference/functionExpressionContextualTyping3.symbols b/tests/baselines/reference/functionExpressionContextualTyping3.symbols new file mode 100644 index 00000000000..8b773f08428 --- /dev/null +++ b/tests/baselines/reference/functionExpressionContextualTyping3.symbols @@ -0,0 +1,12 @@ +=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts === +// #31114 +declare function f(value: T | number): void; +>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0)) +>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19)) +>value : Symbol(value, Decl(functionExpressionContextualTyping3.ts, 1, 22)) +>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19)) + +f((a: any) => "") +>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0)) +>a : Symbol(a, Decl(functionExpressionContextualTyping3.ts, 2, 3)) + diff --git a/tests/baselines/reference/functionExpressionContextualTyping3.types b/tests/baselines/reference/functionExpressionContextualTyping3.types new file mode 100644 index 00000000000..662aa72ea90 --- /dev/null +++ b/tests/baselines/reference/functionExpressionContextualTyping3.types @@ -0,0 +1,13 @@ +=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts === +// #31114 +declare function f(value: T | number): void; +>f : (value: number | T) => void +>value : number | T + +f((a: any) => "") +>f((a: any) => "") : void +>f : (value: number | T) => void +>(a: any) => "" : (a: any) => "" +>a : any +>"" : "" + diff --git a/tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts b/tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts new file mode 100644 index 00000000000..a1dc4e5d7d7 --- /dev/null +++ b/tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts @@ -0,0 +1,5 @@ +// @noImplicitAny: true + +// #31114 +declare function f(value: T | number): void; +f((a: any) => "") From 49e3f1788641fe3709644f5644048a00a3fea43b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 24 Jun 2019 17:11:16 -1000 Subject: [PATCH 05/22] Add instantiation count limiter --- src/compiler/checker.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9cb08b3e440..f4eb3940e1e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -65,6 +65,7 @@ namespace ts { let typeCount = 0; let symbolCount = 0; let enumCount = 0; + let instantiationCount = 0; let instantiationDepth = 0; let constraintDepth = 0; let currentNode: Node | undefined; @@ -11408,13 +11409,14 @@ namespace ts { if (!type || !mapper || mapper === identityMapper) { return type; } - if (instantiationDepth === 50) { + if (instantiationDepth === 50 || instantiationCount >= 5000000) { // We have reached 50 recursive type instantiations and there is a very high likelyhood we're dealing // with a combination of infinite generic types that perpetually generate new type identities. We stop // the recursion here by yielding the error type. error(currentNode, Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); return errorType; } + instantiationCount++; instantiationDepth++; const result = instantiateTypeWorker(type, mapper); instantiationDepth--; @@ -24494,6 +24496,7 @@ namespace ts { function checkExpression(node: Expression | QualifiedName, checkMode?: CheckMode, forceTuple?: boolean): Type { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; const uninstantiatedType = checkExpressionWorker(node, checkMode, forceTuple); const type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); if (isConstEnumObjectType(type)) { @@ -29204,6 +29207,7 @@ namespace ts { if (node) { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; checkSourceElementWorker(node); currentNode = saveCurrentNode; } @@ -29475,6 +29479,7 @@ namespace ts { function checkDeferredNode(node: Node) { const saveCurrentNode = currentNode; currentNode = node; + instantiationCount = 0; switch (node.kind) { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: From 5c6c1a3efe640d565e1d0bf0e0399b02b3866cc6 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 27 Jun 2019 16:48:00 -1000 Subject: [PATCH 06/22] Add regression test --- tests/cases/compiler/infiniteConstraints.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/cases/compiler/infiniteConstraints.ts b/tests/cases/compiler/infiniteConstraints.ts index e914b738efc..a1dcc754260 100644 --- a/tests/cases/compiler/infiniteConstraints.ts +++ b/tests/cases/compiler/infiniteConstraints.ts @@ -36,3 +36,15 @@ const shouldBeError = ensureNoDuplicates({main: value("dup"), alternate: value(" type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; + +// Repro from #31823 + +export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; + +type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; From a1c6d9e671a01be3ebb7cb9a7e85f27f9fb1909b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 27 Jun 2019 16:48:06 -1000 Subject: [PATCH 07/22] Accept new baselines --- .../reference/infiniteConstraints.errors.txt | 17 ++++++- .../reference/infiniteConstraints.js | 13 +++++ .../reference/infiniteConstraints.symbols | 50 +++++++++++++++++++ .../reference/infiniteConstraints.types | 23 +++++++++ 4 files changed, 102 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/infiniteConstraints.errors.txt b/tests/baselines/reference/infiniteConstraints.errors.txt index 685b18932c1..2548b00f044 100644 --- a/tests/baselines/reference/infiniteConstraints.errors.txt +++ b/tests/baselines/reference/infiniteConstraints.errors.txt @@ -2,9 +2,10 @@ tests/cases/compiler/infiniteConstraints.ts(4,37): error TS2536: Type '"val"' ca tests/cases/compiler/infiniteConstraints.ts(31,43): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(31,63): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' cannot be used to index type 'T[keyof T]'. +tests/cases/compiler/infiniteConstraints.ts(48,16): error TS2589: Type instantiation is excessively deep and possibly infinite. -==== tests/cases/compiler/infiniteConstraints.ts (4 errors) ==== +==== tests/cases/compiler/infiniteConstraints.ts (5 errors) ==== // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint type T1], { val: string }>["val"] }> = B; @@ -51,4 +52,18 @@ tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' c declare function function1}>(): T[keyof T]["foo"]; ~~~~~~~~~~~~~~~~~ !!! error TS2536: Type '"foo"' cannot be used to index type 'T[keyof T]'. + + // Repro from #31823 + + export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; + export type ExactExtract = T extends U ? U extends T ? T : never : never; + + type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2589: Type instantiation is excessively deep and possibly infinite. \ No newline at end of file diff --git a/tests/baselines/reference/infiniteConstraints.js b/tests/baselines/reference/infiniteConstraints.js index 03a4d70e00c..547091f5cf2 100644 --- a/tests/baselines/reference/infiniteConstraints.js +++ b/tests/baselines/reference/infiniteConstraints.js @@ -35,11 +35,24 @@ const shouldBeError = ensureNoDuplicates({main: value("dup"), alternate: value(" type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; + +// Repro from #31823 + +export type Prepend = + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; + +type Conv = + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; //// [infiniteConstraints.js] "use strict"; // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint +exports.__esModule = true; var out = myBug({ obj1: { a: "test" } }); var noError = ensureNoDuplicates({ main: value("test"), alternate: value("test2") }); var shouldBeNoError = ensureNoDuplicates({ main: value("test") }); diff --git a/tests/baselines/reference/infiniteConstraints.symbols b/tests/baselines/reference/infiniteConstraints.symbols index 6306203a7e0..2fa45c84f10 100644 --- a/tests/baselines/reference/infiniteConstraints.symbols +++ b/tests/baselines/reference/infiniteConstraints.symbols @@ -138,3 +138,53 @@ declare function function1}>(): T[keyof T] >T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27)) >T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27)) +// Repro from #31823 + +export type Prepend = +>Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88)) +>Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) + + T extends unknown ? +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) + + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : +>arg : Symbol(arg, Decl(infiniteConstraints.ts, 41, 4)) +>Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20)) +>rest : Symbol(rest, Decl(infiniteConstraints.ts, 41, 13)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24)) +>args : Symbol(args, Decl(infiniteConstraints.ts, 41, 45)) +>T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59)) +>T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59)) + + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; +>ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25)) + +type Conv = +>Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) + + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; +>0 : Symbol(0, Decl(infiniteConstraints.ts, 47, 3)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>1 : Symbol(1, Decl(infiniteConstraints.ts, 47, 11)) +>Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79)) +>ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) +>U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12)) +>T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10)) + diff --git a/tests/baselines/reference/infiniteConstraints.types b/tests/baselines/reference/infiniteConstraints.types index c7d4c07ff4b..4b929ac667e 100644 --- a/tests/baselines/reference/infiniteConstraints.types +++ b/tests/baselines/reference/infiniteConstraints.types @@ -95,3 +95,26 @@ type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; >function1 : ; }>() => T[keyof T]["foo"] +// Repro from #31823 + +export type Prepend = +>Prepend : Prepend + + T extends unknown ? + ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : +>arg : Elm +>rest : T +>args : T2 + + never : + never; +export type ExactExtract = T extends U ? U extends T ? T : never : never; +>ExactExtract : ExactExtract + +type Conv = +>Conv : { 0: [T]; 1: Prepend]; 1: Prepend, { 0: [ExactExtract, ExactExtract>]; 1: Prepend, ExactExtract>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, any[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> ? 0 : 1]>; }[ExactExtract, ExactExtract> extends ExactExtract, ExactExtract> ? 0 : 1]>; }[ExactExtract extends ExactExtract ? 0 : 1]>; }[U extends T ? 0 : 1] + + { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1]; +>0 : [T] +>1 : Prepend]; 1: Prepend, { 0: [ExactExtract, ExactExtract>]; 1: Prepend, ExactExtract>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, { 0: [ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>]; 1: Prepend, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, any[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>, ExactExtract, ExactExtract>, ExactExtract, ExactExtract>>> ? 0 : 1]>; }[ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> extends ExactExtract, ExactExtract>, ExactExtract, ExactExtract>> ? 0 : 1]>; }[ExactExtract, ExactExtract> extends ExactExtract, ExactExtract> ? 0 : 1]>; }[ExactExtract extends ExactExtract ? 0 : 1]> + From 2e5249835dc6c17106918e267213f8d8798532ee Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 16:54:42 -1000 Subject: [PATCH 08/22] Remove logic that pads array literals contextually typed by tuple types --- src/compiler/checker.ts | 50 ++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf614ee2013..c62263957c7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -722,6 +722,7 @@ namespace ts { NoIndexSignatures = 1 << 0, Writing = 1 << 1, CacheSymbol = 1 << 2, + NoTupleBoundsCheck = 1 << 3, } const enum CallbackCheck { @@ -5115,21 +5116,25 @@ namespace ts { } else if (isArrayLikeType(parentType)) { const indexType = getLiteralType(index); - const declaredType = getConstraintForLocation(getIndexedAccessType(parentType, indexType, declaration.name), declaration.name); + const accessFlags = hasDefaultValue(declaration) ? AccessFlags.NoTupleBoundsCheck : 0; + const declaredType = getConstraintForLocation(getIndexedAccessTypeOrUndefined(parentType, indexType, declaration.name, accessFlags) || errorType, declaration.name); type = getFlowTypeOfDestructuring(declaration, declaredType); } else { type = elementType; } } - // In strict null checking mode, if a default value of a non-undefined type is specified, remove - // undefined from the final type. - if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkDeclarationInitializer(declaration)) & TypeFlags.Undefined)) { - type = getTypeWithFacts(type, TypeFacts.NEUndefined); + if (!declaration.initializer) { + return type; } - return declaration.initializer && !getEffectiveTypeAnnotationNode(walkUpBindingElementsAndPatterns(declaration)) ? - getUnionType([type, checkDeclarationInitializer(declaration)], UnionReduction.Subtype) : - type; + if (getEffectiveTypeAnnotationNode(walkUpBindingElementsAndPatterns(declaration))) { + // In strict null checking mode, if a default value of a non-undefined type is specified, remove + // undefined from the final type. + return strictNullChecks && !(getFalsyFlags(checkDeclarationInitializer(declaration)) & TypeFlags.Undefined) ? + getTypeWithFacts(type, TypeFacts.NEUndefined) : + type; + } + return getUnionType([getTypeWithFacts(type, TypeFacts.NEUndefined), checkDeclarationInitializer(declaration)], UnionReduction.Subtype); } function getTypeForDeclarationFromJSDocComment(declaration: Node) { @@ -10131,7 +10136,7 @@ namespace ts { propType; } if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) { - if (accessNode && everyType(objectType, t => !(t).target.hasRestElement)) { + if (accessNode && everyType(objectType, t => !(t).target.hasRestElement) && !(accessFlags & AccessFlags.NoTupleBoundsCheck)) { const indexNode = getIndexNodeForAccessExpression(accessNode); if (isTupleType(objectType)) { error(indexNode, Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, @@ -19196,26 +19201,7 @@ namespace ts { function getArrayLiteralTupleTypeIfApplicable(elementTypes: Type[], contextualType: Type | undefined, hasRestElement: boolean, elementCount = elementTypes.length, readonly = false) { // Infer a tuple type when the contextual type is or contains a tuple-like type if (readonly || (contextualType && forEachType(contextualType, isTupleLikeType))) { - const minLength = elementCount - (hasRestElement ? 1 : 0); - const pattern = contextualType && contextualType.pattern; - // If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting - // tuple type with the corresponding binding or assignment element types to make the lengths equal. - if (!hasRestElement && pattern && (pattern.kind === SyntaxKind.ArrayBindingPattern || pattern.kind === SyntaxKind.ArrayLiteralExpression)) { - const patternElements = (pattern).elements; - for (let i = elementCount; i < patternElements.length; i++) { - const e = patternElements[i]; - if (hasDefaultValue(e)) { - elementTypes.push((contextualType).typeArguments![i]); - } - else if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken || e.kind === SyntaxKind.SpreadElement)) { - if (e.kind !== SyntaxKind.OmittedExpression) { - error(e, Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); - } - elementTypes.push(strictNullChecks ? implicitNeverType : undefinedWideningType); - } - } - } - return createTupleType(elementTypes, minLength, hasRestElement, readonly); + return createTupleType(elementTypes, elementCount - (hasRestElement ? 1 : 0), hasRestElement, readonly); } } @@ -23655,8 +23641,10 @@ namespace ts { if (isArrayLikeType(sourceType)) { // We create a synthetic expression so that getIndexedAccessType doesn't get confused // when the element is a SyntaxKind.ElementAccessExpression. - const elementType = getIndexedAccessType(sourceType, indexType, createSyntheticExpression(element, indexType)); - const type = getFlowTypeOfDestructuring(element, elementType); + const accessFlags = hasDefaultValue(element) ? AccessFlags.NoTupleBoundsCheck : 0; + const elementType = getIndexedAccessTypeOrUndefined(sourceType, indexType, createSyntheticExpression(element, indexType), accessFlags) || errorType; + const assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType, TypeFacts.NEUndefined) : elementType; + const type = getFlowTypeOfDestructuring(element, assignedType); return checkDestructuringAssignment(element, type, checkMode); } return checkDestructuringAssignment(element, elementType, checkMode); From fbb79400bb5cd6226fd019ddb9f400572f48b83f Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 16:54:55 -1000 Subject: [PATCH 09/22] Accept new baselines --- ...nEmitDestructuringArrayPattern2.errors.txt | 12 +++++----- ...clarationEmitDestructuringArrayPattern2.js | 2 +- ...rationEmitDestructuringArrayPattern2.types | 8 +++---- .../declarationsAndAssignments.errors.txt | 24 +++++++++---------- .../declarationsAndAssignments.types | 18 +++++++------- ...BindingPatternAndAssignment1ES5.errors.txt | 12 +++++----- ...ArrayBindingPatternAndAssignment1ES5.types | 22 ++++++++--------- ...atternAndAssignment1ES5iterable.errors.txt | 12 +++++----- ...dingPatternAndAssignment1ES5iterable.types | 22 ++++++++--------- ...BindingPatternAndAssignment1ES6.errors.txt | 12 +++++----- ...ArrayBindingPatternAndAssignment1ES6.types | 22 ++++++++--------- ...rayBindingPatternAndAssignment2.errors.txt | 8 +++---- ...ingArrayBindingPatternAndAssignment2.types | 2 +- ...ingArrayBindingPatternAndAssignment3.types | 6 ++--- ...destructuringVariableDeclaration1ES5.types | 6 ++--- ...destructuringVariableDeclaration1ES6.types | 6 ++--- .../destructuringVariableDeclaration2.types | 2 +- .../reference/downlevelLetConst12.errors.txt | 8 +++---- .../reference/downlevelLetConst12.types | 8 +++---- ...plicitAnyDestructuringVarDeclaration.types | 2 +- .../reference/recursiveLetConst.types | 2 +- ...entArrayBindingPatternDefaultValues3.types | 18 +++++++------- 22 files changed, 117 insertions(+), 117 deletions(-) diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt index 26998fd83ae..e782352073a 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,11): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,11): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. +tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error TS2493: Tuple type '[]' of length '0' has no element at index '2'. ==== tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts (3 errors) ==== @@ -9,11 +9,11 @@ tests/cases/compiler/declarationEmitDestructuringArrayPattern2.ts(4,16): error T var [x11 = 0, y11 = ""] = [1, "hello"]; var [a11, b11, c11] = []; ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '2'. var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js index 818b3a6f7a9..663b2d3567b 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.js @@ -22,7 +22,7 @@ var _m = [[x13, y13], { x: x13, y: y13 }], a3 = _m[0], b3 = _m[1]; //// [declarationEmitDestructuringArrayPattern2.d.ts] declare var x10: number, y10: string, z10: boolean; declare var x11: number, y11: string; -declare var a11: any, b11: any, c11: any; +declare var a11: undefined, b11: undefined, c11: undefined; declare var a2: number, b2: string, x12: number, c2: boolean; declare var x13: number, y13: string; declare var a3: (string | number)[], b3: { diff --git a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types index 37781e0a1ae..b473e544ae1 100644 --- a/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types +++ b/tests/baselines/reference/declarationEmitDestructuringArrayPattern2.types @@ -20,10 +20,10 @@ var [x11 = 0, y11 = ""] = [1, "hello"]; >"hello" : "hello" var [a11, b11, c11] = []; ->a11 : any ->b11 : any ->c11 : any ->[] : [undefined?, undefined?, undefined?] +>a11 : undefined +>b11 : undefined +>c11 : undefined +>[] : [] var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]]; >a2 : number diff --git a/tests/baselines/reference/declarationsAndAssignments.errors.txt b/tests/baselines/reference/declarationsAndAssignments.errors.txt index b13aacbfbc3..d6f0ab3873a 100644 --- a/tests/baselines/reference/declarationsAndAssignments.errors.txt +++ b/tests/baselines/reference/declarationsAndAssignments.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(5,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(5,16): error TS2493: Tuple type '[number, string]' of length '2' has no element at index '2'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(22,17): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{}'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(22,23): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{}'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(23,25): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'. @@ -6,11 +6,11 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(24,19): tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(28,28): error TS2353: Object literal may only specify known properties, and 'y' does not exist in type '{ x: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(29,22): error TS2353: Object literal may only specify known properties, and 'x' does not exist in type '{ y: any; }'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(58,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'y' must be of type 'string | number', but here has type 'string'. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,10): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,13): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,13): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,16): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,10): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,13): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(62,16): error TS2493: Tuple type '[]' of length '0' has no element at index '2'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,13): error TS2493: Tuple type '[number]' of length '1' has no element at index '1'. +tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(63,16): error TS2493: Tuple type '[number]' of length '1' has no element at index '2'. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(67,9): error TS2461: Type '{}' is not an array type. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(68,9): error TS2461: Type '{ 0: number; 1: number; }' is not an array type. tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(73,11): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. @@ -29,7 +29,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): var [x, y] = [1, "hello"]; var [x, y, z] = [1, "hello"]; ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number, string]' of length '2' has no element at index '2'. var [,, x] = [0, 1, 2]; var x: number; var y: string; @@ -103,16 +103,16 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9): function f8() { var [a, b, c] = []; // Error, [] is an empty tuple ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '2'. var [d, e, f] = [1]; // Error, [1] is a tuple ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number]' of length '1' has no element at index '1'. ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[number]' of length '1' has no element at index '2'. } function f9() { diff --git a/tests/baselines/reference/declarationsAndAssignments.types b/tests/baselines/reference/declarationsAndAssignments.types index 89ddd0eb5e5..ed157a7e69c 100644 --- a/tests/baselines/reference/declarationsAndAssignments.types +++ b/tests/baselines/reference/declarationsAndAssignments.types @@ -23,8 +23,8 @@ function f0() { var [x, y, z] = [1, "hello"]; >x : number >y : string ->z : any ->[1, "hello"] : [number, string, undefined?] +>z : undefined +>[1, "hello"] : [number, string] >1 : 1 >"hello" : "hello" @@ -255,16 +255,16 @@ function f8() { >f8 : () => void var [a, b, c] = []; // Error, [] is an empty tuple ->a : any ->b : any ->c : any ->[] : [undefined?, undefined?, undefined?] +>a : undefined +>b : undefined +>c : undefined +>[] : [] var [d, e, f] = [1]; // Error, [1] is a tuple >d : number ->e : any ->f : any ->[1] : [number, undefined?, undefined?] +>e : undefined +>f : undefined +>[1] : [number] >1 : 1 } diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt index 1f1bc85757b..17a9dc13f9a 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types index 03990bc0846..d9e9cb494d2 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt index 6a2647013fb..21e239114cb 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES5iterable.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types index cb2e8018232..6d232030fae 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES5iterable.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt index 4dc6085e662..3dc897456aa 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(43,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,18): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(43,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts(44,18): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment1ES6.ts (3 errors) ==== @@ -48,12 +48,12 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss var [c0, c1] = [...temp]; var [c2] = []; ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. var [[c5], c6]: [[string|number], boolean] = [[1], true]; var [, c7] = [1, 2, 3]; var [,,, c8] = [1, 2, 3, 4]; diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types index 9a00291f79c..feb0116ea04 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment1ES6.types @@ -92,19 +92,19 @@ var [c0, c1] = [...temp]; >temp : number[] var [c2] = []; ->c2 : any ->[] : [undefined?] +>c2 : undefined +>[] : [] var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]] ->c3 : any ->c4 : any ->[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]] ->[[]] : [[undefined?]] ->[] : [undefined?] ->[[[[]]]] : [[[[undefined?]]]] ->[[[]]] : [[[undefined?]]] ->[[]] : [[undefined?]] ->[] : [undefined?] +>c3 : undefined +>c4 : undefined +>[[[]], [[[[]]]]] : [[[]], [[[[]]]]] +>[[]] : [[]] +>[] : [] +>[[[[]]]] : [[[[]]]] +>[[[]]] : [[[]]] +>[[]] : [[]] +>[] : [] var [[c5], c6]: [[string|number], boolean] = [[1], true]; >c5 : string | number diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt index 6d16229f333..dd01ac96519 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2461: Type 'undefined' is not an array type. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2461: Type 'undefined' is not an array type. -tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(3,12): error TS2493: Tuple type '[]' of length '0' has no element at index '1'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(4,5): error TS2461: Type 'undefined' is not an array type. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(9,51): error TS2322: Type 'number' is not assignable to type 'boolean'. tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAssignment2.ts(22,5): error TS2739: Type 'number[]' is missing the following properties from type '[number, number]': 0, 1 @@ -16,11 +16,11 @@ tests/cases/conformance/es6/destructuring/destructuringArrayBindingPatternAndAss ~~~~ !!! error TS2461: Type 'undefined' is not an array type. ~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ~~~~~~ !!! error TS2461: Type 'undefined' is not an array type. ~~~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '1'. var [[a2], [[a3]]] = undefined // Error ~~~~~~~~~~~~~~ !!! error TS2461: Type 'undefined' is not an array type. diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types index 77681f8d8c8..86723735bb5 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment2.types @@ -4,7 +4,7 @@ var [[a0], [[a1]]] = [] // Error >a0 : any >a1 : any ->[] : [undefined?, undefined?] +>[] : [] var [[a2], [[a3]]] = undefined // Error >a2 : any diff --git a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types index 0fb81ba6aa3..5a0e03dda6e 100644 --- a/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types +++ b/tests/baselines/reference/destructuringArrayBindingPatternAndAssignment3.types @@ -3,7 +3,7 @@ const [a, b = a] = [1]; // ok >a : any >b : any >a : any ->[1] : [number, any?] +>[1] : [number] >1 : 1 const [c, d = c, e = e] = [1]; // error for e = e @@ -12,7 +12,7 @@ const [c, d = c, e = e] = [1]; // error for e = e >c : any >e : any >e : any ->[1] : [number, any?, any?] +>[1] : [number] >1 : 1 const [f, g = f, h = i, i = f] = [1]; // error for h = i @@ -23,7 +23,7 @@ const [f, g = f, h = i, i = f] = [1]; // error for h = i >i : any >i : any >f : any ->[1] : [number, any?, any?, any?] +>[1] : [number] >1 : 1 (function ([a, b = a]) { // ok diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types index fc153be7c60..0e1a89eff93 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types index bf00e1955ca..d47ec0e0d74 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES6.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES6.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringVariableDeclaration2.types b/tests/baselines/reference/destructuringVariableDeclaration2.types index ddb560f4e24..3b4fe8af85f 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration2.types +++ b/tests/baselines/reference/destructuringVariableDeclaration2.types @@ -60,7 +60,7 @@ var [c1, c2, { c3: c4, c5 }, , ...c6] = [1, 2, { c3: 4, c5: 0 }]; // Error >c5 : number > : undefined >c6 : [] ->[1, 2, { c3: 4, c5: 0 }] : [number, number, { c3: number; c5: number; }, undefined?] +>[1, 2, { c3: 4, c5: 0 }] : [number, number, { c3: number; c5: number; }] >1 : 1 >2 : 2 >{ c3: 4, c5: 0 } : { c3: number; c5: number; } diff --git a/tests/baselines/reference/downlevelLetConst12.errors.txt b/tests/baselines/reference/downlevelLetConst12.errors.txt index 7d5c6828207..8c4bcb9d4f7 100644 --- a/tests/baselines/reference/downlevelLetConst12.errors.txt +++ b/tests/baselines/reference/downlevelLetConst12.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/downlevelLetConst12.ts(6,6): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/downlevelLetConst12.ts(6,6): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. ==== tests/cases/compiler/downlevelLetConst12.ts (2 errors) ==== @@ -10,10 +10,10 @@ tests/cases/compiler/downlevelLetConst12.ts(9,8): error TS2525: Initializer prov let [baz] = []; ~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. let {a: baz2} = { a: 1 }; const [baz3] = [] ~~~~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. const {a: baz4} = { a: 1 }; \ No newline at end of file diff --git a/tests/baselines/reference/downlevelLetConst12.types b/tests/baselines/reference/downlevelLetConst12.types index 25316e67eb4..3f64d06788c 100644 --- a/tests/baselines/reference/downlevelLetConst12.types +++ b/tests/baselines/reference/downlevelLetConst12.types @@ -11,8 +11,8 @@ const bar = 1; >1 : 1 let [baz] = []; ->baz : any ->[] : [undefined?] +>baz : undefined +>[] : [] let {a: baz2} = { a: 1 }; >a : any @@ -22,8 +22,8 @@ let {a: baz2} = { a: 1 }; >1 : 1 const [baz3] = [] ->baz3 : any ->[] : [undefined?] +>baz3 : undefined +>[] : [] const {a: baz4} = { a: 1 }; >a : any diff --git a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types index 823af520806..8a60da05e6d 100644 --- a/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types +++ b/tests/baselines/reference/noImplicitAnyDestructuringVarDeclaration.types @@ -44,5 +44,5 @@ var [a4] = [undefined], {b4} = { b4: null }, c4 = undefined, d4 = null; // error var [a5 = undefined] = []; // error >a5 : any >undefined : undefined ->[] : [undefined?] +>[] : [] diff --git a/tests/baselines/reference/recursiveLetConst.types b/tests/baselines/reference/recursiveLetConst.types index 90b0d7baab1..7525d6242b6 100644 --- a/tests/baselines/reference/recursiveLetConst.types +++ b/tests/baselines/reference/recursiveLetConst.types @@ -49,7 +49,7 @@ for (let [v] of v) { } let [x2 = x2] = [] >x2 : any >x2 : any ->[] : [any?] +>[] : [] let z0 = () => z0; >z0 : () => any diff --git a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types index fb9e4aca6b5..2f9d1dac6e3 100644 --- a/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types +++ b/tests/baselines/reference/sourceMapValidationDestructuringVariableStatementArrayBindingPatternDefaultValues3.types @@ -234,11 +234,11 @@ let multiRobotAInfo: (string | string[])[]; [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB; >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = multiRobotB : [string, string[]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -246,16 +246,16 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] >multiRobotB : [string, string[]] [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB(); >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = getMultiRobotB() : [string, string[]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -263,17 +263,17 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] >getMultiRobotB() : [string, string[]] >getMultiRobotB : () => [string, string[]] [nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = >[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] = ["trimmer", ["trimming", "edging"]] : [string, [string, string]] ->[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, [string?, string?]] +>[nameMB = "helloNoName", [primarySkillB = "noSkill", secondarySkillB = "noSkill"] = []] : [string, []] >nameMB = "helloNoName" : "helloNoName" >nameMB : string >"helloNoName" : "helloNoName" ->[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [string?, string?] +>[primarySkillB = "noSkill", secondarySkillB = "noSkill"] = [] : [] >[primarySkillB = "noSkill", secondarySkillB = "noSkill"] : [string, string] >primarySkillB = "noSkill" : "noSkill" >primarySkillB : string @@ -281,7 +281,7 @@ let multiRobotAInfo: (string | string[])[]; >secondarySkillB = "noSkill" : "noSkill" >secondarySkillB : string >"noSkill" : "noSkill" ->[] : [string?, string?] +>[] : [] ["trimmer", ["trimming", "edging"]]; >["trimmer", ["trimming", "edging"]] : [string, [string, string]] From b7b7a6626c4ffe6d3d7450025da88548c419ac08 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 17:09:22 -1000 Subject: [PATCH 10/22] Add regression tests --- tests/cases/compiler/destructuringTuple.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/cases/compiler/destructuringTuple.ts b/tests/cases/compiler/destructuringTuple.ts index c6a8431da0b..1b92b239875 100644 --- a/tests/cases/compiler/destructuringTuple.ts +++ b/tests/cases/compiler/destructuringTuple.ts @@ -7,3 +7,9 @@ const [a, b, c, ...rest] = tuple; declare var receiver: typeof tuple; [...receiver] = tuple; + +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); From 4c99084b383b0664fdc46c7307148ab1b12bae0a Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 28 Jun 2019 17:10:09 -1000 Subject: [PATCH 11/22] Accept new baselines --- .../reference/destructuringTuple.errors.txt | 23 +++++++++++ .../baselines/reference/destructuringTuple.js | 9 +++++ .../reference/destructuringTuple.symbols | 24 +++++++++++ .../reference/destructuringTuple.types | 40 +++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 tests/baselines/reference/destructuringTuple.errors.txt diff --git a/tests/baselines/reference/destructuringTuple.errors.txt b/tests/baselines/reference/destructuringTuple.errors.txt new file mode 100644 index 00000000000..cd366409dc8 --- /dev/null +++ b/tests/baselines/reference/destructuringTuple.errors.txt @@ -0,0 +1,23 @@ +tests/cases/compiler/destructuringTuple.ts(11,8): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/destructuringTuple.ts(11,60): error TS2345: Argument of type 'number' is not assignable to parameter of type 'ConcatArray'. + + +==== tests/cases/compiler/destructuringTuple.ts (2 errors) ==== + declare var tuple: [boolean, number, ...string[]]; + + const [a, b, c, ...rest] = tuple; + + declare var receiver: typeof tuple; + + [...receiver] = tuple; + + // Repros from #32140 + + const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + ~~~~~ +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. + ~~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'ConcatArray'. + + const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringTuple.js b/tests/baselines/reference/destructuringTuple.js index a8a0bc6f5e3..8d580dfba51 100644 --- a/tests/baselines/reference/destructuringTuple.js +++ b/tests/baselines/reference/destructuringTuple.js @@ -6,9 +6,18 @@ const [a, b, c, ...rest] = tuple; declare var receiver: typeof tuple; [...receiver] = tuple; + +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); //// [destructuringTuple.js] "use strict"; var a = tuple[0], b = tuple[1], c = tuple[2], rest = tuple.slice(3); receiver = tuple.slice(0); +// Repros from #32140 +var oops1 = [1, 2, 3].reduce(function (accu, el) { return accu.concat(el); }, [])[0]; +var oops2 = [1, 2, 3].reduce(function (acc, e) { return acc.concat(e); }, [])[0]; diff --git a/tests/baselines/reference/destructuringTuple.symbols b/tests/baselines/reference/destructuringTuple.symbols index 73480505c3b..82e006ca8c1 100644 --- a/tests/baselines/reference/destructuringTuple.symbols +++ b/tests/baselines/reference/destructuringTuple.symbols @@ -17,3 +17,27 @@ declare var receiver: typeof tuple; >receiver : Symbol(receiver, Decl(destructuringTuple.ts, 4, 11)) >tuple : Symbol(tuple, Decl(destructuringTuple.ts, 0, 11)) +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); +>oops1 : Symbol(oops1, Decl(destructuringTuple.ts, 10, 7)) +>[1, 2, 3].reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>accu : Symbol(accu, Decl(destructuringTuple.ts, 10, 34)) +>el : Symbol(el, Decl(destructuringTuple.ts, 10, 39)) +>accu.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>accu : Symbol(accu, Decl(destructuringTuple.ts, 10, 34)) +>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>el : Symbol(el, Decl(destructuringTuple.ts, 10, 39)) + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); +>oops2 : Symbol(oops2, Decl(destructuringTuple.ts, 12, 7)) +>[1, 2, 3].reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>reduce : Symbol(Array.reduce, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>acc : Symbol(acc, Decl(destructuringTuple.ts, 12, 34)) +>e : Symbol(e, Decl(destructuringTuple.ts, 12, 48)) +>acc.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>acc : Symbol(acc, Decl(destructuringTuple.ts, 12, 34)) +>concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>e : Symbol(e, Decl(destructuringTuple.ts, 12, 48)) + diff --git a/tests/baselines/reference/destructuringTuple.types b/tests/baselines/reference/destructuringTuple.types index fe3bf84746f..466e4495a16 100644 --- a/tests/baselines/reference/destructuringTuple.types +++ b/tests/baselines/reference/destructuringTuple.types @@ -20,3 +20,43 @@ declare var receiver: typeof tuple; >receiver : [boolean, number, ...string[]] >tuple : [boolean, number, ...string[]] +// Repros from #32140 + +const [oops1] = [1, 2, 3].reduce((accu, el) => accu.concat(el), []); +>oops1 : undefined +>[1, 2, 3].reduce((accu, el) => accu.concat(el), []) : [] +>[1, 2, 3].reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>[1, 2, 3] : number[] +>1 : 1 +>2 : 2 +>3 : 3 +>reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>(accu, el) => accu.concat(el) : (accu: [], el: number) => any +>accu : [] +>el : number +>accu.concat(el) : any +>accu.concat : { (...items: ConcatArray[]): never[]; (...items: ConcatArray[]): never[]; } +>accu : [] +>concat : { (...items: ConcatArray[]): never[]; (...items: ConcatArray[]): never[]; } +>el : number +>[] : [] + +const [oops2] = [1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []); +>oops2 : number +>[1, 2, 3].reduce((acc: number[], e) => acc.concat(e), []) : number[] +>[1, 2, 3].reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>[1, 2, 3] : number[] +>1 : 1 +>2 : 2 +>3 : 3 +>reduce : { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; (callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; } +>(acc: number[], e) => acc.concat(e) : (acc: number[], e: number) => number[] +>acc : number[] +>e : number +>acc.concat(e) : number[] +>acc.concat : { (...items: ConcatArray[]): number[]; (...items: (number | ConcatArray)[]): number[]; } +>acc : number[] +>concat : { (...items: ConcatArray[]): number[]; (...items: (number | ConcatArray)[]): number[]; } +>e : number +>[] : never[] + From eb1b2251b8d8ed28f81dd8c1f18347b28ed00ac0 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:02:18 -1000 Subject: [PATCH 12/22] Pad tuple type initializers of parameter array binding elements --- src/compiler/checker.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c62263957c7..533231a575b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24233,10 +24233,13 @@ namespace ts { function checkDeclarationInitializer(declaration: HasExpressionInitializer) { const initializer = getEffectiveInitializer(declaration)!; const type = getTypeOfExpression(initializer, /*cache*/ true); + const padded = isParameter(declaration) && declaration.name.kind === SyntaxKind.ArrayBindingPattern && + isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ? + padTupleType(type, declaration.name) : type; const widened = getCombinedNodeFlags(declaration) & NodeFlags.Const || isDeclarationReadonly(declaration) || isTypeAssertion(initializer) || - isLiteralOfContextualType(type, getContextualType(initializer)) ? type : getWidenedLiteralType(type); + isLiteralOfContextualType(padded, getContextualType(initializer)) ? padded : getWidenedLiteralType(padded); if (isInJSFile(declaration)) { if (widened.flags & TypeFlags.Nullable) { reportImplicitAny(declaration, anyType); @@ -24250,6 +24253,22 @@ namespace ts { return widened; } + function padTupleType(type: TupleTypeReference, pattern: ArrayBindingPattern) { + const patternElements = pattern.elements; + const arity = getTypeReferenceArity(type); + const elementTypes = arity ? type.typeArguments!.slice() : []; + for (let i = arity; i < patternElements.length; i++) { + const e = patternElements[i]; + if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken)) { + elementTypes.push(!isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType); + if (!isOmittedExpression(e) && !hasDefaultValue(e)) { + reportImplicitAny(e, anyType); + } + } + } + return createTupleType(elementTypes, type.target.minLength, /*hasRestElement*/ false, type.target.readonly); + } + function isLiteralOfContextualType(candidateType: Type, contextualType: Type | undefined): boolean { if (contextualType) { if (contextualType.flags & TypeFlags.UnionOrIntersection) { From 32f1b4e56c820f2647817b8dbd42bc182521925d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:02:53 -1000 Subject: [PATCH 13/22] Accept new baselines --- ...estructuringVariableDeclaration1ES5iterable.types | 6 +++--- .../destructuringWithLiteralInitializers.types | 4 ++-- .../reference/downlevelLetConst16.errors.txt | 8 ++++---- tests/baselines/reference/downlevelLetConst16.types | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types index 9c943356d80..1476797e74a 100644 --- a/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types +++ b/tests/baselines/reference/destructuringVariableDeclaration1ES5iterable.types @@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] }; >f4 : number >f5 : number > : undefined ->{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; } ->f : [number, number, { f3: number; f5: number; }, undefined?] ->[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?] +>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }]; } +>f : [number, number, { f3: number; f5: number; }] +>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }] >1 : 1 >2 : 2 >{ f3: 4, f5: 0 } : { f3: number; f5: number; } diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers.types b/tests/baselines/reference/destructuringWithLiteralInitializers.types index f19c1cf2b7e..9a64518a8cb 100644 --- a/tests/baselines/reference/destructuringWithLiteralInitializers.types +++ b/tests/baselines/reference/destructuringWithLiteralInitializers.types @@ -274,7 +274,7 @@ function g4([x, y = 0] = [0]) { } >x : number >y : number >0 : 0 ->[0] : [number, number?] +>[0] : [number] >0 : 0 g4(); @@ -295,7 +295,7 @@ function g5([x = 0, y = 0] = []) { } >0 : 0 >y : number >0 : 0 ->[] : [number?, number?] +>[] : [] g5(); >g5() : void diff --git a/tests/baselines/reference/downlevelLetConst16.errors.txt b/tests/baselines/reference/downlevelLetConst16.errors.txt index 955c79378fe..664fadccac9 100644 --- a/tests/baselines/reference/downlevelLetConst16.errors.txt +++ b/tests/baselines/reference/downlevelLetConst16.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/downlevelLetConst16.ts(151,15): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. -tests/cases/compiler/downlevelLetConst16.ts(164,17): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/downlevelLetConst16.ts(151,15): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. +tests/cases/compiler/downlevelLetConst16.ts(164,17): error TS2493: Tuple type '[]' of length '0' has no element at index '0'. tests/cases/compiler/downlevelLetConst16.ts(195,14): error TS2461: Type 'undefined' is not an array type. tests/cases/compiler/downlevelLetConst16.ts(202,15): error TS2339: Property 'a' does not exist on type 'undefined'. tests/cases/compiler/downlevelLetConst16.ts(216,16): error TS2461: Type 'undefined' is not an array type. @@ -159,7 +159,7 @@ tests/cases/compiler/downlevelLetConst16.ts(223,17): error TS2339: Property 'a' } for (let [y] = []; ;) { ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. use(y); } for (let {a: z} = {a: 1}; ;) { @@ -174,7 +174,7 @@ tests/cases/compiler/downlevelLetConst16.ts(223,17): error TS2339: Property 'a' } for (const [y] = []; ;) { ~ -!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +!!! error TS2493: Tuple type '[]' of length '0' has no element at index '0'. use(y); } for (const {a: z} = { a: 1 }; ;) { diff --git a/tests/baselines/reference/downlevelLetConst16.types b/tests/baselines/reference/downlevelLetConst16.types index 450773fd9bb..ac9dc31eb04 100644 --- a/tests/baselines/reference/downlevelLetConst16.types +++ b/tests/baselines/reference/downlevelLetConst16.types @@ -515,13 +515,13 @@ function foo3() { >x : any } for (let [y] = []; ;) { ->y : any ->[] : [undefined?] +>y : undefined +>[] : [] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : undefined } for (let {a: z} = {a: 1}; ;) { >a : any @@ -554,13 +554,13 @@ function foo4() { >x : 1 } for (const [y] = []; ;) { ->y : any ->[] : [undefined?] +>y : undefined +>[] : [] use(y); >use(y) : any >use : (a: any) => any ->y : any +>y : undefined } for (const {a: z} = { a: 1 }; ;) { >a : any From 5ad3d1bf084b356b20b7a94c5f81a1695e021840 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:18:01 -1000 Subject: [PATCH 14/22] Add more tests --- .../destructuringWithLiteralInitializers2.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts diff --git a/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts b/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts new file mode 100644 index 00000000000..7654a9ac336 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts @@ -0,0 +1,29 @@ +// @strict: true + +function f00([x, y]) {} +function f01([x, y] = []) {} +function f02([x, y] = [1]) {} +function f03([x, y] = [1, 'foo']) {} + +function f10([x = 0, y]) {} +function f11([x = 0, y] = []) {} +function f12([x = 0, y] = [1]) {} +function f13([x = 0, y] = [1, 'foo']) {} + +function f20([x = 0, y = 'bar']) {} +function f21([x = 0, y = 'bar'] = []) {} +function f22([x = 0, y = 'bar'] = [1]) {} +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + +declare const nx: number | undefined; +declare const sx: string | undefined; + +function f30([x = 0, y = 'bar']) {} +function f31([x = 0, y = 'bar'] = []) {} +function f32([x = 0, y = 'bar'] = [nx]) {} +function f33([x = 0, y = 'bar'] = [nx, sx]) {} + +function f40([x = 0, y = 'bar']) {} +function f41([x = 0, y = 'bar'] = []) {} +function f42([x = 0, y = 'bar'] = [sx]) {} +function f43([x = 0, y = 'bar'] = [sx, nx]) {} From cc7a24c27f1428a7c476a704f778a6579a287633 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:18:08 -1000 Subject: [PATCH 15/22] Accept new baselines --- ...cturingWithLiteralInitializers2.errors.txt | 55 ++++++ .../destructuringWithLiteralInitializers2.js | 92 ++++++++++ ...tructuringWithLiteralInitializers2.symbols | 113 ++++++++++++ ...estructuringWithLiteralInitializers2.types | 165 ++++++++++++++++++ 4 files changed, 425 insertions(+) create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.js create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.symbols create mode 100644 tests/baselines/reference/destructuringWithLiteralInitializers2.types diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt b/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt new file mode 100644 index 00000000000..983f853f9a4 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.errors.txt @@ -0,0 +1,55 @@ +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(1,15): error TS7031: Binding element 'x' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(1,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(2,15): error TS7031: Binding element 'x' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(2,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(3,18): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(6,22): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(7,22): error TS7031: Binding element 'y' implicitly has an 'any' type. +tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts(8,22): error TS7031: Binding element 'y' implicitly has an 'any' type. + + +==== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts (8 errors) ==== + function f00([x, y]) {} + ~ +!!! error TS7031: Binding element 'x' implicitly has an 'any' type. + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f01([x, y] = []) {} + ~ +!!! error TS7031: Binding element 'x' implicitly has an 'any' type. + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f02([x, y] = [1]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f03([x, y] = [1, 'foo']) {} + + function f10([x = 0, y]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f11([x = 0, y] = []) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f12([x = 0, y] = [1]) {} + ~ +!!! error TS7031: Binding element 'y' implicitly has an 'any' type. + function f13([x = 0, y] = [1, 'foo']) {} + + function f20([x = 0, y = 'bar']) {} + function f21([x = 0, y = 'bar'] = []) {} + function f22([x = 0, y = 'bar'] = [1]) {} + function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + + declare const nx: number | undefined; + declare const sx: string | undefined; + + function f30([x = 0, y = 'bar']) {} + function f31([x = 0, y = 'bar'] = []) {} + function f32([x = 0, y = 'bar'] = [nx]) {} + function f33([x = 0, y = 'bar'] = [nx, sx]) {} + + function f40([x = 0, y = 'bar']) {} + function f41([x = 0, y = 'bar'] = []) {} + function f42([x = 0, y = 'bar'] = [sx]) {} + function f43([x = 0, y = 'bar'] = [sx, nx]) {} + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.js b/tests/baselines/reference/destructuringWithLiteralInitializers2.js new file mode 100644 index 00000000000..1f3ee956144 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.js @@ -0,0 +1,92 @@ +//// [destructuringWithLiteralInitializers2.ts] +function f00([x, y]) {} +function f01([x, y] = []) {} +function f02([x, y] = [1]) {} +function f03([x, y] = [1, 'foo']) {} + +function f10([x = 0, y]) {} +function f11([x = 0, y] = []) {} +function f12([x = 0, y] = [1]) {} +function f13([x = 0, y] = [1, 'foo']) {} + +function f20([x = 0, y = 'bar']) {} +function f21([x = 0, y = 'bar'] = []) {} +function f22([x = 0, y = 'bar'] = [1]) {} +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} + +declare const nx: number | undefined; +declare const sx: string | undefined; + +function f30([x = 0, y = 'bar']) {} +function f31([x = 0, y = 'bar'] = []) {} +function f32([x = 0, y = 'bar'] = [nx]) {} +function f33([x = 0, y = 'bar'] = [nx, sx]) {} + +function f40([x = 0, y = 'bar']) {} +function f41([x = 0, y = 'bar'] = []) {} +function f42([x = 0, y = 'bar'] = [sx]) {} +function f43([x = 0, y = 'bar'] = [sx, nx]) {} + + +//// [destructuringWithLiteralInitializers2.js] +"use strict"; +function f00(_a) { + var x = _a[0], y = _a[1]; +} +function f01(_a) { + var _b = _a === void 0 ? [] : _a, x = _b[0], y = _b[1]; +} +function f02(_a) { + var _b = _a === void 0 ? [1] : _a, x = _b[0], y = _b[1]; +} +function f03(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, x = _b[0], y = _b[1]; +} +function f10(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, y = _a[1]; +} +function f11(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f12(_a) { + var _b = _a === void 0 ? [1] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f13(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, y = _b[1]; +} +function f20(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f21(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f22(_a) { + var _b = _a === void 0 ? [1] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f23(_a) { + var _b = _a === void 0 ? [1, 'foo'] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f30(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f31(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f32(_a) { + var _b = _a === void 0 ? [nx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f33(_a) { + var _b = _a === void 0 ? [nx, sx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f40(_a) { + var _b = _a[0], x = _b === void 0 ? 0 : _b, _c = _a[1], y = _c === void 0 ? 'bar' : _c; +} +function f41(_a) { + var _b = _a === void 0 ? [] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f42(_a) { + var _b = _a === void 0 ? [sx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} +function f43(_a) { + var _b = _a === void 0 ? [sx, nx] : _a, _c = _b[0], x = _c === void 0 ? 0 : _c, _d = _b[1], y = _d === void 0 ? 'bar' : _d; +} diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols b/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols new file mode 100644 index 00000000000..44224ac22a4 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.symbols @@ -0,0 +1,113 @@ +=== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts === +function f00([x, y]) {} +>f00 : Symbol(f00, Decl(destructuringWithLiteralInitializers2.ts, 0, 0)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 0, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 0, 16)) + +function f01([x, y] = []) {} +>f01 : Symbol(f01, Decl(destructuringWithLiteralInitializers2.ts, 0, 23)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 1, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 1, 16)) + +function f02([x, y] = [1]) {} +>f02 : Symbol(f02, Decl(destructuringWithLiteralInitializers2.ts, 1, 28)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 2, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 2, 16)) + +function f03([x, y] = [1, 'foo']) {} +>f03 : Symbol(f03, Decl(destructuringWithLiteralInitializers2.ts, 2, 29)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 3, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 3, 16)) + +function f10([x = 0, y]) {} +>f10 : Symbol(f10, Decl(destructuringWithLiteralInitializers2.ts, 3, 36)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 5, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 5, 20)) + +function f11([x = 0, y] = []) {} +>f11 : Symbol(f11, Decl(destructuringWithLiteralInitializers2.ts, 5, 27)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 6, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 6, 20)) + +function f12([x = 0, y] = [1]) {} +>f12 : Symbol(f12, Decl(destructuringWithLiteralInitializers2.ts, 6, 32)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 7, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 7, 20)) + +function f13([x = 0, y] = [1, 'foo']) {} +>f13 : Symbol(f13, Decl(destructuringWithLiteralInitializers2.ts, 7, 33)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 8, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 8, 20)) + +function f20([x = 0, y = 'bar']) {} +>f20 : Symbol(f20, Decl(destructuringWithLiteralInitializers2.ts, 8, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 10, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 10, 20)) + +function f21([x = 0, y = 'bar'] = []) {} +>f21 : Symbol(f21, Decl(destructuringWithLiteralInitializers2.ts, 10, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 11, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 11, 20)) + +function f22([x = 0, y = 'bar'] = [1]) {} +>f22 : Symbol(f22, Decl(destructuringWithLiteralInitializers2.ts, 11, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 12, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 12, 20)) + +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} +>f23 : Symbol(f23, Decl(destructuringWithLiteralInitializers2.ts, 12, 41)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 13, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 13, 20)) + +declare const nx: number | undefined; +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + +declare const sx: string | undefined; +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f30([x = 0, y = 'bar']) {} +>f30 : Symbol(f30, Decl(destructuringWithLiteralInitializers2.ts, 16, 37)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 18, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 18, 20)) + +function f31([x = 0, y = 'bar'] = []) {} +>f31 : Symbol(f31, Decl(destructuringWithLiteralInitializers2.ts, 18, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 19, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 19, 20)) + +function f32([x = 0, y = 'bar'] = [nx]) {} +>f32 : Symbol(f32, Decl(destructuringWithLiteralInitializers2.ts, 19, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 20, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 20, 20)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + +function f33([x = 0, y = 'bar'] = [nx, sx]) {} +>f33 : Symbol(f33, Decl(destructuringWithLiteralInitializers2.ts, 20, 42)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 21, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 21, 20)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f40([x = 0, y = 'bar']) {} +>f40 : Symbol(f40, Decl(destructuringWithLiteralInitializers2.ts, 21, 46)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 23, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 23, 20)) + +function f41([x = 0, y = 'bar'] = []) {} +>f41 : Symbol(f41, Decl(destructuringWithLiteralInitializers2.ts, 23, 35)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 24, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 24, 20)) + +function f42([x = 0, y = 'bar'] = [sx]) {} +>f42 : Symbol(f42, Decl(destructuringWithLiteralInitializers2.ts, 24, 40)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 25, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 25, 20)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) + +function f43([x = 0, y = 'bar'] = [sx, nx]) {} +>f43 : Symbol(f43, Decl(destructuringWithLiteralInitializers2.ts, 25, 42)) +>x : Symbol(x, Decl(destructuringWithLiteralInitializers2.ts, 26, 14)) +>y : Symbol(y, Decl(destructuringWithLiteralInitializers2.ts, 26, 20)) +>sx : Symbol(sx, Decl(destructuringWithLiteralInitializers2.ts, 16, 13)) +>nx : Symbol(nx, Decl(destructuringWithLiteralInitializers2.ts, 15, 13)) + diff --git a/tests/baselines/reference/destructuringWithLiteralInitializers2.types b/tests/baselines/reference/destructuringWithLiteralInitializers2.types new file mode 100644 index 00000000000..7f955912e74 --- /dev/null +++ b/tests/baselines/reference/destructuringWithLiteralInitializers2.types @@ -0,0 +1,165 @@ +=== tests/cases/conformance/es6/destructuring/destructuringWithLiteralInitializers2.ts === +function f00([x, y]) {} +>f00 : ([x, y]: [any, any]) => void +>x : any +>y : any + +function f01([x, y] = []) {} +>f01 : ([x, y]?: [any?, any?]) => void +>x : any +>y : any +>[] : [] + +function f02([x, y] = [1]) {} +>f02 : ([x, y]?: [number, any?]) => void +>x : number +>y : any +>[1] : [number] +>1 : 1 + +function f03([x, y] = [1, 'foo']) {} +>f03 : ([x, y]?: [number, string]) => void +>x : number +>y : string +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +function f10([x = 0, y]) {} +>f10 : ([x, y]: [number | undefined, any]) => void +>x : number +>0 : 0 +>y : any + +function f11([x = 0, y] = []) {} +>f11 : ([x, y]?: [(number | undefined)?, any?]) => void +>x : number +>0 : 0 +>y : any +>[] : [] + +function f12([x = 0, y] = [1]) {} +>f12 : ([x, y]?: [number, any?]) => void +>x : number +>0 : 0 +>y : any +>[1] : [number] +>1 : 1 + +function f13([x = 0, y] = [1, 'foo']) {} +>f13 : ([x, y]?: [number, string]) => void +>x : number +>0 : 0 +>y : string +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +function f20([x = 0, y = 'bar']) {} +>f20 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f21([x = 0, y = 'bar'] = []) {} +>f21 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f22([x = 0, y = 'bar'] = [1]) {} +>f22 : ([x, y]?: [number, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[1] : [number] +>1 : 1 + +function f23([x = 0, y = 'bar'] = [1, 'foo']) {} +>f23 : ([x, y]?: [number, string]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[1, 'foo'] : [number, string] +>1 : 1 +>'foo' : "foo" + +declare const nx: number | undefined; +>nx : number | undefined + +declare const sx: string | undefined; +>sx : string | undefined + +function f30([x = 0, y = 'bar']) {} +>f30 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f31([x = 0, y = 'bar'] = []) {} +>f31 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f32([x = 0, y = 'bar'] = [nx]) {} +>f32 : ([x, y]?: [number | undefined, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[nx] : [number | undefined] +>nx : number | undefined + +function f33([x = 0, y = 'bar'] = [nx, sx]) {} +>f33 : ([x, y]?: [number | undefined, string | undefined]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[nx, sx] : [number | undefined, string | undefined] +>nx : number | undefined +>sx : string | undefined + +function f40([x = 0, y = 'bar']) {} +>f40 : ([x, y]: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" + +function f41([x = 0, y = 'bar'] = []) {} +>f41 : ([x, y]?: [(number | undefined)?, (string | undefined)?]) => void +>x : number +>0 : 0 +>y : string +>'bar' : "bar" +>[] : [] + +function f42([x = 0, y = 'bar'] = [sx]) {} +>f42 : ([x, y]?: [string | undefined, (string | undefined)?]) => void +>x : string | number +>0 : 0 +>y : string +>'bar' : "bar" +>[sx] : [string | undefined] +>sx : string | undefined + +function f43([x = 0, y = 'bar'] = [sx, nx]) {} +>f43 : ([x, y]?: [string | undefined, number | undefined]) => void +>x : string | number +>0 : 0 +>y : string | number +>'bar' : "bar" +>[sx, nx] : [string | undefined, number | undefined] +>sx : string | undefined +>nx : number | undefined + From 17153a6e5fb6bc34422a460b4d0246afd4cc0dd2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 30 Jun 2019 08:54:48 -1000 Subject: [PATCH 16/22] Fix linting error --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 533231a575b..9c7a538172c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24259,7 +24259,7 @@ namespace ts { const elementTypes = arity ? type.typeArguments!.slice() : []; for (let i = arity; i < patternElements.length; i++) { const e = patternElements[i]; - if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && (e).dotDotDotToken)) { + if (i < patternElements.length - 1 || !(e.kind === SyntaxKind.BindingElement && e.dotDotDotToken)) { elementTypes.push(!isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType); if (!isOmittedExpression(e) && !hasDefaultValue(e)) { reportImplicitAny(e, anyType); From 5b24ea80a74dcb73cef336c2ee06957b858c2c89 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 1 Jul 2019 17:46:50 -1000 Subject: [PATCH 17/22] Restore union-like behavior for inference to conditional types --- src/compiler/checker.ts | 60 ++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 92df91d0084..893e7901d64 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15354,36 +15354,11 @@ namespace ts { inferFromTypes(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target)); } else if (target.flags & TypeFlags.Conditional && !contravariant) { - inferFromTypes(source, getTrueTypeFromConditionalType(target)); - inferFromTypes(source, getFalseTypeFromConditionalType(target)); + const targetTypes = [getTrueTypeFromConditionalType(target), getFalseTypeFromConditionalType(target)]; + inferToMultipleTypes(source, targetTypes, /*isIntersection*/ false); } else if (target.flags & TypeFlags.UnionOrIntersection) { - // We infer from types that are not naked type variables first so that inferences we - // make from nested naked type variables and given slightly higher priority by virtue - // of being first in the candidates array. - let typeVariableCount = 0; - for (const t of (target).types) { - if (getInferenceInfoForType(t)) { - typeVariableCount++; - } - else { - inferFromTypes(source, t); - } - } - // Inferences directly to naked type variables are given lower priority as they are - // less specific. For example, when inferring from Promise to T | Promise, - // we want to infer string for T, not Promise | string. For intersection types - // we only infer to single naked type variables. - if (target.flags & TypeFlags.Union ? typeVariableCount !== 0 : typeVariableCount === 1) { - const savePriority = priority; - priority |= InferencePriority.NakedTypeVariable; - for (const t of (target).types) { - if (getInferenceInfoForType(t)) { - inferFromTypes(source, t); - } - } - priority = savePriority; - } + inferToMultipleTypes(source, (target).types, !!(target.flags & TypeFlags.Intersection)); } else if (source.flags & TypeFlags.Union) { // Source is a union or intersection type, infer from each constituent type @@ -15481,6 +15456,35 @@ namespace ts { return undefined; } + function inferToMultipleTypes(source: Type, targets: Type[], isIntersection: boolean) { + // We infer from types that are not naked type variables first so that inferences we + // make from nested naked type variables and given slightly higher priority by virtue + // of being first in the candidates array. + let typeVariableCount = 0; + for (const t of targets) { + if (getInferenceInfoForType(t)) { + typeVariableCount++; + } + else { + inferFromTypes(source, t); + } + } + // Inferences directly to naked type variables are given lower priority as they are + // less specific. For example, when inferring from Promise to T | Promise, + // we want to infer string for T, not Promise | string. For intersection types + // we only infer to single naked type variables. + if (isIntersection ? typeVariableCount === 1 : typeVariableCount !== 0) { + const savePriority = priority; + priority |= InferencePriority.NakedTypeVariable; + for (const t of targets) { + if (getInferenceInfoForType(t)) { + inferFromTypes(source, t); + } + } + priority = savePriority; + } + } + function inferToMappedType(source: Type, target: MappedType, constraintType: Type): boolean { if (constraintType.flags & TypeFlags.Union) { let result = false; From 8e75382ce3a8aff1783efd2f9fa5e35da241daf9 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 1 Jul 2019 17:49:36 -1000 Subject: [PATCH 18/22] Add regression test --- ...onalTypeRelaxingConstraintAssignability.js | 19 +++++++- ...ypeRelaxingConstraintAssignability.symbols | 44 +++++++++++++++++++ ...lTypeRelaxingConstraintAssignability.types | 27 ++++++++++++ ...onalTypeRelaxingConstraintAssignability.ts | 15 ++++++- 4 files changed, 103 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js index f066b18d5c6..5f142116bab 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.js @@ -21,7 +21,21 @@ export class Elem< new Elem(undefined as ElChildren.Void); new Elem('' as ElChildren.Text); new Elem('' as ElChildren.Void | ElChildren.Text); // error -new Elem('' as ElChildren); // error +new Elem('' as ElChildren); // error + +// Repro from #31766 + +interface I { a: string } + +type DeepPartial = + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; + +function g(p1: I, p2: Partial): I { + return f(p1, p2); +} + //// [conditionalTypeRelaxingConstraintAssignability.js] "use strict"; @@ -37,3 +51,6 @@ new Elem(undefined); new Elem(''); new Elem(''); // error new Elem(''); // error +function g(p1, p2) { + return f(p1, p2); +} diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols index 7ce85b0fbfa..cd526f9d4bc 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.symbols @@ -71,3 +71,47 @@ new Elem('' as ElChildren); // error >Elem : Symbol(Elem, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 8, 83)) >ElChildren : Symbol(ElChildren, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 0, 0), Decl(conditionalTypeRelaxingConstraintAssignability.ts, 2, 20)) +// Repro from #31766 + +interface I { a: string } +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>a : Symbol(I.a, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 13)) + +type DeepPartial = +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) + + T extends object ? {[K in keyof T]?: DeepPartial} : T; +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>K : Symbol(K, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) +>K : Symbol(K, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 28, 17)) + +declare function f(t: T, partial: DeepPartial): T; +>f : Symbol(f, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 64)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>t : Symbol(t, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 22)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>partial : Symbol(partial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 27)) +>DeepPartial : Symbol(DeepPartial, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 26, 25)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) +>T : Symbol(T, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 19)) + +function g(p1: I, p2: Partial): I { +>g : Symbol(g, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 31, 56)) +>p1 : Symbol(p1, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 11)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>p2 : Symbol(p2, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 17)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) +>I : Symbol(I, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 22, 27)) + + return f(p1, p2); +>f : Symbol(f, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 29, 64)) +>p1 : Symbol(p1, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 11)) +>p2 : Symbol(p2, Decl(conditionalTypeRelaxingConstraintAssignability.ts, 33, 17)) +} + diff --git a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types index c827e26bddb..2df682290f5 100644 --- a/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types +++ b/tests/baselines/reference/conditionalTypeRelaxingConstraintAssignability.types @@ -62,3 +62,30 @@ new Elem('' as ElChildren); // error >'' as ElChildren : ElChildren >'' : "" +// Repro from #31766 + +interface I { a: string } +>a : string + +type DeepPartial = +>DeepPartial : DeepPartial + + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; +>f : (t: T, partial: DeepPartial) => T +>t : T +>partial : DeepPartial + +function g(p1: I, p2: Partial): I { +>g : (p1: I, p2: Partial) => I +>p1 : I +>p2 : Partial + + return f(p1, p2); +>f(p1, p2) : I +>f : (t: T, partial: DeepPartial) => T +>p1 : I +>p2 : Partial +} + diff --git a/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts b/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts index 2f18e464e3b..04eaee9b511 100644 --- a/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts +++ b/tests/cases/compiler/conditionalTypeRelaxingConstraintAssignability.ts @@ -21,4 +21,17 @@ export class Elem< new Elem(undefined as ElChildren.Void); new Elem('' as ElChildren.Text); new Elem('' as ElChildren.Void | ElChildren.Text); // error -new Elem('' as ElChildren); // error \ No newline at end of file +new Elem('' as ElChildren); // error + +// Repro from #31766 + +interface I { a: string } + +type DeepPartial = + T extends object ? {[K in keyof T]?: DeepPartial} : T; + +declare function f(t: T, partial: DeepPartial): T; + +function g(p1: I, p2: Partial): I { + return f(p1, p2); +} From b24264f7685477d99dd9b324b0043559d41fb9ec Mon Sep 17 00:00:00 2001 From: typescript-bot Date: Tue, 2 Jul 2019 13:55:12 +0000 Subject: [PATCH 19/22] Update user baselines --- tests/baselines/reference/user/chrome-devtools-frontend.log | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index d298b174de0..228ae3113bd 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -6841,7 +6841,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(198,65): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(199,53): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(200,52): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(239,3): error TS2322: Type 'symbol' is not assignable to type 'string'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(246,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(247,19): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerDetailsView.js(248,20): error TS2555: Expected at least 2 arguments, but got 1. @@ -6934,8 +6933,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(718 node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(726,44): error TS2339: Property 'clientX' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(727,24): error TS2339: Property 'clientY' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(762,26): error TS2339: Property 'LayerStyle' does not exist on type 'typeof Layers3DView'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(777,3): error TS2322: Type 'symbol' is not assignable to type 'string'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(778,3): error TS2322: Type 'symbol' is not assignable to type 'string'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(794,28): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(795,29): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(796,29): error TS2555: Expected at least 2 arguments, but got 1. From ba1a062b93c1def5b7a6329c2fe4bbba17c571ff Mon Sep 17 00:00:00 2001 From: typescript-bot Date: Wed, 3 Jul 2019 14:02:33 +0000 Subject: [PATCH 20/22] Update user baselines --- tests/baselines/reference/user/prettier.log | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/baselines/reference/user/prettier.log b/tests/baselines/reference/user/prettier.log index c69f88a4a78..4bebd0414b1 100644 --- a/tests/baselines/reference/user/prettier.log +++ b/tests/baselines/reference/user/prettier.log @@ -5,6 +5,8 @@ src/cli/util.js(60,44): error TS2345: Argument of type 'null' is not assignable src/cli/util.js(119,38): error TS2339: Property 'sync' does not exist on type '(...args: any[]) => any'. src/cli/util.js(372,29): error TS2532: Object is possibly 'undefined'. src/cli/util.js(372,64): error TS2339: Property 'length' does not exist on type 'Ignore'. +src/cli/util.js(413,36): error TS2345: Argument of type '{ dot: true; nodir: boolean; }' is not assignable to parameter of type 'GlobbyOptions'. + Object literal may only specify known properties, and 'nodir' does not exist in type 'GlobbyOptions'. src/cli/util.js(452,25): error TS2532: Object is possibly 'undefined'. src/cli/util.js(452,52): error TS2339: Property 'length' does not exist on type 'Ignore'. src/cli/util.js(510,44): error TS2345: Argument of type 'null' is not assignable to parameter of type 'number | undefined'. From 0bea4bd3c91b81e8bd62827828565f6b2a117f25 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 3 Jul 2019 15:58:21 -0700 Subject: [PATCH 21/22] Widen object literal this types (#32240) --- src/compiler/checker.ts | 4 +- .../reference/noImplicitThisBigThis.types | 24 +++++----- .../objectLiteralThisWidenedOnUse.errors.txt | 22 +++++++++ .../objectLiteralThisWidenedOnUse.js | 27 +++++++++++ .../objectLiteralThisWidenedOnUse.symbols | 39 +++++++++++++++ .../objectLiteralThisWidenedOnUse.types | 47 +++++++++++++++++++ .../compiler/objectLiteralThisWidenedOnUse.ts | 14 ++++++ 7 files changed, 163 insertions(+), 14 deletions(-) create mode 100644 tests/baselines/reference/objectLiteralThisWidenedOnUse.errors.txt create mode 100644 tests/baselines/reference/objectLiteralThisWidenedOnUse.js create mode 100644 tests/baselines/reference/objectLiteralThisWidenedOnUse.symbols create mode 100644 tests/baselines/reference/objectLiteralThisWidenedOnUse.types create mode 100644 tests/cases/compiler/objectLiteralThisWidenedOnUse.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 72f1b9a01a6..497788b6d72 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18288,7 +18288,7 @@ namespace ts { // There was no contextual ThisType for the containing object literal, so the contextual type // for 'this' is the non-null form of the contextual type for the containing object literal or // the type of the object literal itself. - return contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral); + return getWidenedType(contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral)); } // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the // contextual type for 'this' is 'obj'. @@ -18305,7 +18305,7 @@ namespace ts { } } - return checkExpressionCached(expression); + return getWidenedType(checkExpressionCached(expression)); } } } diff --git a/tests/baselines/reference/noImplicitThisBigThis.types b/tests/baselines/reference/noImplicitThisBigThis.types index 4e1731aebc7..f6812655a67 100644 --- a/tests/baselines/reference/noImplicitThisBigThis.types +++ b/tests/baselines/reference/noImplicitThisBigThis.types @@ -11,21 +11,21 @@ function createObj() { >func1 : () => { func1(): any; func2(): any; func3(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; } }, func2() { >func2 : () => { func1(): any; func2(): any; func3(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; } }, func3() { >func3 : () => { func1(): any; func2(): any; func3(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; } } }; } @@ -40,63 +40,63 @@ function createObjNoCrash() { >func1 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func2() { >func2 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func3() { >func3 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func4() { >func4 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func5() { >func5 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func6() { >func6 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func7() { >func7 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func8() { >func8 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } }, func9() { >func9 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } return this; ->this : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>this : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } } }; } diff --git a/tests/baselines/reference/objectLiteralThisWidenedOnUse.errors.txt b/tests/baselines/reference/objectLiteralThisWidenedOnUse.errors.txt new file mode 100644 index 00000000000..72971321db7 --- /dev/null +++ b/tests/baselines/reference/objectLiteralThisWidenedOnUse.errors.txt @@ -0,0 +1,22 @@ +tests/cases/compiler/objectLiteralThisWidenedOnUse.ts(8,21): error TS2345: Argument of type '{ prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; }' is not assignable to parameter of type 'Foo'. + Property 'bar' is missing in type '{ prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; }' but required in type 'Foo'. + + +==== tests/cases/compiler/objectLiteralThisWidenedOnUse.ts (1 errors) ==== + interface Foo { bar: boolean; } + + var GlobalIns = { + prop1: 1, + prop2: 2, + prop3: 3, + test () { + this.accept_foo(this); + ~~~~ +!!! error TS2345: Argument of type '{ prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; }' is not assignable to parameter of type 'Foo'. +!!! error TS2345: Property 'bar' is missing in type '{ prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; }' but required in type 'Foo'. +!!! related TS2728 tests/cases/compiler/objectLiteralThisWidenedOnUse.ts:1:17: 'bar' is declared here. + }, + accept_foo (foo: Foo): boolean { + return !!foo && !!foo.bar; + } + }; \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralThisWidenedOnUse.js b/tests/baselines/reference/objectLiteralThisWidenedOnUse.js new file mode 100644 index 00000000000..5dddfd6f3d1 --- /dev/null +++ b/tests/baselines/reference/objectLiteralThisWidenedOnUse.js @@ -0,0 +1,27 @@ +//// [objectLiteralThisWidenedOnUse.ts] +interface Foo { bar: boolean; } + +var GlobalIns = { + prop1: 1, + prop2: 2, + prop3: 3, + test () { + this.accept_foo(this); + }, + accept_foo (foo: Foo): boolean { + return !!foo && !!foo.bar; + } +}; + +//// [objectLiteralThisWidenedOnUse.js] +var GlobalIns = { + prop1: 1, + prop2: 2, + prop3: 3, + test: function () { + this.accept_foo(this); + }, + accept_foo: function (foo) { + return !!foo && !!foo.bar; + } +}; diff --git a/tests/baselines/reference/objectLiteralThisWidenedOnUse.symbols b/tests/baselines/reference/objectLiteralThisWidenedOnUse.symbols new file mode 100644 index 00000000000..def5fdf16e1 --- /dev/null +++ b/tests/baselines/reference/objectLiteralThisWidenedOnUse.symbols @@ -0,0 +1,39 @@ +=== tests/cases/compiler/objectLiteralThisWidenedOnUse.ts === +interface Foo { bar: boolean; } +>Foo : Symbol(Foo, Decl(objectLiteralThisWidenedOnUse.ts, 0, 0)) +>bar : Symbol(Foo.bar, Decl(objectLiteralThisWidenedOnUse.ts, 0, 15)) + +var GlobalIns = { +>GlobalIns : Symbol(GlobalIns, Decl(objectLiteralThisWidenedOnUse.ts, 2, 3)) + + prop1: 1, +>prop1 : Symbol(prop1, Decl(objectLiteralThisWidenedOnUse.ts, 2, 17)) + + prop2: 2, +>prop2 : Symbol(prop2, Decl(objectLiteralThisWidenedOnUse.ts, 3, 11)) + + prop3: 3, +>prop3 : Symbol(prop3, Decl(objectLiteralThisWidenedOnUse.ts, 4, 11)) + + test () { +>test : Symbol(test, Decl(objectLiteralThisWidenedOnUse.ts, 5, 11)) + + this.accept_foo(this); +>this.accept_foo : Symbol(accept_foo, Decl(objectLiteralThisWidenedOnUse.ts, 8, 4)) +>this : Symbol(GlobalIns, Decl(objectLiteralThisWidenedOnUse.ts, 2, 15)) +>accept_foo : Symbol(accept_foo, Decl(objectLiteralThisWidenedOnUse.ts, 8, 4)) +>this : Symbol(GlobalIns, Decl(objectLiteralThisWidenedOnUse.ts, 2, 15)) + + }, + accept_foo (foo: Foo): boolean { +>accept_foo : Symbol(accept_foo, Decl(objectLiteralThisWidenedOnUse.ts, 8, 4)) +>foo : Symbol(foo, Decl(objectLiteralThisWidenedOnUse.ts, 9, 14)) +>Foo : Symbol(Foo, Decl(objectLiteralThisWidenedOnUse.ts, 0, 0)) + + return !!foo && !!foo.bar; +>foo : Symbol(foo, Decl(objectLiteralThisWidenedOnUse.ts, 9, 14)) +>foo.bar : Symbol(Foo.bar, Decl(objectLiteralThisWidenedOnUse.ts, 0, 15)) +>foo : Symbol(foo, Decl(objectLiteralThisWidenedOnUse.ts, 9, 14)) +>bar : Symbol(Foo.bar, Decl(objectLiteralThisWidenedOnUse.ts, 0, 15)) + } +}; diff --git a/tests/baselines/reference/objectLiteralThisWidenedOnUse.types b/tests/baselines/reference/objectLiteralThisWidenedOnUse.types new file mode 100644 index 00000000000..d13e2bcaa60 --- /dev/null +++ b/tests/baselines/reference/objectLiteralThisWidenedOnUse.types @@ -0,0 +1,47 @@ +=== tests/cases/compiler/objectLiteralThisWidenedOnUse.ts === +interface Foo { bar: boolean; } +>bar : boolean + +var GlobalIns = { +>GlobalIns : { prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; } +>{ prop1: 1, prop2: 2, prop3: 3, test () { this.accept_foo(this); }, accept_foo (foo: Foo): boolean { return !!foo && !!foo.bar; }} : { prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; } + + prop1: 1, +>prop1 : number +>1 : 1 + + prop2: 2, +>prop2 : number +>2 : 2 + + prop3: 3, +>prop3 : number +>3 : 3 + + test () { +>test : () => void + + this.accept_foo(this); +>this.accept_foo(this) : boolean +>this.accept_foo : (foo: Foo) => boolean +>this : { prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; } +>accept_foo : (foo: Foo) => boolean +>this : { prop1: number; prop2: number; prop3: number; test(): void; accept_foo(foo: Foo): boolean; } + + }, + accept_foo (foo: Foo): boolean { +>accept_foo : (foo: Foo) => boolean +>foo : Foo + + return !!foo && !!foo.bar; +>!!foo && !!foo.bar : boolean +>!!foo : boolean +>!foo : boolean +>foo : Foo +>!!foo.bar : boolean +>!foo.bar : boolean +>foo.bar : boolean +>foo : Foo +>bar : boolean + } +}; diff --git a/tests/cases/compiler/objectLiteralThisWidenedOnUse.ts b/tests/cases/compiler/objectLiteralThisWidenedOnUse.ts new file mode 100644 index 00000000000..7d2088720a5 --- /dev/null +++ b/tests/cases/compiler/objectLiteralThisWidenedOnUse.ts @@ -0,0 +1,14 @@ +// @noImplicitThis: true +interface Foo { bar: boolean; } + +var GlobalIns = { + prop1: 1, + prop2: 2, + prop3: 3, + test () { + this.accept_foo(this); + }, + accept_foo (foo: Foo): boolean { + return !!foo && !!foo.bar; + } +}; \ No newline at end of file From e8bf9584aa74aabfecb51a02edb13e3657508274 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Wed, 3 Jul 2019 21:55:59 -0700 Subject: [PATCH 22/22] Improve type checking and inference for Generators and Async Generators (#30790) * Improve typing for Generators and Async Generators * Add TReturn and TNext to Iterator, IterableIterator, etc. * Update ts internal Iterator to be assignable from global Iterator * Make 'done' optional in IteratorYieldResult * Revert Iterable and IterableIterator to simpler versions plus other fixes * Add additional inference tests * Added additional tests * PR cleanup and minor async iteration type fix * Updated diagnostics message and added non-strict tests * Fix expected arity of Iterator/AsyncIterator --- src/compiler/builderState.ts | 4 +- src/compiler/checker.ts | 1206 ++++++++++++----- src/compiler/commandLineParser.ts | 5 +- src/compiler/core.ts | 29 +- src/compiler/diagnosticMessages.json | 35 +- src/compiler/sourcemap.ts | 3 +- src/compiler/types.ts | 18 +- src/compiler/utilities.ts | 8 +- src/harness/sourceMapRecorder.ts | 6 +- src/harness/vfs.ts | 4 +- src/lib/es2015.generator.d.ts | 10 +- src/lib/es2015.iterable.d.ts | 22 +- src/lib/es2018.asyncgenerator.d.ts | 59 + src/lib/es2018.asynciterable.d.ts | 9 +- src/lib/es2018.d.ts | 1 + src/lib/libs.json | 1 + src/server/editorServices.ts | 15 +- src/testRunner/parallel/host.ts | 4 +- .../unittests/config/commandLineParsing.ts | 6 +- src/testRunner/unittests/config/showConfig.ts | 4 +- src/testRunner/unittests/shimMap.ts | 7 +- src/testRunner/unittests/tsserver/helpers.ts | 7 +- src/tsconfig-base.json | 2 +- .../reference/FunctionDeclaration11_es6.types | 2 +- .../reference/FunctionDeclaration13_es6.types | 2 +- .../reference/FunctionDeclaration1_es6.types | 2 +- .../reference/FunctionDeclaration6_es6.types | 2 +- .../reference/FunctionDeclaration7_es6.types | 4 +- .../reference/FunctionDeclaration9_es6.types | 10 +- .../reference/FunctionExpression1_es6.types | 4 +- .../reference/FunctionExpression2_es6.types | 6 +- .../FunctionPropertyAssignments1_es6.types | 6 +- .../FunctionPropertyAssignments2_es6.types | 6 +- .../FunctionPropertyAssignments3_es6.types | 6 +- .../FunctionPropertyAssignments5_es6.types | 6 +- .../FunctionPropertyAssignments6_es6.types | 6 +- .../MemberFunctionDeclaration1_es6.types | 2 +- .../MemberFunctionDeclaration2_es6.types | 2 +- .../MemberFunctionDeclaration3_es6.types | 2 +- .../MemberFunctionDeclaration4_es6.types | 2 +- .../MemberFunctionDeclaration7_es6.types | 2 +- .../reference/YieldExpression10_es6.types | 6 +- .../reference/YieldExpression11_es6.types | 2 +- .../reference/YieldExpression13_es6.types | 2 +- .../reference/YieldExpression16_es6.types | 4 +- .../reference/YieldExpression19_es6.types | 8 +- .../reference/YieldExpression3_es6.types | 2 +- .../reference/YieldExpression4_es6.types | 2 +- .../reference/YieldExpression5_es6.types | 2 +- .../reference/YieldExpression7_es6.types | 4 +- .../reference/YieldExpression8_es6.types | 8 +- .../reference/YieldExpression9_es6.types | 4 +- .../reference/YieldStarExpression3_es6.types | 2 +- .../reference/YieldStarExpression4_es6.types | 2 +- .../reference/api/tsserverlibrary.d.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 2 +- .../reference/asyncImportNestedYield.types | 2 +- .../reference/asyncMethodWithSuper_es6.types | 8 +- .../reference/awaitInNonAsyncFunction.types | 2 +- ...ckScopedBindingsInDownlevelGenerator.types | 2 +- .../capturedParametersInInitializers1.types | 10 +- .../reference/castOfYield.errors.txt | 4 +- .../baselines/reference/controlFlowIIFE.types | 6 +- ....asyncGenerators.classMethods.es2015.types | 28 +- ....asyncGenerators.classMethods.es2018.types | 28 +- ...ter.asyncGenerators.classMethods.es5.types | 28 +- ...nerators.functionDeclarations.es2015.types | 24 +- ...nerators.functionDeclarations.es2018.types | 24 +- ...cGenerators.functionDeclarations.es5.types | 24 +- ...enerators.functionExpressions.es2015.types | 38 +- ...enerators.functionExpressions.es2018.types | 38 +- ...ncGenerators.functionExpressions.es5.types | 38 +- ...nerators.objectLiteralMethods.es2015.types | 52 +- ...nerators.objectLiteralMethods.es2018.types | 52 +- ...cGenerators.objectLiteralMethods.es5.types | 52 +- .../reference/emitter.forAwait.es2015.types | 6 +- .../reference/emitter.forAwait.es2017.types | 6 +- .../reference/emitter.forAwait.es2018.types | 6 +- .../reference/emitter.forAwait.es5.types | 6 +- ...ionsForbiddenInParameterInitializers.types | 2 +- tests/baselines/reference/for-of29.errors.txt | 6 +- tests/baselines/reference/for-of29.types | 8 +- tests/baselines/reference/for-of30.errors.txt | 18 +- tests/baselines/reference/for-of30.js | 4 +- tests/baselines/reference/for-of30.symbols | 4 +- tests/baselines/reference/for-of30.types | 4 +- tests/baselines/reference/for-of31.errors.txt | 33 - tests/baselines/reference/for-of31.js | 2 +- tests/baselines/reference/for-of31.symbols | 2 +- tests/baselines/reference/for-of31.types | 2 +- tests/baselines/reference/for-of34.errors.txt | 2 +- tests/baselines/reference/for-of34.js | 2 +- tests/baselines/reference/for-of34.symbols | 2 +- tests/baselines/reference/for-of34.types | 2 +- tests/baselines/reference/for-of35.errors.txt | 2 +- tests/baselines/reference/for-of35.js | 2 +- tests/baselines/reference/for-of35.symbols | 2 +- tests/baselines/reference/for-of35.types | 2 +- .../generatorAssignability.errors.txt | 106 ++ .../reference/generatorAssignability.symbols | 157 +++ .../reference/generatorAssignability.types | 177 +++ .../reference/generatorES6InAMDModule.types | 2 +- .../baselines/reference/generatorES6_1.types | 2 +- .../baselines/reference/generatorES6_2.types | 2 +- .../baselines/reference/generatorES6_3.types | 4 +- .../baselines/reference/generatorES6_4.types | 6 +- .../baselines/reference/generatorES6_5.types | 2 +- .../baselines/reference/generatorES6_6.types | 2 +- .../generatorExplicitReturnType.errors.txt | 41 + .../reference/generatorExplicitReturnType.js | 44 + .../generatorExplicitReturnType.symbols | 48 + .../generatorExplicitReturnType.types | 58 + .../reference/generatorImplicitAny.js | 5 + .../reference/generatorImplicitAny.symbols | 4 + .../reference/generatorImplicitAny.types | 4 + .../generatorNoImplicitReturns.types | 2 +- .../generatorReturnExpressionIsChecked.types | 2 +- .../reference/generatorReturnTypeInference.js | 236 ++++ .../generatorReturnTypeInference.symbols | 258 ++++ .../generatorReturnTypeInference.types | 308 +++++ ...torReturnTypeInferenceNonStrict.errors.txt | 156 +++ .../generatorReturnTypeInferenceNonStrict.js | 240 ++++ ...eratorReturnTypeInferenceNonStrict.symbols | 260 ++++ ...eneratorReturnTypeInferenceNonStrict.types | 310 +++++ .../reference/generatorTypeCheck1.types | 2 +- .../reference/generatorTypeCheck13.types | 2 +- .../reference/generatorTypeCheck14.types | 2 +- .../reference/generatorTypeCheck15.types | 2 +- .../reference/generatorTypeCheck16.types | 2 +- .../reference/generatorTypeCheck17.types | 4 +- .../reference/generatorTypeCheck18.types | 4 +- .../reference/generatorTypeCheck19.types | 2 +- .../reference/generatorTypeCheck20.types | 2 +- .../reference/generatorTypeCheck21.types | 2 +- .../reference/generatorTypeCheck22.types | 2 +- .../reference/generatorTypeCheck23.types | 2 +- .../reference/generatorTypeCheck24.types | 2 +- .../reference/generatorTypeCheck25.errors.txt | 36 +- .../reference/generatorTypeCheck25.types | 2 +- .../reference/generatorTypeCheck26.types | 2 +- .../reference/generatorTypeCheck27.types | 6 +- .../reference/generatorTypeCheck28.types | 6 +- .../reference/generatorTypeCheck29.types | 8 +- .../reference/generatorTypeCheck30.types | 8 +- .../reference/generatorTypeCheck31.errors.txt | 8 +- .../reference/generatorTypeCheck31.types | 8 +- .../reference/generatorTypeCheck33.types | 4 +- .../reference/generatorTypeCheck34.types | 4 +- .../reference/generatorTypeCheck35.types | 2 +- .../reference/generatorTypeCheck36.types | 2 +- .../reference/generatorTypeCheck37.types | 2 +- .../reference/generatorTypeCheck38.types | 2 +- .../reference/generatorTypeCheck39.types | 2 +- .../reference/generatorTypeCheck40.types | 2 +- .../reference/generatorTypeCheck41.types | 2 +- .../reference/generatorTypeCheck42.types | 2 +- .../reference/generatorTypeCheck43.types | 8 +- .../reference/generatorTypeCheck44.types | 2 +- .../reference/generatorTypeCheck45.types | 8 +- .../reference/generatorTypeCheck46.types | 8 +- .../reference/generatorTypeCheck47.errors.txt | 7 - .../reference/generatorTypeCheck47.types | 2 +- .../reference/generatorTypeCheck48.errors.txt | 8 +- .../reference/generatorTypeCheck48.types | 4 +- .../reference/generatorTypeCheck49.types | 2 +- .../reference/generatorTypeCheck50.types | 2 +- .../reference/generatorTypeCheck51.errors.txt | 11 - .../reference/generatorTypeCheck51.types | 4 +- .../reference/generatorTypeCheck52.types | 2 +- .../reference/generatorTypeCheck53.types | 2 +- .../reference/generatorTypeCheck54.types | 2 +- .../reference/generatorTypeCheck55.types | 2 +- .../reference/generatorTypeCheck56.types | 4 +- .../reference/generatorTypeCheck57.types | 2 +- .../reference/generatorTypeCheck58.types | 2 +- .../reference/generatorTypeCheck59.types | 2 +- .../reference/generatorTypeCheck6.errors.txt | 4 +- .../reference/generatorTypeCheck60.types | 2 +- .../reference/generatorTypeCheck61.types | 2 +- .../reference/generatorTypeCheck62.types | 10 +- .../reference/generatorTypeCheck63.errors.txt | 41 +- .../reference/generatorTypeCheck63.types | 16 +- .../reference/generatorTypeCheck7.errors.txt | 4 +- .../reference/generatorTypeCheck8.errors.txt | 20 +- ...portCallExpressionReturnPromiseOfAny.types | 2 +- ...rtHelpersNoHelpersForAsyncGenerators.types | 2 +- .../iteratorSpreadInArray9.errors.txt | 32 - .../reference/iteratorSpreadInCall12.js | 8 +- .../reference/iteratorSpreadInCall12.symbols | 14 +- .../reference/iteratorSpreadInCall12.types | 22 +- .../reference/iteratorSpreadInCall5.js | 8 +- .../reference/iteratorSpreadInCall5.symbols | 14 +- .../reference/iteratorSpreadInCall5.types | 14 +- .../iteratorSpreadInCall6.errors.txt | 6 +- .../reference/iteratorSpreadInCall6.js | 8 +- .../reference/iteratorSpreadInCall6.symbols | 14 +- .../reference/iteratorSpreadInCall6.types | 14 +- .../iteratorSpreadInCall7.errors.txt | 6 +- .../reference/iteratorSpreadInCall7.js | 8 +- .../reference/iteratorSpreadInCall7.symbols | 14 +- .../reference/iteratorSpreadInCall7.types | 14 +- .../iteratorSpreadInCall8.errors.txt | 6 +- .../reference/iteratorSpreadInCall8.js | 8 +- .../reference/iteratorSpreadInCall8.symbols | 14 +- .../reference/iteratorSpreadInCall8.types | 14 +- .../iteratorSpreadInCall9.errors.txt | 6 +- .../reference/iteratorSpreadInCall9.js | 8 +- .../reference/iteratorSpreadInCall9.symbols | 14 +- .../reference/iteratorSpreadInCall9.types | 18 +- .../reference/labeledStatementWithLabel.types | 2 +- .../labeledStatementWithLabel_es2015.types | 2 +- .../labeledStatementWithLabel_strict.types | 2 +- ...eLibrary_NoErrorDuplicateLibOptions1.types | 4 +- ...eLibrary_NoErrorDuplicateLibOptions2.types | 4 +- ...dularizeLibrary_TargetES5UsingES6Lib.types | 4 +- ...Library_UsingES5LibAndES6FeatureLibs.types | 2 +- ....asyncGenerators.classMethods.es2018.types | 42 +- ...nerators.functionDeclarations.es2018.types | 44 +- ...enerators.functionExpressions.es2018.types | 72 +- ...nerators.objectLiteralMethods.es2018.types | 116 +- .../reference/parser.forAwait.es2018.types | 8 +- .../restParameterInDownlevelGenerator.types | 2 +- .../strictGeneratorTypes/tsconfig.json | 5 + ...MapValidationVarInDownLevelGenerator.types | 2 +- ...romGeneratorMakesRequiredParams.errors.txt | 4 +- .../templateStringInYieldKeyword.types | 2 +- ...eStringWithEmbeddedYieldKeyword.errors.txt | 4 +- ...ateStringWithEmbeddedYieldKeywordES6.types | 2 +- .../types.asyncGenerators.es2018.1.types | 138 +- .../types.asyncGenerators.es2018.2.errors.txt | 153 ++- .../types.asyncGenerators.es2018.2.types | 96 +- .../reference/types.forAwait.es2018.1.types | 2 +- .../types.forAwait.es2018.3.errors.txt | 4 +- tests/baselines/reference/uniqueSymbols.types | 32 +- .../reference/uniqueSymbolsDeclarations.js | 20 +- .../reference/uniqueSymbolsDeclarations.types | 32 +- .../reference/yieldExpression1.types | 6 +- .../yieldExpressionInControlFlow.types | 4 +- .../reference/yieldExpressionInFlowLoop.types | 2 +- .../yieldExpressionInnerCommentEmit.types | 2 +- .../es6/for-ofStatements/for-of30.ts | 4 +- .../es6/for-ofStatements/for-of31.ts | 2 +- .../es6/for-ofStatements/for-of34.ts | 2 +- .../es6/for-ofStatements/for-of35.ts | 2 +- .../es6/spread/iteratorSpreadInCall12.ts | 4 +- .../es6/spread/iteratorSpreadInCall5.ts | 4 +- .../es6/spread/iteratorSpreadInCall6.ts | 4 +- .../es6/spread/iteratorSpreadInCall7.ts | 4 +- .../es6/spread/iteratorSpreadInCall8.ts | 4 +- .../es6/spread/iteratorSpreadInCall9.ts | 4 +- .../generators/generatorAssignability.ts | 73 + .../generators/generatorExplicitReturnType.ts | 28 + .../generators/generatorImplicitAny.ts | 6 + .../generatorReturnTypeInference.ts | 137 ++ .../generatorReturnTypeInferenceNonStrict.ts | 139 ++ 255 files changed, 4914 insertions(+), 1536 deletions(-) create mode 100644 src/lib/es2018.asyncgenerator.d.ts delete mode 100644 tests/baselines/reference/for-of31.errors.txt create mode 100644 tests/baselines/reference/generatorAssignability.errors.txt create mode 100644 tests/baselines/reference/generatorAssignability.symbols create mode 100644 tests/baselines/reference/generatorAssignability.types create mode 100644 tests/baselines/reference/generatorExplicitReturnType.errors.txt create mode 100644 tests/baselines/reference/generatorExplicitReturnType.js create mode 100644 tests/baselines/reference/generatorExplicitReturnType.symbols create mode 100644 tests/baselines/reference/generatorExplicitReturnType.types create mode 100644 tests/baselines/reference/generatorImplicitAny.js create mode 100644 tests/baselines/reference/generatorImplicitAny.symbols create mode 100644 tests/baselines/reference/generatorImplicitAny.types create mode 100644 tests/baselines/reference/generatorReturnTypeInference.js create mode 100644 tests/baselines/reference/generatorReturnTypeInference.symbols create mode 100644 tests/baselines/reference/generatorReturnTypeInference.types create mode 100644 tests/baselines/reference/generatorReturnTypeInferenceNonStrict.errors.txt create mode 100644 tests/baselines/reference/generatorReturnTypeInferenceNonStrict.js create mode 100644 tests/baselines/reference/generatorReturnTypeInferenceNonStrict.symbols create mode 100644 tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types delete mode 100644 tests/baselines/reference/generatorTypeCheck47.errors.txt delete mode 100644 tests/baselines/reference/generatorTypeCheck51.errors.txt delete mode 100644 tests/baselines/reference/iteratorSpreadInArray9.errors.txt create mode 100644 tests/baselines/reference/showConfig/Shows tsconfig for single option/strictGeneratorTypes/tsconfig.json create mode 100644 tests/cases/conformance/generators/generatorAssignability.ts create mode 100644 tests/cases/conformance/generators/generatorExplicitReturnType.ts create mode 100644 tests/cases/conformance/generators/generatorImplicitAny.ts create mode 100644 tests/cases/conformance/generators/generatorReturnTypeInference.ts create mode 100644 tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts index 58b189d9e81..953334321c2 100644 --- a/src/compiler/builderState.ts +++ b/src/compiler/builderState.ts @@ -427,8 +427,8 @@ namespace ts.BuilderState { const references = state.referencedMap.get(path); if (references) { const iterator = references.keys(); - for (let { value, done } = iterator.next(); !done; { value, done } = iterator.next()) { - queue.push(value as Path); + for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) { + queue.push(iterResult.value as Path); } } } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 497788b6d72..40b86ad679a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7,6 +7,56 @@ namespace ts { let nextMergeId = 1; let nextFlowId = 1; + const enum IterationUse { + AllowsSyncIterablesFlag = 1 << 0, + AllowsAsyncIterablesFlag = 1 << 1, + AllowsStringInputFlag = 1 << 2, + ForOfFlag = 1 << 3, + YieldStarFlag = 1 << 4, + SpreadFlag = 1 << 5, + DestructuringFlag = 1 << 6, + + // Spread, Destructuring, Array element assignment + Element = AllowsSyncIterablesFlag, + Spread = AllowsSyncIterablesFlag | SpreadFlag, + Destructuring = AllowsSyncIterablesFlag | DestructuringFlag, + + ForOf = AllowsSyncIterablesFlag | AllowsStringInputFlag | ForOfFlag, + ForAwaitOf = AllowsSyncIterablesFlag | AllowsAsyncIterablesFlag | AllowsStringInputFlag | ForOfFlag, + + YieldStar = AllowsSyncIterablesFlag | YieldStarFlag, + AsyncYieldStar = AllowsSyncIterablesFlag | AllowsAsyncIterablesFlag | YieldStarFlag, + + GeneratorReturnType = AllowsSyncIterablesFlag, + AsyncGeneratorReturnType = AllowsAsyncIterablesFlag, + + } + + const enum IterationTypeKind { + Yield, + Return, + Next, + } + + interface IterationTypesResolver { + iterableCacheKey: "iterationTypesOfAsyncIterable" | "iterationTypesOfIterable"; + iteratorCacheKey: "iterationTypesOfAsyncIterator" | "iterationTypesOfIterator"; + iteratorSymbolName: "asyncIterator" | "iterator"; + getGlobalIteratorType: (reportErrors: boolean) => Type; + getGlobalIterableType: (reportErrors: boolean) => Type; + getGlobalIterableIteratorType: (reportErrors: boolean) => Type; + getGlobalGeneratorType: (reportErrors: boolean) => Type; + resolveIterationType: (type: Type, errorNode: Node | undefined) => Type | undefined; + mustHaveANextMethodDiagnostic: DiagnosticMessage; + mustBeAMethodDiagnostic: DiagnosticMessage; + mustHaveAValueDiagnostic: DiagnosticMessage; + } + + const enum WideningKind { + Normal, + GeneratorYield + } + export function getNodeId(node: Node): number { if (!node.id) { node.id = nextNodeId; @@ -481,6 +531,44 @@ namespace ts { const enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true); + const iterationTypesCache = createMap(); // cache for common IterationTypes instances + const noIterationTypes: IterationTypes = { + get yieldType(): Type { throw new Error("Not supported"); }, + get returnType(): Type { throw new Error("Not supported"); }, + get nextType(): Type { throw new Error("Not supported"); }, + }; + const anyIterationTypes = createIterationTypes(anyType, anyType, anyType); + const anyIterationTypesExceptNext = createIterationTypes(anyType, anyType, unknownType); + const defaultIterationTypes = createIterationTypes(neverType, anyType, undefinedType); // default iteration types for `Iterator`. + + const asyncIterationTypesResolver: IterationTypesResolver = { + iterableCacheKey: "iterationTypesOfAsyncIterable", + iteratorCacheKey: "iterationTypesOfAsyncIterator", + iteratorSymbolName: "asyncIterator", + getGlobalIteratorType: getGlobalAsyncIteratorType, + getGlobalIterableType: getGlobalAsyncIterableType, + getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType, + getGlobalGeneratorType: getGlobalAsyncGeneratorType, + resolveIterationType: getAwaitedType, + mustHaveANextMethodDiagnostic: Diagnostics.An_async_iterator_must_have_a_next_method, + mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method, + mustHaveAValueDiagnostic: Diagnostics.The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property, + }; + + const syncIterationTypesResolver: IterationTypesResolver = { + iterableCacheKey: "iterationTypesOfIterable", + iteratorCacheKey: "iterationTypesOfIterator", + iteratorSymbolName: "iterator", + getGlobalIteratorType, + getGlobalIterableType, + getGlobalIterableIteratorType, + getGlobalGeneratorType, + resolveIterationType: (type, _errorNode) => type, + mustHaveANextMethodDiagnostic: Diagnostics.An_iterator_must_have_a_next_method, + mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_iterator_must_be_a_method, + mustHaveAValueDiagnostic: Diagnostics.The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property, + }; + interface DuplicateInfoForSymbol { readonly firstFileLocations: Node[]; readonly secondFileLocations: Node[]; @@ -533,9 +621,13 @@ namespace ts { let deferredGlobalIterableType: GenericType; let deferredGlobalIteratorType: GenericType; let deferredGlobalIterableIteratorType: GenericType; + let deferredGlobalGeneratorType: GenericType; + let deferredGlobalIteratorYieldResultType: GenericType; + let deferredGlobalIteratorReturnResultType: GenericType; let deferredGlobalAsyncIterableType: GenericType; let deferredGlobalAsyncIteratorType: GenericType; let deferredGlobalAsyncIterableIteratorType: GenericType; + let deferredGlobalAsyncGeneratorType: GenericType; let deferredGlobalTemplateStringsArrayType: ObjectType; let deferredGlobalImportMetaType: ObjectType; let deferredGlobalExtractSymbol: Symbol; @@ -5108,7 +5200,7 @@ namespace ts { // This elementType will be used if the specific property corresponding to this index is not // present (aka the tuple element property). This call also checks that the parentType is in // fact an iterable or array (depending on target language). - const elementType = checkIteratedTypeOrElementType(parentType, pattern, /*allowStringInput*/ false, /*allowAsyncIterables*/ false); + const elementType = checkIteratedTypeOrElementType(IterationUse.Destructuring, parentType, undefinedType, pattern); const index = pattern.elements.indexOf(declaration); if (declaration.dotDotDotToken) { // If the parent is a tuple type, the rest element has a tuple type of the @@ -9340,25 +9432,41 @@ namespace ts { } function getGlobalAsyncIteratorType(reportErrors: boolean) { - return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalAsyncIterableIteratorType(reportErrors: boolean) { return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; } + function getGlobalAsyncGeneratorType(reportErrors: boolean) { + return deferredGlobalAsyncGeneratorType || (deferredGlobalAsyncGeneratorType = getGlobalType("AsyncGenerator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; + } + function getGlobalIterableType(reportErrors: boolean) { return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; } function getGlobalIteratorType(reportErrors: boolean) { - return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalIterableIteratorType(reportErrors: boolean) { return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; } + function getGlobalGeneratorType(reportErrors: boolean) { + return deferredGlobalGeneratorType || (deferredGlobalGeneratorType = getGlobalType("Generator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; + } + + function getGlobalIteratorYieldResultType(reportErrors: boolean) { + return deferredGlobalIteratorYieldResultType || (deferredGlobalIteratorYieldResultType = getGlobalType("IteratorYieldResult" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + } + + function getGlobalIteratorReturnResultType(reportErrors: boolean) { + return deferredGlobalIteratorReturnResultType || (deferredGlobalIteratorReturnResultType = getGlobalType("IteratorReturnResult" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + } + function getGlobalTypeOrUndefined(name: __String, arity = 0): ObjectType | undefined { const symbol = getGlobalSymbol(name, SymbolFlags.Type, /*diagnostic*/ undefined); return symbol && getTypeOfGlobalSymbol(symbol, arity); @@ -9387,20 +9495,22 @@ namespace ts { return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]); } - function createAsyncIterableType(iteratedType: Type): Type { - return createTypeFromGenericGlobalType(getGlobalAsyncIterableType(/*reportErrors*/ true), [iteratedType]); - } - - function createAsyncIterableIteratorType(iteratedType: Type): Type { - return createTypeFromGenericGlobalType(getGlobalAsyncIterableIteratorType(/*reportErrors*/ true), [iteratedType]); + function createAsyncGeneratorType(yieldType: Type, returnType: Type, nextType: Type) { + const globalAsyncGeneratorType = getGlobalAsyncGeneratorType(/*reportErrors*/ true); + if (globalAsyncGeneratorType !== emptyGenericType) { + yieldType = getAwaitedType(yieldType) || unknownType; + returnType = getAwaitedType(returnType) || unknownType; + nextType = getAwaitedType(nextType) || unknownType; + } + return createTypeFromGenericGlobalType(globalAsyncGeneratorType, [yieldType, returnType, nextType]); } function createIterableType(iteratedType: Type): Type { return createTypeFromGenericGlobalType(getGlobalIterableType(/*reportErrors*/ true), [iteratedType]); } - function createIterableIteratorType(iteratedType: Type): Type { - return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(/*reportErrors*/ true), [iteratedType]); + function createGeneratorType(yieldType: Type, returnType: Type, nextType: Type) { + return createTypeFromGenericGlobalType(getGlobalGeneratorType(/*reportErrors*/ true), [yieldType, returnType, nextType]); } function createArrayType(elementType: Type, readonly?: boolean): ObjectType { @@ -14528,6 +14638,25 @@ namespace ts { return type; } + function getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(type: Type | undefined, contextualSignatureReturnType: Type | undefined, isAsync: boolean) { + if (type && isUnitType(type)) { + const contextualType = !contextualSignatureReturnType ? undefined : + isAsync ? getPromisedTypeOfPromise(contextualSignatureReturnType) : + contextualSignatureReturnType; + type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); + } + return type; + } + + function getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(type: Type | undefined, contextualSignatureReturnType: Type | undefined, kind: IterationTypeKind, isAsyncGenerator: boolean) { + if (type && isUnitType(type)) { + const contextualType = !contextualSignatureReturnType ? undefined : + getIterationTypeOfGeneratorFunctionReturnType(kind, contextualSignatureReturnType, isAsyncGenerator); + type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); + } + return type; + } + /** * Check if a Type was written as a tuple type literal. * Prefer using isTupleLikeType() unless the use of `elementTypes` is required. @@ -14884,7 +15013,7 @@ namespace ts { return errorReported; } - function reportImplicitAny(declaration: Declaration, type: Type) { + function reportImplicitAny(declaration: Declaration, type: Type, wideningKind?: WideningKind) { const typeAsString = typeToString(getWidenedType(type)); if (isInJSFile(declaration) && !isCheckJsEnabledForFile(getSourceFileOfNode(declaration), compilerOptions)) { // Only report implicit any errors/suggestions in TS and ts-check JS files @@ -14930,10 +15059,17 @@ namespace ts { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: if (noImplicitAny && !(declaration as NamedDeclaration).name) { - error(declaration, Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); + if (wideningKind === WideningKind.GeneratorYield) { + error(declaration, Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString); + } + else { + error(declaration, Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); + } return; } - diagnostic = noImplicitAny ? Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type : Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage; + diagnostic = !noImplicitAny ? Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage : + wideningKind === WideningKind.GeneratorYield ? Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type : + Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type; break; case SyntaxKind.MappedType: if (noImplicitAny) { @@ -14946,11 +15082,11 @@ namespace ts { errorOrSuggestion(noImplicitAny, declaration, diagnostic, declarationNameToString(getNameOfDeclaration(declaration)), typeAsString); } - function reportErrorsFromWidening(declaration: Declaration, type: Type) { + function reportErrorsFromWidening(declaration: Declaration, type: Type, wideningKind?: WideningKind) { if (produceDiagnostics && noImplicitAny && getObjectFlags(type) & ObjectFlags.ContainsWideningType) { // Report implicit any error within type if possible, otherwise report error on declaration if (!reportWideningErrorsInType(type)) { - reportImplicitAny(declaration, type); + reportImplicitAny(declaration, type, wideningKind); } } } @@ -15159,7 +15295,7 @@ namespace ts { return getTypeFromInference(inference) || unknownType; } - function* getUnmatchedProperties(source: Type, target: Type, requireOptionalProperties: boolean, matchDiscriminantProperties: boolean) { + function* getUnmatchedProperties(source: Type, target: Type, requireOptionalProperties: boolean, matchDiscriminantProperties: boolean): IterableIterator { const properties = target.flags & TypeFlags.Union ? getPossiblePropertiesOfUnionType(target as UnionType) : getPropertiesOfType(target); for (const targetProp of properties) { if (requireOptionalProperties || !(targetProp.flags & SymbolFlags.Optional || getCheckFlags(targetProp) & CheckFlags.Partial)) { @@ -15181,7 +15317,8 @@ namespace ts { } function getUnmatchedProperty(source: Type, target: Type, requireOptionalProperties: boolean, matchDiscriminantProperties: boolean): Symbol | undefined { - return getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties).next().value; + const result = getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties).next(); + if (!result.done) return result.value; } function tupleTypesDefinitelyUnrelated(source: TupleTypeReference, target: TupleTypeReference) { @@ -16160,12 +16297,12 @@ namespace ts { function getTypeOfDestructuredArrayElement(type: Type, index: number) { return everyType(type, isTupleLikeType) && getTupleElementType(type, index) || - checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || + checkIteratedTypeOrElementType(IterationUse.Destructuring, type, undefinedType, /*errorNode*/ undefined) || errorType; } function getTypeOfDestructuredSpreadExpression(type: Type) { - return createArrayType(checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType); + return createArrayType(checkIteratedTypeOrElementType(IterationUse.Destructuring, type, undefinedType, /*errorNode*/ undefined) || errorType); } function getAssignedTypeOfBinaryExpression(node: BinaryExpression): Type { @@ -18442,7 +18579,7 @@ namespace ts { if (contextualReturnType) { return node.asteriskToken ? contextualReturnType - : getIteratedTypeOfGenerator(contextualReturnType, (functionFlags & FunctionFlags.Async) !== 0); + : getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Yield, contextualReturnType, (functionFlags & FunctionFlags.Async) !== 0); } } @@ -18675,7 +18812,7 @@ namespace ts { function getContextualTypeForElementExpression(arrayContextualType: Type | undefined, index: number): Type | undefined { return arrayContextualType && ( getTypeOfPropertyOfContextualType(arrayContextualType, "" + index as __String) - || getIteratedTypeOrElementType(arrayContextualType, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false, /*checkAssignability*/ false)); + || getIteratedTypeOrElementType(IterationUse.Element, arrayContextualType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false)); } // In a contextually typed conditional expression, the true/false expressions are contextually typed by the same type. @@ -18873,6 +19010,10 @@ namespace ts { case SyntaxKind.AwaitExpression: return getContextualTypeForAwaitOperand(parent); case SyntaxKind.CallExpression: + if ((parent).expression.kind === SyntaxKind.ImportKeyword) { + return stringType; + } + /* falls through */ case SyntaxKind.NewExpression: return getContextualTypeForArgument(parent, node); case SyntaxKind.TypeAssertionExpression: @@ -19140,7 +19281,7 @@ namespace ts { } const arrayOrIterableType = checkExpression(node.expression, checkMode); - return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, /*allowStringInput*/ false, /*allowAsyncIterables*/ false); + return checkIteratedTypeOrElementType(IterationUse.Spread, arrayOrIterableType, undefinedType, node.expression); } function hasDefaultValue(node: BindingElement | Expression): boolean { @@ -19173,7 +19314,7 @@ namespace ts { // if there is no index type / iterated type. const restArrayType = checkExpression((e).expression, checkMode, forceTuple); const restElementType = getIndexTypeOfType(restArrayType, IndexKind.Number) || - getIteratedTypeOrElementType(restArrayType, /*errorNode*/ undefined, /*allowStringInput*/ false, /*allowAsyncIterables*/ false, /*checkAssignability*/ false); + getIteratedTypeOrElementType(IterationUse.Destructuring, restArrayType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false); if (restElementType) { elementTypes.push(restElementType); } @@ -22937,106 +23078,128 @@ namespace ts { } const functionFlags = getFunctionFlags(func); - let type: Type; - if (func.body.kind !== SyntaxKind.Block) { - type = checkExpressionCached(func.body, checkMode && checkMode & ~CheckMode.SkipGenericFunctions); - if (functionFlags & FunctionFlags.Async) { + const isAsync = (functionFlags & FunctionFlags.Async) !== 0; + const isGenerator = (functionFlags & FunctionFlags.Generator) !== 0; + + let returnType: Type | undefined; + let yieldType: Type | undefined; + let nextType: Type | undefined; + let fallbackReturnType: Type = voidType; + if (func.body.kind !== SyntaxKind.Block) { // Async or normal arrow function + returnType = checkExpressionCached(func.body, checkMode && checkMode & ~CheckMode.SkipGenericFunctions); + if (isAsync) { // From within an async function you can return either a non-promise value or a promise. Any // Promise/A+ compatible implementation will always assimilate any foreign promise, so the // return type of the body should be unwrapped to its awaited type, which we will wrap in // the native Promise type later in this function. - type = checkAwaitedType(type, /*errorNode*/ func, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); + returnType = checkAwaitedType(returnType, /*errorNode*/ func, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); } } - else { - let types = checkAndAggregateReturnExpressionTypes(func, checkMode); - if (functionFlags & FunctionFlags.Generator) { // Generator or AsyncGenerator function - types = concatenate(checkAndAggregateYieldOperandTypes(func, checkMode), types); - if (!types || types.length === 0) { - const iterableIteratorAny = functionFlags & FunctionFlags.Async - ? createAsyncIterableIteratorType(anyType) // AsyncGenerator function - : createIterableIteratorType(anyType); // Generator function - if (noImplicitAny) { - error(func.asteriskToken, - Diagnostics.Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type, typeToString(iterableIteratorAny)); - } - return iterableIteratorAny; - } + else if (isGenerator) { // Generator or AsyncGenerator function + const returnTypes = checkAndAggregateReturnExpressionTypes(func, checkMode); + if (!returnTypes) { + fallbackReturnType = neverType; } - else { - if (!types) { - // For an async function, the return type will not be never, but rather a Promise for never. - return functionFlags & FunctionFlags.Async - ? createPromiseReturnType(func, neverType) // Async function - : neverType; // Normal function - } - if (types.length === 0) { - // For an async function, the return type will not be void, but rather a Promise for void. - return functionFlags & FunctionFlags.Async - ? createPromiseReturnType(func, voidType) // Async function - : voidType; // Normal function - } + else if (returnTypes.length > 0) { + returnType = getUnionType(returnTypes, UnionReduction.Subtype); + } + const { yieldTypes, nextTypes } = checkAndAggregateYieldOperandTypes(func, checkMode); + yieldType = some(yieldTypes) ? getUnionType(yieldTypes, UnionReduction.Subtype) : undefined; + nextType = some(nextTypes) ? getIntersectionType(nextTypes) : undefined; + } + else { // Async or normal function + const types = checkAndAggregateReturnExpressionTypes(func, checkMode); + if (!types) { + // For an async function, the return type will not be never, but rather a Promise for never. + return functionFlags & FunctionFlags.Async + ? createPromiseReturnType(func, neverType) // Async function + : neverType; // Normal function + } + if (types.length === 0) { + // For an async function, the return type will not be void, but rather a Promise for void. + return functionFlags & FunctionFlags.Async + ? createPromiseReturnType(func, voidType) // Async function + : voidType; // Normal function } // Return a union of the return expression types. - type = getUnionType(types, UnionReduction.Subtype); + returnType = getUnionType(types, UnionReduction.Subtype); } - const contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); - if (!contextualSignature) { - reportErrorsFromWidening(func, type); - } - - if (isUnitType(type)) { - let contextualType = !contextualSignature ? undefined : - contextualSignature === getSignatureFromDeclaration(func) ? type : - getReturnTypeOfSignature(contextualSignature); - if (contextualType) { - switch (functionFlags & FunctionFlags.AsyncGenerator) { - case FunctionFlags.AsyncGenerator: - contextualType = getIteratedTypeOfGenerator(contextualType, /*isAsyncGenerator*/ true); - break; - case FunctionFlags.Generator: - contextualType = getIteratedTypeOfGenerator(contextualType, /*isAsyncGenerator*/ false); - break; - case FunctionFlags.Async: - contextualType = getPromisedTypeOfPromise(contextualType); - break; + if (returnType || yieldType || nextType) { + const contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); + if (!contextualSignature) { + if (yieldType) reportErrorsFromWidening(func, yieldType, WideningKind.GeneratorYield); + if (returnType) reportErrorsFromWidening(func, returnType); + if (nextType) reportErrorsFromWidening(func, nextType); + } + if (returnType && isUnitType(returnType) || + yieldType && isUnitType(yieldType) || + nextType && isUnitType(nextType)) { + const contextualType = !contextualSignature ? undefined : + contextualSignature === getSignatureFromDeclaration(func) ? isGenerator ? undefined : returnType : + getReturnTypeOfSignature(contextualSignature); + if (isGenerator) { + yieldType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(yieldType, contextualType, IterationTypeKind.Yield, isAsync); + returnType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(returnType, contextualType, IterationTypeKind.Return, isAsync); + nextType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(nextType, contextualType, IterationTypeKind.Next, isAsync); + } + else { + returnType = getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(returnType, contextualType, isAsync); } } - type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); + + if (yieldType) yieldType = getWidenedType(yieldType); + if (returnType) returnType = getWidenedType(returnType); + if (nextType) nextType = getWidenedType(nextType); } - const widenedType = getWidenedType(type); - switch (functionFlags & FunctionFlags.AsyncGenerator) { - case FunctionFlags.AsyncGenerator: - return createAsyncIterableIteratorType(widenedType); - case FunctionFlags.Generator: - return createIterableIteratorType(widenedType); - case FunctionFlags.Async: - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body is awaited type of the body, wrapped in a native Promise type. - return createPromiseType(widenedType); - default: - return widenedType; + if (isGenerator) { + return createGeneratorReturnType(yieldType || neverType, returnType || fallbackReturnType, nextType || unknownType, isAsync); + } + else { + // From within an async function you can return either a non-promise value or a promise. Any + // Promise/A+ compatible implementation will always assimilate any foreign promise, so the + // return type of the body is awaited type of the body, wrapped in a native Promise type. + return isAsync + ? createPromiseType(returnType || fallbackReturnType) + : returnType || fallbackReturnType; } } - function checkAndAggregateYieldOperandTypes(func: FunctionLikeDeclaration, checkMode: CheckMode | undefined): Type[] { - const aggregatedTypes: Type[] = []; + function createGeneratorReturnType(yieldType: Type, returnType: Type, nextType: Type, isAsyncGenerator: boolean) { + return isAsyncGenerator + ? createAsyncGeneratorType(yieldType, returnType, nextType) + : createGeneratorType(yieldType, returnType, nextType); + } + + function checkAndAggregateYieldOperandTypes(func: FunctionLikeDeclaration, checkMode: CheckMode | undefined) { + const yieldTypes: Type[] = []; + const nextTypes: Type[] = []; const isAsync = (getFunctionFlags(func) & FunctionFlags.Async) !== 0; forEachYieldExpression(func.body, yieldExpression => { - pushIfUnique(aggregatedTypes, getYieldedTypeOfYieldExpression(yieldExpression, isAsync, checkMode)); + const yieldExpressionType = yieldExpression.expression ? checkExpression(yieldExpression.expression, checkMode) : undefinedWideningType; + pushIfUnique(yieldTypes, getYieldedTypeOfYieldExpression(yieldExpression, yieldExpressionType, anyType, isAsync)); + let nextType: Type | undefined; + if (yieldExpression.asteriskToken) { + const iterationTypes = getIterationTypesOfIterable( + yieldExpressionType, + isAsync ? IterationUse.AsyncYieldStar : IterationUse.YieldStar, + yieldExpression.expression); + nextType = iterationTypes && iterationTypes.nextType; + } + else { + nextType = getContextualType(yieldExpression); + } + if (nextType) pushIfUnique(nextTypes, nextType); }); - return aggregatedTypes; + return { yieldTypes, nextTypes }; } - function getYieldedTypeOfYieldExpression(node: YieldExpression, isAsync: boolean, checkMode?: CheckMode): Type | undefined { + function getYieldedTypeOfYieldExpression(node: YieldExpression, expressionType: Type, sentType: Type, isAsync: boolean): Type | undefined { const errorNode = node.expression || node; - const expressionType = node.expression ? checkExpression(node.expression, checkMode) : undefinedWideningType; // A `yield*` expression effectively yields everything that its operand yields - const yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(expressionType, errorNode, /*allowStringInput*/ false, isAsync) : expressionType; + const yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(isAsync ? IterationUse.AsyncYieldStar : IterationUse.YieldStar, expressionType, sentType, errorNode) : expressionType; return !isAsync ? yieldedType : getAwaitedType(yieldedType, errorNode, node.asteriskToken ? Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member : Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); @@ -23182,8 +23345,11 @@ namespace ts { return; } + const functionFlags = getFunctionFlags(func); + const type = returnType && getReturnOrPromisedType(returnType, functionFlags); + // Functions with with an explicitly specified 'void' or 'any' return type don't need any return expressions. - if (returnType && maybeTypeOfKind(returnType, TypeFlags.Any | TypeFlags.Void)) { + if (type && maybeTypeOfKind(type, TypeFlags.Any | TypeFlags.Void)) { return; } @@ -23195,20 +23361,20 @@ namespace ts { const hasExplicitReturn = func.flags & NodeFlags.HasExplicitReturn; - if (returnType && returnType.flags & TypeFlags.Never) { + if (type && type.flags & TypeFlags.Never) { error(getEffectiveReturnTypeNode(func), Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); } - else if (returnType && !hasExplicitReturn) { + else if (type && !hasExplicitReturn) { // minimal check: function has syntactic return type annotation and no explicit return statements in the body // this function does not conform to the specification. // NOTE: having returnType !== undefined is a precondition for entering this branch so func.type will always be present error(getEffectiveReturnTypeNode(func), Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value); } - else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) { + else if (type && strictNullChecks && !isTypeAssignableTo(undefinedType, type)) { error(getEffectiveReturnTypeNode(func), Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined); } else if (compilerOptions.noImplicitReturns) { - if (!returnType) { + if (!type) { // If return type annotation is omitted check if function has any explicit return statements. // If it does not have any - its inferred return type is void - don't do any checks. // Otherwise get inferred return type from function body and report error only if it is not void / anytype @@ -23298,22 +23464,20 @@ namespace ts { } } - function getReturnOrPromisedType(node: FunctionLikeDeclaration | MethodSignature, functionFlags: FunctionFlags) { - const type = getReturnTypeFromAnnotation(node); - return type && ((functionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.Async) ? - getAwaitedType(type) || errorType : type; + function getReturnOrPromisedType(type: Type | undefined, functionFlags: FunctionFlags) { + const isGenerator = !!(functionFlags & FunctionFlags.Generator); + const isAsync = !!(functionFlags & FunctionFlags.Async); + return type && isGenerator ? getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Return, type, isAsync) || errorType : + type && isAsync ? getAwaitedType(type) || errorType : + type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node: ArrowFunction | FunctionExpression | MethodDeclaration) { Debug.assert(node.kind !== SyntaxKind.MethodDeclaration || isObjectLiteralMethod(node)); const functionFlags = getFunctionFlags(node); - const returnOrPromisedType = getReturnOrPromisedType(node, functionFlags); - - if ((functionFlags & FunctionFlags.Generator) === 0) { // Async function or normal function - // return is not necessary in the body of generators - checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); - } + const returnType = getReturnTypeFromAnnotation(node); + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType); if (node.body) { if (!getEffectiveReturnTypeNode(node)) { @@ -23335,6 +23499,7 @@ namespace ts { // check assignability of the awaited type of the expression body against the promised type of // its return type annotation. const exprType = checkExpression(node.body); + const returnOrPromisedType = getReturnOrPromisedType(returnType, functionFlags); if (returnOrPromisedType) { if ((functionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.Async) { // Async function const awaitedType = checkAwaitedType(exprType, node.body, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); @@ -23737,7 +23902,7 @@ namespace ts { // This elementType will be used if the specific property corresponding to this index is not // present (aka the tuple element property). This call also checks that the parentType is in // fact an iterable or array (depending on target language). - const elementType = checkIteratedTypeOrElementType(sourceType, node, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType; + const elementType = checkIteratedTypeOrElementType(IterationUse.Destructuring, sourceType, undefinedType, node) || errorType; for (let i = 0; i < elements.length; i++) { checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, checkMode); } @@ -24245,33 +24410,44 @@ namespace ts { return anyType; } + const isAsync = (functionFlags & FunctionFlags.Async) !== 0; if (node.asteriskToken) { // Async generator functions prior to ESNext require the __await, __asyncDelegator, // and __asyncValues helpers - if ((functionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.AsyncGenerator && - languageVersion < ScriptTarget.ESNext) { + if (isAsync && languageVersion < ScriptTarget.ESNext) { checkExternalEmitHelpers(node, ExternalEmitHelpers.AsyncDelegatorIncludes); } // Generator functions prior to ES2015 require the __values helper - if ((functionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.Generator && - languageVersion < ScriptTarget.ES2015 && compilerOptions.downlevelIteration) { + if (!isAsync && languageVersion < ScriptTarget.ES2015 && compilerOptions.downlevelIteration) { checkExternalEmitHelpers(node, ExternalEmitHelpers.Values); } } - const isAsync = (functionFlags & FunctionFlags.Async) !== 0; - const yieldedType = getYieldedTypeOfYieldExpression(node, isAsync)!; // TODO: GH#18217 // 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. const returnType = getReturnTypeFromAnnotation(func); - if (returnType) { - const signatureElementType = getIteratedTypeOfGenerator(returnType, isAsync) || anyType; - checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureElementType, node.expression || node, node.expression); + const iterationTypes = returnType && getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsync); + const signatureYieldType = iterationTypes && iterationTypes.yieldType || anyType; + const signatureNextType = iterationTypes && iterationTypes.nextType || anyType; + const resolvedSignatureNextType = isAsync ? getAwaitedType(signatureNextType) || anyType : signatureNextType; + const yieldExpressionType = node.expression ? checkExpression(node.expression) : undefinedWideningType; + const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, resolvedSignatureNextType, isAsync); + if (returnType && yieldedType) { + checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureYieldType, node.expression || node, node.expression); + } + + if (node.asteriskToken) { + const use = isAsync ? IterationUse.AsyncYieldStar : IterationUse.YieldStar; + return getIterationTypeOfIterable(use, IterationTypeKind.Return, yieldExpressionType, node.expression) + || anyType; + } + else if (returnType) { + return getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Next, returnType, isAsync) + || anyType; } - // Both yield and yield* expressions have type 'any' return anyType; } @@ -24989,18 +25165,17 @@ namespace ts { error(returnTypeNode, Diagnostics.A_generator_cannot_have_a_void_type_annotation); } else { - const generatorElementType = getIteratedTypeOfGenerator(returnType, (functionFlags & FunctionFlags.Async) !== 0) || anyType; - const iterableIteratorInstantiation = functionFlags & FunctionFlags.Async - ? createAsyncIterableIteratorType(generatorElementType) // AsyncGenerator function - : createIterableIteratorType(generatorElementType); // Generator function - - // Naively, one could check that IterableIterator is assignable to the return type annotation. + // Naively, one could check that Generator is assignable to the return type annotation. // However, that would not catch the error in the following case. // // interface BadGenerator extends Iterable, Iterator { } // function* g(): BadGenerator { } // Iterable and Iterator have different types! // - checkTypeAssignableTo(iterableIteratorInstantiation, returnType, returnTypeNode); + const generatorYieldType = getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Yield, returnType, (functionFlags & FunctionFlags.Async) !== 0) || anyType; + const generatorReturnType = getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Return, returnType, (functionFlags & FunctionFlags.Async) !== 0) || generatorYieldType; + const generatorNextType = getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Next, returnType, (functionFlags & FunctionFlags.Async) !== 0) || unknownType; + const generatorInstantiation = createGeneratorReturnType(generatorYieldType, generatorReturnType, generatorNextType, !!(functionFlags & FunctionFlags.Async)); + checkTypeAssignableTo(generatorInstantiation, returnType, returnTypeNode); } } else if ((functionFlags & FunctionFlags.AsyncGenerator) === FunctionFlags.Async) { @@ -25891,9 +26066,9 @@ namespace ts { } } - function getAwaitedTypeOfPromise(type: Type, errorNode?: Node, diagnosticMessage?: DiagnosticMessage): Type | undefined { + function getAwaitedTypeOfPromise(type: Type, errorNode?: Node, diagnosticMessage?: DiagnosticMessage, arg0?: string | number): Type | undefined { const promisedType = getPromisedTypeOfPromise(type, errorNode); - return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage); + return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage, arg0); } /** @@ -25961,11 +26136,11 @@ namespace ts { * Promise-like type; otherwise, it is the type of the expression. This is used to reflect * The runtime behavior of the `await` keyword. */ - function checkAwaitedType(type: Type, errorNode: Node, diagnosticMessage: DiagnosticMessage): Type { - return getAwaitedType(type, errorNode, diagnosticMessage) || errorType; + function checkAwaitedType(type: Type, errorNode: Node, diagnosticMessage: DiagnosticMessage, arg0?: string | number): Type { + return getAwaitedType(type, errorNode, diagnosticMessage, arg0) || errorType; } - function getAwaitedType(type: Type, errorNode?: Node, diagnosticMessage?: DiagnosticMessage): Type | undefined { + function getAwaitedType(type: Type, errorNode?: Node, diagnosticMessage?: DiagnosticMessage, arg0?: string | number): Type | undefined { const typeAsAwaitable = type; if (typeAsAwaitable.awaitedTypeOfType) { return typeAsAwaitable.awaitedTypeOfType; @@ -25978,7 +26153,7 @@ namespace ts { if (type.flags & TypeFlags.Union) { let types: Type[] | undefined; for (const constituentType of (type).types) { - types = append(types, getAwaitedType(constituentType, errorNode, diagnosticMessage)); + types = append(types, getAwaitedType(constituentType, errorNode, diagnosticMessage, arg0)); } if (!types) { @@ -26032,7 +26207,7 @@ namespace ts { // Keep track of the type we're about to unwrap to avoid bad recursive promise types. // See the comments above for more information. awaitedTypeStack.push(type.id); - const awaitedType = getAwaitedType(promisedType, errorNode, diagnosticMessage); + const awaitedType = getAwaitedType(promisedType, errorNode, diagnosticMessage, arg0); awaitedTypeStack.pop(); if (!awaitedType) { @@ -26061,7 +26236,7 @@ namespace ts { if (thenFunction && getSignaturesOfType(thenFunction, SignatureKind.Call).length > 0) { if (errorNode) { if (!diagnosticMessage) return Debug.fail(); - error(errorNode, diagnosticMessage); + error(errorNode, diagnosticMessage, arg0); } return undefined; } @@ -26545,11 +26720,7 @@ namespace ts { const body = node.kind === SyntaxKind.MethodSignature ? undefined : node.body; checkSourceElement(body); - - if ((functionFlags & FunctionFlags.Generator) === 0) { // Async function or normal function - const returnOrPromisedType = getReturnOrPromisedType(node, functionFlags); - checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); - } + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node)); if (produceDiagnostics && !getEffectiveReturnTypeNode(node)) { // Report an implicit any error if there is no body, no explicit return type, and node is not a private method @@ -27151,7 +27322,7 @@ namespace ts { // check the binding pattern with empty elements if (needCheckWidenedType) { if (isArrayBindingPattern(node.name)) { - checkIteratedTypeOrElementType(widenedType, node, /* allowStringInput */ false, /* allowAsyncIterables */ false); + checkIteratedTypeOrElementType(IterationUse.Destructuring, widenedType, undefinedType, node); } else if (strictNullChecks) { checkNonNullNonVoidType(widenedType, node); @@ -27449,15 +27620,16 @@ namespace ts { function checkRightHandSideOfForOf(rhsExpression: Expression, awaitModifier: AwaitKeywordToken | undefined): Type { const expressionType = checkNonNullExpression(rhsExpression); - return checkIteratedTypeOrElementType(expressionType, rhsExpression, /*allowStringInput*/ true, awaitModifier !== undefined); + const use = awaitModifier ? IterationUse.ForAwaitOf : IterationUse.ForOf; + return checkIteratedTypeOrElementType(use, expressionType, undefinedType, rhsExpression); } - function checkIteratedTypeOrElementType(inputType: Type, errorNode: Node | undefined, allowStringInput: boolean, allowAsyncIterables: boolean): Type { + function checkIteratedTypeOrElementType(use: IterationUse, inputType: Type, sentType: Type, errorNode: Node | undefined): Type { if (isTypeAny(inputType)) { return inputType; } - return getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, /*checkAssignability*/ true) || anyType; + return getIteratedTypeOrElementType(use, inputType, sentType, errorNode, /*checkAssignability*/ true) || anyType; } /** @@ -27465,7 +27637,8 @@ namespace ts { * we want to get the iterated type of an iterable for ES2015 or later, or the iterated type * of a iterable (if defined globally) or element type of an array like for ES2015 or earlier. */ - function getIteratedTypeOrElementType(inputType: Type, errorNode: Node | undefined, allowStringInput: boolean, allowAsyncIterables: boolean, checkAssignability: boolean): Type | undefined { + function getIteratedTypeOrElementType(use: IterationUse, inputType: Type, sentType: Type, errorNode: Node | undefined, checkAssignability: boolean): Type | undefined { + const allowAsyncIterables = (use & IterationUse.AllowsAsyncIterablesFlag) !== 0; if (inputType === neverType) { reportTypeNotIterableError(errorNode!, inputType, allowAsyncIterables); // TODO: GH#18217 return undefined; @@ -27479,9 +27652,22 @@ namespace ts { // downlevelIteration is requested. if (uplevelIteration || downlevelIteration || allowAsyncIterables) { // We only report errors for an invalid iterable type in ES2015 or higher. - const iteratedType = getIteratedTypeOfIterable(inputType, uplevelIteration ? errorNode : undefined, allowAsyncIterables, /*allowSyncIterables*/ true, checkAssignability); - if (iteratedType || uplevelIteration) { - return iteratedType; + const iterationTypes = getIterationTypesOfIterable(inputType, use, uplevelIteration ? errorNode : undefined); + if (checkAssignability) { + if (iterationTypes) { + const diagnostic = + use & IterationUse.ForOfFlag ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0 : + use & IterationUse.SpreadFlag ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0 : + use & IterationUse.DestructuringFlag ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0 : + use & IterationUse.YieldStarFlag ? Diagnostics.Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0 : + undefined; + if (diagnostic) { + checkTypeAssignableTo(sentType, iterationTypes.nextType, errorNode, diagnostic); + } + } + } + if (iterationTypes || uplevelIteration) { + return iterationTypes && iterationTypes.yieldType; } } @@ -27492,7 +27678,7 @@ namespace ts { // If strings are permitted, remove any string-like constituents from the array type. // This allows us to find other non-string element types from an array unioned with // a string. - if (allowStringInput) { + if (use & IterationUse.AllowsStringInputFlag) { if (arrayType.flags & TypeFlags.Union) { // After we remove all types that are StringLike, we will know if there was a string constituent // based on whether the result of filter is a new array. @@ -27530,16 +27716,16 @@ namespace ts { // want to say that number is not an array type. But if the input was just // number and string input is allowed, we want to say that number is not an // array type or a string type. - const isIterable = !!getIteratedTypeOfIterable(inputType, /* errorNode */ undefined, allowAsyncIterables, /*allowSyncIterables*/ true, checkAssignability); - const diagnostic = !allowStringInput || hasStringConstituent + const yieldType = getIterationTypeOfIterable(use, IterationTypeKind.Yield, inputType, /*errorNode*/ undefined); + const diagnostic = !(use & IterationUse.AllowsStringInputFlag) || hasStringConstituent ? downlevelIteration ? Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator - : isIterable + : yieldType ? Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators : Diagnostics.Type_0_is_not_an_array_type : downlevelIteration ? Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator - : isIterable + : yieldType ? Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators : Diagnostics.Type_0_is_not_an_array_type_or_a_string_type; error(errorNode, diagnostic, typeToString(arrayType)); @@ -27561,33 +27747,82 @@ namespace ts { } /** - * We want to treat type as an iterable, and get the type it is an iterable of. The iterable - * must have the following structure (annotated with the names of the variables below): + * Gets the requested "iteration type" from an `Iterable`-like or `AsyncIterable`-like type. + */ + function getIterationTypeOfIterable(use: IterationUse, typeKind: IterationTypeKind, inputType: Type, errorNode: Node | undefined): Type | undefined { + if (isTypeAny(inputType)) { + return undefined; + } + + const iterationTypes = getIterationTypesOfIterable(inputType, use, errorNode); + return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(typeKind)]; + } + + function createIterationTypes(yieldType: Type = neverType, returnType: Type = neverType, nextType: Type = unknownType): IterationTypes { + // `yieldType` and `returnType` are defaulted to `neverType` they each will be combined + // via `getUnionType` when merging iteration types. `nextType` is defined as `unknownType` + // as it is combined via `getIntersectionType` when merging iteration types. + + // Use the cache only for intrinsic types to keep it small as they are likely to be + // more frequently created (i.e. `Iterator`). Iteration types + // are also cached on the type they are requested for, so we shouldn't need to maintain + // the cache for less-frequently used types. + if (yieldType.flags & TypeFlags.Intrinsic && + returnType.flags & (TypeFlags.Any | TypeFlags.Never | TypeFlags.Unknown | TypeFlags.Void | TypeFlags.Undefined) && + nextType.flags & (TypeFlags.Any | TypeFlags.Never | TypeFlags.Unknown | TypeFlags.Void | TypeFlags.Undefined)) { + const id = getTypeListId([yieldType, returnType, nextType]); + let iterationTypes = iterationTypesCache.get(id); + if (!iterationTypes) { + iterationTypes = { yieldType, returnType, nextType }; + iterationTypesCache.set(id, iterationTypes); + } + return iterationTypes; + } + return { yieldType, returnType, nextType }; + } + + /** + * Combines multiple `IterationTypes` records. * - * { // iterable - * [Symbol.iterator]: { // iteratorMethod - * (): Iterator - * } - * } + * If `array` is empty or all elements are missing or are references to `noIterationTypes`, + * then `noIterationTypes` is returned. Otherwise, an `IterationTypes` record is returned + * for the combined iteration types. + */ + function combineIterationTypes(array: (IterationTypes | undefined)[]) { + let yieldTypes: Type[] | undefined; + let returnTypes: Type[] | undefined; + let nextTypes: Type[] | undefined; + for (const iterationTypes of array) { + if (iterationTypes === undefined || iterationTypes === noIterationTypes) { + continue; + } + if (iterationTypes === anyIterationTypes) { + return anyIterationTypes; + } + yieldTypes = append(yieldTypes, iterationTypes.yieldType); + returnTypes = append(returnTypes, iterationTypes.returnType); + nextTypes = append(nextTypes, iterationTypes.nextType); + } + if (yieldTypes || returnTypes || nextTypes) { + return createIterationTypes( + yieldTypes && getUnionType(yieldTypes), + returnTypes && getUnionType(returnTypes), + nextTypes && getIntersectionType(nextTypes)); + } + return noIterationTypes; + } + + /** + * Gets the *yield*, *return*, and *next* types from an `Iterable`-like or `AsyncIterable`-like type. * - * For an async iterable, we expect the following structure: - * - * { // iterable - * [Symbol.asyncIterator]: { // iteratorMethod - * (): AsyncIterator - * } - * } - * - * T is the type we are after. At every level that involves analyzing return types - * of signatures, we union the return types of all the signatures. + * At every level that involves analyzing return types of signatures, we union the return types of all the signatures. * * Another thing to note is that at any step of this process, we could run into a dead end, * meaning either the property is missing, or we run into the anyType. If either of these things - * happens, we return undefined to signal that we could not find the iterated type. If a property - * is missing, and the previous step did not result in 'any', then we also give an error if the + * happens, we return `undefined` to signal that we could not find the iteration type. If a property + * is missing, and the previous step did not result in `any`, then we also give an error if the * caller requested it. Then the caller can decide what to do in the case where there is no iterated - * type. This is different from returning anyType, because that would signify that we have matched the - * whole pattern and that T (above) is 'any'. + * type. * * For a **for-of** statement, `yield*` (in a normal generator), spread, array * destructuring, or normal generator we will only ever look for a `[Symbol.iterator]()` @@ -27598,78 +27833,197 @@ namespace ts { * For a **for-await-of** statement or a `yield*` in an async generator we will look for * the `[Symbol.asyncIterator]()` method first, and then the `[Symbol.iterator]()` method. */ - function getIteratedTypeOfIterable(type: Type, errorNode: Node | undefined, allowAsyncIterables: boolean, allowSyncIterables: boolean, checkAssignability: boolean): Type | undefined { + function getIterationTypesOfIterable(type: Type, use: IterationUse, errorNode: Node | undefined) { if (isTypeAny(type)) { - return undefined; + return anyIterationTypes; } - return mapType(type, getIteratedType); - - function getIteratedType(type: Type) { - const typeAsIterable = type; - if (allowAsyncIterables) { - if (typeAsIterable.iteratedTypeOfAsyncIterable) { - return typeAsIterable.iteratedTypeOfAsyncIterable; + if (!(type.flags & TypeFlags.Union)) { + const iterationTypes = getIterationTypesOfIterableWorker(type, use, errorNode); + if (iterationTypes === noIterationTypes) { + if (errorNode) { + reportTypeNotIterableError(errorNode, type, !!(use & IterationUse.AllowsAsyncIterablesFlag)); } - - // As an optimization, if the type is an instantiation of the global `AsyncIterable` - // or the global `AsyncIterableIterator` then just grab its type argument. - if (isReferenceToType(type, getGlobalAsyncIterableType(/*reportErrors*/ false)) || - isReferenceToType(type, getGlobalAsyncIterableIteratorType(/*reportErrors*/ false))) { - return typeAsIterable.iteratedTypeOfAsyncIterable = (type).typeArguments![0]; - } - } - - if (allowSyncIterables) { - if (typeAsIterable.iteratedTypeOfIterable) { - return allowAsyncIterables - ? typeAsIterable.iteratedTypeOfAsyncIterable = getAwaitedType(typeAsIterable.iteratedTypeOfIterable) - : typeAsIterable.iteratedTypeOfIterable; - } - - // As an optimization, if the type is an instantiation of the global `Iterable` or - // `IterableIterator` then just grab its type argument. - if (isReferenceToType(type, getGlobalIterableType(/*reportErrors*/ false)) || - isReferenceToType(type, getGlobalIterableIteratorType(/*reportErrors*/ false))) { - return allowAsyncIterables - ? typeAsIterable.iteratedTypeOfAsyncIterable = getAwaitedType((type).typeArguments![0]) - : typeAsIterable.iteratedTypeOfIterable = (type).typeArguments![0]; - } - } - - const asyncMethodType = allowAsyncIterables && getTypeOfPropertyOfType(type, getPropertyNameForKnownSymbolName("asyncIterator")); - const methodType = asyncMethodType || (allowSyncIterables ? getTypeOfPropertyOfType(type, getPropertyNameForKnownSymbolName("iterator")) : undefined); - if (isTypeAny(methodType)) { return undefined; } + return iterationTypes; + } - const signatures = methodType ? getSignaturesOfType(methodType, SignatureKind.Call) : undefined; - if (!some(signatures)) { + const cacheKey = use & IterationUse.AllowsAsyncIterablesFlag ? "iterationTypesOfAsyncIterable" : "iterationTypesOfIterable"; + const cachedTypes = (type as IterableOrIteratorType)[cacheKey]; + if (cachedTypes) return cachedTypes === noIterationTypes ? undefined : cachedTypes; + + let allIterationTypes: IterationTypes[] | undefined; + for (const constituent of (type as UnionType).types) { + const iterationTypes = getIterationTypesOfIterableWorker(constituent, use, errorNode); + if (iterationTypes === noIterationTypes) { if (errorNode) { - // only report on the first error - reportTypeNotIterableError(errorNode, type, allowAsyncIterables); + reportTypeNotIterableError(errorNode, type, !!(use & IterationUse.AllowsAsyncIterablesFlag)); errorNode = undefined; } - return undefined; } - - const returnType = getUnionType(map(signatures, getReturnTypeOfSignature), UnionReduction.Subtype); - const iteratedType = getIteratedTypeOfIterator(returnType, errorNode, /*isAsyncIterator*/ !!asyncMethodType); - if (checkAssignability && errorNode && iteratedType) { - // If `checkAssignability` was specified, we were called from - // `checkIteratedTypeOrElementType`. As such, we need to validate that - // the type passed in is actually an Iterable. - checkTypeAssignableTo(type, asyncMethodType - ? createAsyncIterableType(iteratedType) - : createIterableType(iteratedType), errorNode); - } - - if (iteratedType) { - return allowAsyncIterables - ? typeAsIterable.iteratedTypeOfAsyncIterable = asyncMethodType ? iteratedType : getAwaitedType(iteratedType) - : typeAsIterable.iteratedTypeOfIterable = iteratedType; + else { + allIterationTypes = append(allIterationTypes, iterationTypes); } } + + const iterationTypes = allIterationTypes ? combineIterationTypes(allIterationTypes) : noIterationTypes; + (type as IterableOrIteratorType)[cacheKey] = iterationTypes; + return iterationTypes === noIterationTypes ? undefined : iterationTypes; + } + + function getAsyncFromSyncIterationTypes(iterationTypes: IterationTypes, errorNode: Node | undefined) { + if (iterationTypes === noIterationTypes) return noIterationTypes; + if (iterationTypes === anyIterationTypes) return anyIterationTypes; + const { yieldType, returnType, nextType } = iterationTypes; + return createIterationTypes( + getAwaitedType(yieldType, errorNode) || anyType, + getAwaitedType(returnType, errorNode) || anyType, + nextType); + } + + /** + * Gets the *yield*, *return*, and *next* types from a non-union type. + * + * If we are unable to find the *yield*, *return*, and *next* types, `noIterationTypes` is + * returned to indicate to the caller that it should report an error. Otherwise, an + * `IterationTypes` record is returned. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterable` instead. + */ + function getIterationTypesOfIterableWorker(type: Type, use: IterationUse, errorNode: Node | undefined) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + + if (use & IterationUse.AllowsAsyncIterablesFlag) { + const iterationTypes = + getIterationTypesOfIterableCached(type, asyncIterationTypesResolver) || + getIterationTypesOfIterableFast(type, asyncIterationTypesResolver); + if (iterationTypes) { + return iterationTypes; + } + } + + if (use & IterationUse.AllowsSyncIterablesFlag) { + const iterationTypes = + getIterationTypesOfIterableCached(type, syncIterationTypesResolver) || + getIterationTypesOfIterableFast(type, syncIterationTypesResolver); + if (iterationTypes) { + if (use & IterationUse.AllowsAsyncIterablesFlag) { + // for a sync iterable in an async context, only use the cached types if they are valid. + if (iterationTypes !== noIterationTypes) { + return (type as IterableOrIteratorType).iterationTypesOfAsyncIterable = getAsyncFromSyncIterationTypes(iterationTypes, errorNode); + } + } + else { + return iterationTypes; + } + } + } + + if (use & IterationUse.AllowsAsyncIterablesFlag) { + const iterationTypes = getIterationTypesOfIterableSlow(type, asyncIterationTypesResolver, errorNode); + if (iterationTypes !== noIterationTypes) { + return iterationTypes; + } + } + + if (use & IterationUse.AllowsSyncIterablesFlag) { + const iterationTypes = getIterationTypesOfIterableSlow(type, syncIterationTypesResolver, errorNode); + if (iterationTypes !== noIterationTypes) { + if (use & IterationUse.AllowsAsyncIterablesFlag) { + return (type as IterableOrIteratorType).iterationTypesOfAsyncIterable = iterationTypes + ? getAsyncFromSyncIterationTypes(iterationTypes, errorNode) + : noIterationTypes; + } + else { + return iterationTypes; + } + } + } + + return noIterationTypes; + } + + /** + * Gets the *yield*, *return*, and *next* types of an `Iterable`-like or + * `AsyncIterable`-like type from the cache. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterable` instead. + */ + function getIterationTypesOfIterableCached(type: Type, resolver: IterationTypesResolver) { + return (type as IterableOrIteratorType)[resolver.iterableCacheKey]; + } + + /** + * Gets the *yield*, *return*, and *next* types of an `Iterable`-like or `AsyncIterable`-like + * type from from common heuristics. + * + * If we previously analyzed this type and found no iteration types, `noIterationTypes` is + * returned. If we found iteration types, an `IterationTypes` record is returned. + * Otherwise, we return `undefined` to indicate to the caller it should perform a more + * exhaustive analysis. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterable` instead. + */ + function getIterationTypesOfIterableFast(type: Type, resolver: IterationTypesResolver) { + // As an optimization, if the type is an instantiation of one of the following global types, then + // just grab its related type argument: + // - `Iterable` or `AsyncIterable` + // - `IterableIterator` or `AsyncIterableIterator` + let globalType: Type; + if (isReferenceToType(type, globalType = resolver.getGlobalIterableType(/*reportErrors*/ false)) || + isReferenceToType(type, globalType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false))) { + const [yieldType] = (type as GenericType).typeArguments!; + // The "return" and "next" types of `Iterable` and `IterableIterator` are defined by the + // iteration types of their `[Symbol.iterator]()` method. The same is true for their async cousins. + // While we define these as `any` and `undefined` in our libs by default, a custom lib *could* use + // different definitions. + const globalIterationTypes = + getIterationTypesOfIterableCached(globalType, resolver) || + getIterationTypesOfIterableSlow(globalType, resolver, /*errorNode*/ undefined); + const { returnType, nextType } = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; + return (type as IterableOrIteratorType)[resolver.iterableCacheKey] = createIterationTypes(yieldType, returnType, nextType); + } + + // As an optimization, if the type is an instantiation of the following global type, then + // just grab its related type arguments: + // - `Generator` or `AsyncGenerator` + if (isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false))) { + const [yieldType, returnType, nextType] = (type as GenericType).typeArguments!; + return (type as IterableOrIteratorType)[resolver.iterableCacheKey] = createIterationTypes(yieldType, returnType, nextType); + } + } + + /** + * Gets the *yield*, *return*, and *next* types of an `Iterable`-like or `AsyncIterable`-like + * type from its members. + * + * If we successfully found the *yield*, *return*, and *next* types, an `IterationTypes` + * record is returned. Otherwise, `noIterationTypes` is returned. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterable` instead. + */ + function getIterationTypesOfIterableSlow(type: Type, resolver: IterationTypesResolver, errorNode: Node | undefined) { + const method = getPropertyOfType(type, getPropertyNameForKnownSymbolName(resolver.iteratorSymbolName)); + const methodType = method && !(method.flags & SymbolFlags.Optional) ? getTypeOfSymbol(method) : undefined; + if (isTypeAny(methodType)) { + return (type as IterableOrIteratorType)[resolver.iterableCacheKey] = anyIterationTypes; + } + + const signatures = methodType ? getSignaturesOfType(methodType, SignatureKind.Call) : undefined; + if (!some(signatures)) { + return (type as IterableOrIteratorType)[resolver.iterableCacheKey] = noIterationTypes; + } + + const iteratorType = getUnionType(map(signatures, getReturnTypeOfSignature), UnionReduction.Subtype); + const iterationTypes = getIterationTypesOfIterator(iteratorType, resolver, errorNode) || noIterationTypes; + return (type as IterableOrIteratorType)[resolver.iterableCacheKey] = iterationTypes; } function reportTypeNotIterableError(errorNode: Node, type: Type, allowAsyncIterables: boolean): void { @@ -27679,104 +28033,257 @@ namespace ts { } /** - * This function has very similar logic as getIteratedTypeOfIterable, except that it operates on - * Iterators instead of Iterables. Here is the structure: + * Gets the *yield*, *return*, and *next* types from an `Iterator`-like or `AsyncIterator`-like type. * - * { // iterator - * next: { // nextMethod - * (): { // nextResult - * value: T // nextValue - * } - * } - * } - * - * For an async iterator, we expect the following structure: - * - * { // iterator - * next: { // nextMethod - * (): PromiseLike<{ // nextResult - * value: T // nextValue - * }> - * } - * } + * If we successfully found the *yield*, *return*, and *next* types, an `IterationTypes` + * record is returned. Otherwise, `undefined` is returned. */ - function getIteratedTypeOfIterator(type: Type, errorNode: Node | undefined, isAsyncIterator: boolean): Type | undefined { + function getIterationTypesOfIterator(type: Type, resolver: IterationTypesResolver, errorNode: Node | undefined) { if (isTypeAny(type)) { - return undefined; + return anyIterationTypes; } - const typeAsIterator = type; - if (isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator) { - return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator; - } - - // As an optimization, if the type is an instantiation of the global `Iterator` (for - // a non-async iterator) or the global `AsyncIterator` (for an async-iterator) then - // just grab its type argument. - const getIteratorType = isAsyncIterator ? getGlobalAsyncIteratorType : getGlobalIteratorType; - if (isReferenceToType(type, getIteratorType(/*reportErrors*/ false))) { - return isAsyncIterator - ? typeAsIterator.iteratedTypeOfAsyncIterator = (type).typeArguments![0] - : typeAsIterator.iteratedTypeOfIterator = (type).typeArguments![0]; - } - - // Both async and non-async iterators must have a `next` method. - const nextMethod = getTypeOfPropertyOfType(type, "next" as __String); - if (isTypeAny(nextMethod)) { - return undefined; - } - - const nextMethodSignatures = nextMethod ? getSignaturesOfType(nextMethod, SignatureKind.Call) : emptyArray; - if (nextMethodSignatures.length === 0) { - if (errorNode) { - error(errorNode, isAsyncIterator - ? Diagnostics.An_async_iterator_must_have_a_next_method - : Diagnostics.An_iterator_must_have_a_next_method); - } - return undefined; - } - - let nextResult: Type | undefined = getUnionType(map(nextMethodSignatures, getReturnTypeOfSignature), UnionReduction.Subtype); - if (isTypeAny(nextResult)) { - return undefined; - } - - // For an async iterator, we must get the awaited type of the return type. - if (isAsyncIterator) { - nextResult = getAwaitedTypeOfPromise(nextResult, errorNode, Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property); - if (isTypeAny(nextResult)) { - return undefined; - } - } - - const nextValue = nextResult && getTypeOfPropertyOfType(nextResult, "value" as __String); - if (!nextValue) { - if (errorNode) { - error(errorNode, isAsyncIterator - ? Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property - : Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property); - } - return undefined; - } - - return isAsyncIterator - ? typeAsIterator.iteratedTypeOfAsyncIterator = nextValue - : typeAsIterator.iteratedTypeOfIterator = nextValue; + const iterationTypes = + getIterationTypesOfIteratorCached(type, resolver) || + getIterationTypesOfIteratorFast(type, resolver) || + getIterationTypesOfIteratorSlow(type, resolver, errorNode); + return iterationTypes === noIterationTypes ? undefined : iterationTypes; } /** - * A generator may have a return type of `Iterator`, `Iterable`, or - * `IterableIterator`. An async generator may have a return type of `AsyncIterator`, - * `AsyncIterable`, or `AsyncIterableIterator`. This function can be used to extract - * the iterated type from this return type for contextual typing and verifying signatures. + * Gets the iteration types of an `Iterator`-like or `AsyncIterator`-like type from the + * cache. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterator` instead. */ - function getIteratedTypeOfGenerator(returnType: Type, isAsyncGenerator: boolean): Type | undefined { + function getIterationTypesOfIteratorCached(type: Type, resolver: IterationTypesResolver) { + return (type as IterableOrIteratorType)[resolver.iteratorCacheKey]; + } + + /** + * Gets the iteration types of an `Iterator`-like or `AsyncIterator`-like type from the + * cache or from common heuristics. + * + * If we previously analyzed this type and found no iteration types, `noIterationTypes` is + * returned. If we found iteration types, an `IterationTypes` record is returned. + * Otherwise, we return `undefined` to indicate to the caller it should perform a more + * exhaustive analysis. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterator` instead. + */ + function getIterationTypesOfIteratorFast(type: Type, resolver: IterationTypesResolver) { + // As an optimization, if the type is an instantiation of one of the following global types, + // then just grab its related type argument: + // - `IterableIterator` or `AsyncIterableIterator` + // - `Iterator` or `AsyncIterator` + // - `Generator` or `AsyncGenerator` + const globalType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false); + if (isReferenceToType(type, globalType)) { + const [yieldType] = (type as GenericType).typeArguments!; + // The "return" and "next" types of `IterableIterator` and `AsyncIterableIterator` are defined by the + // iteration types of their `next`, `return`, and `throw` methods. While we define these as `any` + // and `undefined` in our libs by default, a custom lib *could* use different definitions. + const globalIterationTypes = + getIterationTypesOfIteratorCached(globalType, resolver) || + getIterationTypesOfIteratorSlow(globalType, resolver, /*errorNode*/ undefined); + const { returnType, nextType } = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; + return (type as IterableOrIteratorType)[resolver.iteratorCacheKey] = createIterationTypes(yieldType, returnType, nextType); + } + if (isReferenceToType(type, resolver.getGlobalIteratorType(/*reportErrors*/ false)) || + isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false))) { + const [yieldType, returnType, nextType] = (type as GenericType).typeArguments!; + return (type as IterableOrIteratorType)[resolver.iteratorCacheKey] = createIterationTypes(yieldType, returnType, nextType); + } + } + + function isIteratorResult(type: Type, kind: IterationTypeKind.Yield | IterationTypeKind.Return) { + // From https://tc39.github.io/ecma262/#sec-iteratorresult-interface: + // > [done] is the result status of an iterator `next` method call. If the end of the iterator was reached `done` is `true`. + // > If the end was not reached `done` is `false` and a value is available. + // > If a `done` property (either own or inherited) does not exist, it is consider to have the value `false`. + const doneType = getTypeOfPropertyOfType(type, "done" as __String) || falseType; + return isTypeAssignableTo(kind === IterationTypeKind.Yield ? falseType : trueType, doneType); + } + + function isYieldIteratorResult(type: Type) { + return isIteratorResult(type, IterationTypeKind.Yield); + } + + function isReturnIteratorResult(type: Type) { + return isIteratorResult(type, IterationTypeKind.Return); + } + + /** + * Gets the *yield* and *return* types of an `IteratorResult`-like type. + * + * If we are unable to determine a *yield* or a *return* type, `noIterationTypes` is + * returned to indicate to the caller that it should handle the error. Otherwise, an + * `IterationTypes` record is returned. + */ + function getIterationTypesOfIteratorResult(type: Type) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + + const cachedTypes = (type as IterableOrIteratorType).iterationTypesOfIteratorResult; + if (cachedTypes) { + return cachedTypes; + } + + // As an optimization, if the type is an instantiation of one of the global `IteratorYieldResult` + // or `IteratorReturnResult` types, then just grab its type argument. + if (isReferenceToType(type, getGlobalIteratorYieldResultType(/*reportErrors*/ false))) { + const yieldType = (type as GenericType).typeArguments![0]; + return (type as IterableOrIteratorType).iterationTypesOfIteratorResult = createIterationTypes(yieldType, /*returnType*/ undefined, /*nextType*/ undefined); + } + if (isReferenceToType(type, getGlobalIteratorReturnResultType(/*reportErrors*/ false))) { + const returnType = (type as GenericType).typeArguments![0]; + return (type as IterableOrIteratorType).iterationTypesOfIteratorResult = createIterationTypes(/*yieldType*/ undefined, returnType, /*nextType*/ undefined); + } + + // Choose any constituents that can produce the requested iteration type. + const yieldIteratorResult = filterType(type, isYieldIteratorResult); + const yieldType = yieldIteratorResult !== neverType ? getTypeOfPropertyOfType(yieldIteratorResult, "value" as __String) : undefined; + + const returnIteratorResult = filterType(type, isReturnIteratorResult); + const returnType = returnIteratorResult !== neverType ? getTypeOfPropertyOfType(returnIteratorResult, "value" as __String) : undefined; + + if (!yieldType && !returnType) { + return (type as IterableOrIteratorType).iterationTypesOfIteratorResult = noIterationTypes; + } + + // From https://tc39.github.io/ecma262/#sec-iteratorresult-interface + // > ... If the iterator does not have a return value, `value` is `undefined`. In that case, the + // > `value` property may be absent from the conforming object if it does not inherit an explicit + // > `value` property. + return (type as IterableOrIteratorType).iterationTypesOfIteratorResult = createIterationTypes(yieldType, returnType || voidType, /*nextType*/ undefined); + } + + /** + * Gets the *yield*, *return*, and *next* types of a the `next()`, `return()`, or + * `throw()` method of an `Iterator`-like or `AsyncIterator`-like type. + * + * If we successfully found the *yield*, *return*, and *next* types, an `IterationTypes` + * record is returned. Otherwise, we return `undefined`. + */ + function getIterationTypesOfMethod(type: Type, resolver: IterationTypesResolver, methodName: "next" | "return" | "throw", errorNode: Node | undefined): IterationTypes | undefined { + const method = getPropertyOfType(type, methodName as __String); + + // Ignore 'return' or 'throw' if they are missing. + if (!method && methodName !== "next") { + return undefined; + } + + const methodType = method && !(methodName === "next" && (method.flags & SymbolFlags.Optional)) + ? methodName === "next" ? getTypeOfSymbol(method) : getTypeWithFacts(getTypeOfSymbol(method), TypeFacts.NEUndefinedOrNull) + : undefined; + + if (isTypeAny(methodType)) { + // `return()` and `throw()` don't provide a *next* type. + return methodName === "next" ? anyIterationTypes : anyIterationTypesExceptNext; + } + + // Both async and non-async iterators *must* have a `next` method. + const methodSignatures = methodType ? getSignaturesOfType(methodType, SignatureKind.Call) : emptyArray; + if (methodSignatures.length === 0) { + if (errorNode) { + const diagnostic = methodName === "next" + ? resolver.mustHaveANextMethodDiagnostic + : resolver.mustBeAMethodDiagnostic; + error(errorNode, diagnostic, methodName); + } + return methodName === "next" ? anyIterationTypes : undefined; + } + + // Extract the first parameter and return type of each signature. + let methodParameterTypes: Type[] | undefined; + let methodReturnTypes: Type[] | undefined; + for (const signature of methodSignatures) { + if (methodName !== "throw" && some(signature.parameters)) { + methodParameterTypes = append(methodParameterTypes, getTypeAtPosition(signature, 0)); + } + methodReturnTypes = append(methodReturnTypes, getReturnTypeOfSignature(signature)); + } + + // Resolve the *next* or *return* type from the first parameter of a `next()` or + // `return()` method, respectively. + let returnTypes: Type[] | undefined; + let nextType: Type | undefined; + if (methodName !== "throw") { + const methodParameterType = methodParameterTypes ? getUnionType(methodParameterTypes) : unknownType; + const resolvedMethodParameterType = resolver.resolveIterationType(methodParameterType, errorNode) || anyType; + if (methodName === "next") { + nextType = resolvedMethodParameterType; + } + else if (methodName === "return") { + returnTypes = append(returnTypes, resolvedMethodParameterType); + } + } + + // Resolve the *yield* and *return* types from the return type of the method (i.e. `IteratorResult`) + let yieldType: Type; + const methodReturnType = methodReturnTypes ? getUnionType(methodReturnTypes, UnionReduction.Subtype) : neverType; + const resolvedMethodReturnType = resolver.resolveIterationType(methodReturnType, errorNode) || anyType; + const iterationTypes = getIterationTypesOfIteratorResult(resolvedMethodReturnType); + if (iterationTypes === noIterationTypes) { + if (errorNode) { + error(errorNode, resolver.mustHaveAValueDiagnostic, methodName); + } + yieldType = anyType; + returnTypes = append(returnTypes, anyType); + } + else { + yieldType = iterationTypes.yieldType; + returnTypes = append(returnTypes, iterationTypes.returnType); + } + + return createIterationTypes(yieldType, getUnionType(returnTypes), nextType); + } + + /** + * Gets the *yield*, *return*, and *next* types of an `Iterator`-like or `AsyncIterator`-like + * type from its members. + * + * If we successfully found the *yield*, *return*, and *next* types, an `IterationTypes` + * record is returned. Otherwise, `noIterationTypes` is returned. + * + * NOTE: You probably don't want to call this directly and should be calling + * `getIterationTypesOfIterator` instead. + */ + function getIterationTypesOfIteratorSlow(type: Type, resolver: IterationTypesResolver, errorNode: Node | undefined) { + const iterationTypes = combineIterationTypes([ + getIterationTypesOfMethod(type, resolver, "next", errorNode), + getIterationTypesOfMethod(type, resolver, "return", errorNode), + getIterationTypesOfMethod(type, resolver, "throw", errorNode), + ]); + return (type as IterableOrIteratorType)[resolver.iteratorCacheKey] = iterationTypes; + } + + /** + * Gets the requested "iteration type" from a type that is either `Iterable`-like, `Iterator`-like, + * `IterableIterator`-like, or `Generator`-like (for a non-async generator); or `AsyncIterable`-like, + * `AsyncIterator`-like, `AsyncIterableIterator`-like, or `AsyncGenerator`-like (for an async generator). + */ + function getIterationTypeOfGeneratorFunctionReturnType(kind: IterationTypeKind, returnType: Type, isAsyncGenerator: boolean): Type | undefined { if (isTypeAny(returnType)) { return undefined; } - return getIteratedTypeOfIterable(returnType, /*errorNode*/ undefined, /*allowAsyncIterables*/ isAsyncGenerator, /*allowSyncIterables*/ !isAsyncGenerator, /*checkAssignability*/ false) - || getIteratedTypeOfIterator(returnType, /*errorNode*/ undefined, isAsyncGenerator); + const iterationTypes = getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsyncGenerator); + return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(kind)]; + } + + function getIterationTypesOfGeneratorFunctionReturnType(type: Type, isAsyncGenerator: boolean) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + + const use = isAsyncGenerator ? IterationUse.AsyncGeneratorReturnType : IterationUse.GeneratorReturnType; + const resolver = isAsyncGenerator ? asyncIterationTypesResolver : syncIterationTypesResolver; + return getIterationTypesOfIterable(type, use, /*errorNode*/ undefined) || + getIterationTypesOfIterator(type, resolver, /*errorNode*/ undefined); } function checkBreakOrContinueStatement(node: BreakOrContinueStatement) { @@ -27786,10 +28293,16 @@ namespace ts { // TODO: Check that target label is valid } + function unwrapReturnType(returnType: Type, functionFlags: FunctionFlags) { + const isGenerator = !!(functionFlags & FunctionFlags.Generator); + const isAsync = !!(functionFlags & FunctionFlags.Async); + return isGenerator ? getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Return, returnType, isAsync) || errorType : + isAsync ? getPromisedTypeOfPromise(returnType) || errorType : + returnType; + } + function isUnwrappedReturnTypeVoidOrAny(func: SignatureDeclaration, returnType: Type): boolean { - const unwrappedReturnType = (getFunctionFlags(func) & FunctionFlags.AsyncGenerator) === FunctionFlags.Async - ? getPromisedTypeOfPromise(returnType) // Async function - : returnType; // AsyncGenerator function, Generator function, or normal function + const unwrappedReturnType = unwrapReturnType(returnType, getFunctionFlags(func)); return !!unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, TypeFlags.Void | TypeFlags.AnyOrUnknown); } @@ -27808,17 +28321,9 @@ namespace ts { const signature = getSignatureFromDeclaration(func); const returnType = getReturnTypeOfSignature(signature); const functionFlags = getFunctionFlags(func); - const isGenerator = functionFlags & FunctionFlags.Generator; if (strictNullChecks || node.expression || returnType.flags & TypeFlags.Never) { const exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; - if (isGenerator) { // AsyncGenerator function or Generator function - // A generator does not need its return expressions checked against its return type. - // Instead, the yield expressions are checked against the element type. - // TODO: Check return types of generators when return type tracking is added - // for generators. - return; - } - else if (func.kind === SyntaxKind.SetAccessor) { + if (func.kind === SyntaxKind.SetAccessor) { if (node.expression) { error(node, Diagnostics.Setters_cannot_return_a_value); } @@ -27829,22 +28334,19 @@ namespace ts { } } else if (getReturnTypeFromAnnotation(func)) { - if (functionFlags & FunctionFlags.Async) { // Async function - const promisedType = getPromisedTypeOfPromise(returnType); - const awaitedType = checkAwaitedType(exprType, node, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member); - if (promisedType) { - // If the function has a return type, but promisedType is - // undefined, an error will be reported in checkAsyncFunctionReturnType - // so we don't need to report one here. - checkTypeAssignableToAndOptionallyElaborate(awaitedType, promisedType, node, node.expression); - } - } - else { - checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression); + const unwrappedReturnType = unwrapReturnType(returnType, functionFlags); + const unwrappedExprType = functionFlags & FunctionFlags.Async + ? checkAwaitedType(exprType, node, Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member) + : exprType; + if (unwrappedReturnType) { + // If the function has a return type, but promisedType is + // undefined, an error will be reported in checkAsyncFunctionReturnType + // so we don't need to report one here. + checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, node, node.expression); } } } - else if (func.kind !== SyntaxKind.Constructor && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType) && !isGenerator) { + else if (func.kind !== SyntaxKind.Constructor && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { // The function has a return type, but the return statement doesn't have an expression. error(node, Diagnostics.Not_all_code_paths_return_a_value); } @@ -30325,7 +30827,7 @@ namespace ts { const node = cast(expr.parent, isArrayLiteralExpression); // [{ property1: p1, property2 }] = elems; const typeOfArrayLiteral = getTypeOfAssignmentPattern(node) || errorType; - const elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral, expr.parent, /*allowStringInput*/ false, /*allowAsyncIterables*/ false) || errorType; + const elementType = checkIteratedTypeOrElementType(IterationUse.Destructuring, typeOfArrayLiteral, undefinedType, expr.parent) || errorType; return checkArrayLiteralDestructuringElementAssignment(node, typeOfArrayLiteral, node.elements.indexOf(expr), elementType); } @@ -32791,4 +33293,12 @@ namespace ts { export const LibraryManagedAttributes = "LibraryManagedAttributes" as __String; // tslint:enable variable-name } + + function getIterationTypesKeyFromIterationTypeKind(typeKind: IterationTypeKind) { + switch (typeKind) { + case IterationTypeKind.Yield: return "yieldType"; + case IterationTypeKind.Return: return "returnType"; + case IterationTypeKind.Next: return "nextType"; + } + } } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 4747b89f08c..2c4c867fb67 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -40,6 +40,7 @@ namespace ts { ["es2017.string", "lib.es2017.string.d.ts"], ["es2017.intl", "lib.es2017.intl.d.ts"], ["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"], + ["es2018.asyncgenerator", "lib.es2018.asyncgenerator.d.ts"], ["es2018.asynciterable", "lib.es2018.asynciterable.d.ts"], ["es2018.intl", "lib.es2018.intl.d.ts"], ["es2018.promise", "lib.es2018.promise.d.ts"], @@ -1899,7 +1900,9 @@ namespace ts { case "object": return {}; default: - return option.type.keys().next().value; + const iterResult = option.type.keys().next(); + if (!iterResult.done) return iterResult.value; + return Debug.fail("Expected 'option.type' to have entries."); } } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index f1511b79c12..545e5d7bdda 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -24,7 +24,6 @@ namespace ts { " __sortedArrayBrand": any; } - /** ES6 Map interface, only read methods included. */ export interface ReadonlyMap { get(key: string): T | undefined; @@ -45,7 +44,7 @@ namespace ts { /** ES6 Iterator type. */ export interface Iterator { - next(): { value: T, done: false } | { value: never, done: true }; + next(): { value: T, done?: false } | { value: never, done: true }; } /** Array that is only intended to be pushed to, never read. */ @@ -297,12 +296,13 @@ namespace ts { forEach(action: (value: T, key: string) => void): void { const iterator = this.entries(); while (true) { - const { value: entry, done } = iterator.next(); - if (done) { + const iterResult = iterator.next(); + if (iterResult.done) { break; } - action(entry[1], entry[0]); + const [key, value] = iterResult.value; + action(value, key); } } }; @@ -346,11 +346,11 @@ namespace ts { export function firstDefinedIterator(iter: Iterator, callback: (element: T) => U | undefined): U | undefined { while (true) { - const { value, done } = iter.next(); - if (done) { + const iterResult = iter.next(); + if (iterResult.done) { return undefined; } - const result = callback(value); + const result = callback(iterResult.value); if (result !== undefined) { return result; } @@ -375,7 +375,7 @@ namespace ts { return { value: undefined as never, done: true }; } i++; - return { value: [arrayA[i - 1], arrayB[i - 1]], done: false }; + return { value: [arrayA[i - 1], arrayB[i - 1]] as [T, U], done: false }; } }; } @@ -567,7 +567,7 @@ namespace ts { return { next() { const iterRes = iter.next(); - return iterRes.done ? iterRes : { value: mapFn(iterRes.value), done: false }; + return iterRes.done ? iterRes as { done: true, value: never } : { value: mapFn(iterRes.value), done: false }; } }; } @@ -678,7 +678,7 @@ namespace ts { } const iterRes = iter.next(); if (iterRes.done) { - return iterRes; + return iterRes as { done: true, value: never }; } currentIter = getIterator(iterRes.value); } @@ -753,7 +753,7 @@ namespace ts { while (true) { const res = iter.next(); if (res.done) { - return res; + return res as { done: true, value: never }; } const value = mapFn(res.value); if (value !== undefined) { @@ -1078,6 +1078,7 @@ namespace ts { * @param value The value to append to the array. If `value` is `undefined`, nothing is * appended. */ + export function append[number] | undefined>(to: TArray, value: TValue): [undefined, undefined] extends [TArray, TValue] ? TArray : NonNullable[number][]; export function append(to: T[], value: T | undefined): T[]; export function append(to: T[] | undefined, value: T): T[]; export function append(to: T[] | undefined, value: T | undefined): T[] | undefined; @@ -1402,8 +1403,8 @@ namespace ts { export function arrayFrom(iterator: Iterator | IterableIterator): T[]; export function arrayFrom(iterator: Iterator | IterableIterator, map?: (t: T) => U): (T | U)[] { const result: (T | U)[] = []; - for (let { value, done } = iterator.next(); !done; { value, done } = iterator.next()) { - result.push(map ? map(value) : value); + for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) { + result.push(map ? map(iterResult.value) : iterResult.value); } return result; } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7d178f1d478..c404851af3e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1764,7 +1764,7 @@ "category": "Error", "code": 2489 }, - "The type returned by the 'next()' method of an iterator must have a 'value' property.": { + "The type returned by the '{0}()' method of an iterator must have a 'value' property.": { "category": "Error", "code": 2490 }, @@ -1992,7 +1992,7 @@ "category": "Error", "code": 2546 }, - "The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property.": { + "The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property.": { "category": "Error", "code": 2547 }, @@ -2653,6 +2653,30 @@ "category": "Error", "code": 2762 }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'.": { + "category": "Error", + "code": 2763 + }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'.": { + "category": "Error", + "code": 2764 + }, + "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'.": { + "category": "Error", + "code": 2765 + }, + "Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'.": { + "category": "Error", + "code": 2766 + }, + "The '{0}' property of an iterator must be a method.": { + "category": "Error", + "code": 2767 + }, + "The '{0}' property of an async iterator must be a method.": { + "category": "Error", + "code": 2768 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", @@ -4214,7 +4238,7 @@ "category": "Error", "code": 7024 }, - "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type.": { + "Generator implicitly has yield type '{0}' because it does not yield any values. Consider supplying a return type annotation.": { "category": "Error", "code": 7025 }, @@ -4336,6 +4360,11 @@ "category": "Error", "code": 7054 }, + "'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type.": { + "category": "Error", + "code": 7055 + }, + "You cannot rename this element.": { "category": "Error", "code": 8000 diff --git a/src/compiler/sourcemap.ts b/src/compiler/sourcemap.ts index b33536bab2a..c17e47724e4 100644 --- a/src/compiler/sourcemap.ts +++ b/src/compiler/sourcemap.ts @@ -148,7 +148,8 @@ namespace ts { const sourceIndexToNewSourceIndexMap: number[] = []; let nameIndexToNewNameIndexMap: number[] | undefined; const mappingIterator = decodeMappings(map.mappings); - for (let { value: raw, done } = mappingIterator.next(); !done; { value: raw, done } = mappingIterator.next()) { + for (let iterResult = mappingIterator.next(); !iterResult.done; iterResult = mappingIterator.next()) { + const raw = iterResult.value; if (end && ( raw.generatedLine > end.line || (raw.generatedLine === end.line && raw.generatedCharacter > end.character))) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 91a4a5570ef..a31e707f984 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4273,13 +4273,23 @@ namespace ts { regularType: ResolvedType; // Regular version of fresh type } + /* @internal */ + export interface IterationTypes { + readonly yieldType: Type; + readonly returnType: Type; + readonly nextType: Type; + } + // Just a place to cache element types of iterables and iterators /* @internal */ export interface IterableOrIteratorType extends ObjectType, UnionType { - iteratedTypeOfIterable?: Type; - iteratedTypeOfIterator?: Type; - iteratedTypeOfAsyncIterable?: Type; - iteratedTypeOfAsyncIterator?: Type; + iterationTypesOfGeneratorReturnType?: IterationTypes; + iterationTypesOfAsyncGeneratorReturnType?: IterationTypes; + iterationTypesOfIterable?: IterationTypes; + iterationTypesOfIterator?: IterationTypes; + iterationTypesOfAsyncIterable?: IterationTypes; + iterationTypesOfAsyncIterator?: IterationTypes; + iterationTypesOfIteratorResult?: IterationTypes; } /* @internal */ diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 8b20ecda204..e9b23bdedf0 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -150,8 +150,8 @@ namespace ts { export function forEachEntry(map: ReadonlyMap, callback: (value: T, key: string) => U | undefined): U | undefined; export function forEachEntry(map: ReadonlyUnderscoreEscapedMap | ReadonlyMap, callback: (value: T, key: (string & __String)) => U | undefined): U | undefined { const iterator = map.entries(); - for (let { value: pair, done } = iterator.next(); !done; { value: pair, done } = iterator.next()) { - const [key, value] = pair; + for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) { + const [key, value] = iterResult.value; const result = callback(value, key as (string & __String)); if (result) { return result; @@ -165,8 +165,8 @@ namespace ts { export function forEachKey(map: ReadonlyMap<{}>, callback: (key: string) => T | undefined): T | undefined; export function forEachKey(map: ReadonlyUnderscoreEscapedMap<{}> | ReadonlyMap<{}>, callback: (key: string & __String) => T | undefined): T | undefined { const iterator = map.keys(); - for (let { value: key, done } = iterator.next(); !done; { value: key, done } = iterator.next()) { - const result = callback(key as string & __String); + for (let iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) { + const result = callback(iterResult.value as string & __String); if (result) { return result; } diff --git a/src/harness/sourceMapRecorder.ts b/src/harness/sourceMapRecorder.ts index 893b17ff106..829e047eade 100644 --- a/src/harness/sourceMapRecorder.ts +++ b/src/harness/sourceMapRecorder.ts @@ -301,7 +301,8 @@ namespace Harness.SourceMapRecorder { SourceMapSpanWriter.initializeSourceMapSpanWriter(sourceMapRecorder, sourceMapData.sourceMap, currentFile); const mapper = ts.decodeMappings(sourceMapData.sourceMap.mappings); - for (let { value: decodedSourceMapping, done } = mapper.next(); !done; { value: decodedSourceMapping, done } = mapper.next()) { + for (let iterResult = mapper.next(); !iterResult.done; iterResult = mapper.next()) { + const decodedSourceMapping = iterResult.value; const currentSourceFile = ts.isSourceMapping(decodedSourceMapping) ? program.getSourceFile(sourceMapData.inputSourceFileNames[decodedSourceMapping.sourceIndex]) : undefined; @@ -335,7 +336,8 @@ namespace Harness.SourceMapRecorder { SourceMapSpanWriter.initializeSourceMapSpanWriter(sourceMapRecorder, sourceMap, currentFile); const mapper = ts.decodeMappings(sourceMap.mappings); - for (let { value: decodedSourceMapping, done } = mapper.next(); !done; { value: decodedSourceMapping, done } = mapper.next()) { + for (let iterResult = mapper.next(); !iterResult.done; iterResult = mapper.next()) { + const decodedSourceMapping = iterResult.value; const currentSourceFile = ts.isSourceMapping(decodedSourceMapping) ? getFile(sourceFileAbsolutePaths[decodedSourceMapping.sourceIndex]) : undefined; diff --git a/src/harness/vfs.ts b/src/harness/vfs.ts index ee9519f254c..b20c04937f8 100644 --- a/src/harness/vfs.ts +++ b/src/harness/vfs.ts @@ -683,7 +683,7 @@ namespace vfs { if (isDirectory(node)) throw createIOError("EISDIR"); if (!isFile(node)) throw createIOError("EBADF"); - node.buffer = Buffer.isBuffer(data) ? data.slice() : ts.sys.bufferFrom!("" + data, encoding || "utf8"); + node.buffer = Buffer.isBuffer(data) ? data.slice() : ts.sys.bufferFrom!("" + data, encoding || "utf8") as Buffer; node.size = node.buffer.byteLength; node.mtimeMs = time; node.ctimeMs = time; @@ -1204,7 +1204,7 @@ namespace vfs { } }, readFileSync(path: string): Buffer { - return ts.sys.bufferFrom!(host.readFile(path)!, "utf8"); // TODO: GH#18217 + return ts.sys.bufferFrom!(host.readFile(path)!, "utf8") as Buffer; // TODO: GH#18217 } }; } diff --git a/src/lib/es2015.generator.d.ts b/src/lib/es2015.generator.d.ts index 92bb8dca868..7c6929173a0 100644 --- a/src/lib/es2015.generator.d.ts +++ b/src/lib/es2015.generator.d.ts @@ -1,4 +1,12 @@ -interface Generator extends Iterator { } +/// + +interface Generator extends Iterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext]): IteratorResult; + return(value: TReturn): IteratorResult; + throw(e: any): IteratorResult; + [Symbol.iterator](): Generator; +} interface GeneratorFunction { /** diff --git a/src/lib/es2015.iterable.d.ts b/src/lib/es2015.iterable.d.ts index faba45bc518..937f99d3409 100644 --- a/src/lib/es2015.iterable.d.ts +++ b/src/lib/es2015.iterable.d.ts @@ -8,15 +8,23 @@ interface SymbolConstructor { readonly iterator: symbol; } -interface IteratorResult { - done: boolean; - value: T; +interface IteratorYieldResult { + done?: false; + value: TYield; } -interface Iterator { - next(value?: any): IteratorResult; - return?(value?: any): IteratorResult; - throw?(e?: any): IteratorResult; +interface IteratorReturnResult { + done: true; + value: TReturn; +} + +type IteratorResult = IteratorYieldResult | IteratorReturnResult; + +interface Iterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext]): IteratorResult; + return?(value?: TReturn): IteratorResult; + throw?(e?: any): IteratorResult; } interface Iterable { diff --git a/src/lib/es2018.asyncgenerator.d.ts b/src/lib/es2018.asyncgenerator.d.ts new file mode 100644 index 00000000000..76275c92575 --- /dev/null +++ b/src/lib/es2018.asyncgenerator.d.ts @@ -0,0 +1,59 @@ +/// + +interface AsyncGenerator extends AsyncIterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext | PromiseLike]): Promise>; + return(value: TReturn | PromiseLike): Promise>; + throw(e: any): Promise>; + [Symbol.asyncIterator](): AsyncGenerator; +} + +interface AsyncGeneratorFunction { + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + new (...args: any[]): AsyncGenerator; + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + (...args: any[]): AsyncGenerator; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGenerator; +} + +interface AsyncGeneratorFunctionConstructor { + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + new (...args: string[]): AsyncGeneratorFunction; + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + (...args: string[]): AsyncGeneratorFunction; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGeneratorFunction; +} diff --git a/src/lib/es2018.asynciterable.d.ts b/src/lib/es2018.asynciterable.d.ts index 11093af623d..d5d83f31893 100644 --- a/src/lib/es2018.asynciterable.d.ts +++ b/src/lib/es2018.asynciterable.d.ts @@ -9,10 +9,11 @@ interface SymbolConstructor { readonly asyncIterator: symbol; } -interface AsyncIterator { - next(value?: any): Promise>; - return?(value?: any): Promise>; - throw?(e?: any): Promise>; +interface AsyncIterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...args: [] | [TNext | PromiseLike]): Promise>; + return?(value?: TReturn | PromiseLike): Promise>; + throw?(e?: any): Promise>; } interface AsyncIterable { diff --git a/src/lib/es2018.d.ts b/src/lib/es2018.d.ts index 2a20887b3ee..b7670a81c3c 100644 --- a/src/lib/es2018.d.ts +++ b/src/lib/es2018.d.ts @@ -1,4 +1,5 @@ /// +/// /// /// /// diff --git a/src/lib/libs.json b/src/lib/libs.json index ac2f2db5b6b..089689befdd 100644 --- a/src/lib/libs.json +++ b/src/lib/libs.json @@ -31,6 +31,7 @@ "es2017.string", "es2017.intl", "es2017.typedarrays", + "es2018.asyncgenerator", "es2018.asynciterable", "es2018.regexp", "es2018.promise", diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 10a7b667009..81c56bb179b 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2832,8 +2832,9 @@ namespace ts.server { let assignOrphanScriptInfosToInferredProject = false; if (openFiles) { while (true) { - const { value: file, done } = openFiles.next(); - if (done) break; + const iterResult = openFiles.next(); + if (iterResult.done) break; + const file = iterResult.value; const scriptInfo = this.getScriptInfo(file.fileName); Debug.assert(!scriptInfo || !scriptInfo.isScriptOpen(), "Script should not exist and not be open already"); // Create script infos so we have the new content for all the open files before we do any updates to projects @@ -2850,8 +2851,9 @@ namespace ts.server { if (changedFiles) { while (true) { - const { value: file, done } = changedFiles.next(); - if (done) break; + const iterResult = changedFiles.next(); + if (iterResult.done) break; + const file = iterResult.value; const scriptInfo = this.getScriptInfo(file.fileName)!; Debug.assert(!!scriptInfo); // Make edits to script infos and marks containing project as dirty @@ -2887,8 +2889,9 @@ namespace ts.server { /* @internal */ applyChangesToFile(scriptInfo: ScriptInfo, changes: Iterator) { while (true) { - const { value: change, done } = changes.next(); - if (done) break; + const iterResult = changes.next(); + if (iterResult.done) break; + const change = iterResult.value; scriptInfo.editContent(change.span.start, change.span.start + change.span.length, change.newText); } } diff --git a/src/testRunner/parallel/host.ts b/src/testRunner/parallel/host.ts index ee66fd738b0..50b18e39ac1 100644 --- a/src/testRunner/parallel/host.ts +++ b/src/testRunner/parallel/host.ts @@ -295,8 +295,8 @@ namespace Harness.Parallel.Host { worker.accumulatedOutput += d.toString(); console.log(`[Worker ${i}]`, d.toString()); }; - worker.process.stderr.on("data", appendOutput); - worker.process.stdout.on("data", appendOutput); + worker.process.stderr!.on("data", appendOutput); + worker.process.stdout!.on("data", appendOutput); const killChild = (timeout: TaskTimeout) => { worker.process.kill(); console.error(`Worker exceeded ${timeout.duration}ms timeout ${worker.currentTasks && worker.currentTasks.length ? `while running test '${worker.currentTasks[0].file}'.` : `during test setup.`}`); diff --git a/src/testRunner/unittests/config/commandLineParsing.ts b/src/testRunner/unittests/config/commandLineParsing.ts index 3d1001c7daf..d30c2a741dc 100644 --- a/src/testRunner/unittests/config/commandLineParsing.ts +++ b/src/testRunner/unittests/config/commandLineParsing.ts @@ -57,7 +57,7 @@ namespace ts { assertParseResult(["--lib", "es5,invalidOption", "0.ts"], { errors: [{ - messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", + messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category, code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code, file: undefined, @@ -259,7 +259,7 @@ namespace ts { assertParseResult(["--lib", "es5,", "es7", "0.ts"], { errors: [{ - messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", + messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category, code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code, file: undefined, @@ -278,7 +278,7 @@ namespace ts { assertParseResult(["--lib", "es5, ", "es7", "0.ts"], { errors: [{ - messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", + messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.string', 'es2017.intl', 'es2017.typedarrays', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', 'es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.string', 'es2020.symbol.wellknown', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable', 'esnext.intl', 'esnext.bigint'.", category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category, code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code, file: undefined, diff --git a/src/testRunner/unittests/config/showConfig.ts b/src/testRunner/unittests/config/showConfig.ts index afe8f878d27..043e8382d23 100644 --- a/src/testRunner/unittests/config/showConfig.ts +++ b/src/testRunner/unittests/config/showConfig.ts @@ -134,7 +134,9 @@ namespace ts { break; } default: { - const val = option.type.keys().next().value; + const iterResult = option.type.keys().next(); + if (iterResult.done) return Debug.fail("Expected 'option.type' to have entries"); + const val = iterResult.value; if (option.isTSConfigOnly) { args = ["-p", "tsconfig.json"]; configObject = { compilerOptions: { [option.name]: val } }; diff --git a/src/testRunner/unittests/shimMap.ts b/src/testRunner/unittests/shimMap.ts index a47a1d18205..c3e94c0840c 100644 --- a/src/testRunner/unittests/shimMap.ts +++ b/src/testRunner/unittests/shimMap.ts @@ -68,12 +68,13 @@ namespace ts { // Use an iterator. const iterator = map.entries(); while (true) { - const { value: tuple, done } = iterator.next(); - if (done) { + const iterResult = iterator.next(); + if (iterResult.done) { break; } - doForEach(tuple[1], tuple[0]); + const [key, value] = iterResult.value; + doForEach(value, key); } } diff --git a/src/testRunner/unittests/tsserver/helpers.ts b/src/testRunner/unittests/tsserver/helpers.ts index 1c2383ab004..63b854e8ce8 100644 --- a/src/testRunner/unittests/tsserver/helpers.ts +++ b/src/testRunner/unittests/tsserver/helpers.ts @@ -438,10 +438,13 @@ namespace ts.projectSystem { export function configuredProjectAt(projectService: server.ProjectService, index: number) { const values = projectService.configuredProjects.values(); while (index > 0) { - values.next(); + const iterResult = values.next(); + if (iterResult.done) return Debug.fail("Expected a result."); index--; } - return values.next().value; + const iterResult = values.next(); + if (iterResult.done) return Debug.fail("Expected a result."); + return iterResult.value; } export function checkProjectActualFiles(project: server.Project, expectedFiles: ReadonlyArray) { diff --git a/src/tsconfig-base.json b/src/tsconfig-base.json index 4d83436a538..c1081ed1826 100644 --- a/src/tsconfig-base.json +++ b/src/tsconfig-base.json @@ -1,7 +1,7 @@ { "compilerOptions": { "pretty": true, - "lib": ["es2015.iterable", "es5"], + "lib": ["es2015.iterable", "es2015.generator", "es5"], "target": "es5", "rootDir": ".", diff --git a/tests/baselines/reference/FunctionDeclaration11_es6.types b/tests/baselines/reference/FunctionDeclaration11_es6.types index 0a312c2661c..c5053de9781 100644 --- a/tests/baselines/reference/FunctionDeclaration11_es6.types +++ b/tests/baselines/reference/FunctionDeclaration11_es6.types @@ -1,4 +1,4 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration11_es6.ts === function * yield() { ->yield : () => IterableIterator +>yield : () => Generator } diff --git a/tests/baselines/reference/FunctionDeclaration13_es6.types b/tests/baselines/reference/FunctionDeclaration13_es6.types index b6f6aafd658..011472ef73d 100644 --- a/tests/baselines/reference/FunctionDeclaration13_es6.types +++ b/tests/baselines/reference/FunctionDeclaration13_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration13_es6.ts === function * foo() { ->foo : () => IterableIterator +>foo : () => Generator // Legal to use 'yield' in a type context. var v: yield; diff --git a/tests/baselines/reference/FunctionDeclaration1_es6.types b/tests/baselines/reference/FunctionDeclaration1_es6.types index 548b1eb98d6..025cbe051c6 100644 --- a/tests/baselines/reference/FunctionDeclaration1_es6.types +++ b/tests/baselines/reference/FunctionDeclaration1_es6.types @@ -1,4 +1,4 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration1_es6.ts === function * foo() { ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/FunctionDeclaration6_es6.types b/tests/baselines/reference/FunctionDeclaration6_es6.types index 4cfb710a781..e567b033ec6 100644 --- a/tests/baselines/reference/FunctionDeclaration6_es6.types +++ b/tests/baselines/reference/FunctionDeclaration6_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration6_es6.ts === function*foo(a = yield) { ->foo : (a?: any) => IterableIterator +>foo : (a?: any) => Generator >a : any >yield : any } diff --git a/tests/baselines/reference/FunctionDeclaration7_es6.types b/tests/baselines/reference/FunctionDeclaration7_es6.types index d9635231e4a..05df09ef780 100644 --- a/tests/baselines/reference/FunctionDeclaration7_es6.types +++ b/tests/baselines/reference/FunctionDeclaration7_es6.types @@ -1,10 +1,10 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration7_es6.ts === function*bar() { ->bar : () => IterableIterator +>bar : () => Generator // 'yield' here is an identifier, and not a yield expression. function*foo(a = yield) { ->foo : (a?: any) => IterableIterator +>foo : (a?: any) => Generator >a : any >yield : any } diff --git a/tests/baselines/reference/FunctionDeclaration9_es6.types b/tests/baselines/reference/FunctionDeclaration9_es6.types index 2b915b82a67..0c854f623f4 100644 --- a/tests/baselines/reference/FunctionDeclaration9_es6.types +++ b/tests/baselines/reference/FunctionDeclaration9_es6.types @@ -1,11 +1,11 @@ === tests/cases/conformance/es6/functionDeclarations/FunctionDeclaration9_es6.ts === function * foo() { ->foo : () => IterableIterator +>foo : () => Generator var v = { [yield]: foo } ->v : { [x: number]: () => IterableIterator; } ->{ [yield]: foo } : { [x: number]: () => IterableIterator; } ->[yield] : () => IterableIterator +>v : { [x: number]: () => Generator; } +>{ [yield]: foo } : { [x: number]: () => Generator; } +>[yield] : () => Generator >yield : any ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/FunctionExpression1_es6.types b/tests/baselines/reference/FunctionExpression1_es6.types index 1bba41f11f2..1c56baf396a 100644 --- a/tests/baselines/reference/FunctionExpression1_es6.types +++ b/tests/baselines/reference/FunctionExpression1_es6.types @@ -1,5 +1,5 @@ === tests/cases/conformance/es6/functionExpressions/FunctionExpression1_es6.ts === var v = function * () { } ->v : () => IterableIterator ->function * () { } : () => IterableIterator +>v : () => Generator +>function * () { } : () => Generator diff --git a/tests/baselines/reference/FunctionExpression2_es6.types b/tests/baselines/reference/FunctionExpression2_es6.types index 7a421dd1abf..8945268bf71 100644 --- a/tests/baselines/reference/FunctionExpression2_es6.types +++ b/tests/baselines/reference/FunctionExpression2_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionExpressions/FunctionExpression2_es6.ts === var v = function * foo() { } ->v : () => IterableIterator ->function * foo() { } : () => IterableIterator ->foo : () => IterableIterator +>v : () => Generator +>function * foo() { } : () => Generator +>foo : () => Generator diff --git a/tests/baselines/reference/FunctionPropertyAssignments1_es6.types b/tests/baselines/reference/FunctionPropertyAssignments1_es6.types index 90b8615003e..8fa1b035830 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments1_es6.types +++ b/tests/baselines/reference/FunctionPropertyAssignments1_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments1_es6.ts === var v = { *foo() { } } ->v : { foo(): IterableIterator; } ->{ *foo() { } } : { foo(): IterableIterator; } ->foo : () => IterableIterator +>v : { foo(): Generator; } +>{ *foo() { } } : { foo(): Generator; } +>foo : () => Generator diff --git a/tests/baselines/reference/FunctionPropertyAssignments2_es6.types b/tests/baselines/reference/FunctionPropertyAssignments2_es6.types index 6b9a2da9408..9ad073be7e9 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments2_es6.types +++ b/tests/baselines/reference/FunctionPropertyAssignments2_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments2_es6.ts === var v = { *() { } } ->v : { (Missing)(): IterableIterator; } ->{ *() { } } : { (Missing)(): IterableIterator; } -> : () => IterableIterator +>v : { (Missing)(): Generator; } +>{ *() { } } : { (Missing)(): Generator; } +> : () => Generator diff --git a/tests/baselines/reference/FunctionPropertyAssignments3_es6.types b/tests/baselines/reference/FunctionPropertyAssignments3_es6.types index 9222f6e142d..b49b766f1eb 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments3_es6.types +++ b/tests/baselines/reference/FunctionPropertyAssignments3_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments3_es6.ts === var v = { *{ } } ->v : { (Missing)(): IterableIterator; } ->{ *{ } } : { (Missing)(): IterableIterator; } -> : () => IterableIterator +>v : { (Missing)(): Generator; } +>{ *{ } } : { (Missing)(): Generator; } +> : () => Generator diff --git a/tests/baselines/reference/FunctionPropertyAssignments5_es6.types b/tests/baselines/reference/FunctionPropertyAssignments5_es6.types index 9430360e9da..18b2a7f33e5 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments5_es6.types +++ b/tests/baselines/reference/FunctionPropertyAssignments5_es6.types @@ -1,8 +1,8 @@ === tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts === var v = { *[foo()]() { } } ->v : { [x: number]: () => IterableIterator; } ->{ *[foo()]() { } } : { [x: number]: () => IterableIterator; } ->[foo()] : () => IterableIterator +>v : { [x: number]: () => Generator; } +>{ *[foo()]() { } } : { [x: number]: () => Generator; } +>[foo()] : () => Generator >foo() : any >foo : any diff --git a/tests/baselines/reference/FunctionPropertyAssignments6_es6.types b/tests/baselines/reference/FunctionPropertyAssignments6_es6.types index 832acbd8840..a7982dc2ca4 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments6_es6.types +++ b/tests/baselines/reference/FunctionPropertyAssignments6_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments6_es6.ts === var v = { *() { } } ->v : { (Missing)(): IterableIterator; } ->{ *() { } } : { (Missing)(): IterableIterator; } -> : () => IterableIterator +>v : { (Missing)(): Generator; } +>{ *() { } } : { (Missing)(): Generator; } +> : () => Generator diff --git a/tests/baselines/reference/MemberFunctionDeclaration1_es6.types b/tests/baselines/reference/MemberFunctionDeclaration1_es6.types index 89eec59bb1c..d002439563b 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration1_es6.types +++ b/tests/baselines/reference/MemberFunctionDeclaration1_es6.types @@ -3,5 +3,5 @@ class C { >C : C *foo() { } ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/MemberFunctionDeclaration2_es6.types b/tests/baselines/reference/MemberFunctionDeclaration2_es6.types index bfc83ccfd27..761fd3c8bb8 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration2_es6.types +++ b/tests/baselines/reference/MemberFunctionDeclaration2_es6.types @@ -3,5 +3,5 @@ class C { >C : C public * foo() { } ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/MemberFunctionDeclaration3_es6.types b/tests/baselines/reference/MemberFunctionDeclaration3_es6.types index e855cfa730d..97ecf7236b0 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration3_es6.types +++ b/tests/baselines/reference/MemberFunctionDeclaration3_es6.types @@ -3,6 +3,6 @@ class C { >C : C *[foo]() { } ->[foo] : () => IterableIterator +>[foo] : () => Generator >foo : any } diff --git a/tests/baselines/reference/MemberFunctionDeclaration4_es6.types b/tests/baselines/reference/MemberFunctionDeclaration4_es6.types index 7717c30a449..48b1bc1f591 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration4_es6.types +++ b/tests/baselines/reference/MemberFunctionDeclaration4_es6.types @@ -3,5 +3,5 @@ class C { >C : C *() { } -> : () => IterableIterator +> : () => Generator } diff --git a/tests/baselines/reference/MemberFunctionDeclaration7_es6.types b/tests/baselines/reference/MemberFunctionDeclaration7_es6.types index 8269f672372..1ee2ffc1433 100644 --- a/tests/baselines/reference/MemberFunctionDeclaration7_es6.types +++ b/tests/baselines/reference/MemberFunctionDeclaration7_es6.types @@ -3,5 +3,5 @@ class C { >C : C *foo() { } ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/YieldExpression10_es6.types b/tests/baselines/reference/YieldExpression10_es6.types index 966baa031ed..4f9f400a616 100644 --- a/tests/baselines/reference/YieldExpression10_es6.types +++ b/tests/baselines/reference/YieldExpression10_es6.types @@ -1,8 +1,8 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression10_es6.ts === var v = { * foo() { ->v : { foo(): IterableIterator; } ->{ * foo() { yield(foo); }} : { foo(): IterableIterator; } ->foo : () => IterableIterator +>v : { foo(): Generator; } +>{ * foo() { yield(foo); }} : { foo(): Generator; } +>foo : () => Generator yield(foo); >yield(foo) : any diff --git a/tests/baselines/reference/YieldExpression11_es6.types b/tests/baselines/reference/YieldExpression11_es6.types index 01257e4f95f..0ddc8ba936c 100644 --- a/tests/baselines/reference/YieldExpression11_es6.types +++ b/tests/baselines/reference/YieldExpression11_es6.types @@ -3,7 +3,7 @@ class C { >C : C *foo() { ->foo : () => IterableIterator +>foo : () => Generator yield(foo); >yield(foo) : any diff --git a/tests/baselines/reference/YieldExpression13_es6.types b/tests/baselines/reference/YieldExpression13_es6.types index 011ac1e09e8..5859828b8fe 100644 --- a/tests/baselines/reference/YieldExpression13_es6.types +++ b/tests/baselines/reference/YieldExpression13_es6.types @@ -1,5 +1,5 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression13_es6.ts === function* foo() { yield } ->foo : () => IterableIterator +>foo : () => Generator >yield : any diff --git a/tests/baselines/reference/YieldExpression16_es6.types b/tests/baselines/reference/YieldExpression16_es6.types index 661d60a5b58..67b956a3cfc 100644 --- a/tests/baselines/reference/YieldExpression16_es6.types +++ b/tests/baselines/reference/YieldExpression16_es6.types @@ -1,12 +1,12 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression16_es6.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator function bar() { >bar : () => void yield foo; >yield foo : any ->foo : () => IterableIterator +>foo : () => Generator } } diff --git a/tests/baselines/reference/YieldExpression19_es6.types b/tests/baselines/reference/YieldExpression19_es6.types index f57b175d53c..cab1da911c5 100644 --- a/tests/baselines/reference/YieldExpression19_es6.types +++ b/tests/baselines/reference/YieldExpression19_es6.types @@ -1,17 +1,17 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression19_es6.ts === function*foo() { ->foo : () => IterableIterator +>foo : () => Generator function bar() { >bar : () => void function* quux() { ->quux : () => IterableIterator<() => IterableIterator> +>quux : () => Generator<() => Generator, void, unknown> yield(foo); >yield(foo) : any ->(foo) : () => IterableIterator ->foo : () => IterableIterator +>(foo) : () => Generator +>foo : () => Generator } } } diff --git a/tests/baselines/reference/YieldExpression3_es6.types b/tests/baselines/reference/YieldExpression3_es6.types index 9e2f810d911..31ea178bc5a 100644 --- a/tests/baselines/reference/YieldExpression3_es6.types +++ b/tests/baselines/reference/YieldExpression3_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression3_es6.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield >yield : any diff --git a/tests/baselines/reference/YieldExpression4_es6.types b/tests/baselines/reference/YieldExpression4_es6.types index 929bef38edd..c52f9222070 100644 --- a/tests/baselines/reference/YieldExpression4_es6.types +++ b/tests/baselines/reference/YieldExpression4_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression4_es6.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield; >yield : any diff --git a/tests/baselines/reference/YieldExpression5_es6.types b/tests/baselines/reference/YieldExpression5_es6.types index 77a003d0922..6ff16d8cd8d 100644 --- a/tests/baselines/reference/YieldExpression5_es6.types +++ b/tests/baselines/reference/YieldExpression5_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression5_es6.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield* >yield* : any diff --git a/tests/baselines/reference/YieldExpression7_es6.types b/tests/baselines/reference/YieldExpression7_es6.types index 44dcc196c3b..8ebaa07ef60 100644 --- a/tests/baselines/reference/YieldExpression7_es6.types +++ b/tests/baselines/reference/YieldExpression7_es6.types @@ -1,8 +1,8 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression7_es6.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield foo >yield foo : any ->foo : () => IterableIterator +>foo : () => Generator } diff --git a/tests/baselines/reference/YieldExpression8_es6.types b/tests/baselines/reference/YieldExpression8_es6.types index 67343e3fbfc..66935c18cc5 100644 --- a/tests/baselines/reference/YieldExpression8_es6.types +++ b/tests/baselines/reference/YieldExpression8_es6.types @@ -2,13 +2,13 @@ yield(foo); >yield(foo) : any >yield : any ->foo : () => IterableIterator +>foo : () => Generator function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield(foo); >yield(foo) : any ->(foo) : () => IterableIterator ->foo : () => IterableIterator +>(foo) : () => Generator +>foo : () => Generator } diff --git a/tests/baselines/reference/YieldExpression9_es6.types b/tests/baselines/reference/YieldExpression9_es6.types index 109dc270583..e277bc711c5 100644 --- a/tests/baselines/reference/YieldExpression9_es6.types +++ b/tests/baselines/reference/YieldExpression9_es6.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/yieldExpressions/YieldExpression9_es6.ts === var v = function*() { ->v : () => IterableIterator ->function*() { yield(foo);} : () => IterableIterator +>v : () => Generator +>function*() { yield(foo);} : () => Generator yield(foo); >yield(foo) : any diff --git a/tests/baselines/reference/YieldStarExpression3_es6.types b/tests/baselines/reference/YieldStarExpression3_es6.types index 5bc03855b19..46d71934225 100644 --- a/tests/baselines/reference/YieldStarExpression3_es6.types +++ b/tests/baselines/reference/YieldStarExpression3_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/YieldStarExpression3_es6.ts === function *g() { ->g : () => IterableIterator +>g : () => Generator yield *; >yield * : any diff --git a/tests/baselines/reference/YieldStarExpression4_es6.types b/tests/baselines/reference/YieldStarExpression4_es6.types index 86b727306d4..5a1ebbe6a6e 100644 --- a/tests/baselines/reference/YieldStarExpression4_es6.types +++ b/tests/baselines/reference/YieldStarExpression4_es6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/YieldStarExpression4_es6.ts === function *g() { ->g : () => IterableIterator +>g : () => Generator yield * []; >yield * [] : any diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 479ba22f2a1..dfb9947447f 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -53,7 +53,7 @@ declare namespace ts { interface Iterator { next(): { value: T; - done: false; + done?: false; } | { value: never; done: true; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index c7e0403140f..a0833bf618e 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -53,7 +53,7 @@ declare namespace ts { interface Iterator { next(): { value: T; - done: false; + done?: false; } | { value: never; done: true; diff --git a/tests/baselines/reference/asyncImportNestedYield.types b/tests/baselines/reference/asyncImportNestedYield.types index f7fbfa8f962..59cd72d5465 100644 --- a/tests/baselines/reference/asyncImportNestedYield.types +++ b/tests/baselines/reference/asyncImportNestedYield.types @@ -1,6 +1,6 @@ === tests/cases/compiler/asyncImportNestedYield.ts === async function* foo() { ->foo : () => AsyncIterableIterator +>foo : () => AsyncGenerator import((await import(yield "foo")).default); >import((await import(yield "foo")).default) : Promise diff --git a/tests/baselines/reference/asyncMethodWithSuper_es6.types b/tests/baselines/reference/asyncMethodWithSuper_es6.types index ae78d8bc3ad..5dcc642146a 100644 --- a/tests/baselines/reference/asyncMethodWithSuper_es6.types +++ b/tests/baselines/reference/asyncMethodWithSuper_es6.types @@ -336,7 +336,7 @@ class B extends A { } async * property_access_only_read_only_in_generator() { ->property_access_only_read_only_in_generator : () => AsyncIterableIterator +>property_access_only_read_only_in_generator : () => AsyncGenerator // call with property access super.x(); @@ -372,7 +372,7 @@ class B extends A { } async * property_access_only_write_only_in_generator() { ->property_access_only_write_only_in_generator : () => AsyncIterableIterator +>property_access_only_write_only_in_generator : () => AsyncGenerator const f = () => {}; >f : () => void @@ -420,7 +420,7 @@ class B extends A { } async * element_access_only_read_only_in_generator() { ->element_access_only_read_only_in_generator : () => AsyncIterableIterator +>element_access_only_read_only_in_generator : () => AsyncGenerator // call with element access super["x"](); @@ -456,7 +456,7 @@ class B extends A { } async * element_access_only_write_only_in_generator() { ->element_access_only_write_only_in_generator : () => AsyncIterableIterator +>element_access_only_write_only_in_generator : () => AsyncGenerator const f = () => {}; >f : () => void diff --git a/tests/baselines/reference/awaitInNonAsyncFunction.types b/tests/baselines/reference/awaitInNonAsyncFunction.types index 78b9a6c5a90..1f521948779 100644 --- a/tests/baselines/reference/awaitInNonAsyncFunction.types +++ b/tests/baselines/reference/awaitInNonAsyncFunction.types @@ -57,7 +57,7 @@ const arrowFunc = (p: Promise) => { }; function* generatorFunc(p: Promise) { ->generatorFunc : (p: Promise) => IterableIterator +>generatorFunc : (p: Promise) => Generator >p : Promise for await (const _ of []); diff --git a/tests/baselines/reference/blockScopedBindingsInDownlevelGenerator.types b/tests/baselines/reference/blockScopedBindingsInDownlevelGenerator.types index cf93e7c2f4d..5f9692654ba 100644 --- a/tests/baselines/reference/blockScopedBindingsInDownlevelGenerator.types +++ b/tests/baselines/reference/blockScopedBindingsInDownlevelGenerator.types @@ -1,6 +1,6 @@ === tests/cases/compiler/blockScopedBindingsInDownlevelGenerator.ts === function* a() { ->a : () => IterableIterator +>a : () => Generator for (const i of [1,2,3]) { >i : number diff --git a/tests/baselines/reference/capturedParametersInInitializers1.types b/tests/baselines/reference/capturedParametersInInitializers1.types index 4819298d1af..aa0df80902e 100644 --- a/tests/baselines/reference/capturedParametersInInitializers1.types +++ b/tests/baselines/reference/capturedParametersInInitializers1.types @@ -82,11 +82,11 @@ function foo6(y = () => (() => z)(), z = 1) { // ok - used inside immediately invoked generator function function foo7(y = (function*() {yield z})(), z = 1) { ->foo7 : (y?: IterableIterator, z?: number) => void ->y : IterableIterator ->(function*() {yield z})() : IterableIterator ->(function*() {yield z}) : () => IterableIterator ->function*() {yield z} : () => IterableIterator +>foo7 : (y?: Generator, z?: number) => void +>y : Generator +>(function*() {yield z})() : Generator +>(function*() {yield z}) : () => Generator +>function*() {yield z} : () => Generator >yield z : any >z : number >z : number diff --git a/tests/baselines/reference/castOfYield.errors.txt b/tests/baselines/reference/castOfYield.errors.txt index 0d40a4dcd98..90725000c90 100644 --- a/tests/baselines/reference/castOfYield.errors.txt +++ b/tests/baselines/reference/castOfYield.errors.txt @@ -1,8 +1,8 @@ -error TS2318: Cannot find global type 'IterableIterator'. +error TS2318: Cannot find global type 'Generator'. tests/cases/compiler/castOfYield.ts(4,14): error TS1109: Expression expected. -!!! error TS2318: Cannot find global type 'IterableIterator'. +!!! error TS2318: Cannot find global type 'Generator'. ==== tests/cases/compiler/castOfYield.ts (1 errors) ==== function* f() { (yield 0); diff --git a/tests/baselines/reference/controlFlowIIFE.types b/tests/baselines/reference/controlFlowIIFE.types index 2116cfaa2ae..64207b27061 100644 --- a/tests/baselines/reference/controlFlowIIFE.types +++ b/tests/baselines/reference/controlFlowIIFE.types @@ -181,9 +181,9 @@ function f5() { >v : number (function*() { ->(function*() { yield 1; v = 1; })() : IterableIterator ->(function*() { yield 1; v = 1; }) : () => IterableIterator ->function*() { yield 1; v = 1; } : () => IterableIterator +>(function*() { yield 1; v = 1; })() : Generator +>(function*() { yield 1; v = 1; }) : () => Generator +>function*() { yield 1; v = 1; } : () => Generator yield 1; >yield 1 : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types index c6d6fb6758d..54013c11fce 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types @@ -3,7 +3,7 @@ class C1 { >C1 : C1 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es2015/asyncGenerators/C2.ts === @@ -11,7 +11,7 @@ class C2 { >C2 : C2 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -23,7 +23,7 @@ class C3 { >C3 : C3 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,7 +36,7 @@ class C4 { >C4 : C4 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -50,14 +50,14 @@ class C5 { >C5 : C5 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } @@ -67,7 +67,7 @@ class C6 { >C6 : C6 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -80,7 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 @@ -94,7 +94,7 @@ class C8 { >g : () => void } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator this.g(); >this.g() : void @@ -115,7 +115,7 @@ class C9 extends B9 { >B9 : B9 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator super.g(); >super.g() : void diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types index 17fefc54e81..7c439f49b7f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types @@ -3,7 +3,7 @@ class C1 { >C1 : C1 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es2018/asyncGenerators/C2.ts === @@ -11,7 +11,7 @@ class C2 { >C2 : C2 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -23,7 +23,7 @@ class C3 { >C3 : C3 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,7 +36,7 @@ class C4 { >C4 : C4 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -50,14 +50,14 @@ class C5 { >C5 : C5 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } @@ -67,7 +67,7 @@ class C6 { >C6 : C6 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -80,7 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 @@ -94,7 +94,7 @@ class C8 { >g : () => void } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator this.g(); >this.g() : void @@ -115,7 +115,7 @@ class C9 extends B9 { >B9 : B9 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator super.g(); >super.g() : void diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types index 5d636d2400c..bb62ad37038 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types @@ -3,7 +3,7 @@ class C1 { >C1 : C1 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es5/asyncGenerators/C2.ts === @@ -11,7 +11,7 @@ class C2 { >C2 : C2 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -23,7 +23,7 @@ class C3 { >C3 : C3 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,7 +36,7 @@ class C4 { >C4 : C4 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -50,14 +50,14 @@ class C5 { >C5 : C5 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } @@ -67,7 +67,7 @@ class C6 { >C6 : C6 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -80,7 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 @@ -94,7 +94,7 @@ class C8 { >g : () => void } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator this.g(); >this.g() : void @@ -115,7 +115,7 @@ class C9 extends B9 { >B9 : B9 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator super.g(); >super.g() : void diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types index 15ff1298b21..3dd1afd236d 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types @@ -1,10 +1,10 @@ === tests/cases/conformance/emitter/es2015/asyncGenerators/F1.ts === async function * f1() { ->f1 : () => AsyncIterableIterator +>f1 : () => AsyncGenerator } === tests/cases/conformance/emitter/es2015/asyncGenerators/F2.ts === async function * f2() { ->f2 : () => AsyncIterableIterator +>f2 : () => AsyncGenerator const x = yield; >x : any @@ -12,7 +12,7 @@ async function * f2() { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F3.ts === async function * f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator const x = yield 1; >x : any @@ -21,7 +21,7 @@ async function * f3() { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F4.ts === async function * f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator const x = yield* [1]; >x : any @@ -31,20 +31,20 @@ async function * f4() { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F5.ts === async function * f5() { ->f5 : () => AsyncIterableIterator +>f5 : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es2015/asyncGenerators/F6.ts === async function * f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator const x = await 1; >x : 1 @@ -53,7 +53,7 @@ async function * f6() { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator +>f7 : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types index 8ffd5534e40..9034f795efd 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types @@ -1,10 +1,10 @@ === tests/cases/conformance/emitter/es2018/asyncGenerators/F1.ts === async function * f1() { ->f1 : () => AsyncIterableIterator +>f1 : () => AsyncGenerator } === tests/cases/conformance/emitter/es2018/asyncGenerators/F2.ts === async function * f2() { ->f2 : () => AsyncIterableIterator +>f2 : () => AsyncGenerator const x = yield; >x : any @@ -12,7 +12,7 @@ async function * f2() { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F3.ts === async function * f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator const x = yield 1; >x : any @@ -21,7 +21,7 @@ async function * f3() { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F4.ts === async function * f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator const x = yield* [1]; >x : any @@ -31,20 +31,20 @@ async function * f4() { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F5.ts === async function * f5() { ->f5 : () => AsyncIterableIterator +>f5 : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es2018/asyncGenerators/F6.ts === async function * f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator const x = await 1; >x : 1 @@ -53,7 +53,7 @@ async function * f6() { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator +>f7 : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types index 6220f5efd1e..9771364486f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types @@ -1,10 +1,10 @@ === tests/cases/conformance/emitter/es5/asyncGenerators/F1.ts === async function * f1() { ->f1 : () => AsyncIterableIterator +>f1 : () => AsyncGenerator } === tests/cases/conformance/emitter/es5/asyncGenerators/F2.ts === async function * f2() { ->f2 : () => AsyncIterableIterator +>f2 : () => AsyncGenerator const x = yield; >x : any @@ -12,7 +12,7 @@ async function * f2() { } === tests/cases/conformance/emitter/es5/asyncGenerators/F3.ts === async function * f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator const x = yield 1; >x : any @@ -21,7 +21,7 @@ async function * f3() { } === tests/cases/conformance/emitter/es5/asyncGenerators/F4.ts === async function * f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator const x = yield* [1]; >x : any @@ -31,20 +31,20 @@ async function * f4() { } === tests/cases/conformance/emitter/es5/asyncGenerators/F5.ts === async function * f5() { ->f5 : () => AsyncIterableIterator +>f5 : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es5/asyncGenerators/F6.ts === async function * f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator const x = await 1; >x : 1 @@ -53,7 +53,7 @@ async function * f6() { } === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator +>f7 : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types index 1db2126b7ed..ee48f52f77a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types @@ -1,12 +1,12 @@ === tests/cases/conformance/emitter/es2015/asyncGenerators/F1.ts === const f1 = async function * () { ->f1 : () => AsyncIterableIterator ->async function * () {} : () => AsyncIterableIterator +>f1 : () => AsyncGenerator +>async function * () {} : () => AsyncGenerator } === tests/cases/conformance/emitter/es2015/asyncGenerators/F2.ts === const f2 = async function * () { ->f2 : () => AsyncIterableIterator ->async function * () { const x = yield;} : () => AsyncIterableIterator +>f2 : () => AsyncGenerator +>async function * () { const x = yield;} : () => AsyncGenerator const x = yield; >x : any @@ -14,8 +14,8 @@ const f2 = async function * () { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F3.ts === const f3 = async function * () { ->f3 : () => AsyncIterableIterator ->async function * () { const x = yield 1;} : () => AsyncIterableIterator +>f3 : () => AsyncGenerator +>async function * () { const x = yield 1;} : () => AsyncGenerator const x = yield 1; >x : any @@ -24,8 +24,8 @@ const f3 = async function * () { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F4.ts === const f4 = async function * () { ->f4 : () => AsyncIterableIterator ->async function * () { const x = yield* [1];} : () => AsyncIterableIterator +>f4 : () => AsyncGenerator +>async function * () { const x = yield* [1];} : () => AsyncGenerator const x = yield* [1]; >x : any @@ -35,22 +35,22 @@ const f4 = async function * () { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F5.ts === const f5 = async function * () { ->f5 : () => AsyncIterableIterator ->async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncIterableIterator +>f5 : () => AsyncGenerator +>async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es2015/asyncGenerators/F6.ts === const f6 = async function * () { ->f6 : () => AsyncIterableIterator ->async function * () { const x = await 1;} : () => AsyncIterableIterator +>f6 : () => AsyncGenerator +>async function * () { const x = await 1;} : () => AsyncGenerator const x = await 1; >x : 1 @@ -59,8 +59,8 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator ->async function * () { return 1;} : () => AsyncIterableIterator +>f7 : () => AsyncGenerator +>async function * () { return 1;} : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types index 07ee0579bed..8f09c423ecd 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types @@ -1,12 +1,12 @@ === tests/cases/conformance/emitter/es2018/asyncGenerators/F1.ts === const f1 = async function * () { ->f1 : () => AsyncIterableIterator ->async function * () {} : () => AsyncIterableIterator +>f1 : () => AsyncGenerator +>async function * () {} : () => AsyncGenerator } === tests/cases/conformance/emitter/es2018/asyncGenerators/F2.ts === const f2 = async function * () { ->f2 : () => AsyncIterableIterator ->async function * () { const x = yield;} : () => AsyncIterableIterator +>f2 : () => AsyncGenerator +>async function * () { const x = yield;} : () => AsyncGenerator const x = yield; >x : any @@ -14,8 +14,8 @@ const f2 = async function * () { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F3.ts === const f3 = async function * () { ->f3 : () => AsyncIterableIterator ->async function * () { const x = yield 1;} : () => AsyncIterableIterator +>f3 : () => AsyncGenerator +>async function * () { const x = yield 1;} : () => AsyncGenerator const x = yield 1; >x : any @@ -24,8 +24,8 @@ const f3 = async function * () { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F4.ts === const f4 = async function * () { ->f4 : () => AsyncIterableIterator ->async function * () { const x = yield* [1];} : () => AsyncIterableIterator +>f4 : () => AsyncGenerator +>async function * () { const x = yield* [1];} : () => AsyncGenerator const x = yield* [1]; >x : any @@ -35,22 +35,22 @@ const f4 = async function * () { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F5.ts === const f5 = async function * () { ->f5 : () => AsyncIterableIterator ->async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncIterableIterator +>f5 : () => AsyncGenerator +>async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es2018/asyncGenerators/F6.ts === const f6 = async function * () { ->f6 : () => AsyncIterableIterator ->async function * () { const x = await 1;} : () => AsyncIterableIterator +>f6 : () => AsyncGenerator +>async function * () { const x = await 1;} : () => AsyncGenerator const x = await 1; >x : 1 @@ -59,8 +59,8 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/es2018/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator ->async function * () { return 1;} : () => AsyncIterableIterator +>f7 : () => AsyncGenerator +>async function * () { return 1;} : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types index e9da600bdbf..b92f49da91f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types @@ -1,12 +1,12 @@ === tests/cases/conformance/emitter/es5/asyncGenerators/F1.ts === const f1 = async function * () { ->f1 : () => AsyncIterableIterator ->async function * () {} : () => AsyncIterableIterator +>f1 : () => AsyncGenerator +>async function * () {} : () => AsyncGenerator } === tests/cases/conformance/emitter/es5/asyncGenerators/F2.ts === const f2 = async function * () { ->f2 : () => AsyncIterableIterator ->async function * () { const x = yield;} : () => AsyncIterableIterator +>f2 : () => AsyncGenerator +>async function * () { const x = yield;} : () => AsyncGenerator const x = yield; >x : any @@ -14,8 +14,8 @@ const f2 = async function * () { } === tests/cases/conformance/emitter/es5/asyncGenerators/F3.ts === const f3 = async function * () { ->f3 : () => AsyncIterableIterator ->async function * () { const x = yield 1;} : () => AsyncIterableIterator +>f3 : () => AsyncGenerator +>async function * () { const x = yield 1;} : () => AsyncGenerator const x = yield 1; >x : any @@ -24,8 +24,8 @@ const f3 = async function * () { } === tests/cases/conformance/emitter/es5/asyncGenerators/F4.ts === const f4 = async function * () { ->f4 : () => AsyncIterableIterator ->async function * () { const x = yield* [1];} : () => AsyncIterableIterator +>f4 : () => AsyncGenerator +>async function * () { const x = yield* [1];} : () => AsyncGenerator const x = yield* [1]; >x : any @@ -35,22 +35,22 @@ const f4 = async function * () { } === tests/cases/conformance/emitter/es5/asyncGenerators/F5.ts === const f5 = async function * () { ->f5 : () => AsyncIterableIterator ->async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncIterableIterator +>f5 : () => AsyncGenerator +>async function * () { const x = yield* (async function*() { yield 1; })();} : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } === tests/cases/conformance/emitter/es5/asyncGenerators/F6.ts === const f6 = async function * () { ->f6 : () => AsyncIterableIterator ->async function * () { const x = await 1;} : () => AsyncIterableIterator +>f6 : () => AsyncGenerator +>async function * () { const x = await 1;} : () => AsyncGenerator const x = await 1; >x : 1 @@ -59,8 +59,8 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator ->async function * () { return 1;} : () => AsyncIterableIterator +>f7 : () => AsyncGenerator +>async function * () { return 1;} : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types index 9e47fc9d989..5d9d79da634 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types @@ -1,19 +1,19 @@ === tests/cases/conformance/emitter/es2015/asyncGenerators/O1.ts === const o1 = { ->o1 : { f(): AsyncIterableIterator; } ->{ async * f() { }} : { f(): AsyncIterableIterator; } +>o1 : { f(): AsyncGenerator; } +>{ async * f() { }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es2015/asyncGenerators/O2.ts === const o2 = { ->o2 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield; }} : { f(): AsyncIterableIterator; } +>o2 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -22,11 +22,11 @@ const o2 = { } === tests/cases/conformance/emitter/es2015/asyncGenerators/O3.ts === const o3 = { ->o3 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield 1; }} : { f(): AsyncIterableIterator; } +>o3 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,11 +36,11 @@ const o3 = { } === tests/cases/conformance/emitter/es2015/asyncGenerators/O4.ts === const o4 = { ->o4 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncIterableIterator; } +>o4 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -51,29 +51,29 @@ const o4 = { } === tests/cases/conformance/emitter/es2015/asyncGenerators/O5.ts === const o5 = { ->o5 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncIterableIterator; } +>o5 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } } === tests/cases/conformance/emitter/es2015/asyncGenerators/O6.ts === const o6 = { ->o6 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = await 1; }} : { f(): AsyncIterableIterator; } +>o6 : { f(): AsyncGenerator; } +>{ async * f() { const x = await 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -83,11 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/es2015/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator; } +>o7 : { f(): AsyncGenerator; } +>{ async * f() { return 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types index 4b33425a7a4..5b0b63b66e4 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types @@ -1,19 +1,19 @@ === tests/cases/conformance/emitter/es2018/asyncGenerators/O1.ts === const o1 = { ->o1 : { f(): AsyncIterableIterator; } ->{ async * f() { }} : { f(): AsyncIterableIterator; } +>o1 : { f(): AsyncGenerator; } +>{ async * f() { }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es2018/asyncGenerators/O2.ts === const o2 = { ->o2 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield; }} : { f(): AsyncIterableIterator; } +>o2 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -22,11 +22,11 @@ const o2 = { } === tests/cases/conformance/emitter/es2018/asyncGenerators/O3.ts === const o3 = { ->o3 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield 1; }} : { f(): AsyncIterableIterator; } +>o3 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,11 +36,11 @@ const o3 = { } === tests/cases/conformance/emitter/es2018/asyncGenerators/O4.ts === const o4 = { ->o4 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncIterableIterator; } +>o4 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -51,29 +51,29 @@ const o4 = { } === tests/cases/conformance/emitter/es2018/asyncGenerators/O5.ts === const o5 = { ->o5 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncIterableIterator; } +>o5 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } } === tests/cases/conformance/emitter/es2018/asyncGenerators/O6.ts === const o6 = { ->o6 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = await 1; }} : { f(): AsyncIterableIterator; } +>o6 : { f(): AsyncGenerator; } +>{ async * f() { const x = await 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -83,11 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/es2018/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator; } +>o7 : { f(): AsyncGenerator; } +>{ async * f() { return 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types index 39000760508..b4ab8ea8480 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types @@ -1,19 +1,19 @@ === tests/cases/conformance/emitter/es5/asyncGenerators/O1.ts === const o1 = { ->o1 : { f(): AsyncIterableIterator; } ->{ async * f() { }} : { f(): AsyncIterableIterator; } +>o1 : { f(): AsyncGenerator; } +>{ async * f() { }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/emitter/es5/asyncGenerators/O2.ts === const o2 = { ->o2 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield; }} : { f(): AsyncIterableIterator; } +>o2 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield; >x : any @@ -22,11 +22,11 @@ const o2 = { } === tests/cases/conformance/emitter/es5/asyncGenerators/O3.ts === const o3 = { ->o3 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield 1; }} : { f(): AsyncIterableIterator; } +>o3 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield 1; >x : any @@ -36,11 +36,11 @@ const o3 = { } === tests/cases/conformance/emitter/es5/asyncGenerators/O4.ts === const o4 = { ->o4 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncIterableIterator; } +>o4 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* [1]; >x : any @@ -51,29 +51,29 @@ const o4 = { } === tests/cases/conformance/emitter/es5/asyncGenerators/O5.ts === const o5 = { ->o5 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncIterableIterator; } +>o5 : { f(): AsyncGenerator; } +>{ async * f() { const x = yield* (async function*() { yield 1; })(); }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = yield* (async function*() { yield 1; })(); ->x : any ->yield* (async function*() { yield 1; })() : any ->(async function*() { yield 1; })() : AsyncIterableIterator ->(async function*() { yield 1; }) : () => AsyncIterableIterator ->async function*() { yield 1; } : () => AsyncIterableIterator +>x : void +>yield* (async function*() { yield 1; })() : void +>(async function*() { yield 1; })() : AsyncGenerator +>(async function*() { yield 1; }) : () => AsyncGenerator +>async function*() { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } } === tests/cases/conformance/emitter/es5/asyncGenerators/O6.ts === const o6 = { ->o6 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = await 1; }} : { f(): AsyncIterableIterator; } +>o6 : { f(): AsyncGenerator; } +>{ async * f() { const x = await 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = await 1; >x : 1 @@ -83,11 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/es5/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator; } +>o7 : { f(): AsyncGenerator; } +>{ async * f() { return 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator return 1; >1 : 1 diff --git a/tests/baselines/reference/emitter.forAwait.es2015.types b/tests/baselines/reference/emitter.forAwait.es2015.types index e7d1c77f346..3c345386c37 100644 --- a/tests/baselines/reference/emitter.forAwait.es2015.types +++ b/tests/baselines/reference/emitter.forAwait.es2015.types @@ -25,7 +25,7 @@ async function f2() { } === tests/cases/conformance/emitter/es2015/forAwait/file3.ts === async function* f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator let y: any; >y : any @@ -37,7 +37,7 @@ async function* f3() { } === tests/cases/conformance/emitter/es2015/forAwait/file4.ts === async function* f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator let x: any, y: any; >x : any @@ -68,7 +68,7 @@ async function f5() { === tests/cases/conformance/emitter/es2015/forAwait/file6.ts === // https://github.com/Microsoft/TypeScript/issues/21363 async function* f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator let y: any; >y : any diff --git a/tests/baselines/reference/emitter.forAwait.es2017.types b/tests/baselines/reference/emitter.forAwait.es2017.types index f1dffdd280a..19642ddd677 100644 --- a/tests/baselines/reference/emitter.forAwait.es2017.types +++ b/tests/baselines/reference/emitter.forAwait.es2017.types @@ -25,7 +25,7 @@ async function f2() { } === tests/cases/conformance/emitter/es2017/forAwait/file3.ts === async function* f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator let y: any; >y : any @@ -37,7 +37,7 @@ async function* f3() { } === tests/cases/conformance/emitter/es2017/forAwait/file4.ts === async function* f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator let x: any, y: any; >x : any @@ -68,7 +68,7 @@ async function f5() { === tests/cases/conformance/emitter/es2017/forAwait/file6.ts === // https://github.com/Microsoft/TypeScript/issues/21363 async function* f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator let y: any; >y : any diff --git a/tests/baselines/reference/emitter.forAwait.es2018.types b/tests/baselines/reference/emitter.forAwait.es2018.types index c9954de364d..a9b3a94dead 100644 --- a/tests/baselines/reference/emitter.forAwait.es2018.types +++ b/tests/baselines/reference/emitter.forAwait.es2018.types @@ -25,7 +25,7 @@ async function f2() { } === tests/cases/conformance/emitter/es2018/forAwait/file3.ts === async function* f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator let y: any; >y : any @@ -37,7 +37,7 @@ async function* f3() { } === tests/cases/conformance/emitter/es2018/forAwait/file4.ts === async function* f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator let x: any, y: any; >x : any @@ -68,7 +68,7 @@ async function f5() { === tests/cases/conformance/emitter/es2018/forAwait/file6.ts === // https://github.com/Microsoft/TypeScript/issues/21363 async function* f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator let y: any; >y : any diff --git a/tests/baselines/reference/emitter.forAwait.es5.types b/tests/baselines/reference/emitter.forAwait.es5.types index fe0a49a9016..1452be304b6 100644 --- a/tests/baselines/reference/emitter.forAwait.es5.types +++ b/tests/baselines/reference/emitter.forAwait.es5.types @@ -25,7 +25,7 @@ async function f2() { } === tests/cases/conformance/emitter/es5/forAwait/file3.ts === async function* f3() { ->f3 : () => AsyncIterableIterator +>f3 : () => AsyncGenerator let y: any; >y : any @@ -37,7 +37,7 @@ async function* f3() { } === tests/cases/conformance/emitter/es5/forAwait/file4.ts === async function* f4() { ->f4 : () => AsyncIterableIterator +>f4 : () => AsyncGenerator let x: any, y: any; >x : any @@ -68,7 +68,7 @@ async function f5() { === tests/cases/conformance/emitter/es5/forAwait/file6.ts === // https://github.com/Microsoft/TypeScript/issues/21363 async function* f6() { ->f6 : () => AsyncIterableIterator +>f6 : () => AsyncGenerator let y: any; >y : any diff --git a/tests/baselines/reference/expressionsForbiddenInParameterInitializers.types b/tests/baselines/reference/expressionsForbiddenInParameterInitializers.types index 6142c1066fa..f70d546fce2 100644 --- a/tests/baselines/reference/expressionsForbiddenInParameterInitializers.types +++ b/tests/baselines/reference/expressionsForbiddenInParameterInitializers.types @@ -8,7 +8,7 @@ export async function foo({ foo = await import("./bar") }) { } export function* foo2({ foo = yield "a" }) { ->foo2 : ({ foo }: { foo?: any; }) => IterableIterator +>foo2 : ({ foo }: { foo?: any; }) => Generator >foo : any >yield "a" : any >"a" : "a" diff --git a/tests/baselines/reference/for-of29.errors.txt b/tests/baselines/reference/for-of29.errors.txt index 748fcf49050..0f1bead3f13 100644 --- a/tests/baselines/reference/for-of29.errors.txt +++ b/tests/baselines/reference/for-of29.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/es6/for-ofStatements/for-of29.ts(5,15): error TS2322: Type '{ [Symbol.iterator]?(): Iterator; }' is not assignable to type 'Iterable'. - Property '[Symbol.iterator]' is optional in type '{ [Symbol.iterator]?(): Iterator; }' but required in type 'Iterable'. +tests/cases/conformance/es6/for-ofStatements/for-of29.ts(5,15): error TS2488: Type '{ [Symbol.iterator]?(): Iterator; }' must have a '[Symbol.iterator]()' method that returns an iterator. ==== tests/cases/conformance/es6/for-ofStatements/for-of29.ts (1 errors) ==== @@ -9,6 +8,5 @@ tests/cases/conformance/es6/for-ofStatements/for-of29.ts(5,15): error TS2322: Ty for (var v of iterableWithOptionalIterator) { } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type '{ [Symbol.iterator]?(): Iterator; }' is not assignable to type 'Iterable'. -!!! error TS2322: Property '[Symbol.iterator]' is optional in type '{ [Symbol.iterator]?(): Iterator; }' but required in type 'Iterable'. +!!! error TS2488: Type '{ [Symbol.iterator]?(): Iterator; }' must have a '[Symbol.iterator]()' method that returns an iterator. \ No newline at end of file diff --git a/tests/baselines/reference/for-of29.types b/tests/baselines/reference/for-of29.types index 51c82012893..2f246b56860 100644 --- a/tests/baselines/reference/for-of29.types +++ b/tests/baselines/reference/for-of29.types @@ -1,9 +1,9 @@ === tests/cases/conformance/es6/for-ofStatements/for-of29.ts === var iterableWithOptionalIterator: { ->iterableWithOptionalIterator : { [Symbol.iterator]?(): Iterator; } +>iterableWithOptionalIterator : { [Symbol.iterator]?(): Iterator; } [Symbol.iterator]?(): Iterator ->[Symbol.iterator] : () => Iterator +>[Symbol.iterator] : () => Iterator >Symbol.iterator : symbol >Symbol : SymbolConstructor >iterator : symbol @@ -11,6 +11,6 @@ var iterableWithOptionalIterator: { }; for (var v of iterableWithOptionalIterator) { } ->v : string ->iterableWithOptionalIterator : { [Symbol.iterator]?(): Iterator; } +>v : any +>iterableWithOptionalIterator : { [Symbol.iterator]?(): Iterator; } diff --git a/tests/baselines/reference/for-of30.errors.txt b/tests/baselines/reference/for-of30.errors.txt index b0091c90b57..5d9f5d4d1b6 100644 --- a/tests/baselines/reference/for-of30.errors.txt +++ b/tests/baselines/reference/for-of30.errors.txt @@ -1,9 +1,4 @@ -tests/cases/conformance/es6/for-ofStatements/for-of30.ts(16,15): error TS2322: Type 'StringIterator' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '() => StringIterator' is not assignable to type '() => Iterator'. - Type 'StringIterator' is not assignable to type 'Iterator'. - Types of property 'return' are incompatible. - Type 'number' is not assignable to type '(value?: any) => IteratorResult'. +tests/cases/conformance/es6/for-ofStatements/for-of30.ts(16,15): error TS2767: The 'return' property of an iterator must be a method. ==== tests/cases/conformance/es6/for-ofStatements/for-of30.ts (1 errors) ==== @@ -14,9 +9,9 @@ tests/cases/conformance/es6/for-ofStatements/for-of30.ts(16,15): error TS2322: T value: "" } } - + return = 0; - + [Symbol.iterator]() { return this; } @@ -24,9 +19,4 @@ tests/cases/conformance/es6/for-ofStatements/for-of30.ts(16,15): error TS2322: T for (var v of new StringIterator) { } ~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'StringIterator' is not assignable to type 'Iterable'. -!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '() => StringIterator' is not assignable to type '() => Iterator'. -!!! error TS2322: Type 'StringIterator' is not assignable to type 'Iterator'. -!!! error TS2322: Types of property 'return' are incompatible. -!!! error TS2322: Type 'number' is not assignable to type '(value?: any) => IteratorResult'. \ No newline at end of file +!!! error TS2767: The 'return' property of an iterator must be a method. \ No newline at end of file diff --git a/tests/baselines/reference/for-of30.js b/tests/baselines/reference/for-of30.js index 935944db640..49d3fa8f46c 100644 --- a/tests/baselines/reference/for-of30.js +++ b/tests/baselines/reference/for-of30.js @@ -6,9 +6,9 @@ class StringIterator { value: "" } } - + return = 0; - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of30.symbols b/tests/baselines/reference/for-of30.symbols index 779d8aa2b21..f6fd0224ad7 100644 --- a/tests/baselines/reference/for-of30.symbols +++ b/tests/baselines/reference/for-of30.symbols @@ -13,10 +13,10 @@ class StringIterator { >value : Symbol(value, Decl(for-of30.ts, 3, 24)) } } - + return = 0; >return : Symbol(StringIterator.return, Decl(for-of30.ts, 6, 5)) - + [Symbol.iterator]() { >[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(for-of30.ts, 8, 15)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/for-of30.types b/tests/baselines/reference/for-of30.types index bd369223d7f..d415360dc6f 100644 --- a/tests/baselines/reference/for-of30.types +++ b/tests/baselines/reference/for-of30.types @@ -17,11 +17,11 @@ class StringIterator { >"" : "" } } - + return = 0; >return : number >0 : 0 - + [Symbol.iterator]() { >[Symbol.iterator] : () => this >Symbol.iterator : symbol diff --git a/tests/baselines/reference/for-of31.errors.txt b/tests/baselines/reference/for-of31.errors.txt deleted file mode 100644 index 2b1a7052918..00000000000 --- a/tests/baselines/reference/for-of31.errors.txt +++ /dev/null @@ -1,33 +0,0 @@ -tests/cases/conformance/es6/for-ofStatements/for-of31.ts(14,15): error TS2322: Type 'StringIterator' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '() => StringIterator' is not assignable to type '() => Iterator'. - Type 'StringIterator' is not assignable to type 'Iterator'. - Types of property 'next' are incompatible. - Type '() => { value: string; }' is not assignable to type '(value?: any) => IteratorResult'. - Property 'done' is missing in type '{ value: string; }' but required in type 'IteratorResult'. - - -==== tests/cases/conformance/es6/for-ofStatements/for-of31.ts (1 errors) ==== - class StringIterator { - next() { - return { - // no done property - value: "" - } - } - - [Symbol.iterator]() { - return this; - } - } - - for (var v of new StringIterator) { } - ~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'StringIterator' is not assignable to type 'Iterable'. -!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '() => StringIterator' is not assignable to type '() => Iterator'. -!!! error TS2322: Type 'StringIterator' is not assignable to type 'Iterator'. -!!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '() => { value: string; }' is not assignable to type '(value?: any) => IteratorResult'. -!!! error TS2322: Property 'done' is missing in type '{ value: string; }' but required in type 'IteratorResult'. -!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:32:5: 'done' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/for-of31.js b/tests/baselines/reference/for-of31.js index 84e24bed5a9..10bc33416c9 100644 --- a/tests/baselines/reference/for-of31.js +++ b/tests/baselines/reference/for-of31.js @@ -6,7 +6,7 @@ class StringIterator { value: "" } } - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of31.symbols b/tests/baselines/reference/for-of31.symbols index 41b7d0a85d6..37b4f27aaa8 100644 --- a/tests/baselines/reference/for-of31.symbols +++ b/tests/baselines/reference/for-of31.symbols @@ -11,7 +11,7 @@ class StringIterator { >value : Symbol(value, Decl(for-of31.ts, 2, 16)) } } - + [Symbol.iterator]() { >[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(for-of31.ts, 6, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/for-of31.types b/tests/baselines/reference/for-of31.types index 843ce928c44..330c39578f3 100644 --- a/tests/baselines/reference/for-of31.types +++ b/tests/baselines/reference/for-of31.types @@ -14,7 +14,7 @@ class StringIterator { >"" : "" } } - + [Symbol.iterator]() { >[Symbol.iterator] : () => this >Symbol.iterator : symbol diff --git a/tests/baselines/reference/for-of34.errors.txt b/tests/baselines/reference/for-of34.errors.txt index 2d53ecb0a20..ecab8c91e1f 100644 --- a/tests/baselines/reference/for-of34.errors.txt +++ b/tests/baselines/reference/for-of34.errors.txt @@ -9,7 +9,7 @@ tests/cases/conformance/es6/for-ofStatements/for-of34.ts(11,10): error TS7022: ' !!! error TS7023: 'next' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions. return v; } - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of34.js b/tests/baselines/reference/for-of34.js index 2d9af61d1a3..3cfb390890d 100644 --- a/tests/baselines/reference/for-of34.js +++ b/tests/baselines/reference/for-of34.js @@ -3,7 +3,7 @@ class StringIterator { next() { return v; } - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of34.symbols b/tests/baselines/reference/for-of34.symbols index 0b1e1252753..3ebe5624f9e 100644 --- a/tests/baselines/reference/for-of34.symbols +++ b/tests/baselines/reference/for-of34.symbols @@ -8,7 +8,7 @@ class StringIterator { return v; >v : Symbol(v, Decl(for-of34.ts, 10, 8)) } - + [Symbol.iterator]() { >[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(for-of34.ts, 3, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/for-of34.types b/tests/baselines/reference/for-of34.types index 5a4287e7843..3cb11706a13 100644 --- a/tests/baselines/reference/for-of34.types +++ b/tests/baselines/reference/for-of34.types @@ -8,7 +8,7 @@ class StringIterator { return v; >v : any } - + [Symbol.iterator]() { >[Symbol.iterator] : () => this >Symbol.iterator : symbol diff --git a/tests/baselines/reference/for-of35.errors.txt b/tests/baselines/reference/for-of35.errors.txt index 6f14a24fb96..fe4cc69cdaf 100644 --- a/tests/baselines/reference/for-of35.errors.txt +++ b/tests/baselines/reference/for-of35.errors.txt @@ -12,7 +12,7 @@ tests/cases/conformance/es6/for-ofStatements/for-of35.ts(14,10): error TS7022: ' value: v } } - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of35.js b/tests/baselines/reference/for-of35.js index a73f873d7ce..769138664da 100644 --- a/tests/baselines/reference/for-of35.js +++ b/tests/baselines/reference/for-of35.js @@ -6,7 +6,7 @@ class StringIterator { value: v } } - + [Symbol.iterator]() { return this; } diff --git a/tests/baselines/reference/for-of35.symbols b/tests/baselines/reference/for-of35.symbols index 4f21e538cad..d2c9de2bd17 100644 --- a/tests/baselines/reference/for-of35.symbols +++ b/tests/baselines/reference/for-of35.symbols @@ -14,7 +14,7 @@ class StringIterator { >v : Symbol(v, Decl(for-of35.ts, 13, 8)) } } - + [Symbol.iterator]() { >[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(for-of35.ts, 6, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/for-of35.types b/tests/baselines/reference/for-of35.types index 0c80a6633b2..66d1106073e 100644 --- a/tests/baselines/reference/for-of35.types +++ b/tests/baselines/reference/for-of35.types @@ -17,7 +17,7 @@ class StringIterator { >v : any } } - + [Symbol.iterator]() { >[Symbol.iterator] : () => this >Symbol.iterator : symbol diff --git a/tests/baselines/reference/generatorAssignability.errors.txt b/tests/baselines/reference/generatorAssignability.errors.txt new file mode 100644 index 00000000000..83e53f4a3fb --- /dev/null +++ b/tests/baselines/reference/generatorAssignability.errors.txt @@ -0,0 +1,106 @@ +tests/cases/conformance/generators/generatorAssignability.ts(10,5): error TS2764: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array spread will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(14,5): error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(18,5): error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(22,1): error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(26,1): error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(30,11): error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(35,21): error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(39,21): error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. +tests/cases/conformance/generators/generatorAssignability.ts(45,12): error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. +tests/cases/conformance/generators/generatorAssignability.ts(51,12): error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. +tests/cases/conformance/generators/generatorAssignability.ts(55,12): error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. + + +==== tests/cases/conformance/generators/generatorAssignability.ts (11 errors) ==== + declare let _: any; + declare const g1: Generator; + declare const g2: Generator; + declare const g3: Generator; + declare const g4: AsyncGenerator; + declare const g5: AsyncGenerator; + declare const g6: AsyncGenerator; + + // spread iterable + [...g1]; // error + ~~ +!!! error TS2764: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array spread will always send 'undefined'. + [...g2]; // ok + + // binding pattern over iterable + let [x1] = g1; // error + ~~~~ +!!! error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. + let [x2] = g2; // ok + + // binding rest pattern over iterable + let [...y1] = g1; // error + ~~~~~~~ +!!! error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. + let [...y2] = g2; // ok + + // assignment pattern over iterable + [_] = g1; // error + ~~~ +!!! error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. + [_] = g2; // ok + + // assignment rest pattern over iterable + [..._] = g1; // error + ~~~~~~ +!!! error TS2765: Cannot iterate value because the 'next' method of its iterator expects type 'string', but array destructuring will always send 'undefined'. + [..._] = g2; // ok + + // for-of over iterable + for (_ of g1); // error + ~~ +!!! error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. + for (_ of g2); // ok + + async function asyncfn() { + // for-await-of over iterable + for await (_ of g1); // error + ~~ +!!! error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. + for await (_ of g2); // ok + + // for-await-of over asynciterable + for await (_ of g4); // error + ~~ +!!! error TS2763: Cannot iterate value because the 'next' method of its iterator expects type 'string', but for-of will always send 'undefined'. + for await (_ of g5); // ok + } + + function* f1(): Generator { + // yield* over iterable + yield* g1; // error + ~~ +!!! error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. + yield* g3; // ok + } + + async function* f2(): AsyncGenerator { + // yield* over iterable + yield* g1; // error + ~~ +!!! error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. + yield* g3; // ok + + // yield* over asynciterable + yield* g4; // error + ~~ +!!! error TS2766: Cannot delegate iteration to value because the 'next' method of its iterator expects type 'string', but the containing generator will always send 'boolean'. + yield* g6; // ok + } + + async function f3() { + const syncGenerator = function*() { + yield 1; + yield 2; + }; + + const o = {[Symbol.asyncIterator]: syncGenerator}; + + for await (const x of o) { + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/generatorAssignability.symbols b/tests/baselines/reference/generatorAssignability.symbols new file mode 100644 index 00000000000..8773011c677 --- /dev/null +++ b/tests/baselines/reference/generatorAssignability.symbols @@ -0,0 +1,157 @@ +=== tests/cases/conformance/generators/generatorAssignability.ts === +declare let _: any; +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) + +declare const g1: Generator; +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +declare const g2: Generator; +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +declare const g3: Generator; +>g3 : Symbol(g3, Decl(generatorAssignability.ts, 3, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +declare const g4: AsyncGenerator; +>g4 : Symbol(g4, Decl(generatorAssignability.ts, 4, 13)) +>AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + +declare const g5: AsyncGenerator; +>g5 : Symbol(g5, Decl(generatorAssignability.ts, 5, 13)) +>AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + +declare const g6: AsyncGenerator; +>g6 : Symbol(g6, Decl(generatorAssignability.ts, 6, 13)) +>AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + +// spread iterable +[...g1]; // error +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +[...g2]; // ok +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +// binding pattern over iterable +let [x1] = g1; // error +>x1 : Symbol(x1, Decl(generatorAssignability.ts, 13, 5)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +let [x2] = g2; // ok +>x2 : Symbol(x2, Decl(generatorAssignability.ts, 14, 5)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +// binding rest pattern over iterable +let [...y1] = g1; // error +>y1 : Symbol(y1, Decl(generatorAssignability.ts, 17, 5)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +let [...y2] = g2; // ok +>y2 : Symbol(y2, Decl(generatorAssignability.ts, 18, 5)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +// assignment pattern over iterable +[_] = g1; // error +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +[_] = g2; // ok +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +// assignment rest pattern over iterable +[..._] = g1; // error +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +[..._] = g2; // ok +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +// for-of over iterable +for (_ of g1); // error +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + +for (_ of g2); // ok +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + +async function asyncfn() { +>asyncfn : Symbol(asyncfn, Decl(generatorAssignability.ts, 30, 14)) + + // for-await-of over iterable + for await (_ of g1); // error +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + + for await (_ of g2); // ok +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g2 : Symbol(g2, Decl(generatorAssignability.ts, 2, 13)) + + // for-await-of over asynciterable + for await (_ of g4); // error +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g4 : Symbol(g4, Decl(generatorAssignability.ts, 4, 13)) + + for await (_ of g5); // ok +>_ : Symbol(_, Decl(generatorAssignability.ts, 0, 11)) +>g5 : Symbol(g5, Decl(generatorAssignability.ts, 5, 13)) +} + +function* f1(): Generator { +>f1 : Symbol(f1, Decl(generatorAssignability.ts, 40, 1)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + + // yield* over iterable + yield* g1; // error +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + + yield* g3; // ok +>g3 : Symbol(g3, Decl(generatorAssignability.ts, 3, 13)) +} + +async function* f2(): AsyncGenerator { +>f2 : Symbol(f2, Decl(generatorAssignability.ts, 46, 1)) +>AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + + // yield* over iterable + yield* g1; // error +>g1 : Symbol(g1, Decl(generatorAssignability.ts, 1, 13)) + + yield* g3; // ok +>g3 : Symbol(g3, Decl(generatorAssignability.ts, 3, 13)) + + // yield* over asynciterable + yield* g4; // error +>g4 : Symbol(g4, Decl(generatorAssignability.ts, 4, 13)) + + yield* g6; // ok +>g6 : Symbol(g6, Decl(generatorAssignability.ts, 6, 13)) +} + +async function f3() { +>f3 : Symbol(f3, Decl(generatorAssignability.ts, 56, 1)) + + const syncGenerator = function*() { +>syncGenerator : Symbol(syncGenerator, Decl(generatorAssignability.ts, 59, 9)) + + yield 1; + yield 2; + }; + + const o = {[Symbol.asyncIterator]: syncGenerator}; +>o : Symbol(o, Decl(generatorAssignability.ts, 64, 9)) +>[Symbol.asyncIterator] : Symbol([Symbol.asyncIterator], Decl(generatorAssignability.ts, 64, 15)) +>Symbol.asyncIterator : Symbol(SymbolConstructor.asyncIterator, Decl(lib.es2018.asynciterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>asyncIterator : Symbol(SymbolConstructor.asyncIterator, Decl(lib.es2018.asynciterable.d.ts, --, --)) +>syncGenerator : Symbol(syncGenerator, Decl(generatorAssignability.ts, 59, 9)) + + for await (const x of o) { +>x : Symbol(x, Decl(generatorAssignability.ts, 66, 20)) +>o : Symbol(o, Decl(generatorAssignability.ts, 64, 9)) + } +} + diff --git a/tests/baselines/reference/generatorAssignability.types b/tests/baselines/reference/generatorAssignability.types new file mode 100644 index 00000000000..c498104aeba --- /dev/null +++ b/tests/baselines/reference/generatorAssignability.types @@ -0,0 +1,177 @@ +=== tests/cases/conformance/generators/generatorAssignability.ts === +declare let _: any; +>_ : any + +declare const g1: Generator; +>g1 : Generator + +declare const g2: Generator; +>g2 : Generator + +declare const g3: Generator; +>g3 : Generator + +declare const g4: AsyncGenerator; +>g4 : AsyncGenerator + +declare const g5: AsyncGenerator; +>g5 : AsyncGenerator + +declare const g6: AsyncGenerator; +>g6 : AsyncGenerator + +// spread iterable +[...g1]; // error +>[...g1] : number[] +>...g1 : number +>g1 : Generator + +[...g2]; // ok +>[...g2] : number[] +>...g2 : number +>g2 : Generator + +// binding pattern over iterable +let [x1] = g1; // error +>x1 : number +>g1 : Generator + +let [x2] = g2; // ok +>x2 : number +>g2 : Generator + +// binding rest pattern over iterable +let [...y1] = g1; // error +>y1 : number[] +>g1 : Generator + +let [...y2] = g2; // ok +>y2 : number[] +>g2 : Generator + +// assignment pattern over iterable +[_] = g1; // error +>[_] = g1 : Generator +>[_] : [any] +>_ : any +>g1 : Generator + +[_] = g2; // ok +>[_] = g2 : Generator +>[_] : [any] +>_ : any +>g2 : Generator + +// assignment rest pattern over iterable +[..._] = g1; // error +>[..._] = g1 : Generator +>[..._] : any[] +>..._ : any +>_ : any +>g1 : Generator + +[..._] = g2; // ok +>[..._] = g2 : Generator +>[..._] : any[] +>..._ : any +>_ : any +>g2 : Generator + +// for-of over iterable +for (_ of g1); // error +>_ : any +>g1 : Generator + +for (_ of g2); // ok +>_ : any +>g2 : Generator + +async function asyncfn() { +>asyncfn : () => Promise + + // for-await-of over iterable + for await (_ of g1); // error +>_ : any +>g1 : Generator + + for await (_ of g2); // ok +>_ : any +>g2 : Generator + + // for-await-of over asynciterable + for await (_ of g4); // error +>_ : any +>g4 : AsyncGenerator + + for await (_ of g5); // ok +>_ : any +>g5 : AsyncGenerator +} + +function* f1(): Generator { +>f1 : () => Generator + + // yield* over iterable + yield* g1; // error +>yield* g1 : void +>g1 : Generator + + yield* g3; // ok +>yield* g3 : void +>g3 : Generator +} + +async function* f2(): AsyncGenerator { +>f2 : () => AsyncGenerator + + // yield* over iterable + yield* g1; // error +>yield* g1 : void +>g1 : Generator + + yield* g3; // ok +>yield* g3 : void +>g3 : Generator + + // yield* over asynciterable + yield* g4; // error +>yield* g4 : void +>g4 : AsyncGenerator + + yield* g6; // ok +>yield* g6 : void +>g6 : AsyncGenerator +} + +async function f3() { +>f3 : () => Promise + + const syncGenerator = function*() { +>syncGenerator : () => Generator<1 | 2, void, unknown> +>function*() { yield 1; yield 2; } : () => Generator<1 | 2, void, unknown> + + yield 1; +>yield 1 : any +>1 : 1 + + yield 2; +>yield 2 : any +>2 : 2 + + }; + + const o = {[Symbol.asyncIterator]: syncGenerator}; +>o : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } +>{[Symbol.asyncIterator]: syncGenerator} : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } +>[Symbol.asyncIterator] : () => Generator<1 | 2, void, unknown> +>Symbol.asyncIterator : symbol +>Symbol : SymbolConstructor +>asyncIterator : symbol +>syncGenerator : () => Generator<1 | 2, void, unknown> + + for await (const x of o) { +>x : 1 | 2 +>o : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } + } +} + diff --git a/tests/baselines/reference/generatorES6InAMDModule.types b/tests/baselines/reference/generatorES6InAMDModule.types index 9a12a72f005..a1b06edc346 100644 --- a/tests/baselines/reference/generatorES6InAMDModule.types +++ b/tests/baselines/reference/generatorES6InAMDModule.types @@ -1,6 +1,6 @@ === tests/cases/compiler/generatorES6InAMDModule.ts === export function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield >yield : any diff --git a/tests/baselines/reference/generatorES6_1.types b/tests/baselines/reference/generatorES6_1.types index 13ac7c05844..e1046c8548e 100644 --- a/tests/baselines/reference/generatorES6_1.types +++ b/tests/baselines/reference/generatorES6_1.types @@ -1,6 +1,6 @@ === tests/cases/compiler/generatorES6_1.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield >yield : any diff --git a/tests/baselines/reference/generatorES6_2.types b/tests/baselines/reference/generatorES6_2.types index a95a0008d4f..61fc7db71a7 100644 --- a/tests/baselines/reference/generatorES6_2.types +++ b/tests/baselines/reference/generatorES6_2.types @@ -3,7 +3,7 @@ class C { >C : C public * foo() { ->foo : () => IterableIterator +>foo : () => Generator yield 1 >yield 1 : any diff --git a/tests/baselines/reference/generatorES6_3.types b/tests/baselines/reference/generatorES6_3.types index e237cbd3510..2b72e711322 100644 --- a/tests/baselines/reference/generatorES6_3.types +++ b/tests/baselines/reference/generatorES6_3.types @@ -1,7 +1,7 @@ === tests/cases/compiler/generatorES6_3.ts === var v = function*() { ->v : () => IterableIterator ->function*() { yield 0} : () => IterableIterator +>v : () => Generator +>function*() { yield 0} : () => Generator yield 0 >yield 0 : any diff --git a/tests/baselines/reference/generatorES6_4.types b/tests/baselines/reference/generatorES6_4.types index fa19d8f3ae2..31945d0d3e6 100644 --- a/tests/baselines/reference/generatorES6_4.types +++ b/tests/baselines/reference/generatorES6_4.types @@ -1,10 +1,10 @@ === tests/cases/compiler/generatorES6_4.ts === var v = { ->v : { foo(): IterableIterator; } ->{ *foo() { yield 0 }} : { foo(): IterableIterator; } +>v : { foo(): Generator; } +>{ *foo() { yield 0 }} : { foo(): Generator; } *foo() { ->foo : () => IterableIterator +>foo : () => Generator yield 0 >yield 0 : any diff --git a/tests/baselines/reference/generatorES6_5.types b/tests/baselines/reference/generatorES6_5.types index 12396f69e24..6ff6105b498 100644 --- a/tests/baselines/reference/generatorES6_5.types +++ b/tests/baselines/reference/generatorES6_5.types @@ -1,6 +1,6 @@ === tests/cases/compiler/generatorES6_5.ts === function* foo() { ->foo : () => IterableIterator +>foo : () => Generator yield a ? b : c; >yield a ? b : c : any diff --git a/tests/baselines/reference/generatorES6_6.types b/tests/baselines/reference/generatorES6_6.types index 7306b6ed99a..05e0bcc7f88 100644 --- a/tests/baselines/reference/generatorES6_6.types +++ b/tests/baselines/reference/generatorES6_6.types @@ -3,7 +3,7 @@ class C { >C : C *[Symbol.iterator]() { ->[Symbol.iterator] : () => IterableIterator +>[Symbol.iterator] : () => Generator >Symbol.iterator : symbol >Symbol : SymbolConstructor >iterator : symbol diff --git a/tests/baselines/reference/generatorExplicitReturnType.errors.txt b/tests/baselines/reference/generatorExplicitReturnType.errors.txt new file mode 100644 index 00000000000..4841e62bba7 --- /dev/null +++ b/tests/baselines/reference/generatorExplicitReturnType.errors.txt @@ -0,0 +1,41 @@ +tests/cases/conformance/generators/generatorExplicitReturnType.ts(2,5): error TS2322: Type 'undefined' is not assignable to type 'number'. +tests/cases/conformance/generators/generatorExplicitReturnType.ts(3,11): error TS2322: Type '"a"' is not assignable to type 'number'. +tests/cases/conformance/generators/generatorExplicitReturnType.ts(4,11): error TS2322: Type 'string' is not assignable to type 'number'. +tests/cases/conformance/generators/generatorExplicitReturnType.ts(5,5): error TS2322: Type '10' is not assignable to type 'boolean'. +tests/cases/conformance/generators/generatorExplicitReturnType.ts(16,11): error TS2322: Type 'symbol' is not assignable to type 'number'. + + +==== tests/cases/conformance/generators/generatorExplicitReturnType.ts (5 errors) ==== + function* g1(): Generator { + yield; // error + ~~~~~ +!!! error TS2322: Type 'undefined' is not assignable to type 'number'. + yield "a"; // error + ~~~ +!!! error TS2322: Type '"a"' is not assignable to type 'number'. + const x: number = yield 1; // error + ~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + return 10; // error + ~~~~~~~~~~ +!!! error TS2322: Type '10' is not assignable to type 'boolean'. + } + + function* g2(): Generator { + const x = yield 1; + return true; + } + + declare const generator: Generator; + + function* g3(): Generator { + const x: number = yield* generator; // error + ~ +!!! error TS2322: Type 'symbol' is not assignable to type 'number'. + return true; + } + + function* g4(): Generator { + const x = yield* generator; + return true; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorExplicitReturnType.js b/tests/baselines/reference/generatorExplicitReturnType.js new file mode 100644 index 00000000000..1669a2905e5 --- /dev/null +++ b/tests/baselines/reference/generatorExplicitReturnType.js @@ -0,0 +1,44 @@ +//// [generatorExplicitReturnType.ts] +function* g1(): Generator { + yield; // error + yield "a"; // error + const x: number = yield 1; // error + return 10; // error +} + +function* g2(): Generator { + const x = yield 1; + return true; +} + +declare const generator: Generator; + +function* g3(): Generator { + const x: number = yield* generator; // error + return true; +} + +function* g4(): Generator { + const x = yield* generator; + return true; +} + +//// [generatorExplicitReturnType.js] +function* g1() { + yield; // error + yield "a"; // error + const x = yield 1; // error + return 10; // error +} +function* g2() { + const x = yield 1; + return true; +} +function* g3() { + const x = yield* generator; // error + return true; +} +function* g4() { + const x = yield* generator; + return true; +} diff --git a/tests/baselines/reference/generatorExplicitReturnType.symbols b/tests/baselines/reference/generatorExplicitReturnType.symbols new file mode 100644 index 00000000000..fb3676a8b78 --- /dev/null +++ b/tests/baselines/reference/generatorExplicitReturnType.symbols @@ -0,0 +1,48 @@ +=== tests/cases/conformance/generators/generatorExplicitReturnType.ts === +function* g1(): Generator { +>g1 : Symbol(g1, Decl(generatorExplicitReturnType.ts, 0, 0)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + + yield; // error + yield "a"; // error + const x: number = yield 1; // error +>x : Symbol(x, Decl(generatorExplicitReturnType.ts, 3, 9)) + + return 10; // error +} + +function* g2(): Generator { +>g2 : Symbol(g2, Decl(generatorExplicitReturnType.ts, 5, 1)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + + const x = yield 1; +>x : Symbol(x, Decl(generatorExplicitReturnType.ts, 8, 9)) + + return true; +} + +declare const generator: Generator; +>generator : Symbol(generator, Decl(generatorExplicitReturnType.ts, 12, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +function* g3(): Generator { +>g3 : Symbol(g3, Decl(generatorExplicitReturnType.ts, 12, 59)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + + const x: number = yield* generator; // error +>x : Symbol(x, Decl(generatorExplicitReturnType.ts, 15, 9)) +>generator : Symbol(generator, Decl(generatorExplicitReturnType.ts, 12, 13)) + + return true; +} + +function* g4(): Generator { +>g4 : Symbol(g4, Decl(generatorExplicitReturnType.ts, 17, 1)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + + const x = yield* generator; +>x : Symbol(x, Decl(generatorExplicitReturnType.ts, 20, 9)) +>generator : Symbol(generator, Decl(generatorExplicitReturnType.ts, 12, 13)) + + return true; +} diff --git a/tests/baselines/reference/generatorExplicitReturnType.types b/tests/baselines/reference/generatorExplicitReturnType.types new file mode 100644 index 00000000000..6e05722d049 --- /dev/null +++ b/tests/baselines/reference/generatorExplicitReturnType.types @@ -0,0 +1,58 @@ +=== tests/cases/conformance/generators/generatorExplicitReturnType.ts === +function* g1(): Generator { +>g1 : () => Generator + + yield; // error +>yield : string + + yield "a"; // error +>yield "a" : string +>"a" : "a" + + const x: number = yield 1; // error +>x : number +>yield 1 : string +>1 : 1 + + return 10; // error +>10 : 10 +} + +function* g2(): Generator { +>g2 : () => Generator + + const x = yield 1; +>x : string +>yield 1 : string +>1 : 1 + + return true; +>true : true +} + +declare const generator: Generator; +>generator : Generator + +function* g3(): Generator { +>g3 : () => Generator + + const x: number = yield* generator; // error +>x : number +>yield* generator : symbol +>generator : Generator + + return true; +>true : true +} + +function* g4(): Generator { +>g4 : () => Generator + + const x = yield* generator; +>x : symbol +>yield* generator : symbol +>generator : Generator + + return true; +>true : true +} diff --git a/tests/baselines/reference/generatorImplicitAny.js b/tests/baselines/reference/generatorImplicitAny.js new file mode 100644 index 00000000000..ee12d8052b8 --- /dev/null +++ b/tests/baselines/reference/generatorImplicitAny.js @@ -0,0 +1,5 @@ +//// [generatorImplicitAny.ts] +function* g() {} + +//// [generatorImplicitAny.js] +function* g() { } diff --git a/tests/baselines/reference/generatorImplicitAny.symbols b/tests/baselines/reference/generatorImplicitAny.symbols new file mode 100644 index 00000000000..3c3929e9ab3 --- /dev/null +++ b/tests/baselines/reference/generatorImplicitAny.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/generators/generatorImplicitAny.ts === +function* g() {} +>g : Symbol(g, Decl(generatorImplicitAny.ts, 0, 0)) + diff --git a/tests/baselines/reference/generatorImplicitAny.types b/tests/baselines/reference/generatorImplicitAny.types new file mode 100644 index 00000000000..a63d19b7fbe --- /dev/null +++ b/tests/baselines/reference/generatorImplicitAny.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/generators/generatorImplicitAny.ts === +function* g() {} +>g : () => Generator + diff --git a/tests/baselines/reference/generatorNoImplicitReturns.types b/tests/baselines/reference/generatorNoImplicitReturns.types index 666ce4db474..f8a2a073487 100644 --- a/tests/baselines/reference/generatorNoImplicitReturns.types +++ b/tests/baselines/reference/generatorNoImplicitReturns.types @@ -1,7 +1,7 @@ === tests/cases/conformance/es6/yieldExpressions/generatorNoImplicitReturns.ts === function* testGenerator () { ->testGenerator : () => IterableIterator +>testGenerator : () => Generator if (Math.random() > 0.5) { >Math.random() > 0.5 : boolean diff --git a/tests/baselines/reference/generatorReturnExpressionIsChecked.types b/tests/baselines/reference/generatorReturnExpressionIsChecked.types index f77ec0b3729..4abe3721a8e 100644 --- a/tests/baselines/reference/generatorReturnExpressionIsChecked.types +++ b/tests/baselines/reference/generatorReturnExpressionIsChecked.types @@ -1,6 +1,6 @@ === tests/cases/compiler/generatorReturnExpressionIsChecked.ts === function* f(): Iterator { ->f : () => Iterator +>f : () => Iterator return invalid; >invalid : any diff --git a/tests/baselines/reference/generatorReturnTypeInference.js b/tests/baselines/reference/generatorReturnTypeInference.js new file mode 100644 index 00000000000..d3350d52486 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInference.js @@ -0,0 +1,236 @@ +//// [generatorReturnTypeInference.ts] +declare const iterableIterator: IterableIterator; +declare const generator: Generator; +declare const never: never; + +function* g000() { // Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator + yield; +} + +function* g002() { // Generator + yield 1; +} + +function* g003() { // Generator + yield* []; +} + +function* g004() { // Generator + yield* iterableIterator; +} + +function* g005() { // Generator + const x = yield* generator; +} + +function* g006() { // Generator<1 | 2, void, unknown> + yield 1; + yield 2; +} + +function* g007() { // Generator + yield never; +} + +// 'return' iteration type inference +function* g102() { // Generator + return 1; +} + +function* g103() { // Generator + if (Math.random()) return 1; + return 2; +} + +function* g104() { // Generator + return never; +} + +// 'next' iteration type inference +function* g201() { // Generator + let a: string = yield 1; +} + +function* g202() { // Generator<1 | 2, void, never> + let a: string = yield 1; + let b: number = yield 2; +} + +declare function f1(x: string): void; +declare function f1(x: number): void; + +function* g203() { // Generator + const x = f1(yield 1); +} + +declare function f2(x: T): T; + +function* g204() { // Generator + const x = f2(yield 1); +} + +// mixed iteration types inference + +function* g301() { // Generator + yield; + return; +} + +function* g302() { // Generator + yield 1; + return; +} + +function* g303() { // Generator + yield; + return "a"; +} + +function* g304() { // Generator + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> + if (Math.random()) yield 1; + yield 2; + if (Math.random()) return "a"; + return "b"; +} + +function* g306() { // Generator + const a: "hi" = yield 1; + return true; +} + +function* g307() { // Generator + const a: T = yield 0; + return a; +} + +function* g308(x: T) { // Generator + const a: T = yield x; + return a; +} + +function* g309(x: T, y: U) { // Generator + const a: V = yield x; + return y; +} + +function* g310() { // Generator + const [a = 1, b = 2] = yield; +} + +function* g311() { // Generator + yield* (function*() { + const y: string = yield; + })(); +} + + +//// [generatorReturnTypeInference.js] +function* g000() { +} +// 'yield' iteration type inference +function* g001() { + yield; +} +function* g002() { + yield 1; +} +function* g003() { + yield* []; +} +function* g004() { + yield* iterableIterator; +} +function* g005() { + const x = yield* generator; +} +function* g006() { + yield 1; + yield 2; +} +function* g007() { + yield never; +} +// 'return' iteration type inference +function* g102() { + return 1; +} +function* g103() { + if (Math.random()) + return 1; + return 2; +} +function* g104() { + return never; +} +// 'next' iteration type inference +function* g201() { + let a = yield 1; +} +function* g202() { + let a = yield 1; + let b = yield 2; +} +function* g203() { + const x = f1(yield 1); +} +function* g204() { + const x = f2(yield 1); +} +// mixed iteration types inference +function* g301() { + yield; + return; +} +function* g302() { + yield 1; + return; +} +function* g303() { + yield; + return "a"; +} +function* g304() { + yield 1; + return "a"; +} +function* g305() { + if (Math.random()) + yield 1; + yield 2; + if (Math.random()) + return "a"; + return "b"; +} +function* g306() { + const a = yield 1; + return true; +} +function* g307() { + const a = yield 0; + return a; +} +function* g308(x) { + const a = yield x; + return a; +} +function* g309(x, y) { + const a = yield x; + return y; +} +function* g310() { + const [a = 1, b = 2] = yield; +} +function* g311() { + yield* (function* () { + const y = yield; + })(); +} diff --git a/tests/baselines/reference/generatorReturnTypeInference.symbols b/tests/baselines/reference/generatorReturnTypeInference.symbols new file mode 100644 index 00000000000..9af5773a118 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInference.symbols @@ -0,0 +1,258 @@ +=== tests/cases/conformance/generators/generatorReturnTypeInference.ts === +declare const iterableIterator: IterableIterator; +>iterableIterator : Symbol(iterableIterator, Decl(generatorReturnTypeInference.ts, 0, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const generator: Generator; +>generator : Symbol(generator, Decl(generatorReturnTypeInference.ts, 1, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +declare const never: never; +>never : Symbol(never, Decl(generatorReturnTypeInference.ts, 2, 13)) + +function* g000() { // Generator +>g000 : Symbol(g000, Decl(generatorReturnTypeInference.ts, 2, 27)) +} + +// 'yield' iteration type inference +function* g001() { // Generator +>g001 : Symbol(g001, Decl(generatorReturnTypeInference.ts, 5, 1)) + + yield; +} + +function* g002() { // Generator +>g002 : Symbol(g002, Decl(generatorReturnTypeInference.ts, 10, 1)) + + yield 1; +} + +function* g003() { // Generator +>g003 : Symbol(g003, Decl(generatorReturnTypeInference.ts, 14, 1)) + + yield* []; +} + +function* g004() { // Generator +>g004 : Symbol(g004, Decl(generatorReturnTypeInference.ts, 18, 1)) + + yield* iterableIterator; +>iterableIterator : Symbol(iterableIterator, Decl(generatorReturnTypeInference.ts, 0, 13)) +} + +function* g005() { // Generator +>g005 : Symbol(g005, Decl(generatorReturnTypeInference.ts, 22, 1)) + + const x = yield* generator; +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 25, 9)) +>generator : Symbol(generator, Decl(generatorReturnTypeInference.ts, 1, 13)) +} + +function* g006() { // Generator<1 | 2, void, unknown> +>g006 : Symbol(g006, Decl(generatorReturnTypeInference.ts, 26, 1)) + + yield 1; + yield 2; +} + +function* g007() { // Generator +>g007 : Symbol(g007, Decl(generatorReturnTypeInference.ts, 31, 1)) + + yield never; +>never : Symbol(never, Decl(generatorReturnTypeInference.ts, 2, 13)) +} + +// 'return' iteration type inference +function* g102() { // Generator +>g102 : Symbol(g102, Decl(generatorReturnTypeInference.ts, 35, 1)) + + return 1; +} + +function* g103() { // Generator +>g103 : Symbol(g103, Decl(generatorReturnTypeInference.ts, 40, 1)) + + if (Math.random()) return 1; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + return 2; +} + +function* g104() { // Generator +>g104 : Symbol(g104, Decl(generatorReturnTypeInference.ts, 45, 1)) + + return never; +>never : Symbol(never, Decl(generatorReturnTypeInference.ts, 2, 13)) +} + +// 'next' iteration type inference +function* g201() { // Generator +>g201 : Symbol(g201, Decl(generatorReturnTypeInference.ts, 49, 1)) + + let a: string = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 53, 7)) +} + +function* g202() { // Generator<1 | 2, void, never> +>g202 : Symbol(g202, Decl(generatorReturnTypeInference.ts, 54, 1)) + + let a: string = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 57, 7)) + + let b: number = yield 2; +>b : Symbol(b, Decl(generatorReturnTypeInference.ts, 58, 7)) +} + +declare function f1(x: string): void; +>f1 : Symbol(f1, Decl(generatorReturnTypeInference.ts, 59, 1), Decl(generatorReturnTypeInference.ts, 61, 37)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 61, 20)) + +declare function f1(x: number): void; +>f1 : Symbol(f1, Decl(generatorReturnTypeInference.ts, 59, 1), Decl(generatorReturnTypeInference.ts, 61, 37)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 62, 20)) + +function* g203() { // Generator +>g203 : Symbol(g203, Decl(generatorReturnTypeInference.ts, 62, 37)) + + const x = f1(yield 1); +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 65, 6)) +>f1 : Symbol(f1, Decl(generatorReturnTypeInference.ts, 59, 1), Decl(generatorReturnTypeInference.ts, 61, 37)) +} + +declare function f2(x: T): T; +>f2 : Symbol(f2, Decl(generatorReturnTypeInference.ts, 66, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 68, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 68, 23)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 68, 20)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 68, 20)) + +function* g204() { // Generator +>g204 : Symbol(g204, Decl(generatorReturnTypeInference.ts, 68, 32)) + + const x = f2(yield 1); +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 71, 6)) +>f2 : Symbol(f2, Decl(generatorReturnTypeInference.ts, 66, 1)) +} + +// mixed iteration types inference + +function* g301() { // Generator +>g301 : Symbol(g301, Decl(generatorReturnTypeInference.ts, 72, 1)) + + yield; + return; +} + +function* g302() { // Generator +>g302 : Symbol(g302, Decl(generatorReturnTypeInference.ts, 79, 1)) + + yield 1; + return; +} + +function* g303() { // Generator +>g303 : Symbol(g303, Decl(generatorReturnTypeInference.ts, 84, 1)) + + yield; + return "a"; +} + +function* g304() { // Generator +>g304 : Symbol(g304, Decl(generatorReturnTypeInference.ts, 89, 1)) + + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> +>g305 : Symbol(g305, Decl(generatorReturnTypeInference.ts, 94, 1)) + + if (Math.random()) yield 1; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + yield 2; + if (Math.random()) return "a"; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + return "b"; +} + +function* g306() { // Generator +>g306 : Symbol(g306, Decl(generatorReturnTypeInference.ts, 101, 1)) + + const a: "hi" = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 104, 9)) + + return true; +} + +function* g307() { // Generator +>g307 : Symbol(g307, Decl(generatorReturnTypeInference.ts, 106, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 108, 15)) + + const a: T = yield 0; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 109, 9)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 108, 15)) + + return a; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 109, 9)) +} + +function* g308(x: T) { // Generator +>g308 : Symbol(g308, Decl(generatorReturnTypeInference.ts, 111, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 113, 15)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 113, 18)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 113, 15)) + + const a: T = yield x; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 114, 9)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 113, 15)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 113, 18)) + + return a; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 114, 9)) +} + +function* g309(x: T, y: U) { // Generator +>g309 : Symbol(g309, Decl(generatorReturnTypeInference.ts, 116, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 118, 15)) +>U : Symbol(U, Decl(generatorReturnTypeInference.ts, 118, 17)) +>V : Symbol(V, Decl(generatorReturnTypeInference.ts, 118, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 118, 24)) +>T : Symbol(T, Decl(generatorReturnTypeInference.ts, 118, 15)) +>y : Symbol(y, Decl(generatorReturnTypeInference.ts, 118, 29)) +>U : Symbol(U, Decl(generatorReturnTypeInference.ts, 118, 17)) + + const a: V = yield x; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 119, 9)) +>V : Symbol(V, Decl(generatorReturnTypeInference.ts, 118, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInference.ts, 118, 24)) + + return y; +>y : Symbol(y, Decl(generatorReturnTypeInference.ts, 118, 29)) +} + +function* g310() { // Generator +>g310 : Symbol(g310, Decl(generatorReturnTypeInference.ts, 121, 1)) + + const [a = 1, b = 2] = yield; +>a : Symbol(a, Decl(generatorReturnTypeInference.ts, 124, 8)) +>b : Symbol(b, Decl(generatorReturnTypeInference.ts, 124, 14)) +} + +function* g311() { // Generator +>g311 : Symbol(g311, Decl(generatorReturnTypeInference.ts, 125, 1)) + + yield* (function*() { + const y: string = yield; +>y : Symbol(y, Decl(generatorReturnTypeInference.ts, 129, 7)) + + })(); +} + diff --git a/tests/baselines/reference/generatorReturnTypeInference.types b/tests/baselines/reference/generatorReturnTypeInference.types new file mode 100644 index 00000000000..a0942c9b700 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInference.types @@ -0,0 +1,308 @@ +=== tests/cases/conformance/generators/generatorReturnTypeInference.ts === +declare const iterableIterator: IterableIterator; +>iterableIterator : IterableIterator + +declare const generator: Generator; +>generator : Generator + +declare const never: never; +>never : never + +function* g000() { // Generator +>g000 : () => Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator +>g001 : () => Generator + + yield; +>yield : any +} + +function* g002() { // Generator +>g002 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 +} + +function* g003() { // Generator +>g003 : () => Generator + + yield* []; +>yield* [] : any +>[] : never[] +} + +function* g004() { // Generator +>g004 : () => Generator + + yield* iterableIterator; +>yield* iterableIterator : any +>iterableIterator : IterableIterator +} + +function* g005() { // Generator +>g005 : () => Generator + + const x = yield* generator; +>x : string +>yield* generator : string +>generator : Generator +} + +function* g006() { // Generator<1 | 2, void, unknown> +>g006 : () => Generator<1 | 2, void, unknown> + + yield 1; +>yield 1 : any +>1 : 1 + + yield 2; +>yield 2 : any +>2 : 2 +} + +function* g007() { // Generator +>g007 : () => Generator + + yield never; +>yield never : any +>never : never +} + +// 'return' iteration type inference +function* g102() { // Generator +>g102 : () => Generator + + return 1; +>1 : 1 +} + +function* g103() { // Generator +>g103 : () => Generator + + if (Math.random()) return 1; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>1 : 1 + + return 2; +>2 : 2 +} + +function* g104() { // Generator +>g104 : () => Generator + + return never; +>never : never +} + +// 'next' iteration type inference +function* g201() { // Generator +>g201 : () => Generator + + let a: string = yield 1; +>a : string +>yield 1 : any +>1 : 1 +} + +function* g202() { // Generator<1 | 2, void, never> +>g202 : () => Generator<1 | 2, void, never> + + let a: string = yield 1; +>a : string +>yield 1 : any +>1 : 1 + + let b: number = yield 2; +>b : number +>yield 2 : any +>2 : 2 +} + +declare function f1(x: string): void; +>f1 : { (x: string): void; (x: number): void; } +>x : string + +declare function f1(x: number): void; +>f1 : { (x: string): void; (x: number): void; } +>x : number + +function* g203() { // Generator +>g203 : () => Generator + + const x = f1(yield 1); +>x : void +>f1(yield 1) : void +>f1 : { (x: string): void; (x: number): void; } +>yield 1 : any +>1 : 1 +} + +declare function f2(x: T): T; +>f2 : (x: T) => T +>x : T + +function* g204() { // Generator +>g204 : () => Generator + + const x = f2(yield 1); +>x : any +>f2(yield 1) : any +>f2 : (x: T) => T +>yield 1 : any +>1 : 1 +} + +// mixed iteration types inference + +function* g301() { // Generator +>g301 : () => Generator + + yield; +>yield : any + + return; +} + +function* g302() { // Generator +>g302 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 + + return; +} + +function* g303() { // Generator +>g303 : () => Generator + + yield; +>yield : any + + return "a"; +>"a" : "a" +} + +function* g304() { // Generator +>g304 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 + + return "a"; +>"a" : "a" +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> +>g305 : () => Generator<1 | 2, "a" | "b", unknown> + + if (Math.random()) yield 1; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>yield 1 : any +>1 : 1 + + yield 2; +>yield 2 : any +>2 : 2 + + if (Math.random()) return "a"; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>"a" : "a" + + return "b"; +>"b" : "b" +} + +function* g306() { // Generator +>g306 : () => Generator + + const a: "hi" = yield 1; +>a : "hi" +>yield 1 : any +>1 : 1 + + return true; +>true : true +} + +function* g307() { // Generator +>g307 : () => Generator + + const a: T = yield 0; +>a : T +>yield 0 : any +>0 : 0 + + return a; +>a : T +} + +function* g308(x: T) { // Generator +>g308 : (x: T) => Generator +>x : T + + const a: T = yield x; +>a : T +>yield x : any +>x : T + + return a; +>a : T +} + +function* g309(x: T, y: U) { // Generator +>g309 : (x: T, y: U) => Generator +>x : T +>y : U + + const a: V = yield x; +>a : V +>yield x : any +>x : T + + return y; +>y : U +} + +function* g310() { // Generator +>g310 : () => Generator + + const [a = 1, b = 2] = yield; +>a : any +>1 : 1 +>b : any +>2 : 2 +>yield : any +} + +function* g311() { // Generator +>g311 : () => Generator + + yield* (function*() { +>yield* (function*() { const y: string = yield; })() : void +>(function*() { const y: string = yield; })() : Generator +>(function*() { const y: string = yield; }) : () => Generator +>function*() { const y: string = yield; } : () => Generator + + const y: string = yield; +>y : string +>yield : any + + })(); +} + diff --git a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.errors.txt b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.errors.txt new file mode 100644 index 00000000000..ebab0e585c7 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.errors.txt @@ -0,0 +1,156 @@ +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(9,11): error TS7055: 'g001', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(17,11): error TS7055: 'g003', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(79,11): error TS7055: 'g301', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(89,11): error TS7055: 'g303', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(126,11): error TS7055: 'g310', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts(131,10): error TS7025: Generator implicitly has yield type 'any' because it does not yield any values. Consider supplying a return type annotation. + + +==== tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts (6 errors) ==== + declare const iterableIterator: IterableIterator; + declare const generator: Generator; + declare const never: never; + + function* g000() { // Generator + } + + // 'yield' iteration type inference + function* g001() { // Generator + ~~~~ +!!! error TS7055: 'g001', which lacks return-type annotation, implicitly has an 'any' yield type. + yield; + } + + function* g002() { // Generator + yield 1; + } + + function* g003() { // Generator + ~~~~ +!!! error TS7055: 'g003', which lacks return-type annotation, implicitly has an 'any' yield type. + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; + } + + function* g004() { // Generator + yield* iterableIterator; + } + + function* g005() { // Generator + const x = yield* generator; + } + + function* g006() { // Generator<1 | 2, void, unknown> + yield 1; + yield 2; + } + + function* g007() { // Generator + yield never; + } + + // 'return' iteration type inference + function* g102() { // Generator + return 1; + } + + function* g103() { // Generator + if (Math.random()) return 1; + return 2; + } + + function* g104() { // Generator + return never; + } + + // 'next' iteration type inference + function* g201() { // Generator + let a: string = yield 1; + } + + function* g202() { // Generator<1 | 2, void, never> + let a: string = yield 1; + let b: number = yield 2; + } + + declare function f1(x: string): void; + declare function f1(x: number): void; + + function* g203() { // Generator + const x = f1(yield 1); + } + + declare function f2(x: T): T; + + function* g204() { // Generator + const x = f2(yield 1); + } + + // mixed iteration types inference + + function* g301() { // Generator + ~~~~ +!!! error TS7055: 'g301', which lacks return-type annotation, implicitly has an 'any' yield type. + yield; + return; + } + + function* g302() { // Generator + yield 1; + return; + } + + function* g303() { // Generator + ~~~~ +!!! error TS7055: 'g303', which lacks return-type annotation, implicitly has an 'any' yield type. + yield; + return "a"; + } + + function* g304() { // Generator + yield 1; + return "a"; + } + + function* g305() { // Generator<1 | 2, "a" | "b", unknown> + if (Math.random()) yield 1; + yield 2; + if (Math.random()) return "a"; + return "b"; + } + + function* g306() { // Generator + const a: "hi" = yield 1; + return true; + } + + function* g307() { // Generator + const a: T = yield 0; + return a; + } + + function* g308(x: T) { // Generator + const a: T = yield x; + return a; + } + + function* g309(x: T, y: U) { // Generator + const a: V = yield x; + return y; + } + + function* g310() { // Generator + ~~~~ +!!! error TS7055: 'g310', which lacks return-type annotation, implicitly has an 'any' yield type. + const [a = 1, b = 2] = yield; + } + + function* g311() { // Generator + yield* (function*() { + ~~~~~~~~ +!!! error TS7025: Generator implicitly has yield type 'any' because it does not yield any values. Consider supplying a return type annotation. + const y: string = yield; + })(); + } + \ No newline at end of file diff --git a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.js b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.js new file mode 100644 index 00000000000..272a92d1504 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.js @@ -0,0 +1,240 @@ +//// [generatorReturnTypeInferenceNonStrict.ts] +declare const iterableIterator: IterableIterator; +declare const generator: Generator; +declare const never: never; + +function* g000() { // Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator + yield; +} + +function* g002() { // Generator + yield 1; +} + +function* g003() { // Generator + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; +} + +function* g004() { // Generator + yield* iterableIterator; +} + +function* g005() { // Generator + const x = yield* generator; +} + +function* g006() { // Generator<1 | 2, void, unknown> + yield 1; + yield 2; +} + +function* g007() { // Generator + yield never; +} + +// 'return' iteration type inference +function* g102() { // Generator + return 1; +} + +function* g103() { // Generator + if (Math.random()) return 1; + return 2; +} + +function* g104() { // Generator + return never; +} + +// 'next' iteration type inference +function* g201() { // Generator + let a: string = yield 1; +} + +function* g202() { // Generator<1 | 2, void, never> + let a: string = yield 1; + let b: number = yield 2; +} + +declare function f1(x: string): void; +declare function f1(x: number): void; + +function* g203() { // Generator + const x = f1(yield 1); +} + +declare function f2(x: T): T; + +function* g204() { // Generator + const x = f2(yield 1); +} + +// mixed iteration types inference + +function* g301() { // Generator + yield; + return; +} + +function* g302() { // Generator + yield 1; + return; +} + +function* g303() { // Generator + yield; + return "a"; +} + +function* g304() { // Generator + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> + if (Math.random()) yield 1; + yield 2; + if (Math.random()) return "a"; + return "b"; +} + +function* g306() { // Generator + const a: "hi" = yield 1; + return true; +} + +function* g307() { // Generator + const a: T = yield 0; + return a; +} + +function* g308(x: T) { // Generator + const a: T = yield x; + return a; +} + +function* g309(x: T, y: U) { // Generator + const a: V = yield x; + return y; +} + +function* g310() { // Generator + const [a = 1, b = 2] = yield; +} + +function* g311() { // Generator + yield* (function*() { + const y: string = yield; + })(); +} + + +//// [generatorReturnTypeInferenceNonStrict.js] +function* g000() { +} +// 'yield' iteration type inference +function* g001() { + yield; +} +function* g002() { + yield 1; +} +function* g003() { + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; +} +function* g004() { + yield* iterableIterator; +} +function* g005() { + const x = yield* generator; +} +function* g006() { + yield 1; + yield 2; +} +function* g007() { + yield never; +} +// 'return' iteration type inference +function* g102() { + return 1; +} +function* g103() { + if (Math.random()) + return 1; + return 2; +} +function* g104() { + return never; +} +// 'next' iteration type inference +function* g201() { + let a = yield 1; +} +function* g202() { + let a = yield 1; + let b = yield 2; +} +function* g203() { + const x = f1(yield 1); +} +function* g204() { + const x = f2(yield 1); +} +// mixed iteration types inference +function* g301() { + yield; + return; +} +function* g302() { + yield 1; + return; +} +function* g303() { + yield; + return "a"; +} +function* g304() { + yield 1; + return "a"; +} +function* g305() { + if (Math.random()) + yield 1; + yield 2; + if (Math.random()) + return "a"; + return "b"; +} +function* g306() { + const a = yield 1; + return true; +} +function* g307() { + const a = yield 0; + return a; +} +function* g308(x) { + const a = yield x; + return a; +} +function* g309(x, y) { + const a = yield x; + return y; +} +function* g310() { + const [a = 1, b = 2] = yield; +} +function* g311() { + yield* (function* () { + const y = yield; + })(); +} diff --git a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.symbols b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.symbols new file mode 100644 index 00000000000..2ff827d66c9 --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.symbols @@ -0,0 +1,260 @@ +=== tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts === +declare const iterableIterator: IterableIterator; +>iterableIterator : Symbol(iterableIterator, Decl(generatorReturnTypeInferenceNonStrict.ts, 0, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const generator: Generator; +>generator : Symbol(generator, Decl(generatorReturnTypeInferenceNonStrict.ts, 1, 13)) +>Generator : Symbol(Generator, Decl(lib.es2015.generator.d.ts, --, --)) + +declare const never: never; +>never : Symbol(never, Decl(generatorReturnTypeInferenceNonStrict.ts, 2, 13)) + +function* g000() { // Generator +>g000 : Symbol(g000, Decl(generatorReturnTypeInferenceNonStrict.ts, 2, 27)) +} + +// 'yield' iteration type inference +function* g001() { // Generator +>g001 : Symbol(g001, Decl(generatorReturnTypeInferenceNonStrict.ts, 5, 1)) + + yield; +} + +function* g002() { // Generator +>g002 : Symbol(g002, Decl(generatorReturnTypeInferenceNonStrict.ts, 10, 1)) + + yield 1; +} + +function* g003() { // Generator +>g003 : Symbol(g003, Decl(generatorReturnTypeInferenceNonStrict.ts, 14, 1)) + + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; +} + +function* g004() { // Generator +>g004 : Symbol(g004, Decl(generatorReturnTypeInferenceNonStrict.ts, 20, 1)) + + yield* iterableIterator; +>iterableIterator : Symbol(iterableIterator, Decl(generatorReturnTypeInferenceNonStrict.ts, 0, 13)) +} + +function* g005() { // Generator +>g005 : Symbol(g005, Decl(generatorReturnTypeInferenceNonStrict.ts, 24, 1)) + + const x = yield* generator; +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 27, 9)) +>generator : Symbol(generator, Decl(generatorReturnTypeInferenceNonStrict.ts, 1, 13)) +} + +function* g006() { // Generator<1 | 2, void, unknown> +>g006 : Symbol(g006, Decl(generatorReturnTypeInferenceNonStrict.ts, 28, 1)) + + yield 1; + yield 2; +} + +function* g007() { // Generator +>g007 : Symbol(g007, Decl(generatorReturnTypeInferenceNonStrict.ts, 33, 1)) + + yield never; +>never : Symbol(never, Decl(generatorReturnTypeInferenceNonStrict.ts, 2, 13)) +} + +// 'return' iteration type inference +function* g102() { // Generator +>g102 : Symbol(g102, Decl(generatorReturnTypeInferenceNonStrict.ts, 37, 1)) + + return 1; +} + +function* g103() { // Generator +>g103 : Symbol(g103, Decl(generatorReturnTypeInferenceNonStrict.ts, 42, 1)) + + if (Math.random()) return 1; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + return 2; +} + +function* g104() { // Generator +>g104 : Symbol(g104, Decl(generatorReturnTypeInferenceNonStrict.ts, 47, 1)) + + return never; +>never : Symbol(never, Decl(generatorReturnTypeInferenceNonStrict.ts, 2, 13)) +} + +// 'next' iteration type inference +function* g201() { // Generator +>g201 : Symbol(g201, Decl(generatorReturnTypeInferenceNonStrict.ts, 51, 1)) + + let a: string = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 55, 7)) +} + +function* g202() { // Generator<1 | 2, void, never> +>g202 : Symbol(g202, Decl(generatorReturnTypeInferenceNonStrict.ts, 56, 1)) + + let a: string = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 59, 7)) + + let b: number = yield 2; +>b : Symbol(b, Decl(generatorReturnTypeInferenceNonStrict.ts, 60, 7)) +} + +declare function f1(x: string): void; +>f1 : Symbol(f1, Decl(generatorReturnTypeInferenceNonStrict.ts, 61, 1), Decl(generatorReturnTypeInferenceNonStrict.ts, 63, 37)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 63, 20)) + +declare function f1(x: number): void; +>f1 : Symbol(f1, Decl(generatorReturnTypeInferenceNonStrict.ts, 61, 1), Decl(generatorReturnTypeInferenceNonStrict.ts, 63, 37)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 64, 20)) + +function* g203() { // Generator +>g203 : Symbol(g203, Decl(generatorReturnTypeInferenceNonStrict.ts, 64, 37)) + + const x = f1(yield 1); +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 67, 6)) +>f1 : Symbol(f1, Decl(generatorReturnTypeInferenceNonStrict.ts, 61, 1), Decl(generatorReturnTypeInferenceNonStrict.ts, 63, 37)) +} + +declare function f2(x: T): T; +>f2 : Symbol(f2, Decl(generatorReturnTypeInferenceNonStrict.ts, 68, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 70, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 70, 23)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 70, 20)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 70, 20)) + +function* g204() { // Generator +>g204 : Symbol(g204, Decl(generatorReturnTypeInferenceNonStrict.ts, 70, 32)) + + const x = f2(yield 1); +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 73, 6)) +>f2 : Symbol(f2, Decl(generatorReturnTypeInferenceNonStrict.ts, 68, 1)) +} + +// mixed iteration types inference + +function* g301() { // Generator +>g301 : Symbol(g301, Decl(generatorReturnTypeInferenceNonStrict.ts, 74, 1)) + + yield; + return; +} + +function* g302() { // Generator +>g302 : Symbol(g302, Decl(generatorReturnTypeInferenceNonStrict.ts, 81, 1)) + + yield 1; + return; +} + +function* g303() { // Generator +>g303 : Symbol(g303, Decl(generatorReturnTypeInferenceNonStrict.ts, 86, 1)) + + yield; + return "a"; +} + +function* g304() { // Generator +>g304 : Symbol(g304, Decl(generatorReturnTypeInferenceNonStrict.ts, 91, 1)) + + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> +>g305 : Symbol(g305, Decl(generatorReturnTypeInferenceNonStrict.ts, 96, 1)) + + if (Math.random()) yield 1; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + yield 2; + if (Math.random()) return "a"; +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) + + return "b"; +} + +function* g306() { // Generator +>g306 : Symbol(g306, Decl(generatorReturnTypeInferenceNonStrict.ts, 103, 1)) + + const a: "hi" = yield 1; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 106, 9)) + + return true; +} + +function* g307() { // Generator +>g307 : Symbol(g307, Decl(generatorReturnTypeInferenceNonStrict.ts, 108, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 110, 15)) + + const a: T = yield 0; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 111, 9)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 110, 15)) + + return a; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 111, 9)) +} + +function* g308(x: T) { // Generator +>g308 : Symbol(g308, Decl(generatorReturnTypeInferenceNonStrict.ts, 113, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 115, 15)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 115, 18)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 115, 15)) + + const a: T = yield x; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 116, 9)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 115, 15)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 115, 18)) + + return a; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 116, 9)) +} + +function* g309(x: T, y: U) { // Generator +>g309 : Symbol(g309, Decl(generatorReturnTypeInferenceNonStrict.ts, 118, 1)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 15)) +>U : Symbol(U, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 17)) +>V : Symbol(V, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 24)) +>T : Symbol(T, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 15)) +>y : Symbol(y, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 29)) +>U : Symbol(U, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 17)) + + const a: V = yield x; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 121, 9)) +>V : Symbol(V, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 20)) +>x : Symbol(x, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 24)) + + return y; +>y : Symbol(y, Decl(generatorReturnTypeInferenceNonStrict.ts, 120, 29)) +} + +function* g310() { // Generator +>g310 : Symbol(g310, Decl(generatorReturnTypeInferenceNonStrict.ts, 123, 1)) + + const [a = 1, b = 2] = yield; +>a : Symbol(a, Decl(generatorReturnTypeInferenceNonStrict.ts, 126, 8)) +>b : Symbol(b, Decl(generatorReturnTypeInferenceNonStrict.ts, 126, 14)) +} + +function* g311() { // Generator +>g311 : Symbol(g311, Decl(generatorReturnTypeInferenceNonStrict.ts, 127, 1)) + + yield* (function*() { + const y: string = yield; +>y : Symbol(y, Decl(generatorReturnTypeInferenceNonStrict.ts, 131, 7)) + + })(); +} + diff --git a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types new file mode 100644 index 00000000000..4d6754d85bf --- /dev/null +++ b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types @@ -0,0 +1,310 @@ +=== tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts === +declare const iterableIterator: IterableIterator; +>iterableIterator : IterableIterator + +declare const generator: Generator; +>generator : Generator + +declare const never: never; +>never : never + +function* g000() { // Generator +>g000 : () => Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator +>g001 : () => Generator + + yield; +>yield : any +} + +function* g002() { // Generator +>g002 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 +} + +function* g003() { // Generator +>g003 : () => Generator + + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; +>yield* [] : any +>[] : undefined[] +} + +function* g004() { // Generator +>g004 : () => Generator + + yield* iterableIterator; +>yield* iterableIterator : any +>iterableIterator : IterableIterator +} + +function* g005() { // Generator +>g005 : () => Generator + + const x = yield* generator; +>x : string +>yield* generator : string +>generator : Generator +} + +function* g006() { // Generator<1 | 2, void, unknown> +>g006 : () => Generator<1 | 2, void, unknown> + + yield 1; +>yield 1 : any +>1 : 1 + + yield 2; +>yield 2 : any +>2 : 2 +} + +function* g007() { // Generator +>g007 : () => Generator + + yield never; +>yield never : any +>never : never +} + +// 'return' iteration type inference +function* g102() { // Generator +>g102 : () => Generator + + return 1; +>1 : 1 +} + +function* g103() { // Generator +>g103 : () => Generator + + if (Math.random()) return 1; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>1 : 1 + + return 2; +>2 : 2 +} + +function* g104() { // Generator +>g104 : () => Generator + + return never; +>never : never +} + +// 'next' iteration type inference +function* g201() { // Generator +>g201 : () => Generator + + let a: string = yield 1; +>a : string +>yield 1 : any +>1 : 1 +} + +function* g202() { // Generator<1 | 2, void, never> +>g202 : () => Generator<1 | 2, void, never> + + let a: string = yield 1; +>a : string +>yield 1 : any +>1 : 1 + + let b: number = yield 2; +>b : number +>yield 2 : any +>2 : 2 +} + +declare function f1(x: string): void; +>f1 : { (x: string): void; (x: number): void; } +>x : string + +declare function f1(x: number): void; +>f1 : { (x: string): void; (x: number): void; } +>x : number + +function* g203() { // Generator +>g203 : () => Generator + + const x = f1(yield 1); +>x : void +>f1(yield 1) : void +>f1 : { (x: string): void; (x: number): void; } +>yield 1 : any +>1 : 1 +} + +declare function f2(x: T): T; +>f2 : (x: T) => T +>x : T + +function* g204() { // Generator +>g204 : () => Generator + + const x = f2(yield 1); +>x : any +>f2(yield 1) : any +>f2 : (x: T) => T +>yield 1 : any +>1 : 1 +} + +// mixed iteration types inference + +function* g301() { // Generator +>g301 : () => Generator + + yield; +>yield : any + + return; +} + +function* g302() { // Generator +>g302 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 + + return; +} + +function* g303() { // Generator +>g303 : () => Generator + + yield; +>yield : any + + return "a"; +>"a" : "a" +} + +function* g304() { // Generator +>g304 : () => Generator + + yield 1; +>yield 1 : any +>1 : 1 + + return "a"; +>"a" : "a" +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> +>g305 : () => Generator<1 | 2, "a" | "b", unknown> + + if (Math.random()) yield 1; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>yield 1 : any +>1 : 1 + + yield 2; +>yield 2 : any +>2 : 2 + + if (Math.random()) return "a"; +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>"a" : "a" + + return "b"; +>"b" : "b" +} + +function* g306() { // Generator +>g306 : () => Generator + + const a: "hi" = yield 1; +>a : "hi" +>yield 1 : any +>1 : 1 + + return true; +>true : true +} + +function* g307() { // Generator +>g307 : () => Generator + + const a: T = yield 0; +>a : T +>yield 0 : any +>0 : 0 + + return a; +>a : T +} + +function* g308(x: T) { // Generator +>g308 : (x: T) => Generator +>x : T + + const a: T = yield x; +>a : T +>yield x : any +>x : T + + return a; +>a : T +} + +function* g309(x: T, y: U) { // Generator +>g309 : (x: T, y: U) => Generator +>x : T +>y : U + + const a: V = yield x; +>a : V +>yield x : any +>x : T + + return y; +>y : U +} + +function* g310() { // Generator +>g310 : () => Generator + + const [a = 1, b = 2] = yield; +>a : any +>1 : 1 +>b : any +>2 : 2 +>yield : any +} + +function* g311() { // Generator +>g311 : () => Generator + + yield* (function*() { +>yield* (function*() { const y: string = yield; })() : void +>(function*() { const y: string = yield; })() : Generator +>(function*() { const y: string = yield; }) : () => Generator +>function*() { const y: string = yield; } : () => Generator + + const y: string = yield; +>y : string +>yield : any + + })(); +} + diff --git a/tests/baselines/reference/generatorTypeCheck1.types b/tests/baselines/reference/generatorTypeCheck1.types index 435da37fa69..72597601a85 100644 --- a/tests/baselines/reference/generatorTypeCheck1.types +++ b/tests/baselines/reference/generatorTypeCheck1.types @@ -1,4 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck1.ts === function* g1(): Iterator { } ->g1 : () => Iterator +>g1 : () => Iterator diff --git a/tests/baselines/reference/generatorTypeCheck13.types b/tests/baselines/reference/generatorTypeCheck13.types index 06e0e5ec380..2d5bdd5827e 100644 --- a/tests/baselines/reference/generatorTypeCheck13.types +++ b/tests/baselines/reference/generatorTypeCheck13.types @@ -3,7 +3,7 @@ function* g(): IterableIterator { >g : () => IterableIterator yield 0; ->yield 0 : any +>yield 0 : undefined >0 : 0 return ""; diff --git a/tests/baselines/reference/generatorTypeCheck14.types b/tests/baselines/reference/generatorTypeCheck14.types index 28401e68567..a4113cb8be2 100644 --- a/tests/baselines/reference/generatorTypeCheck14.types +++ b/tests/baselines/reference/generatorTypeCheck14.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck14.ts === function* g() { ->g : () => IterableIterator<0 | ""> +>g : () => Generator yield 0; >yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck15.types b/tests/baselines/reference/generatorTypeCheck15.types index 33537836c12..d8e8ed58805 100644 --- a/tests/baselines/reference/generatorTypeCheck15.types +++ b/tests/baselines/reference/generatorTypeCheck15.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator return ""; >"" : "" diff --git a/tests/baselines/reference/generatorTypeCheck16.types b/tests/baselines/reference/generatorTypeCheck16.types index a607ad851c1..b8b43fcefc7 100644 --- a/tests/baselines/reference/generatorTypeCheck16.types +++ b/tests/baselines/reference/generatorTypeCheck16.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator return; } diff --git a/tests/baselines/reference/generatorTypeCheck17.types b/tests/baselines/reference/generatorTypeCheck17.types index 5a1f03055cc..e6631757d0d 100644 --- a/tests/baselines/reference/generatorTypeCheck17.types +++ b/tests/baselines/reference/generatorTypeCheck17.types @@ -12,10 +12,10 @@ function* g(): IterableIterator { >g : () => IterableIterator yield; ->yield : any +>yield : undefined yield new Bar; ->yield new Bar : any +>yield new Bar : undefined >new Bar : Bar >Bar : typeof Bar } diff --git a/tests/baselines/reference/generatorTypeCheck18.types b/tests/baselines/reference/generatorTypeCheck18.types index b1d1da6661e..73a9a0d88c7 100644 --- a/tests/baselines/reference/generatorTypeCheck18.types +++ b/tests/baselines/reference/generatorTypeCheck18.types @@ -11,10 +11,10 @@ function* g(): IterableIterator { >g : () => IterableIterator yield; ->yield : any +>yield : undefined yield new Baz; ->yield new Baz : any +>yield new Baz : undefined >new Baz : Baz >Baz : typeof Baz } diff --git a/tests/baselines/reference/generatorTypeCheck19.types b/tests/baselines/reference/generatorTypeCheck19.types index 73612246efa..f05cae1fd55 100644 --- a/tests/baselines/reference/generatorTypeCheck19.types +++ b/tests/baselines/reference/generatorTypeCheck19.types @@ -12,7 +12,7 @@ function* g(): IterableIterator { >g : () => IterableIterator yield; ->yield : any +>yield : undefined yield * [new Bar]; >yield * [new Bar] : any diff --git a/tests/baselines/reference/generatorTypeCheck20.types b/tests/baselines/reference/generatorTypeCheck20.types index 77b15497db0..a0ab6b14497 100644 --- a/tests/baselines/reference/generatorTypeCheck20.types +++ b/tests/baselines/reference/generatorTypeCheck20.types @@ -11,7 +11,7 @@ function* g(): IterableIterator { >g : () => IterableIterator yield; ->yield : any +>yield : undefined yield * [new Baz]; >yield * [new Baz] : any diff --git a/tests/baselines/reference/generatorTypeCheck21.types b/tests/baselines/reference/generatorTypeCheck21.types index a87d66d5cee..96b0f15cf60 100644 --- a/tests/baselines/reference/generatorTypeCheck21.types +++ b/tests/baselines/reference/generatorTypeCheck21.types @@ -12,7 +12,7 @@ function* g(): IterableIterator { >g : () => IterableIterator yield; ->yield : any +>yield : undefined yield * new Bar; >yield * new Bar : any diff --git a/tests/baselines/reference/generatorTypeCheck22.types b/tests/baselines/reference/generatorTypeCheck22.types index e46e73874e6..3f8f2d3fd9f 100644 --- a/tests/baselines/reference/generatorTypeCheck22.types +++ b/tests/baselines/reference/generatorTypeCheck22.types @@ -13,7 +13,7 @@ class Baz { z: number } >z : number function* g3() { ->g3 : () => IterableIterator +>g3 : () => Generator yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck23.types b/tests/baselines/reference/generatorTypeCheck23.types index 1d5d294503a..a7fa6c880bb 100644 --- a/tests/baselines/reference/generatorTypeCheck23.types +++ b/tests/baselines/reference/generatorTypeCheck23.types @@ -13,7 +13,7 @@ class Baz { z: number } >z : number function* g3() { ->g3 : () => IterableIterator +>g3 : () => Generator yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck24.types b/tests/baselines/reference/generatorTypeCheck24.types index e3c369bfce1..8f8f4d668f1 100644 --- a/tests/baselines/reference/generatorTypeCheck24.types +++ b/tests/baselines/reference/generatorTypeCheck24.types @@ -13,7 +13,7 @@ class Baz { z: number } >z : number function* g3() { ->g3 : () => IterableIterator +>g3 : () => Generator yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck25.errors.txt b/tests/baselines/reference/generatorTypeCheck25.errors.txt index c3c456e805d..365a19dfdd7 100644 --- a/tests/baselines/reference/generatorTypeCheck25.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck25.errors.txt @@ -1,13 +1,15 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck25.ts(4,5): error TS2322: Type '() => IterableIterator' is not assignable to type '() => Iterable'. - Type 'IterableIterator' is not assignable to type 'Iterable'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck25.ts(4,5): error TS2322: Type '() => Generator' is not assignable to type '() => Iterable'. + Type 'Generator' is not assignable to type 'Iterable'. Types of property '[Symbol.iterator]' are incompatible. - Type '() => IterableIterator' is not assignable to type '() => Iterator'. - Type 'IterableIterator' is not assignable to type 'Iterator'. + Type '() => Generator' is not assignable to type '() => Iterator'. + Type 'Generator' is not assignable to type 'Iterator'. Types of property 'next' are incompatible. - Type '(value?: any) => IteratorResult' is not assignable to type '(value?: any) => IteratorResult'. - Type 'IteratorResult' is not assignable to type 'IteratorResult'. - Type 'Bar | Baz' is not assignable to type 'Foo'. - Property 'x' is missing in type 'Baz' but required in type 'Foo'. + Type '(...args: [] | [undefined]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. + Type 'IteratorResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. + Type 'Bar | Baz' is not assignable to type 'Foo'. + Property 'x' is missing in type 'Baz' but required in type 'Foo'. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck25.ts (1 errors) ==== @@ -16,16 +18,18 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck25.ts(4,5): error class Baz { z: number } var g3: () => Iterable = function* () { ~~ -!!! error TS2322: Type '() => IterableIterator' is not assignable to type '() => Iterable'. -!!! error TS2322: Type 'IterableIterator' is not assignable to type 'Iterable'. +!!! error TS2322: Type '() => Generator' is not assignable to type '() => Iterable'. +!!! error TS2322: Type 'Generator' is not assignable to type 'Iterable'. !!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '() => IterableIterator' is not assignable to type '() => Iterator'. -!!! error TS2322: Type 'IterableIterator' is not assignable to type 'Iterator'. +!!! error TS2322: Type '() => Generator' is not assignable to type '() => Iterator'. +!!! error TS2322: Type 'Generator' is not assignable to type 'Iterator'. !!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '(value?: any) => IteratorResult' is not assignable to type '(value?: any) => IteratorResult'. -!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. -!!! error TS2322: Type 'Bar | Baz' is not assignable to type 'Foo'. -!!! error TS2322: Property 'x' is missing in type 'Baz' but required in type 'Foo'. +!!! error TS2322: Type '(...args: [] | [undefined]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. +!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. +!!! error TS2322: Type 'Bar | Baz' is not assignable to type 'Foo'. +!!! error TS2322: Property 'x' is missing in type 'Baz' but required in type 'Foo'. !!! related TS2728 tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck25.ts:1:13: 'x' is declared here. yield; yield new Bar; diff --git a/tests/baselines/reference/generatorTypeCheck25.types b/tests/baselines/reference/generatorTypeCheck25.types index 4707bfe7b6b..d0498c2da16 100644 --- a/tests/baselines/reference/generatorTypeCheck25.types +++ b/tests/baselines/reference/generatorTypeCheck25.types @@ -14,7 +14,7 @@ class Baz { z: number } var g3: () => Iterable = function* () { >g3 : () => Iterable ->function* () { yield; yield new Bar; yield new Baz; yield *[new Bar]; yield *[new Baz];} : () => IterableIterator +>function* () { yield; yield new Bar; yield new Baz; yield *[new Bar]; yield *[new Baz];} : () => Generator yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck26.types b/tests/baselines/reference/generatorTypeCheck26.types index 6ae17c983b8..7ade7bdec91 100644 --- a/tests/baselines/reference/generatorTypeCheck26.types +++ b/tests/baselines/reference/generatorTypeCheck26.types @@ -4,7 +4,7 @@ function* g(): IterableIterator<(x: string) => number> { >x : string yield x => x.length; ->yield x => x.length : any +>yield x => x.length : undefined >x => x.length : (x: string) => number >x : string >x.length : number diff --git a/tests/baselines/reference/generatorTypeCheck27.types b/tests/baselines/reference/generatorTypeCheck27.types index 16632d021a4..58306e1fb4a 100644 --- a/tests/baselines/reference/generatorTypeCheck27.types +++ b/tests/baselines/reference/generatorTypeCheck27.types @@ -4,9 +4,9 @@ function* g(): IterableIterator<(x: string) => number> { >x : string yield * function* () { ->yield * function* () { yield x => x.length; } () : any ->function* () { yield x => x.length; } () : IterableIterator<(x: any) => any> ->function* () { yield x => x.length; } : () => IterableIterator<(x: any) => any> +>yield * function* () { yield x => x.length; } () : void +>function* () { yield x => x.length; } () : Generator<(x: any) => any, void, unknown> +>function* () { yield x => x.length; } : () => Generator<(x: any) => any, void, unknown> yield x => x.length; >yield x => x.length : any diff --git a/tests/baselines/reference/generatorTypeCheck28.types b/tests/baselines/reference/generatorTypeCheck28.types index 7d5bafe28c5..9cd4e5e82ce 100644 --- a/tests/baselines/reference/generatorTypeCheck28.types +++ b/tests/baselines/reference/generatorTypeCheck28.types @@ -4,11 +4,11 @@ function* g(): IterableIterator<(x: string) => number> { >x : string yield * { ->yield * { *[Symbol.iterator]() { yield x => x.length; } } : any ->{ *[Symbol.iterator]() { yield x => x.length; } } : { [Symbol.iterator](): IterableIterator<(x: string) => number>; } +>yield * { *[Symbol.iterator]() { yield x => x.length; } } : void +>{ *[Symbol.iterator]() { yield x => x.length; } } : { [Symbol.iterator](): Generator<(x: string) => number, void, unknown>; } *[Symbol.iterator]() { ->[Symbol.iterator] : () => IterableIterator<(x: string) => number> +>[Symbol.iterator] : () => Generator<(x: string) => number, void, unknown> >Symbol.iterator : symbol >Symbol : SymbolConstructor >iterator : symbol diff --git a/tests/baselines/reference/generatorTypeCheck29.types b/tests/baselines/reference/generatorTypeCheck29.types index 48a32f65e37..0ce49791a22 100644 --- a/tests/baselines/reference/generatorTypeCheck29.types +++ b/tests/baselines/reference/generatorTypeCheck29.types @@ -1,12 +1,12 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck29.ts === function* g2(): Iterator number>> { ->g2 : () => Iterator number>> +>g2 : () => Iterator number>, any, undefined> >x : string yield function* () { ->yield function* () { yield x => x.length; } () : any ->function* () { yield x => x.length; } () : IterableIterator<(x: any) => any> ->function* () { yield x => x.length; } : () => IterableIterator<(x: any) => any> +>yield function* () { yield x => x.length; } () : undefined +>function* () { yield x => x.length; } () : Generator<(x: any) => any, void, unknown> +>function* () { yield x => x.length; } : () => Generator<(x: any) => any, void, unknown> yield x => x.length; >yield x => x.length : any diff --git a/tests/baselines/reference/generatorTypeCheck30.types b/tests/baselines/reference/generatorTypeCheck30.types index 2e4971770f3..094ed3bf337 100644 --- a/tests/baselines/reference/generatorTypeCheck30.types +++ b/tests/baselines/reference/generatorTypeCheck30.types @@ -1,12 +1,12 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck30.ts === function* g2(): Iterator number>> { ->g2 : () => Iterator number>> +>g2 : () => Iterator number>, any, undefined> >x : string yield function* () { ->yield function* () { yield x => x.length; } () : any ->function* () { yield x => x.length; } () : IterableIterator<(x: any) => any> ->function* () { yield x => x.length; } : () => IterableIterator<(x: any) => any> +>yield function* () { yield x => x.length; } () : undefined +>function* () { yield x => x.length; } () : Generator<(x: any) => any, void, unknown> +>function* () { yield x => x.length; } : () => Generator<(x: any) => any, void, unknown> yield x => x.length; >yield x => x.length : any diff --git a/tests/baselines/reference/generatorTypeCheck31.errors.txt b/tests/baselines/reference/generatorTypeCheck31.errors.txt index 437b7470069..0ed5dcbe0e0 100644 --- a/tests/baselines/reference/generatorTypeCheck31.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck31.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck31.ts(2,11): error TS2322: Type 'IterableIterator<(x: any) => any>' is not assignable to type '() => Iterable<(x: string) => number>'. - Type 'IterableIterator<(x: any) => any>' provides no match for the signature '(): Iterable<(x: string) => number>'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck31.ts(2,11): error TS2322: Type 'Generator<(x: any) => any, void, unknown>' is not assignable to type '() => Iterable<(x: string) => number>'. + Type 'Generator<(x: any) => any, void, unknown>' provides no match for the signature '(): Iterable<(x: string) => number>'. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck31.ts (1 errors) ==== @@ -10,6 +10,6 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck31.ts(2,11): erro ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } () ~~~~~~~~ -!!! error TS2322: Type 'IterableIterator<(x: any) => any>' is not assignable to type '() => Iterable<(x: string) => number>'. -!!! error TS2322: Type 'IterableIterator<(x: any) => any>' provides no match for the signature '(): Iterable<(x: string) => number>'. +!!! error TS2322: Type 'Generator<(x: any) => any, void, unknown>' is not assignable to type '() => Iterable<(x: string) => number>'. +!!! error TS2322: Type 'Generator<(x: any) => any, void, unknown>' provides no match for the signature '(): Iterable<(x: string) => number>'. } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck31.types b/tests/baselines/reference/generatorTypeCheck31.types index 2038b2ee1c2..c15eab96fe9 100644 --- a/tests/baselines/reference/generatorTypeCheck31.types +++ b/tests/baselines/reference/generatorTypeCheck31.types @@ -1,12 +1,12 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck31.ts === function* g2(): Iterator<() => Iterable<(x: string) => number>> { ->g2 : () => Iterator<() => Iterable<(x: string) => number>> +>g2 : () => Iterator<() => Iterable<(x: string) => number>, any, undefined> >x : string yield function* () { ->yield function* () { yield x => x.length; } () : any ->function* () { yield x => x.length; } () : IterableIterator<(x: any) => any> ->function* () { yield x => x.length; } : () => IterableIterator<(x: any) => any> +>yield function* () { yield x => x.length; } () : undefined +>function* () { yield x => x.length; } () : Generator<(x: any) => any, void, unknown> +>function* () { yield x => x.length; } : () => Generator<(x: any) => any, void, unknown> yield x => x.length; >yield x => x.length : any diff --git a/tests/baselines/reference/generatorTypeCheck33.types b/tests/baselines/reference/generatorTypeCheck33.types index d6b29936530..e894b44a4e3 100644 --- a/tests/baselines/reference/generatorTypeCheck33.types +++ b/tests/baselines/reference/generatorTypeCheck33.types @@ -1,13 +1,13 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck33.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield 0; >yield 0 : any >0 : 0 function* g2() { ->g2 : () => IterableIterator +>g2 : () => Generator yield ""; >yield "" : any diff --git a/tests/baselines/reference/generatorTypeCheck34.types b/tests/baselines/reference/generatorTypeCheck34.types index f25eefb72f7..5e2e6af134c 100644 --- a/tests/baselines/reference/generatorTypeCheck34.types +++ b/tests/baselines/reference/generatorTypeCheck34.types @@ -1,13 +1,13 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck34.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield 0; >yield 0 : any >0 : 0 function* g2() { ->g2 : () => IterableIterator +>g2 : () => Generator return ""; >"" : "" diff --git a/tests/baselines/reference/generatorTypeCheck35.types b/tests/baselines/reference/generatorTypeCheck35.types index 333b653a501..b35139b9c16 100644 --- a/tests/baselines/reference/generatorTypeCheck35.types +++ b/tests/baselines/reference/generatorTypeCheck35.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck35.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield 0; >yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck36.types b/tests/baselines/reference/generatorTypeCheck36.types index 318a46c25fb..9cebc9a407f 100644 --- a/tests/baselines/reference/generatorTypeCheck36.types +++ b/tests/baselines/reference/generatorTypeCheck36.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck36.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield yield 0; >yield yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck37.types b/tests/baselines/reference/generatorTypeCheck37.types index aaa790c8094..d9c28b941dd 100644 --- a/tests/baselines/reference/generatorTypeCheck37.types +++ b/tests/baselines/reference/generatorTypeCheck37.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck37.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator return yield yield 0; >yield yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck38.types b/tests/baselines/reference/generatorTypeCheck38.types index 15b8528b345..a62587603d4 100644 --- a/tests/baselines/reference/generatorTypeCheck38.types +++ b/tests/baselines/reference/generatorTypeCheck38.types @@ -3,7 +3,7 @@ var yield; >yield : any function* g() { ->g : () => IterableIterator +>g : () => Generator yield 0; >yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck39.types b/tests/baselines/reference/generatorTypeCheck39.types index e24fc173566..5ca4062b558 100644 --- a/tests/baselines/reference/generatorTypeCheck39.types +++ b/tests/baselines/reference/generatorTypeCheck39.types @@ -8,7 +8,7 @@ function decorator(x: any) { >y : any } function* g() { ->g : () => IterableIterator +>g : () => Generator @decorator(yield 0) >decorator(yield 0) : (y: any) => void diff --git a/tests/baselines/reference/generatorTypeCheck40.types b/tests/baselines/reference/generatorTypeCheck40.types index cbec14d36d6..4e774158175 100644 --- a/tests/baselines/reference/generatorTypeCheck40.types +++ b/tests/baselines/reference/generatorTypeCheck40.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck40.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator class C extends (yield 0) { } >C : C diff --git a/tests/baselines/reference/generatorTypeCheck41.types b/tests/baselines/reference/generatorTypeCheck41.types index 5f20d017655..d22c875416f 100644 --- a/tests/baselines/reference/generatorTypeCheck41.types +++ b/tests/baselines/reference/generatorTypeCheck41.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck41.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator let x = { >x : { [x: number]: number; } diff --git a/tests/baselines/reference/generatorTypeCheck42.types b/tests/baselines/reference/generatorTypeCheck42.types index 47d948739f1..f3e82ad1a98 100644 --- a/tests/baselines/reference/generatorTypeCheck42.types +++ b/tests/baselines/reference/generatorTypeCheck42.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck42.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator let x = { >x : { [x: number]: () => void; } diff --git a/tests/baselines/reference/generatorTypeCheck43.types b/tests/baselines/reference/generatorTypeCheck43.types index 298c631728e..cdf5cdc81bb 100644 --- a/tests/baselines/reference/generatorTypeCheck43.types +++ b/tests/baselines/reference/generatorTypeCheck43.types @@ -1,13 +1,13 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck43.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator let x = { ->x : { [x: number]: () => IterableIterator; } ->{ *[yield 0]() { } } : { [x: number]: () => IterableIterator; } +>x : { [x: number]: () => Generator; } +>{ *[yield 0]() { } } : { [x: number]: () => Generator; } *[yield 0]() { ->[yield 0] : () => IterableIterator +>[yield 0] : () => Generator >yield 0 : any >0 : 0 diff --git a/tests/baselines/reference/generatorTypeCheck44.types b/tests/baselines/reference/generatorTypeCheck44.types index 38b335f1ab4..53dfd59266e 100644 --- a/tests/baselines/reference/generatorTypeCheck44.types +++ b/tests/baselines/reference/generatorTypeCheck44.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck44.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator let x = { >x : { [x: number]: number; } diff --git a/tests/baselines/reference/generatorTypeCheck45.types b/tests/baselines/reference/generatorTypeCheck45.types index 59ee8efa9f3..cf409241947 100644 --- a/tests/baselines/reference/generatorTypeCheck45.types +++ b/tests/baselines/reference/generatorTypeCheck45.types @@ -1,17 +1,17 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck45.ts === declare function foo(x: T, fun: () => Iterator<(x: T) => U>, fun2: (y: U) => T): T; ->foo : (x: T, fun: () => Iterator<(x: T) => U>, fun2: (y: U) => T) => T +>foo : (x: T, fun: () => Iterator<(x: T) => U, any, undefined>, fun2: (y: U) => T) => T >x : T ->fun : () => Iterator<(x: T) => U> +>fun : () => Iterator<(x: T) => U, any, undefined> >x : T >fun2 : (y: U) => T >y : U foo("", function* () { yield x => x.length }, p => undefined); // T is fixed, should be string >foo("", function* () { yield x => x.length }, p => undefined) : string ->foo : (x: T, fun: () => Iterator<(x: T) => U>, fun2: (y: U) => T) => T +>foo : (x: T, fun: () => Iterator<(x: T) => U, any, undefined>, fun2: (y: U) => T) => T >"" : "" ->function* () { yield x => x.length } : () => IterableIterator<(x: string) => number> +>function* () { yield x => x.length } : () => Generator<(x: string) => number, void, unknown> >yield x => x.length : any >x => x.length : (x: string) => number >x : string diff --git a/tests/baselines/reference/generatorTypeCheck46.types b/tests/baselines/reference/generatorTypeCheck46.types index 81002c761d9..cd565d55911 100644 --- a/tests/baselines/reference/generatorTypeCheck46.types +++ b/tests/baselines/reference/generatorTypeCheck46.types @@ -11,14 +11,14 @@ foo("", function* () { >foo("", function* () { yield* { *[Symbol.iterator]() { yield x => x.length } }}, p => undefined) : string >foo : (x: T, fun: () => Iterable<(x: T) => U>, fun2: (y: U) => T) => T >"" : "" ->function* () { yield* { *[Symbol.iterator]() { yield x => x.length } }} : () => IterableIterator<(x: string) => number> +>function* () { yield* { *[Symbol.iterator]() { yield x => x.length } }} : () => Generator<(x: string) => number, void, unknown> yield* { ->yield* { *[Symbol.iterator]() { yield x => x.length } } : any ->{ *[Symbol.iterator]() { yield x => x.length } } : { [Symbol.iterator](): IterableIterator<(x: string) => number>; } +>yield* { *[Symbol.iterator]() { yield x => x.length } } : void +>{ *[Symbol.iterator]() { yield x => x.length } } : { [Symbol.iterator](): Generator<(x: string) => number, void, unknown>; } *[Symbol.iterator]() { ->[Symbol.iterator] : () => IterableIterator<(x: string) => number> +>[Symbol.iterator] : () => Generator<(x: string) => number, void, unknown> >Symbol.iterator : symbol >Symbol : SymbolConstructor >iterator : symbol diff --git a/tests/baselines/reference/generatorTypeCheck47.errors.txt b/tests/baselines/reference/generatorTypeCheck47.errors.txt deleted file mode 100644 index 993285179bc..00000000000 --- a/tests/baselines/reference/generatorTypeCheck47.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck47.ts(1,9): error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. - - -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck47.ts (1 errors) ==== - function* g() { } - ~ -!!! error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck47.types b/tests/baselines/reference/generatorTypeCheck47.types index d37512af0ac..d5e92f02a87 100644 --- a/tests/baselines/reference/generatorTypeCheck47.types +++ b/tests/baselines/reference/generatorTypeCheck47.types @@ -1,4 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck47.ts === function* g() { } ->g : () => IterableIterator +>g : () => Generator diff --git a/tests/baselines/reference/generatorTypeCheck48.errors.txt b/tests/baselines/reference/generatorTypeCheck48.errors.txt index a3a9706175f..e1c98d4f275 100644 --- a/tests/baselines/reference/generatorTypeCheck48.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck48.errors.txt @@ -1,17 +1,17 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts(1,11): error TS7010: 'g', which lacks return-type annotation, implicitly has an 'any' return type. -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts(5,11): error TS7010: 'h', which lacks return-type annotation, implicitly has an 'any' return type. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts(1,11): error TS7055: 'g', which lacks return-type annotation, implicitly has an 'any' yield type. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts(5,11): error TS7055: 'h', which lacks return-type annotation, implicitly has an 'any' yield type. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts (2 errors) ==== function* g() { ~ -!!! error TS7010: 'g', which lacks return-type annotation, implicitly has an 'any' return type. +!!! error TS7055: 'g', which lacks return-type annotation, implicitly has an 'any' yield type. yield; } function* h() { ~ -!!! error TS7010: 'h', which lacks return-type annotation, implicitly has an 'any' return type. +!!! error TS7055: 'h', which lacks return-type annotation, implicitly has an 'any' yield type. yield undefined; } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck48.types b/tests/baselines/reference/generatorTypeCheck48.types index f07131595cd..23134d50bee 100644 --- a/tests/baselines/reference/generatorTypeCheck48.types +++ b/tests/baselines/reference/generatorTypeCheck48.types @@ -1,13 +1,13 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck48.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield; >yield : any } function* h() { ->h : () => IterableIterator +>h : () => Generator yield undefined; >yield undefined : any diff --git a/tests/baselines/reference/generatorTypeCheck49.types b/tests/baselines/reference/generatorTypeCheck49.types index f73978d1a09..985194b7392 100644 --- a/tests/baselines/reference/generatorTypeCheck49.types +++ b/tests/baselines/reference/generatorTypeCheck49.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck49.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield 0; >yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck50.types b/tests/baselines/reference/generatorTypeCheck50.types index 1b25ea004f8..fa4561d16a1 100644 --- a/tests/baselines/reference/generatorTypeCheck50.types +++ b/tests/baselines/reference/generatorTypeCheck50.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck50.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator yield yield; >yield yield : any diff --git a/tests/baselines/reference/generatorTypeCheck51.errors.txt b/tests/baselines/reference/generatorTypeCheck51.errors.txt deleted file mode 100644 index b717b51803e..00000000000 --- a/tests/baselines/reference/generatorTypeCheck51.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck51.ts(1,9): error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. - - -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck51.ts (1 errors) ==== - function* g() { - ~ -!!! error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. - function* h() { - yield 0; - } - } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck51.types b/tests/baselines/reference/generatorTypeCheck51.types index 1563ee5e7d3..0ef7abf19cd 100644 --- a/tests/baselines/reference/generatorTypeCheck51.types +++ b/tests/baselines/reference/generatorTypeCheck51.types @@ -1,9 +1,9 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck51.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator function* h() { ->h : () => IterableIterator +>h : () => Generator yield 0; >yield 0 : any diff --git a/tests/baselines/reference/generatorTypeCheck52.types b/tests/baselines/reference/generatorTypeCheck52.types index 97ac442aa0e..30ef8611f69 100644 --- a/tests/baselines/reference/generatorTypeCheck52.types +++ b/tests/baselines/reference/generatorTypeCheck52.types @@ -8,7 +8,7 @@ class Baz { z: number } >z : number function* g() { ->g : () => IterableIterator +>g : () => Generator yield new Foo; >yield new Foo : any diff --git a/tests/baselines/reference/generatorTypeCheck53.types b/tests/baselines/reference/generatorTypeCheck53.types index b91974e9807..47972eec714 100644 --- a/tests/baselines/reference/generatorTypeCheck53.types +++ b/tests/baselines/reference/generatorTypeCheck53.types @@ -8,7 +8,7 @@ class Baz { z: number } >z : number function* g() { ->g : () => IterableIterator +>g : () => Generator yield new Foo; >yield new Foo : any diff --git a/tests/baselines/reference/generatorTypeCheck54.types b/tests/baselines/reference/generatorTypeCheck54.types index 1cdbde67498..6e91f4be51a 100644 --- a/tests/baselines/reference/generatorTypeCheck54.types +++ b/tests/baselines/reference/generatorTypeCheck54.types @@ -8,7 +8,7 @@ class Baz { z: number } >z : number function* g() { ->g : () => IterableIterator +>g : () => Generator yield* [new Foo]; >yield* [new Foo] : any diff --git a/tests/baselines/reference/generatorTypeCheck55.types b/tests/baselines/reference/generatorTypeCheck55.types index c45f1690131..15c3303b438 100644 --- a/tests/baselines/reference/generatorTypeCheck55.types +++ b/tests/baselines/reference/generatorTypeCheck55.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck55.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator var x = class C extends (yield) {}; >x : typeof C diff --git a/tests/baselines/reference/generatorTypeCheck56.types b/tests/baselines/reference/generatorTypeCheck56.types index 718e5d0d792..6f05396a1f1 100644 --- a/tests/baselines/reference/generatorTypeCheck56.types +++ b/tests/baselines/reference/generatorTypeCheck56.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck56.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator var x = class C { >x : typeof C @@ -8,7 +8,7 @@ function* g() { >C : typeof C *[yield 0]() { ->[yield 0] : () => IterableIterator +>[yield 0] : () => Generator >yield 0 : any >0 : 0 diff --git a/tests/baselines/reference/generatorTypeCheck57.types b/tests/baselines/reference/generatorTypeCheck57.types index b852efe62f4..9e660521dfb 100644 --- a/tests/baselines/reference/generatorTypeCheck57.types +++ b/tests/baselines/reference/generatorTypeCheck57.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck57.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator class C { >C : C diff --git a/tests/baselines/reference/generatorTypeCheck58.types b/tests/baselines/reference/generatorTypeCheck58.types index a04691cb4ba..69d1723be96 100644 --- a/tests/baselines/reference/generatorTypeCheck58.types +++ b/tests/baselines/reference/generatorTypeCheck58.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck58.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator class C { >C : C diff --git a/tests/baselines/reference/generatorTypeCheck59.types b/tests/baselines/reference/generatorTypeCheck59.types index 35b9b7e66f1..d04b829fba8 100644 --- a/tests/baselines/reference/generatorTypeCheck59.types +++ b/tests/baselines/reference/generatorTypeCheck59.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck59.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator class C { >C : C diff --git a/tests/baselines/reference/generatorTypeCheck6.errors.txt b/tests/baselines/reference/generatorTypeCheck6.errors.txt index 35f2cc2016d..a9eca26ca4f 100644 --- a/tests/baselines/reference/generatorTypeCheck6.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck6.ts(1,17): error TS2322: Type 'IterableIterator' is not assignable to type 'number'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck6.ts(1,17): error TS2322: Type 'Generator' is not assignable to type 'number'. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck6.ts (1 errors) ==== function* g1(): number { } ~~~~~~ -!!! error TS2322: Type 'IterableIterator' is not assignable to type 'number'. \ No newline at end of file +!!! error TS2322: Type 'Generator' is not assignable to type 'number'. \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck60.types b/tests/baselines/reference/generatorTypeCheck60.types index 9073f604be6..b10101b6f41 100644 --- a/tests/baselines/reference/generatorTypeCheck60.types +++ b/tests/baselines/reference/generatorTypeCheck60.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck60.ts === function* g() { ->g : () => IterableIterator +>g : () => Generator class C extends (yield) {}; >C : C diff --git a/tests/baselines/reference/generatorTypeCheck61.types b/tests/baselines/reference/generatorTypeCheck61.types index a8093e1bbe1..91874ffa58d 100644 --- a/tests/baselines/reference/generatorTypeCheck61.types +++ b/tests/baselines/reference/generatorTypeCheck61.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck61.ts === function * g() { ->g : () => IterableIterator +>g : () => Generator @(yield 0) >(yield 0) : any diff --git a/tests/baselines/reference/generatorTypeCheck62.types b/tests/baselines/reference/generatorTypeCheck62.types index 90d34fa8513..be5635a07fc 100644 --- a/tests/baselines/reference/generatorTypeCheck62.types +++ b/tests/baselines/reference/generatorTypeCheck62.types @@ -12,7 +12,7 @@ export function strategy(stratName: string, gen: (a: T >a : T return function*(state) { ->function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => IterableIterator +>function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator >state : T for (const next of gen(state)) { @@ -53,7 +53,7 @@ export const Nothing1: Strategy = strategy("Nothing", function*(state: St >strategy("Nothing", function*(state: State) { return state;}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function*(state: State) { return state;} : (state: State) => IterableIterator +>function*(state: State) { return state;} : (state: State) => Generator >state : State return state; @@ -66,7 +66,7 @@ export const Nothing2: Strategy = strategy("Nothing", function*(state: St >strategy("Nothing", function*(state: State) { yield state;}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function*(state: State) { yield state;} : (state: State) => IterableIterator +>function*(state: State) { yield state;} : (state: State) => Generator >state : State yield state; @@ -77,10 +77,10 @@ export const Nothing2: Strategy = strategy("Nothing", function*(state: St export const Nothing3: Strategy = strategy("Nothing", function* (state: State) { >Nothing3 : Strategy ->strategy("Nothing", function* (state: State) { yield ; return state;}) : (a: State) => IterableIterator +>strategy("Nothing", function* (state: State) { yield ; return state;}) : (a: any) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function* (state: State) { yield ; return state;} : (state: State) => IterableIterator +>function* (state: State) { yield ; return state;} : (state: State) => Generator >state : State yield ; diff --git a/tests/baselines/reference/generatorTypeCheck63.errors.txt b/tests/baselines/reference/generatorTypeCheck63.errors.txt index 2a1935fd906..f77488edc4d 100644 --- a/tests/baselines/reference/generatorTypeCheck63.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck63.errors.txt @@ -1,16 +1,14 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: StrategicState) => IterableIterator'. - Type 'IterableIterator' is not assignable to type 'IterableIterator'. - Type 'State | 1' is not assignable to type 'StrategicState'. - Type '1' has no properties in common with type 'StrategicState'. -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(29,70): error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(32,62): error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: State) => IterableIterator'. - Type 'IterableIterator' is not assignable to type 'IterableIterator'. - Type 'number' is not assignable to type 'State'. -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(36,62): error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: StrategicState) => IterableIterator'. - Type 'IterableIterator' is not assignable to type 'IterableIterator'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) => Generator' is not assignable to parameter of type '(a: State) => IterableIterator'. + Type 'Generator' is not assignable to type 'IterableIterator'. + Types of property 'next' are incompatible. + Type '(...args: [] | [unknown]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. + Type 'IteratorResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. + Type 'number' is not assignable to type 'State'. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts (4 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts (1 errors) ==== export interface StrategicState { lastStrategyApplied?: string; } @@ -36,31 +34,26 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(36,62): err export const Nothing: Strategy = strategy("Nothing", function* (state: State) { ~~~~~~~~ -!!! error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: StrategicState) => IterableIterator'. -!!! error TS2345: Type 'IterableIterator' is not assignable to type 'IterableIterator'. -!!! error TS2345: Type 'State | 1' is not assignable to type 'StrategicState'. -!!! error TS2345: Type '1' has no properties in common with type 'StrategicState'. +!!! error TS2345: Argument of type '(state: State) => Generator' is not assignable to parameter of type '(a: State) => IterableIterator'. +!!! error TS2345: Type 'Generator' is not assignable to type 'IterableIterator'. +!!! error TS2345: Types of property 'next' are incompatible. +!!! error TS2345: Type '(...args: [] | [unknown]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. +!!! error TS2345: Type 'IteratorResult' is not assignable to type 'IteratorResult'. +!!! error TS2345: Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. +!!! error TS2345: Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. +!!! error TS2345: Type 'number' is not assignable to type 'State'. yield 1; return state; }); export const Nothing1: Strategy = strategy("Nothing", function* (state: State) { - ~ -!!! error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. }); export const Nothing2: Strategy = strategy("Nothing", function* (state: State) { - ~~~~~~~~ -!!! error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: State) => IterableIterator'. -!!! error TS2345: Type 'IterableIterator' is not assignable to type 'IterableIterator'. -!!! error TS2345: Type 'number' is not assignable to type 'State'. return 1; }); export const Nothing3: Strategy = strategy("Nothing", function* (state: State) { - ~~~~~~~~ -!!! error TS2345: Argument of type '(state: State) => IterableIterator' is not assignable to parameter of type '(a: StrategicState) => IterableIterator'. -!!! error TS2345: Type 'IterableIterator' is not assignable to type 'IterableIterator'. yield state; return 1; }); \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck63.types b/tests/baselines/reference/generatorTypeCheck63.types index 67f9717162d..8a1d03dcb16 100644 --- a/tests/baselines/reference/generatorTypeCheck63.types +++ b/tests/baselines/reference/generatorTypeCheck63.types @@ -12,7 +12,7 @@ export function strategy(stratName: string, gen: (a: T >a : T return function*(state) { ->function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => IterableIterator +>function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator >state : T for (const next of gen(state)) { @@ -53,7 +53,7 @@ export const Nothing: Strategy = strategy("Nothing", function* (state: St >strategy("Nothing", function* (state: State) { yield 1; return state;}) : any >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function* (state: State) { yield 1; return state;} : (state: State) => IterableIterator +>function* (state: State) { yield 1; return state;} : (state: State) => Generator >state : State yield 1; @@ -67,20 +67,20 @@ export const Nothing: Strategy = strategy("Nothing", function* (state: St export const Nothing1: Strategy = strategy("Nothing", function* (state: State) { >Nothing1 : Strategy ->strategy("Nothing", function* (state: State) {}) : (a: any) => IterableIterator +>strategy("Nothing", function* (state: State) {}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function* (state: State) {} : (state: State) => IterableIterator +>function* (state: State) {} : (state: State) => Generator >state : State }); export const Nothing2: Strategy = strategy("Nothing", function* (state: State) { >Nothing2 : Strategy ->strategy("Nothing", function* (state: State) { return 1;}) : any +>strategy("Nothing", function* (state: State) { return 1;}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function* (state: State) { return 1;} : (state: State) => IterableIterator +>function* (state: State) { return 1;} : (state: State) => Generator >state : State return 1; @@ -90,10 +90,10 @@ export const Nothing2: Strategy = strategy("Nothing", function* (state: S export const Nothing3: Strategy = strategy("Nothing", function* (state: State) { >Nothing3 : Strategy ->strategy("Nothing", function* (state: State) { yield state; return 1;}) : any +>strategy("Nothing", function* (state: State) { yield state; return 1;}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function* (state: State) { yield state; return 1;} : (state: State) => IterableIterator +>function* (state: State) { yield state; return 1;} : (state: State) => Generator >state : State yield state; diff --git a/tests/baselines/reference/generatorTypeCheck7.errors.txt b/tests/baselines/reference/generatorTypeCheck7.errors.txt index 96e226fe827..fb17027bf3b 100644 --- a/tests/baselines/reference/generatorTypeCheck7.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck7.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck7.ts(4,17): error TS2741: Property 'hello' is missing in type 'IterableIterator' but required in type 'WeirdIter'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck7.ts(4,17): error TS2741: Property 'hello' is missing in type 'Generator' but required in type 'WeirdIter'. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck7.ts (1 errors) ==== @@ -7,5 +7,5 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck7.ts(4,17): error } function* g1(): WeirdIter { } ~~~~~~~~~ -!!! error TS2741: Property 'hello' is missing in type 'IterableIterator' but required in type 'WeirdIter'. +!!! error TS2741: Property 'hello' is missing in type 'Generator' but required in type 'WeirdIter'. !!! related TS2728 tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck7.ts:2:5: 'hello' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck8.errors.txt b/tests/baselines/reference/generatorTypeCheck8.errors.txt index cedfecda60b..6261d419ddd 100644 --- a/tests/baselines/reference/generatorTypeCheck8.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck8.errors.txt @@ -1,16 +1,20 @@ -tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck8.ts(2,17): error TS2322: Type 'IterableIterator' is not assignable to type 'BadGenerator'. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck8.ts(2,17): error TS2322: Type 'Generator' is not assignable to type 'BadGenerator'. Types of property 'next' are incompatible. - Type '(value?: any) => IteratorResult' is not assignable to type '(value?: any) => IteratorResult'. - Type 'IteratorResult' is not assignable to type 'IteratorResult'. - Type 'string' is not assignable to type 'number'. + Type '(...args: [] | [undefined]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. + Type 'IteratorResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. + Type 'string' is not assignable to type 'number'. ==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck8.ts (1 errors) ==== interface BadGenerator extends Iterator, Iterable { } function* g3(): BadGenerator { } ~~~~~~~~~~~~ -!!! error TS2322: Type 'IterableIterator' is not assignable to type 'BadGenerator'. +!!! error TS2322: Type 'Generator' is not assignable to type 'BadGenerator'. !!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '(value?: any) => IteratorResult' is not assignable to type '(value?: any) => IteratorResult'. -!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. -!!! error TS2322: Type 'string' is not assignable to type 'number'. \ No newline at end of file +!!! error TS2322: Type '(...args: [] | [undefined]) => IteratorResult' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. +!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. \ No newline at end of file diff --git a/tests/baselines/reference/importCallExpressionReturnPromiseOfAny.types b/tests/baselines/reference/importCallExpressionReturnPromiseOfAny.types index f932f2c339d..b5f526adc8e 100644 --- a/tests/baselines/reference/importCallExpressionReturnPromiseOfAny.types +++ b/tests/baselines/reference/importCallExpressionReturnPromiseOfAny.types @@ -93,7 +93,7 @@ var p3: Promise = import(j=getSpecifier()); >getSpecifier : () => string function * loadModule(directories: string[]) { ->loadModule : (directories: string[]) => IterableIterator +>loadModule : (directories: string[]) => Generator >directories : string[] for (const directory of directories) { diff --git a/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types b/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types index cb646e5a15e..da4e9fb704d 100644 --- a/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types +++ b/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types @@ -1,6 +1,6 @@ === tests/cases/compiler/main.ts === export async function * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator await 1; >await 1 : 1 diff --git a/tests/baselines/reference/iteratorSpreadInArray9.errors.txt b/tests/baselines/reference/iteratorSpreadInArray9.errors.txt deleted file mode 100644 index b1278354ba2..00000000000 --- a/tests/baselines/reference/iteratorSpreadInArray9.errors.txt +++ /dev/null @@ -1,32 +0,0 @@ -tests/cases/conformance/es6/spread/iteratorSpreadInArray9.ts(13,17): error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterable'. - Types of property '[Symbol.iterator]' are incompatible. - Type '() => SymbolIterator' is not assignable to type '() => Iterator'. - Type 'SymbolIterator' is not assignable to type 'Iterator'. - Types of property 'next' are incompatible. - Type '() => { value: symbol; }' is not assignable to type '(value?: any) => IteratorResult'. - Property 'done' is missing in type '{ value: symbol; }' but required in type 'IteratorResult'. - - -==== tests/cases/conformance/es6/spread/iteratorSpreadInArray9.ts (1 errors) ==== - class SymbolIterator { - next() { - return { - value: Symbol() - }; - } - - [Symbol.iterator]() { - return this; - } - } - - var array = [...new SymbolIterator]; - ~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterable'. -!!! error TS2322: Types of property '[Symbol.iterator]' are incompatible. -!!! error TS2322: Type '() => SymbolIterator' is not assignable to type '() => Iterator'. -!!! error TS2322: Type 'SymbolIterator' is not assignable to type 'Iterator'. -!!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '() => { value: symbol; }' is not assignable to type '(value?: any) => IteratorResult'. -!!! error TS2322: Property 'done' is missing in type '{ value: symbol; }' but required in type 'IteratorResult'. -!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:32:5: 'done' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/iteratorSpreadInCall12.js b/tests/baselines/reference/iteratorSpreadInCall12.js index ba8149e29d6..10f1a7cf0c7 100644 --- a/tests/baselines/reference/iteratorSpreadInCall12.js +++ b/tests/baselines/reference/iteratorSpreadInCall12.js @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,7 +29,7 @@ class StringIterator { } } -new Foo(...[...new SymbolIterator, ...[...new StringIterator]]); +new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]); //// [iteratorSpreadInCall12.js] class Foo { @@ -46,7 +46,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -57,4 +57,4 @@ class StringIterator { return this; } } -new Foo(...[...new SymbolIterator, ...[...new StringIterator]]); +new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]); diff --git a/tests/baselines/reference/iteratorSpreadInCall12.symbols b/tests/baselines/reference/iteratorSpreadInCall12.symbols index 935f37bef2a..99b4c3a1f32 100644 --- a/tests/baselines/reference/iteratorSpreadInCall12.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall12.symbols @@ -36,11 +36,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall12.ts, 17, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall12.ts, 17, 23)) return { value: "", @@ -53,18 +53,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall12.ts, 23, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall12.ts, 23, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) } } -new Foo(...[...new SymbolIterator, ...[...new StringIterator]]); +new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]); >Foo : Symbol(Foo, Decl(iteratorSpreadInCall12.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall12.ts, 2, 1)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall12.ts, 15, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall12.types b/tests/baselines/reference/iteratorSpreadInCall12.types index 5e3d2f72236..5f0f0a34cce 100644 --- a/tests/baselines/reference/iteratorSpreadInCall12.types +++ b/tests/baselines/reference/iteratorSpreadInCall12.types @@ -38,8 +38,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -69,17 +69,17 @@ class StringIterator { } } -new Foo(...[...new SymbolIterator, ...[...new StringIterator]]); ->new Foo(...[...new SymbolIterator, ...[...new StringIterator]]) : Foo +new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]); +>new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]) : Foo >Foo : typeof Foo ->...[...new SymbolIterator, ...[...new StringIterator]] : string | symbol ->[...new SymbolIterator, ...[...new StringIterator]] : (string | symbol)[] +>...[...new SymbolIterator, ...[...new _StringIterator]] : string | symbol +>[...new SymbolIterator, ...[...new _StringIterator]] : (string | symbol)[] >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...[...new StringIterator] : string ->[...new StringIterator] : string[] ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...[...new _StringIterator] : string +>[...new _StringIterator] : string[] +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/iteratorSpreadInCall5.js b/tests/baselines/reference/iteratorSpreadInCall5.js index b17054363ed..b6c3a5c2cfd 100644 --- a/tests/baselines/reference/iteratorSpreadInCall5.js +++ b/tests/baselines/reference/iteratorSpreadInCall5.js @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,7 +26,7 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); //// [iteratorSpreadInCall5.js] function foo(...s) { } @@ -41,7 +41,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -52,4 +52,4 @@ class StringIterator { return this; } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); diff --git a/tests/baselines/reference/iteratorSpreadInCall5.symbols b/tests/baselines/reference/iteratorSpreadInCall5.symbols index f3be9a28557..a4d55eaf8ce 100644 --- a/tests/baselines/reference/iteratorSpreadInCall5.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall5.symbols @@ -31,11 +31,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall5.ts, 14, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall5.ts, 14, 23)) return { value: "", @@ -48,18 +48,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall5.ts, 20, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall5.ts, 20, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); >foo : Symbol(foo, Decl(iteratorSpreadInCall5.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall5.ts, 0, 43)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall5.ts, 12, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall5.types b/tests/baselines/reference/iteratorSpreadInCall5.types index 5d70581cacb..6120f036645 100644 --- a/tests/baselines/reference/iteratorSpreadInCall5.types +++ b/tests/baselines/reference/iteratorSpreadInCall5.types @@ -35,8 +35,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -66,13 +66,13 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); ->foo(...new SymbolIterator, ...new StringIterator) : void +foo(...new SymbolIterator, ...new _StringIterator); +>foo(...new SymbolIterator, ...new _StringIterator) : void >foo : (...s: (string | symbol)[]) => void >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/iteratorSpreadInCall6.errors.txt b/tests/baselines/reference/iteratorSpreadInCall6.errors.txt index 2c89c7bb493..9a25e387be8 100644 --- a/tests/baselines/reference/iteratorSpreadInCall6.errors.txt +++ b/tests/baselines/reference/iteratorSpreadInCall6.errors.txt @@ -16,7 +16,7 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts(28,28): error TS2345 } } - class StringIterator { + class _StringIterator { next() { return { value: "", @@ -29,6 +29,6 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts(28,28): error TS2345 } } - foo(...new SymbolIterator, ...new StringIterator); - ~~~~~~~~~~~~~~~~~~~~~ + foo(...new SymbolIterator, ...new _StringIterator); + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number | symbol'. \ No newline at end of file diff --git a/tests/baselines/reference/iteratorSpreadInCall6.js b/tests/baselines/reference/iteratorSpreadInCall6.js index 161f420ce0e..cf24c0cddfe 100644 --- a/tests/baselines/reference/iteratorSpreadInCall6.js +++ b/tests/baselines/reference/iteratorSpreadInCall6.js @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,7 +26,7 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); //// [iteratorSpreadInCall6.js] function foo(...s) { } @@ -41,7 +41,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -52,4 +52,4 @@ class StringIterator { return this; } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); diff --git a/tests/baselines/reference/iteratorSpreadInCall6.symbols b/tests/baselines/reference/iteratorSpreadInCall6.symbols index 7eff7628534..b6c02dc570e 100644 --- a/tests/baselines/reference/iteratorSpreadInCall6.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall6.symbols @@ -31,11 +31,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall6.ts, 14, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall6.ts, 14, 23)) return { value: "", @@ -48,18 +48,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall6.ts, 20, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall6.ts, 20, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); >foo : Symbol(foo, Decl(iteratorSpreadInCall6.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall6.ts, 0, 43)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall6.ts, 12, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall6.types b/tests/baselines/reference/iteratorSpreadInCall6.types index 6a040d25e6d..61994603057 100644 --- a/tests/baselines/reference/iteratorSpreadInCall6.types +++ b/tests/baselines/reference/iteratorSpreadInCall6.types @@ -35,8 +35,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -66,13 +66,13 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); ->foo(...new SymbolIterator, ...new StringIterator) : void +foo(...new SymbolIterator, ...new _StringIterator); +>foo(...new SymbolIterator, ...new _StringIterator) : void >foo : (...s: (number | symbol)[]) => void >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/iteratorSpreadInCall7.errors.txt b/tests/baselines/reference/iteratorSpreadInCall7.errors.txt index 5494d1e7070..2cb302849cc 100644 --- a/tests/baselines/reference/iteratorSpreadInCall7.errors.txt +++ b/tests/baselines/reference/iteratorSpreadInCall7.errors.txt @@ -16,7 +16,7 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts(28,28): error TS2345 } } - class StringIterator { + class _StringIterator { next() { return { value: "", @@ -29,6 +29,6 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts(28,28): error TS2345 } } - foo(...new SymbolIterator, ...new StringIterator); - ~~~~~~~~~~~~~~~~~~~~~ + foo(...new SymbolIterator, ...new _StringIterator); + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. \ No newline at end of file diff --git a/tests/baselines/reference/iteratorSpreadInCall7.js b/tests/baselines/reference/iteratorSpreadInCall7.js index e7c354413df..81fceda02a5 100644 --- a/tests/baselines/reference/iteratorSpreadInCall7.js +++ b/tests/baselines/reference/iteratorSpreadInCall7.js @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,7 +26,7 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); //// [iteratorSpreadInCall7.js] function foo(...s) { return s[0]; } @@ -41,7 +41,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -52,4 +52,4 @@ class StringIterator { return this; } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); diff --git a/tests/baselines/reference/iteratorSpreadInCall7.symbols b/tests/baselines/reference/iteratorSpreadInCall7.symbols index 98c93f98b64..2c8e523dc4a 100644 --- a/tests/baselines/reference/iteratorSpreadInCall7.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall7.symbols @@ -34,11 +34,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall7.ts, 14, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall7.ts, 14, 23)) return { value: "", @@ -51,18 +51,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall7.ts, 20, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall7.ts, 20, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) } } -foo(...new SymbolIterator, ...new StringIterator); +foo(...new SymbolIterator, ...new _StringIterator); >foo : Symbol(foo, Decl(iteratorSpreadInCall7.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall7.ts, 0, 43)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall7.ts, 12, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall7.types b/tests/baselines/reference/iteratorSpreadInCall7.types index 2f6f0ff06db..d8f820ca804 100644 --- a/tests/baselines/reference/iteratorSpreadInCall7.types +++ b/tests/baselines/reference/iteratorSpreadInCall7.types @@ -38,8 +38,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -69,13 +69,13 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); ->foo(...new SymbolIterator, ...new StringIterator) : any +foo(...new SymbolIterator, ...new _StringIterator); +>foo(...new SymbolIterator, ...new _StringIterator) : any >foo : (...s: T[]) => T >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/iteratorSpreadInCall8.errors.txt b/tests/baselines/reference/iteratorSpreadInCall8.errors.txt index 73dc6d5185e..03a67c4e0e1 100644 --- a/tests/baselines/reference/iteratorSpreadInCall8.errors.txt +++ b/tests/baselines/reference/iteratorSpreadInCall8.errors.txt @@ -19,7 +19,7 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts(31,32): error TS2345 } } - class StringIterator { + class _StringIterator { next() { return { value: "", @@ -32,6 +32,6 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts(31,32): error TS2345 } } - new Foo(...new SymbolIterator, ...new StringIterator); - ~~~~~~~~~~~~~~~~~~~~~ + new Foo(...new SymbolIterator, ...new _StringIterator); + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. \ No newline at end of file diff --git a/tests/baselines/reference/iteratorSpreadInCall8.js b/tests/baselines/reference/iteratorSpreadInCall8.js index a591fd363ab..7eb5cca25d2 100644 --- a/tests/baselines/reference/iteratorSpreadInCall8.js +++ b/tests/baselines/reference/iteratorSpreadInCall8.js @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,7 +29,7 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...new StringIterator); +new Foo(...new SymbolIterator, ...new _StringIterator); //// [iteratorSpreadInCall8.js] class Foo { @@ -46,7 +46,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -57,4 +57,4 @@ class StringIterator { return this; } } -new Foo(...new SymbolIterator, ...new StringIterator); +new Foo(...new SymbolIterator, ...new _StringIterator); diff --git a/tests/baselines/reference/iteratorSpreadInCall8.symbols b/tests/baselines/reference/iteratorSpreadInCall8.symbols index 7c547419d17..51b7542c22b 100644 --- a/tests/baselines/reference/iteratorSpreadInCall8.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall8.symbols @@ -36,11 +36,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall8.ts, 17, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall8.ts, 17, 23)) return { value: "", @@ -53,18 +53,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall8.ts, 23, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall8.ts, 23, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) } } -new Foo(...new SymbolIterator, ...new StringIterator); +new Foo(...new SymbolIterator, ...new _StringIterator); >Foo : Symbol(Foo, Decl(iteratorSpreadInCall8.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall8.ts, 2, 1)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall8.ts, 15, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall8.types b/tests/baselines/reference/iteratorSpreadInCall8.types index 58f3ea70809..c124a5e8dd7 100644 --- a/tests/baselines/reference/iteratorSpreadInCall8.types +++ b/tests/baselines/reference/iteratorSpreadInCall8.types @@ -38,8 +38,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -69,13 +69,13 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...new StringIterator); ->new Foo(...new SymbolIterator, ...new StringIterator) : any +new Foo(...new SymbolIterator, ...new _StringIterator); +>new Foo(...new SymbolIterator, ...new _StringIterator) : any >Foo : typeof Foo >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/iteratorSpreadInCall9.errors.txt b/tests/baselines/reference/iteratorSpreadInCall9.errors.txt index 773eb2a9fc8..42fd65c1ce7 100644 --- a/tests/baselines/reference/iteratorSpreadInCall9.errors.txt +++ b/tests/baselines/reference/iteratorSpreadInCall9.errors.txt @@ -19,7 +19,7 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts(31,32): error TS2345 } } - class StringIterator { + class _StringIterator { next() { return { value: "", @@ -32,7 +32,7 @@ tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts(31,32): error TS2345 } } - new Foo(...new SymbolIterator, ...[...new StringIterator]); - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + new Foo(...new SymbolIterator, ...[...new _StringIterator]); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. \ No newline at end of file diff --git a/tests/baselines/reference/iteratorSpreadInCall9.js b/tests/baselines/reference/iteratorSpreadInCall9.js index 3f54728fd88..a29f1ec76d2 100644 --- a/tests/baselines/reference/iteratorSpreadInCall9.js +++ b/tests/baselines/reference/iteratorSpreadInCall9.js @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,7 +29,7 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...[...new StringIterator]); +new Foo(...new SymbolIterator, ...[...new _StringIterator]); //// [iteratorSpreadInCall9.js] @@ -47,7 +47,7 @@ class SymbolIterator { return this; } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -58,4 +58,4 @@ class StringIterator { return this; } } -new Foo(...new SymbolIterator, ...[...new StringIterator]); +new Foo(...new SymbolIterator, ...[...new _StringIterator]); diff --git a/tests/baselines/reference/iteratorSpreadInCall9.symbols b/tests/baselines/reference/iteratorSpreadInCall9.symbols index 5db65829f13..79e6515e095 100644 --- a/tests/baselines/reference/iteratorSpreadInCall9.symbols +++ b/tests/baselines/reference/iteratorSpreadInCall9.symbols @@ -36,11 +36,11 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) +class _StringIterator { +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) next() { ->next : Symbol(StringIterator.next, Decl(iteratorSpreadInCall9.ts, 17, 22)) +>next : Symbol(_StringIterator.next, Decl(iteratorSpreadInCall9.ts, 17, 23)) return { value: "", @@ -53,18 +53,18 @@ class StringIterator { } [Symbol.iterator]() { ->[Symbol.iterator] : Symbol(StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall9.ts, 23, 5)) +>[Symbol.iterator] : Symbol(_StringIterator[Symbol.iterator], Decl(iteratorSpreadInCall9.ts, 23, 5)) >Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) return this; ->this : Symbol(StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) +>this : Symbol(_StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) } } -new Foo(...new SymbolIterator, ...[...new StringIterator]); +new Foo(...new SymbolIterator, ...[...new _StringIterator]); >Foo : Symbol(Foo, Decl(iteratorSpreadInCall9.ts, 0, 0)) >SymbolIterator : Symbol(SymbolIterator, Decl(iteratorSpreadInCall9.ts, 2, 1)) ->StringIterator : Symbol(StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) +>_StringIterator : Symbol(_StringIterator, Decl(iteratorSpreadInCall9.ts, 15, 1)) diff --git a/tests/baselines/reference/iteratorSpreadInCall9.types b/tests/baselines/reference/iteratorSpreadInCall9.types index 1118a394bc4..2cc33ea3fdd 100644 --- a/tests/baselines/reference/iteratorSpreadInCall9.types +++ b/tests/baselines/reference/iteratorSpreadInCall9.types @@ -38,8 +38,8 @@ class SymbolIterator { } } -class StringIterator { ->StringIterator : StringIterator +class _StringIterator { +>_StringIterator : _StringIterator next() { >next : () => { value: string; done: boolean; } @@ -69,15 +69,15 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...[...new StringIterator]); ->new Foo(...new SymbolIterator, ...[...new StringIterator]) : any +new Foo(...new SymbolIterator, ...[...new _StringIterator]); +>new Foo(...new SymbolIterator, ...[...new _StringIterator]) : any >Foo : typeof Foo >...new SymbolIterator : symbol >new SymbolIterator : SymbolIterator >SymbolIterator : typeof SymbolIterator ->...[...new StringIterator] : string ->[...new StringIterator] : string[] ->...new StringIterator : string ->new StringIterator : StringIterator ->StringIterator : typeof StringIterator +>...[...new _StringIterator] : string +>[...new _StringIterator] : string[] +>...new _StringIterator : string +>new _StringIterator : _StringIterator +>_StringIterator : typeof _StringIterator diff --git a/tests/baselines/reference/labeledStatementWithLabel.types b/tests/baselines/reference/labeledStatementWithLabel.types index 52ca74ddf19..e5633ab12f3 100644 --- a/tests/baselines/reference/labeledStatementWithLabel.types +++ b/tests/baselines/reference/labeledStatementWithLabel.types @@ -5,7 +5,7 @@ label: function fn() { } label: function* gen() { } >label : any ->gen : () => IterableIterator +>gen : () => Generator label: async function gen1() { } >label : any diff --git a/tests/baselines/reference/labeledStatementWithLabel_es2015.types b/tests/baselines/reference/labeledStatementWithLabel_es2015.types index 570c3c4ad6d..016ab09107c 100644 --- a/tests/baselines/reference/labeledStatementWithLabel_es2015.types +++ b/tests/baselines/reference/labeledStatementWithLabel_es2015.types @@ -5,7 +5,7 @@ label: function fn() { } label: function* gen() { } >label : any ->gen : () => IterableIterator +>gen : () => Generator label: async function gen1() { } >label : any diff --git a/tests/baselines/reference/labeledStatementWithLabel_strict.types b/tests/baselines/reference/labeledStatementWithLabel_strict.types index 9a8a4ef205c..052a8fbe022 100644 --- a/tests/baselines/reference/labeledStatementWithLabel_strict.types +++ b/tests/baselines/reference/labeledStatementWithLabel_strict.types @@ -8,7 +8,7 @@ label: function fn() { } label: function* gen() { } >label : any ->gen : () => IterableIterator +>gen : () => Generator label: async function gen1() { } >label : any diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types index c32e6590156..c9a0476c2ad 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types @@ -51,7 +51,7 @@ Baz.name; // Using ES6 generator function* gen() { ->gen : () => IterableIterator +>gen : () => Generator let i = 0; >i : number @@ -73,7 +73,7 @@ function* gen() { } function* gen2() { ->gen2 : () => IterableIterator +>gen2 : () => Generator let i = 0; >i : number diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types index a8dd60b1f8c..a695213a42c 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types @@ -51,7 +51,7 @@ Baz.name; // Using ES6 generator function* gen() { ->gen : () => IterableIterator +>gen : () => Generator let i = 0; >i : number @@ -73,7 +73,7 @@ function* gen() { } function* gen2() { ->gen2 : () => IterableIterator +>gen2 : () => Generator let i = 0; >i : number diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types index 222c5ab0c11..3e7c23fde87 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types @@ -51,7 +51,7 @@ Baz.name; // Using ES6 generator function* gen() { ->gen : () => IterableIterator +>gen : () => Generator let i = 0; >i : number @@ -73,7 +73,7 @@ function* gen() { } function* gen2() { ->gen2 : () => IterableIterator +>gen2 : () => Generator let i = 0; >i : number diff --git a/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types b/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types index e9213203637..f18184101cf 100644 --- a/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types +++ b/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types @@ -23,7 +23,7 @@ Reflect.ownKeys({}); >{} : {} function* idGen() { ->idGen : () => IterableIterator +>idGen : () => Generator let i = 10; >i : number diff --git a/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types b/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types index 9252c2a22c1..68375a7d679 100644 --- a/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types @@ -3,7 +3,7 @@ class C1 { >C1 : C1 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitMethodNameIsOk.ts === @@ -11,7 +11,7 @@ class C2 { >C2 : C2 async * await() { ->await : () => AsyncIterableIterator +>await : () => AsyncGenerator } } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldMethodNameIsOk.ts === @@ -19,7 +19,7 @@ class C3 { >C3 : C3 async * yield() { ->yield : () => AsyncIterableIterator +>yield : () => AsyncGenerator } } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitParameterIsError.ts === @@ -45,7 +45,7 @@ class C6 { >C6 : C6 async * f(a = await 1) { ->f : (a?: number) => AsyncIterableIterator +>f : (a?: number) => AsyncGenerator >a : number >await 1 : 1 >1 : 1 @@ -56,7 +56,7 @@ class C7 { >C7 : C7 async * f(a = yield) { ->f : (a?: any) => AsyncIterableIterator +>f : (a?: any) => AsyncGenerator >a : any >yield : any } @@ -66,10 +66,10 @@ class C8 { >C8 : C8 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator async function * g() { ->g : () => AsyncIterableIterator +>g : () => AsyncGenerator } } } @@ -78,7 +78,7 @@ class C9 { >C9 : C9 async * f() { ->f : () => AsyncIterableIterator<() => void> +>f : () => AsyncGenerator<() => void, void, unknown> function yield() { > : () => any @@ -92,7 +92,7 @@ class C10 { >C10 : C10 async * f() { ->f : () => AsyncIterableIterator<() => void> +>f : () => AsyncGenerator<() => void, void, unknown> const x = function yield() { >x : () => any @@ -108,7 +108,7 @@ class C11 { >C11 : C11 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator function await() { > : () => any @@ -123,7 +123,7 @@ class C12 { >C12 : C12 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = function await() { >x : () => any @@ -140,7 +140,7 @@ class C13 { >C13 : C13 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield; >yield : any @@ -151,7 +151,7 @@ class C14 { >C14 : C14 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield 1; >yield 1 : any @@ -163,7 +163,7 @@ class C15 { >C15 : C15 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield *; >yield * : any @@ -175,7 +175,7 @@ class C16 { >C16 : C16 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield * []; >yield * [] : any @@ -187,7 +187,7 @@ class C17 { >C17 : C17 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator await 1; >await 1 : 1 @@ -199,7 +199,7 @@ class C18 { >C18 : C18 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator await; >await : any @@ -212,7 +212,7 @@ class C19 { >C19 : C19 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator let x: await; >x : await @@ -224,7 +224,7 @@ class C20 { >C20 : C20 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator let x: yield; >x : yield @@ -235,7 +235,7 @@ class C21 { >C21 : C21 async * [yield]() { ->[yield] : () => AsyncIterableIterator +>[yield] : () => AsyncGenerator >yield : any } } @@ -244,7 +244,7 @@ class C22 { >C22 : C22 async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = { [yield]: 1 }; >x : { [x: number]: number; } diff --git a/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types b/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types index 8804529efd2..08190b40112 100644 --- a/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types @@ -1,49 +1,49 @@ === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/functionDeclarationIsOk.ts === async function * f1() { ->f1 : () => AsyncIterableIterator +>f1 : () => AsyncGenerator } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitNameIsOk.ts === async function * await() { ->await : () => AsyncIterableIterator +>await : () => AsyncGenerator } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldNameIsOk.ts === async function * yield() { ->yield : () => AsyncIterableIterator +>yield : () => AsyncGenerator } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitParameterIsError.ts === async function * f4(await) { >f4 : () => any ->await : () => AsyncIterableIterator +>await : () => AsyncGenerator } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldParameterIsError.ts === async function * f5(yield) { >f5 : () => any ->yield : () => AsyncIterableIterator +>yield : () => AsyncGenerator } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitInParameterInitializerIsError.ts === async function * f6(a = await 1) { ->f6 : (a?: number) => AsyncIterableIterator +>f6 : (a?: number) => AsyncGenerator >a : number >await 1 : 1 >1 : 1 } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInParameterInitializerIsError.ts === async function * f7(a = yield) { ->f7 : (a?: any) => AsyncIterableIterator +>f7 : (a?: any) => AsyncGenerator >a : any >yield : any } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedAsyncGeneratorIsOk.ts === async function * f8() { ->f8 : () => AsyncIterableIterator +>f8 : () => AsyncGenerator async function * g() { ->g : () => AsyncIterableIterator +>g : () => AsyncGenerator } } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedYieldIsError.ts === async function * f9() { ->f9 : () => AsyncIterableIterator<() => void> +>f9 : () => AsyncGenerator<() => void, void, unknown> function yield() { > : () => any @@ -53,7 +53,7 @@ async function * f9() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedYieldIsError.ts === async function * f10() { ->f10 : () => AsyncIterableIterator<() => void> +>f10 : () => AsyncGenerator<() => void, void, unknown> const x = function yield() { >x : () => any @@ -65,7 +65,7 @@ async function * f10() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedAwaitIsError.ts === async function * f11() { ->f11 : () => AsyncIterableIterator +>f11 : () => AsyncGenerator function await() { > : () => any @@ -76,7 +76,7 @@ async function * f11() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedAwaitIsError.ts === async function * f12() { ->f12 : () => AsyncIterableIterator<() => void> +>f12 : () => AsyncGenerator<() => void, void, unknown> const x = function yield() { >x : () => any @@ -88,14 +88,14 @@ async function * f12() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldIsOk.ts === async function * f13() { ->f13 : () => AsyncIterableIterator +>f13 : () => AsyncGenerator yield; >yield : any } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldWithValueIsOk.ts === async function * f14() { ->f14 : () => AsyncIterableIterator +>f14 : () => AsyncGenerator yield 1; >yield 1 : any @@ -103,7 +103,7 @@ async function * f14() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarMissingValueIsError.ts === async function * f15() { ->f15 : () => AsyncIterableIterator +>f15 : () => AsyncGenerator yield *; >yield * : any @@ -111,7 +111,7 @@ async function * f15() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarWithValueIsOk.ts === async function * f16() { ->f16 : () => AsyncIterableIterator +>f16 : () => AsyncGenerator yield * []; >yield * [] : any @@ -119,7 +119,7 @@ async function * f16() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitWithValueIsOk.ts === async function * f17() { ->f17 : () => AsyncIterableIterator +>f17 : () => AsyncGenerator await 1; >await 1 : 1 @@ -127,7 +127,7 @@ async function * f17() { } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitMissingValueIsError.ts === async function * f18() { ->f18 : () => AsyncIterableIterator +>f18 : () => AsyncGenerator await; >await : any @@ -136,7 +136,7 @@ async function * f18() { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitAsTypeIsOk.ts === interface await {} async function * f19() { ->f19 : () => AsyncIterableIterator +>f19 : () => AsyncGenerator let x: await; >x : await @@ -144,14 +144,14 @@ async function * f19() { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldAsTypeIsOk.ts === interface yield {} async function * f20() { ->f20 : () => AsyncIterableIterator +>f20 : () => AsyncGenerator let x: yield; >x : yield } === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInNestedComputedPropertyIsOk.ts === async function * f21() { ->f21 : () => AsyncIterableIterator +>f21 : () => AsyncGenerator const x = { [yield]: 1 }; >x : { [x: number]: number; } diff --git a/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types b/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types index 277b79a3a39..0af07dc220f 100644 --- a/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types @@ -1,8 +1,8 @@ === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/functionExpressionIsOk.ts === const f1 = async function * f() { ->f1 : () => AsyncIterableIterator ->async function * f() {} : () => AsyncIterableIterator ->f : () => AsyncIterableIterator +>f1 : () => AsyncGenerator +>async function * f() {} : () => AsyncGenerator +>f : () => AsyncGenerator }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitNameIsError.ts === @@ -37,8 +37,8 @@ const f5 = async function * (yield) { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitInParameterInitializerIsError.ts === const f6 = async function * (a = await 1) { ->f6 : (a?: number) => AsyncIterableIterator ->async function * (a = await 1) {} : (a?: number) => AsyncIterableIterator +>f6 : (a?: number) => AsyncGenerator +>async function * (a = await 1) {} : (a?: number) => AsyncGenerator >a : number >await 1 : 1 >1 : 1 @@ -46,25 +46,25 @@ const f6 = async function * (a = await 1) { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInParameterInitializerIsError.ts === const f7 = async function * (a = yield) { ->f7 : (a?: any) => AsyncIterableIterator ->async function * (a = yield) {} : (a?: any) => AsyncIterableIterator +>f7 : (a?: any) => AsyncGenerator +>async function * (a = yield) {} : (a?: any) => AsyncGenerator >a : any >yield : any }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedAsyncGeneratorIsOk.ts === const f8 = async function * () { ->f8 : () => AsyncIterableIterator ->async function * () { async function * g() { }} : () => AsyncIterableIterator +>f8 : () => AsyncGenerator +>async function * () { async function * g() { }} : () => AsyncGenerator async function * g() { ->g : () => AsyncIterableIterator +>g : () => AsyncGenerator } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedYieldIsError.ts === const f9 = async function * () { ->f9 : () => AsyncIterableIterator<() => void> ->async function * () { function yield() { }} : () => AsyncIterableIterator<() => void> +>f9 : () => AsyncGenerator<() => void, void, unknown> +>async function * () { function yield() { }} : () => AsyncGenerator<() => void, void, unknown> function yield() { > : () => any @@ -74,8 +74,8 @@ const f9 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedYieldIsError.ts === const f10 = async function * () { ->f10 : () => AsyncIterableIterator<() => void> ->async function * () { const x = function yield() { };} : () => AsyncIterableIterator<() => void> +>f10 : () => AsyncGenerator<() => void, void, unknown> +>async function * () { const x = function yield() { };} : () => AsyncGenerator<() => void, void, unknown> const x = function yield() { >x : () => any @@ -87,8 +87,8 @@ const f10 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedAwaitIsError.ts === const f11 = async function * () { ->f11 : () => AsyncIterableIterator ->async function * () { function await() { }} : () => AsyncIterableIterator +>f11 : () => AsyncGenerator +>async function * () { function await() { }} : () => AsyncGenerator function await() { > : () => any @@ -99,8 +99,8 @@ const f11 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedAwaitIsError.ts === const f12 = async function * () { ->f12 : () => AsyncIterableIterator ->async function * () { const x = function await() { };} : () => AsyncIterableIterator +>f12 : () => AsyncGenerator +>async function * () { const x = function await() { };} : () => AsyncGenerator const x = function await() { >x : () => any @@ -113,8 +113,8 @@ const f12 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldIsOk.ts === const f13 = async function * () { ->f13 : () => AsyncIterableIterator ->async function * () { yield;} : () => AsyncIterableIterator +>f13 : () => AsyncGenerator +>async function * () { yield;} : () => AsyncGenerator yield; >yield : any @@ -122,8 +122,8 @@ const f13 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldWithValueIsOk.ts === const f14 = async function * () { ->f14 : () => AsyncIterableIterator ->async function * () { yield 1;} : () => AsyncIterableIterator +>f14 : () => AsyncGenerator +>async function * () { yield 1;} : () => AsyncGenerator yield 1; >yield 1 : any @@ -132,8 +132,8 @@ const f14 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarMissingValueIsError.ts === const f15 = async function * () { ->f15 : () => AsyncIterableIterator ->async function * () { yield *;} : () => AsyncIterableIterator +>f15 : () => AsyncGenerator +>async function * () { yield *;} : () => AsyncGenerator yield *; >yield * : any @@ -142,8 +142,8 @@ const f15 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarWithValueIsOk.ts === const f16 = async function * () { ->f16 : () => AsyncIterableIterator ->async function * () { yield * [];} : () => AsyncIterableIterator +>f16 : () => AsyncGenerator +>async function * () { yield * [];} : () => AsyncGenerator yield * []; >yield * [] : any @@ -152,8 +152,8 @@ const f16 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitWithValueIsOk.ts === const f17 = async function * () { ->f17 : () => AsyncIterableIterator ->async function * () { await 1;} : () => AsyncIterableIterator +>f17 : () => AsyncGenerator +>async function * () { await 1;} : () => AsyncGenerator await 1; >await 1 : 1 @@ -162,8 +162,8 @@ const f17 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitMissingValueIsError.ts === const f18 = async function * () { ->f18 : () => AsyncIterableIterator ->async function * () { await;} : () => AsyncIterableIterator +>f18 : () => AsyncGenerator +>async function * () { await;} : () => AsyncGenerator await; >await : any @@ -173,8 +173,8 @@ const f18 = async function * () { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitAsTypeIsOk.ts === interface await {} const f19 = async function * () { ->f19 : () => AsyncIterableIterator ->async function * () { let x: await;} : () => AsyncIterableIterator +>f19 : () => AsyncGenerator +>async function * () { let x: await;} : () => AsyncGenerator let x: await; >x : await @@ -183,8 +183,8 @@ const f19 = async function * () { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldAsTypeIsOk.ts === interface yield {} const f20 = async function * () { ->f20 : () => AsyncIterableIterator ->async function * () { let x: yield;} : () => AsyncIterableIterator +>f20 : () => AsyncGenerator +>async function * () { let x: yield;} : () => AsyncGenerator let x: yield; >x : yield @@ -192,8 +192,8 @@ const f20 = async function * () { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInNestedComputedPropertyIsOk.ts === const f21 = async function *() { ->f21 : () => AsyncIterableIterator ->async function *() { const x = { [yield]: 1 };} : () => AsyncIterableIterator +>f21 : () => AsyncGenerator +>async function *() { const x = { [yield]: 1 };} : () => AsyncGenerator const x = { [yield]: 1 }; >x : { [x: number]: number; } diff --git a/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types b/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types index 655ecb3e6a0..5a6ea2a19fb 100644 --- a/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types @@ -1,28 +1,28 @@ === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/methodIsOk.ts === const o1 = { ->o1 : { f(): AsyncIterableIterator; } ->{ async * f() { }} : { f(): AsyncIterableIterator; } +>o1 : { f(): AsyncGenerator; } +>{ async * f() { }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitMethodNameIsOk.ts === const o2 = { ->o2 : { await(): AsyncIterableIterator; } ->{ async * await() { }} : { await(): AsyncIterableIterator; } +>o2 : { await(): AsyncGenerator; } +>{ async * await() { }} : { await(): AsyncGenerator; } async * await() { ->await : () => AsyncIterableIterator +>await : () => AsyncGenerator } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldMethodNameIsOk.ts === const o3 = { ->o3 : { yield(): AsyncIterableIterator; } ->{ async * yield() { }} : { yield(): AsyncIterableIterator; } +>o3 : { yield(): AsyncGenerator; } +>{ async * yield() { }} : { yield(): AsyncGenerator; } async * yield() { ->yield : () => AsyncIterableIterator +>yield : () => AsyncGenerator } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitParameterIsError.ts === @@ -47,11 +47,11 @@ const o5 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitInParameterInitializerIsError.ts === const o6 = { ->o6 : { f(a?: number): AsyncIterableIterator; } ->{ async * f(a = await 1) { }} : { f(a?: number): AsyncIterableIterator; } +>o6 : { f(a?: number): AsyncGenerator; } +>{ async * f(a = await 1) { }} : { f(a?: number): AsyncGenerator; } async * f(a = await 1) { ->f : (a?: number) => AsyncIterableIterator +>f : (a?: number) => AsyncGenerator >a : number >await 1 : 1 >1 : 1 @@ -59,35 +59,35 @@ const o6 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInParameterInitializerIsError.ts === const o7 = { ->o7 : { f(a?: any): AsyncIterableIterator; } ->{ async * f(a = yield) { }} : { f(a?: any): AsyncIterableIterator; } +>o7 : { f(a?: any): AsyncGenerator; } +>{ async * f(a = yield) { }} : { f(a?: any): AsyncGenerator; } async * f(a = yield) { ->f : (a?: any) => AsyncIterableIterator +>f : (a?: any) => AsyncGenerator >a : any >yield : any } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedAsyncGeneratorIsOk.ts === const o8 = { ->o8 : { f(): AsyncIterableIterator; } ->{ async * f() { async function * g() { } }} : { f(): AsyncIterableIterator; } +>o8 : { f(): AsyncGenerator; } +>{ async * f() { async function * g() { } }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator async function * g() { ->g : () => AsyncIterableIterator +>g : () => AsyncGenerator } } }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedYieldIsError.ts === const o9 = { ->o9 : { f(): AsyncIterableIterator<() => void>; } ->{ async * f() { function yield() { } }} : { f(): AsyncIterableIterator<() => void>; } +>o9 : { f(): AsyncGenerator<() => void, void, unknown>; } +>{ async * f() { function yield() { } }} : { f(): AsyncGenerator<() => void, void, unknown>; } async * f() { ->f : () => AsyncIterableIterator<() => void> +>f : () => AsyncGenerator<() => void, void, unknown> function yield() { > : () => any @@ -98,11 +98,11 @@ const o9 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedYieldIsError.ts === const o10 = { ->o10 : { f(): AsyncIterableIterator<() => void>; } ->{ async * f() { const x = function yield() { }; }} : { f(): AsyncIterableIterator<() => void>; } +>o10 : { f(): AsyncGenerator<() => void, void, unknown>; } +>{ async * f() { const x = function yield() { }; }} : { f(): AsyncGenerator<() => void, void, unknown>; } async * f() { ->f : () => AsyncIterableIterator<() => void> +>f : () => AsyncGenerator<() => void, void, unknown> const x = function yield() { >x : () => any @@ -115,11 +115,11 @@ const o10 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionDeclarationNamedAwaitIsError.ts === const o11 = { ->o11 : { f(): AsyncIterableIterator; } ->{ async * f() { function await() { } }} : { f(): AsyncIterableIterator; } +>o11 : { f(): AsyncGenerator; } +>{ async * f() { function await() { } }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator function await() { > : () => any @@ -131,11 +131,11 @@ const o11 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/nestedFunctionExpressionNamedAwaitIsError.ts === const o12 = { ->o12 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = function await() { }; }} : { f(): AsyncIterableIterator; } +>o12 : { f(): AsyncGenerator; } +>{ async * f() { const x = function await() { }; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = function await() { >x : () => any @@ -149,11 +149,11 @@ const o12 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldIsOk.ts === const o13 = { ->o13 : { f(): AsyncIterableIterator; } ->{ async * f() { yield; }} : { f(): AsyncIterableIterator; } +>o13 : { f(): AsyncGenerator; } +>{ async * f() { yield; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield; >yield : any @@ -161,11 +161,11 @@ const o13 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldWithValueIsOk.ts === const o14 = { ->o14 : { f(): AsyncIterableIterator; } ->{ async * f() { yield 1; }} : { f(): AsyncIterableIterator; } +>o14 : { f(): AsyncGenerator; } +>{ async * f() { yield 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield 1; >yield 1 : any @@ -174,11 +174,11 @@ const o14 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarMissingValueIsError.ts === const o15 = { ->o15 : { f(): AsyncIterableIterator; } ->{ async * f() { yield *; }} : { f(): AsyncIterableIterator; } +>o15 : { f(): AsyncGenerator; } +>{ async * f() { yield *; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield *; >yield * : any @@ -187,11 +187,11 @@ const o15 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldStarWithValueIsOk.ts === const o16 = { ->o16 : { f(): AsyncIterableIterator; } ->{ async * f() { yield * []; }} : { f(): AsyncIterableIterator; } +>o16 : { f(): AsyncGenerator; } +>{ async * f() { yield * []; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator yield * []; >yield * [] : any @@ -200,11 +200,11 @@ const o16 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitWithValueIsOk.ts === const o17 = { ->o17 : { f(): AsyncIterableIterator; } ->{ async * f() { await 1; }} : { f(): AsyncIterableIterator; } +>o17 : { f(): AsyncGenerator; } +>{ async * f() { await 1; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator await 1; >await 1 : 1 @@ -213,11 +213,11 @@ const o17 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitMissingValueIsError.ts === const o18 = { ->o18 : { f(): AsyncIterableIterator; } ->{ async * f() { await; }} : { f(): AsyncIterableIterator; } +>o18 : { f(): AsyncGenerator; } +>{ async * f() { await; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator await; >await : any @@ -227,11 +227,11 @@ const o18 = { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/awaitAsTypeIsOk.ts === interface await {} const o19 = { ->o19 : { f(): AsyncIterableIterator; } ->{ async * f() { let x: await; }} : { f(): AsyncIterableIterator; } +>o19 : { f(): AsyncGenerator; } +>{ async * f() { let x: await; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator let x: await; >x : await @@ -240,11 +240,11 @@ const o19 = { === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldAsTypeIsOk.ts === interface yield {} const o20 = { ->o20 : { f(): AsyncIterableIterator; } ->{ async * f() { let x: yield; }} : { f(): AsyncIterableIterator; } +>o20 : { f(): AsyncGenerator; } +>{ async * f() { let x: yield; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator let x: yield; >x : yield @@ -252,11 +252,11 @@ const o20 = { }; === tests/cases/conformance/parser/ecmascript2018/asyncGenerators/yieldInNestedComputedPropertyIsOk.ts === const o21 = { ->o21 : { f(): AsyncIterableIterator; } ->{ async * f() { const x = { [yield]: 1 }; }} : { f(): AsyncIterableIterator; } +>o21 : { f(): AsyncGenerator; } +>{ async * f() { const x = { [yield]: 1 }; }} : { f(): AsyncGenerator; } async * f() { ->f : () => AsyncIterableIterator +>f : () => AsyncGenerator const x = { [yield]: 1 }; >x : { [x: number]: number; } diff --git a/tests/baselines/reference/parser.forAwait.es2018.types b/tests/baselines/reference/parser.forAwait.es2018.types index 672d063883d..ea677dd9739 100644 --- a/tests/baselines/reference/parser.forAwait.es2018.types +++ b/tests/baselines/reference/parser.forAwait.es2018.types @@ -70,7 +70,7 @@ async function f8() { } === tests/cases/conformance/parser/ecmascript2018/forAwait/inAsyncGeneratorWithDeclIsOk.ts === async function* f9() { ->f9 : () => AsyncIterableIterator +>f9 : () => AsyncGenerator let y: any; >y : any @@ -82,7 +82,7 @@ async function* f9() { } === tests/cases/conformance/parser/ecmascript2018/forAwait/inAsyncGeneratorWithExpressionIsOk.ts === async function* f10() { ->f10 : () => AsyncIterableIterator +>f10 : () => AsyncGenerator let x: any, y: any; >x : any @@ -95,7 +95,7 @@ async function* f10() { } === tests/cases/conformance/parser/ecmascript2018/forAwait/inGeneratorWithDeclIsError.ts === function* f11() { ->f11 : () => IterableIterator +>f11 : () => Generator let y: any; >y : any @@ -107,7 +107,7 @@ function* f11() { } === tests/cases/conformance/parser/ecmascript2018/forAwait/inGeneratorWithExprIsError.ts === function* f12() { ->f12 : () => IterableIterator +>f12 : () => Generator let x: any, y: any; >x : any diff --git a/tests/baselines/reference/restParameterInDownlevelGenerator.types b/tests/baselines/reference/restParameterInDownlevelGenerator.types index e0b85e1a0ff..0345af14c23 100644 --- a/tests/baselines/reference/restParameterInDownlevelGenerator.types +++ b/tests/baselines/reference/restParameterInDownlevelGenerator.types @@ -1,7 +1,7 @@ === tests/cases/conformance/generators/restParameterInDownlevelGenerator.ts === // https://github.com/Microsoft/TypeScript/issues/30653 function * mergeStringLists(...strings: string[]) { ->mergeStringLists : (...strings: string[]) => IterableIterator +>mergeStringLists : (...strings: string[]) => Generator >strings : string[] for (var str of strings); diff --git a/tests/baselines/reference/showConfig/Shows tsconfig for single option/strictGeneratorTypes/tsconfig.json b/tests/baselines/reference/showConfig/Shows tsconfig for single option/strictGeneratorTypes/tsconfig.json new file mode 100644 index 00000000000..91f667ef739 --- /dev/null +++ b/tests/baselines/reference/showConfig/Shows tsconfig for single option/strictGeneratorTypes/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "strictGeneratorTypes": true + } +} diff --git a/tests/baselines/reference/sourceMapValidationVarInDownLevelGenerator.types b/tests/baselines/reference/sourceMapValidationVarInDownLevelGenerator.types index cac2f03d8e4..0323d78394d 100644 --- a/tests/baselines/reference/sourceMapValidationVarInDownLevelGenerator.types +++ b/tests/baselines/reference/sourceMapValidationVarInDownLevelGenerator.types @@ -1,6 +1,6 @@ === tests/cases/compiler/sourceMapValidationVarInDownLevelGenerator.ts === function * f() { ->f : () => IterableIterator +>f : () => Generator var x = 1, y; >x : number diff --git a/tests/baselines/reference/spreadOfParamsFromGeneratorMakesRequiredParams.errors.txt b/tests/baselines/reference/spreadOfParamsFromGeneratorMakesRequiredParams.errors.txt index 393e21edb6c..1b1f93ffc3f 100644 --- a/tests/baselines/reference/spreadOfParamsFromGeneratorMakesRequiredParams.errors.txt +++ b/tests/baselines/reference/spreadOfParamsFromGeneratorMakesRequiredParams.errors.txt @@ -1,8 +1,8 @@ -error TS2318: Cannot find global type 'IterableIterator'. +error TS2318: Cannot find global type 'Generator'. tests/cases/compiler/spreadOfParamsFromGeneratorMakesRequiredParams.ts(6,1): error TS2554: Expected 2 arguments, but got 1. -!!! error TS2318: Cannot find global type 'IterableIterator'. +!!! error TS2318: Cannot find global type 'Generator'. ==== tests/cases/compiler/spreadOfParamsFromGeneratorMakesRequiredParams.ts (1 errors) ==== declare function call any>( fn: Fn, diff --git a/tests/baselines/reference/templateStringInYieldKeyword.types b/tests/baselines/reference/templateStringInYieldKeyword.types index 3eff79cf796..71cce7b74eb 100644 --- a/tests/baselines/reference/templateStringInYieldKeyword.types +++ b/tests/baselines/reference/templateStringInYieldKeyword.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/templates/templateStringInYieldKeyword.ts === function* gen() { ->gen : () => IterableIterator +>gen : () => Generator // Once this is supported, the inner expression does not need to be parenthesized. var x = yield `abc${ x }def`; diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt index ce0d781d824..a9699306373 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeyword.errors.txt @@ -1,8 +1,8 @@ -error TS2318: Cannot find global type 'IterableIterator'. +error TS2318: Cannot find global type 'Generator'. tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts(1,15): error TS1005: '(' expected. -!!! error TS2318: Cannot find global type 'IterableIterator'. +!!! error TS2318: Cannot find global type 'Generator'. ==== tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeyword.ts (1 errors) ==== function* gen { ~ diff --git a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types index dfd4e522def..a4226bc3f44 100644 --- a/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types +++ b/tests/baselines/reference/templateStringWithEmbeddedYieldKeywordES6.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/templates/templateStringWithEmbeddedYieldKeywordES6.ts === function* gen() { ->gen : () => IterableIterator +>gen : () => Generator // Once this is supported, yield *must* be parenthesized. var x = `abc${ yield 10 }def`; diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.1.types b/tests/baselines/reference/types.asyncGenerators.es2018.1.types index 0f3b7753313..ad35f2a796f 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.1.types +++ b/tests/baselines/reference/types.asyncGenerators.es2018.1.types @@ -1,22 +1,22 @@ === tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.1.ts === async function * inferReturnType1() { ->inferReturnType1 : () => AsyncIterableIterator +>inferReturnType1 : () => AsyncGenerator } async function * inferReturnType2() { ->inferReturnType2 : () => AsyncIterableIterator +>inferReturnType2 : () => AsyncGenerator yield; >yield : any } async function * inferReturnType3() { ->inferReturnType3 : () => AsyncIterableIterator +>inferReturnType3 : () => AsyncGenerator yield 1; >yield 1 : any >1 : 1 } async function * inferReturnType4() { ->inferReturnType4 : () => AsyncIterableIterator +>inferReturnType4 : () => AsyncGenerator yield Promise.resolve(1); >yield Promise.resolve(1) : any @@ -27,7 +27,7 @@ async function * inferReturnType4() { >1 : 1 } async function * inferReturnType5() { ->inferReturnType5 : () => AsyncIterableIterator +>inferReturnType5 : () => AsyncGenerator yield 1; >yield 1 : any @@ -42,7 +42,7 @@ async function * inferReturnType5() { >2 : 2 } async function * inferReturnType6() { ->inferReturnType6 : () => AsyncIterableIterator +>inferReturnType6 : () => AsyncGenerator yield* [1, 2]; >yield* [1, 2] : any @@ -51,7 +51,7 @@ async function * inferReturnType6() { >2 : 2 } async function * inferReturnType7() { ->inferReturnType7 : () => AsyncIterableIterator +>inferReturnType7 : () => AsyncGenerator yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -63,19 +63,19 @@ async function * inferReturnType7() { >1 : 1 } async function * inferReturnType8() { ->inferReturnType8 : () => AsyncIterableIterator +>inferReturnType8 : () => AsyncGenerator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } const assignability1: () => AsyncIterableIterator = async function * () { >assignability1 : () => AsyncIterableIterator ->async function * () { yield 1;} : () => AsyncIterableIterator +>async function * () { yield 1;} : () => AsyncGenerator yield 1; >yield 1 : any @@ -84,7 +84,7 @@ const assignability1: () => AsyncIterableIterator = async function * () }; const assignability2: () => AsyncIterableIterator = async function * () { >assignability2 : () => AsyncIterableIterator ->async function * () { yield Promise.resolve(1);} : () => AsyncIterableIterator +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator yield Promise.resolve(1); >yield Promise.resolve(1) : any @@ -97,7 +97,7 @@ const assignability2: () => AsyncIterableIterator = async function * () }; const assignability3: () => AsyncIterableIterator = async function * () { >assignability3 : () => AsyncIterableIterator ->async function * () { yield* [1, 2];} : () => AsyncIterableIterator +>async function * () { yield* [1, 2];} : () => AsyncGenerator yield* [1, 2]; >yield* [1, 2] : any @@ -108,7 +108,7 @@ const assignability3: () => AsyncIterableIterator = async function * () }; const assignability4: () => AsyncIterableIterator = async function * () { >assignability4 : () => AsyncIterableIterator ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncIterableIterator +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -122,20 +122,20 @@ const assignability4: () => AsyncIterableIterator = async function * () }; const assignability5: () => AsyncIterableIterator = async function * () { >assignability5 : () => AsyncIterableIterator ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncIterableIterator +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 }; const assignability6: () => AsyncIterable = async function * () { >assignability6 : () => AsyncIterable ->async function * () { yield 1;} : () => AsyncIterableIterator +>async function * () { yield 1;} : () => AsyncGenerator yield 1; >yield 1 : any @@ -144,7 +144,7 @@ const assignability6: () => AsyncIterable = async function * () { }; const assignability7: () => AsyncIterable = async function * () { >assignability7 : () => AsyncIterable ->async function * () { yield Promise.resolve(1);} : () => AsyncIterableIterator +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator yield Promise.resolve(1); >yield Promise.resolve(1) : any @@ -157,7 +157,7 @@ const assignability7: () => AsyncIterable = async function * () { }; const assignability8: () => AsyncIterable = async function * () { >assignability8 : () => AsyncIterable ->async function * () { yield* [1, 2];} : () => AsyncIterableIterator +>async function * () { yield* [1, 2];} : () => AsyncGenerator yield* [1, 2]; >yield* [1, 2] : any @@ -168,7 +168,7 @@ const assignability8: () => AsyncIterable = async function * () { }; const assignability9: () => AsyncIterable = async function * () { >assignability9 : () => AsyncIterable ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncIterableIterator +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -182,20 +182,20 @@ const assignability9: () => AsyncIterable = async function * () { }; const assignability10: () => AsyncIterable = async function * () { >assignability10 : () => AsyncIterable ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncIterableIterator +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 }; const assignability11: () => AsyncIterator = async function * () { ->assignability11 : () => AsyncIterator ->async function * () { yield 1;} : () => AsyncIterableIterator +>assignability11 : () => AsyncIterator +>async function * () { yield 1;} : () => AsyncGenerator yield 1; >yield 1 : any @@ -203,8 +203,8 @@ const assignability11: () => AsyncIterator = async function * () { }; const assignability12: () => AsyncIterator = async function * () { ->assignability12 : () => AsyncIterator ->async function * () { yield Promise.resolve(1);} : () => AsyncIterableIterator +>assignability12 : () => AsyncIterator +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator yield Promise.resolve(1); >yield Promise.resolve(1) : any @@ -216,8 +216,8 @@ const assignability12: () => AsyncIterator = async function * () { }; const assignability13: () => AsyncIterator = async function * () { ->assignability13 : () => AsyncIterator ->async function * () { yield* [1, 2];} : () => AsyncIterableIterator +>assignability13 : () => AsyncIterator +>async function * () { yield* [1, 2];} : () => AsyncGenerator yield* [1, 2]; >yield* [1, 2] : any @@ -227,8 +227,8 @@ const assignability13: () => AsyncIterator = async function * () { }; const assignability14: () => AsyncIterator = async function * () { ->assignability14 : () => AsyncIterator ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncIterableIterator +>assignability14 : () => AsyncIterator +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -241,14 +241,14 @@ const assignability14: () => AsyncIterator = async function * () { }; const assignability15: () => AsyncIterator = async function * () { ->assignability15 : () => AsyncIterator ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncIterableIterator +>assignability15 : () => AsyncIterator +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 @@ -257,14 +257,14 @@ async function * explicitReturnType1(): AsyncIterableIterator { >explicitReturnType1 : () => AsyncIterableIterator yield 1; ->yield 1 : any +>yield 1 : undefined >1 : 1 } async function * explicitReturnType2(): AsyncIterableIterator { >explicitReturnType2 : () => AsyncIterableIterator yield Promise.resolve(1); ->yield Promise.resolve(1) : any +>yield Promise.resolve(1) : undefined >Promise.resolve(1) : Promise >Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } >Promise : PromiseConstructor @@ -296,10 +296,10 @@ async function * explicitReturnType5(): AsyncIterableIterator { >explicitReturnType5 : () => AsyncIterableIterator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } @@ -307,14 +307,14 @@ async function * explicitReturnType6(): AsyncIterable { >explicitReturnType6 : () => AsyncIterable yield 1; ->yield 1 : any +>yield 1 : undefined >1 : 1 } async function * explicitReturnType7(): AsyncIterable { >explicitReturnType7 : () => AsyncIterable yield Promise.resolve(1); ->yield Promise.resolve(1) : any +>yield Promise.resolve(1) : undefined >Promise.resolve(1) : Promise >Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } >Promise : PromiseConstructor @@ -346,25 +346,25 @@ async function * explicitReturnType10(): AsyncIterable { >explicitReturnType10 : () => AsyncIterable yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } async function * explicitReturnType11(): AsyncIterator { ->explicitReturnType11 : () => AsyncIterator +>explicitReturnType11 : () => AsyncIterator yield 1; ->yield 1 : any +>yield 1 : undefined >1 : 1 } async function * explicitReturnType12(): AsyncIterator { ->explicitReturnType12 : () => AsyncIterator +>explicitReturnType12 : () => AsyncIterator yield Promise.resolve(1); ->yield Promise.resolve(1) : any +>yield Promise.resolve(1) : undefined >Promise.resolve(1) : Promise >Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } >Promise : PromiseConstructor @@ -372,7 +372,7 @@ async function * explicitReturnType12(): AsyncIterator { >1 : 1 } async function * explicitReturnType13(): AsyncIterator { ->explicitReturnType13 : () => AsyncIterator +>explicitReturnType13 : () => AsyncIterator yield* [1, 2]; >yield* [1, 2] : any @@ -381,7 +381,7 @@ async function * explicitReturnType13(): AsyncIterator { >2 : 2 } async function * explicitReturnType14(): AsyncIterator { ->explicitReturnType14 : () => AsyncIterator +>explicitReturnType14 : () => AsyncIterator yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -393,13 +393,13 @@ async function * explicitReturnType14(): AsyncIterator { >1 : 1 } async function * explicitReturnType15(): AsyncIterator { ->explicitReturnType15 : () => AsyncIterator +>explicitReturnType15 : () => AsyncIterator yield* (async function * () { yield 1; })(); ->yield* (async function * () { yield 1; })() : any ->(async function * () { yield 1; })() : AsyncIterableIterator ->(async function * () { yield 1; }) : () => AsyncIterableIterator ->async function * () { yield 1; } : () => AsyncIterableIterator +>yield* (async function * () { yield 1; })() : void +>(async function * () { yield 1; })() : AsyncGenerator +>(async function * () { yield 1; }) : () => AsyncGenerator +>async function * () { yield 1; } : () => AsyncGenerator >yield 1 : any >1 : 1 } @@ -411,7 +411,7 @@ async function * explicitReturnType16(): {} { >1 : 1 } async function * awaitedType1() { ->awaitedType1 : () => AsyncIterableIterator +>awaitedType1 : () => AsyncGenerator const x = await 1; >x : 1 @@ -419,7 +419,7 @@ async function * awaitedType1() { >1 : 1 } async function * awaitedType2() { ->awaitedType2 : () => AsyncIterableIterator +>awaitedType2 : () => AsyncGenerator const x = await Promise.resolve(1); >x : number diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt b/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt index 471cf39bed2..c8c4ed39ed7 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt +++ b/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt @@ -1,32 +1,45 @@ tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(2,12): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(8,12): error TS2504: Type 'Promise' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(10,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. - Type 'string' is not assignable to type 'number'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(13,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(16,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(19,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(10,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. + Types of property 'next' are incompatible. + Type '(...args: [] | [unknown]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. + Type 'Promise>' is not assignable to type 'Promise>'. + Type 'IteratorResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. + Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. + Type 'string' is not assignable to type 'number'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(13,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. + Types of property 'next' are incompatible. + Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. + Type 'Promise>' is not assignable to type 'Promise>'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(16,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(19,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. Types of property '[Symbol.asyncIterator]' are incompatible. - Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. + Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. Types of property 'next' are incompatible. - Type '(value?: any) => Promise>' is not assignable to type '(value?: any) => Promise>'. - Type 'Promise>' is not assignable to type 'Promise>'. - Type 'IteratorResult' is not assignable to type 'IteratorResult'. - Type 'string' is not assignable to type 'number'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(22,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(25,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(28,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(31,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(34,7): error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. - Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. + Type '(...args: [] | [unknown]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. + Type 'Promise>' is not assignable to type 'Promise>'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(22,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. + Types of property '[Symbol.asyncIterator]' are incompatible. + Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. + Types of property 'next' are incompatible. + Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. + Type 'Promise>' is not assignable to type 'Promise>'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(25,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(28,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(31,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(34,7): error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. + Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(38,11): error TS2322: Type '"a"' is not assignable to type 'number'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(41,12): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(44,12): error TS2322: Type 'string' is not assignable to type 'number'. @@ -36,12 +49,13 @@ tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts( tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(56,11): error TS2322: Type '"a"' is not assignable to type 'number'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(59,12): error TS2322: Type 'string' is not assignable to type 'number'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(62,12): error TS2322: Type 'string' is not assignable to type 'number'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(64,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncIterableIterator' but required in type 'IterableIterator'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(67,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncIterableIterator' but required in type 'Iterable'. -tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(70,42): error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'Iterator'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(64,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator' but required in type 'IterableIterator'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(67,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator' but required in type 'Iterable'. +tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(70,42): error TS2322: Type 'AsyncGenerator' is not assignable to type 'Iterator'. Types of property 'next' are incompatible. - Type '(value?: any) => Promise>' is not assignable to type '(value?: any) => IteratorResult'. - Type 'Promise>' is missing the following properties from type 'IteratorResult': done, value + Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. + Type 'Promise>' is not assignable to type 'IteratorResult'. + Property 'value' is missing in type 'Promise>' but required in type 'IteratorYieldResult'. tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. @@ -61,65 +75,78 @@ tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts( } const assignability1: () => AsyncIterableIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. -!!! error TS2322: Type 'string' is not assignable to type 'number'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. +!!! error TS2322: Types of property 'next' are incompatible. +!!! error TS2322: Type '(...args: [] | [unknown]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. +!!! error TS2322: Type 'Promise>' is not assignable to type 'Promise>'. +!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorResult'. +!!! error TS2322: Type 'IteratorYieldResult' is not assignable to type 'IteratorYieldResult'. +!!! error TS2322: Type 'string' is not assignable to type 'number'. yield "a"; }; const assignability2: () => AsyncIterableIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. +!!! error TS2322: Types of property 'next' are incompatible. +!!! error TS2322: Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. +!!! error TS2322: Type 'Promise>' is not assignable to type 'Promise>'. yield* ["a", "b"]; }; const assignability3: () => AsyncIterableIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterableIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterableIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterableIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterableIterator'. yield* (async function * () { yield "a"; })(); }; const assignability4: () => AsyncIterable = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. !!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. !!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '(value?: any) => Promise>' is not assignable to type '(value?: any) => Promise>'. -!!! error TS2322: Type 'Promise>' is not assignable to type 'Promise>'. -!!! error TS2322: Type 'IteratorResult' is not assignable to type 'IteratorResult'. -!!! error TS2322: Type 'string' is not assignable to type 'number'. +!!! error TS2322: Type '(...args: [] | [unknown]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. +!!! error TS2322: Type 'Promise>' is not assignable to type 'Promise>'. yield "a"; }; const assignability5: () => AsyncIterable = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Types of property '[Symbol.asyncIterator]' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. +!!! error TS2322: Types of property 'next' are incompatible. +!!! error TS2322: Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [PromiseLike]) => Promise>'. +!!! error TS2322: Type 'Promise>' is not assignable to type 'Promise>'. yield* ["a", "b"]; }; const assignability6: () => AsyncIterable = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterable'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterable'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterable'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterable'. yield* (async function * () { yield "a"; })(); }; const assignability7: () => AsyncIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. yield "a"; }; const assignability8: () => AsyncIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. yield* ["a", "b"]; }; const assignability9: () => AsyncIterator = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncIterableIterator' is not assignable to type '() => AsyncIterator'. -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'AsyncIterator'. +!!! error TS2322: Type '() => AsyncGenerator' is not assignable to type '() => AsyncIterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'AsyncIterator'. yield* (async function * () { yield "a"; })(); }; async function * explicitReturnType1(): AsyncIterableIterator { @@ -169,22 +196,24 @@ tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts( } async function * explicitReturnType10(): IterableIterator { ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncIterableIterator' but required in type 'IterableIterator'. -!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:47:5: '[Symbol.iterator]' is declared here. +!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator' but required in type 'IterableIterator'. +!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:55:5: '[Symbol.iterator]' is declared here. yield 1; } async function * explicitReturnType11(): Iterable { ~~~~~~~~~~~~~~~~ -!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncIterableIterator' but required in type 'Iterable'. -!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:43:5: '[Symbol.iterator]' is declared here. +!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator' but required in type 'Iterable'. +!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:51:5: '[Symbol.iterator]' is declared here. yield 1; } async function * explicitReturnType12(): Iterator { ~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'AsyncIterableIterator' is not assignable to type 'Iterator'. +!!! error TS2322: Type 'AsyncGenerator' is not assignable to type 'Iterator'. !!! error TS2322: Types of property 'next' are incompatible. -!!! error TS2322: Type '(value?: any) => Promise>' is not assignable to type '(value?: any) => IteratorResult'. -!!! error TS2322: Type 'Promise>' is missing the following properties from type 'IteratorResult': done, value +!!! error TS2322: Type '(...args: [] | [PromiseLike]) => Promise>' is not assignable to type '(...args: [] | [undefined]) => IteratorResult'. +!!! error TS2322: Type 'Promise>' is not assignable to type 'IteratorResult'. +!!! error TS2322: Property 'value' is missing in type 'Promise>' but required in type 'IteratorYieldResult'. +!!! related TS2728 /.ts/lib.es2015.iterable.d.ts:33:5: 'value' is declared here. yield 1; } async function * yieldStar() { diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.2.types b/tests/baselines/reference/types.asyncGenerators.es2018.2.types index 6bcc95297a9..23bf7225eb9 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.2.types +++ b/tests/baselines/reference/types.asyncGenerators.es2018.2.types @@ -1,6 +1,6 @@ === tests/cases/conformance/types/asyncGenerators/types.asyncGenerators.es2018.2.ts === async function * inferReturnType1() { ->inferReturnType1 : () => AsyncIterableIterator +>inferReturnType1 : () => AsyncGenerator yield* {}; >yield* {} : any @@ -15,7 +15,7 @@ async function * inferReturnType2() { >inferReturnType2 : () => any } async function * inferReturnType3() { ->inferReturnType3 : () => AsyncIterableIterator +>inferReturnType3 : () => AsyncGenerator yield* Promise.resolve([1, 2]); >yield* Promise.resolve([1, 2]) : any @@ -29,7 +29,7 @@ async function * inferReturnType3() { } const assignability1: () => AsyncIterableIterator = async function * () { >assignability1 : () => AsyncIterableIterator ->async function * () { yield "a";} : () => AsyncIterableIterator +>async function * () { yield "a";} : () => AsyncGenerator yield "a"; >yield "a" : any @@ -38,7 +38,7 @@ const assignability1: () => AsyncIterableIterator = async function * () }; const assignability2: () => AsyncIterableIterator = async function * () { >assignability2 : () => AsyncIterableIterator ->async function * () { yield* ["a", "b"];} : () => AsyncIterableIterator +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -49,20 +49,20 @@ const assignability2: () => AsyncIterableIterator = async function * () }; const assignability3: () => AsyncIterableIterator = async function * () { >assignability3 : () => AsyncIterableIterator ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncIterableIterator +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" }; const assignability4: () => AsyncIterable = async function * () { >assignability4 : () => AsyncIterable ->async function * () { yield "a";} : () => AsyncIterableIterator +>async function * () { yield "a";} : () => AsyncGenerator yield "a"; >yield "a" : any @@ -71,7 +71,7 @@ const assignability4: () => AsyncIterable = async function * () { }; const assignability5: () => AsyncIterable = async function * () { >assignability5 : () => AsyncIterable ->async function * () { yield* ["a", "b"];} : () => AsyncIterableIterator +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -82,20 +82,20 @@ const assignability5: () => AsyncIterable = async function * () { }; const assignability6: () => AsyncIterable = async function * () { >assignability6 : () => AsyncIterable ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncIterableIterator +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" }; const assignability7: () => AsyncIterator = async function * () { ->assignability7 : () => AsyncIterator ->async function * () { yield "a";} : () => AsyncIterableIterator +>assignability7 : () => AsyncIterator +>async function * () { yield "a";} : () => AsyncGenerator yield "a"; >yield "a" : any @@ -103,8 +103,8 @@ const assignability7: () => AsyncIterator = async function * () { }; const assignability8: () => AsyncIterator = async function * () { ->assignability8 : () => AsyncIterator ->async function * () { yield* ["a", "b"];} : () => AsyncIterableIterator +>assignability8 : () => AsyncIterator +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -114,14 +114,14 @@ const assignability8: () => AsyncIterator = async function * () { }; const assignability9: () => AsyncIterator = async function * () { ->assignability9 : () => AsyncIterator ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncIterableIterator +>assignability9 : () => AsyncIterator +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" @@ -130,7 +130,7 @@ async function * explicitReturnType1(): AsyncIterableIterator { >explicitReturnType1 : () => AsyncIterableIterator yield "a"; ->yield "a" : any +>yield "a" : undefined >"a" : "a" } async function * explicitReturnType2(): AsyncIterableIterator { @@ -146,10 +146,10 @@ async function * explicitReturnType3(): AsyncIterableIterator { >explicitReturnType3 : () => AsyncIterableIterator yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" } @@ -157,7 +157,7 @@ async function * explicitReturnType4(): AsyncIterable { >explicitReturnType4 : () => AsyncIterable yield "a"; ->yield "a" : any +>yield "a" : undefined >"a" : "a" } async function * explicitReturnType5(): AsyncIterable { @@ -173,22 +173,22 @@ async function * explicitReturnType6(): AsyncIterable { >explicitReturnType6 : () => AsyncIterable yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" } async function * explicitReturnType7(): AsyncIterator { ->explicitReturnType7 : () => AsyncIterator +>explicitReturnType7 : () => AsyncIterator yield "a"; ->yield "a" : any +>yield "a" : undefined >"a" : "a" } async function * explicitReturnType8(): AsyncIterator { ->explicitReturnType8 : () => AsyncIterator +>explicitReturnType8 : () => AsyncIterator yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -197,13 +197,13 @@ async function * explicitReturnType8(): AsyncIterator { >"b" : "b" } async function * explicitReturnType9(): AsyncIterator { ->explicitReturnType9 : () => AsyncIterator +>explicitReturnType9 : () => AsyncIterator yield* (async function * () { yield "a"; })(); ->yield* (async function * () { yield "a"; })() : any ->(async function * () { yield "a"; })() : AsyncIterableIterator ->(async function * () { yield "a"; }) : () => AsyncIterableIterator ->async function * () { yield "a"; } : () => AsyncIterableIterator +>yield* (async function * () { yield "a"; })() : void +>(async function * () { yield "a"; })() : AsyncGenerator +>(async function * () { yield "a"; }) : () => AsyncGenerator +>async function * () { yield "a"; } : () => AsyncGenerator >yield "a" : any >"a" : "a" } @@ -211,7 +211,7 @@ async function * explicitReturnType10(): IterableIterator { >explicitReturnType10 : () => IterableIterator yield 1; ->yield 1 : any +>yield 1 : undefined >1 : 1 } async function * explicitReturnType11(): Iterable { @@ -222,14 +222,14 @@ async function * explicitReturnType11(): Iterable { >1 : 1 } async function * explicitReturnType12(): Iterator { ->explicitReturnType12 : () => Iterator +>explicitReturnType12 : () => Iterator yield 1; ->yield 1 : any +>yield 1 : undefined >1 : 1 } async function * yieldStar() { ->yieldStar : () => AsyncIterableIterator +>yieldStar : () => AsyncGenerator yield* {}; >yield* {} : any diff --git a/tests/baselines/reference/types.forAwait.es2018.1.types b/tests/baselines/reference/types.forAwait.es2018.1.types index aa1035b87cb..a606238658c 100644 --- a/tests/baselines/reference/types.forAwait.es2018.1.types +++ b/tests/baselines/reference/types.forAwait.es2018.1.types @@ -40,7 +40,7 @@ async function f1() { } } async function * f2() { ->f2 : () => AsyncIterableIterator +>f2 : () => AsyncGenerator let y: number; >y : number diff --git a/tests/baselines/reference/types.forAwait.es2018.3.errors.txt b/tests/baselines/reference/types.forAwait.es2018.3.errors.txt index 296ac0d066b..1aca869fb0c 100644 --- a/tests/baselines/reference/types.forAwait.es2018.3.errors.txt +++ b/tests/baselines/reference/types.forAwait.es2018.3.errors.txt @@ -1,11 +1,11 @@ -error TS2318: Cannot find global type 'AsyncIterableIterator'. +error TS2318: Cannot find global type 'AsyncGenerator'. tests/cases/conformance/types/forAwait/types.forAwait.es2018.3.ts(3,27): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. tests/cases/conformance/types/forAwait/types.forAwait.es2018.3.ts(5,21): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. tests/cases/conformance/types/forAwait/types.forAwait.es2018.3.ts(10,27): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. tests/cases/conformance/types/forAwait/types.forAwait.es2018.3.ts(12,21): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -!!! error TS2318: Cannot find global type 'AsyncIterableIterator'. +!!! error TS2318: Cannot find global type 'AsyncGenerator'. ==== tests/cases/conformance/types/forAwait/types.forAwait.es2018.3.ts (4 errors) ==== async function f1() { let y: number; diff --git a/tests/baselines/reference/uniqueSymbols.types b/tests/baselines/reference/uniqueSymbols.types index 9ee3be1cb28..da2f9895218 100644 --- a/tests/baselines/reference/uniqueSymbols.types +++ b/tests/baselines/reference/uniqueSymbols.types @@ -113,17 +113,17 @@ function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall // generator function yield inference function* genFuncYieldConstCall() { yield constCall; } ->genFuncYieldConstCall : () => IterableIterator +>genFuncYieldConstCall : () => Generator >yield constCall : any >constCall : unique symbol function* genFuncYieldLetCall() { yield letCall; } ->genFuncYieldLetCall : () => IterableIterator +>genFuncYieldLetCall : () => Generator >yield letCall : any >letCall : symbol function* genFuncYieldVarCall() { yield varCall; } ->genFuncYieldVarCall : () => IterableIterator +>genFuncYieldVarCall : () => Generator >yield varCall : any >varCall : symbol @@ -131,7 +131,7 @@ function* genFuncYieldVarCall() { yield varCall; } function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } >genFuncYieldConstCallWithTypeQuery : () => IterableIterator >constCall : unique symbol ->yield constCall : any +>yield constCall : undefined >constCall : unique symbol // async function return inference @@ -149,17 +149,17 @@ async function asyncFuncReturnVarCall() { return varCall; } // async generator function yield inference async function* asyncGenFuncYieldConstCall() { yield constCall; } ->asyncGenFuncYieldConstCall : () => AsyncIterableIterator +>asyncGenFuncYieldConstCall : () => AsyncGenerator >yield constCall : any >constCall : unique symbol async function* asyncGenFuncYieldLetCall() { yield letCall; } ->asyncGenFuncYieldLetCall : () => AsyncIterableIterator +>asyncGenFuncYieldLetCall : () => AsyncGenerator >yield letCall : any >letCall : symbol async function* asyncGenFuncYieldVarCall() { yield varCall; } ->asyncGenFuncYieldVarCall : () => AsyncIterableIterator +>asyncGenFuncYieldVarCall : () => AsyncGenerator >yield varCall : any >varCall : symbol @@ -484,8 +484,8 @@ f(N["s"]); // property assignments/methods const o2 = { ->o2 : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: symbol): symbol; } ->{ a: s, b: N.s, c: N["s"], method1() { return s; }, async method2() { return s; }, async * method3() { yield s; }, * method4() { yield s; }, method5(p = s) { return p; },} : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: symbol): symbol; } +>o2 : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: symbol): symbol; } +>{ a: s, b: N.s, c: N["s"], method1() { return s; }, async method2() { return s; }, async * method3() { yield s; }, * method4() { yield s; }, method5(p = s) { return p; },} : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: symbol): symbol; } a: s, >a : symbol @@ -512,12 +512,12 @@ const o2 = { >s : unique symbol async * method3() { yield s; }, ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator >yield s : any >s : unique symbol * method4() { yield s; }, ->method4 : () => IterableIterator +>method4 : () => Generator >yield s : any >s : unique symbol @@ -606,12 +606,12 @@ class C0 { >s : unique symbol async * method3() { yield s; } ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator >yield s : any >s : unique symbol * method4() { yield s; } ->method4 : () => IterableIterator +>method4 : () => Generator >yield s : any >s : unique symbol @@ -819,7 +819,7 @@ interface Context { const o3: Context = { >o3 : Context ->{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; },} : { method1(): unique symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: unique symbol): unique symbol; } +>{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; },} : { method1(): unique symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: unique symbol): unique symbol; } method1() { >method1 : () => unique symbol @@ -836,7 +836,7 @@ const o3: Context = { }, async * method3() { ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator yield s; // yield type should not widen due to contextual type >yield s : any @@ -844,7 +844,7 @@ const o3: Context = { }, * method4() { ->method4 : () => IterableIterator +>method4 : () => Generator yield s; // yield type should not widen due to contextual type >yield s : any diff --git a/tests/baselines/reference/uniqueSymbolsDeclarations.js b/tests/baselines/reference/uniqueSymbolsDeclarations.js index 02a692aa9ff..15342a0bd97 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarations.js +++ b/tests/baselines/reference/uniqueSymbolsDeclarations.js @@ -430,16 +430,16 @@ declare function funcReturnConstCall(): symbol; declare function funcReturnLetCall(): symbol; declare function funcReturnVarCall(): symbol; declare function funcReturnConstCallWithTypeQuery(): typeof constCall; -declare function genFuncYieldConstCall(): IterableIterator; -declare function genFuncYieldLetCall(): IterableIterator; -declare function genFuncYieldVarCall(): IterableIterator; +declare function genFuncYieldConstCall(): Generator; +declare function genFuncYieldLetCall(): Generator; +declare function genFuncYieldVarCall(): Generator; declare function genFuncYieldConstCallWithTypeQuery(): IterableIterator; declare function asyncFuncReturnConstCall(): Promise; declare function asyncFuncReturnLetCall(): Promise; declare function asyncFuncReturnVarCall(): Promise; -declare function asyncGenFuncYieldConstCall(): AsyncIterableIterator; -declare function asyncGenFuncYieldLetCall(): AsyncIterableIterator; -declare function asyncGenFuncYieldVarCall(): AsyncIterableIterator; +declare function asyncGenFuncYieldConstCall(): AsyncGenerator; +declare function asyncGenFuncYieldLetCall(): AsyncGenerator; +declare function asyncGenFuncYieldVarCall(): AsyncGenerator; declare class C { static readonly readonlyStaticCall: unique symbol; static readonly readonlyStaticType: unique symbol; @@ -502,8 +502,8 @@ declare const o2: { c: symbol; method1(): symbol; method2(): Promise; - method3(): AsyncIterableIterator; - method4(): IterableIterator; + method3(): AsyncGenerator; + method4(): Generator; method5(p?: symbol): symbol; }; declare class C0 { @@ -521,8 +521,8 @@ declare class C0 { f: symbol; method1(): symbol; method2(): Promise; - method3(): AsyncIterableIterator; - method4(): IterableIterator; + method3(): AsyncGenerator; + method4(): Generator; method5(p?: symbol): symbol; } declare class C1 { diff --git a/tests/baselines/reference/uniqueSymbolsDeclarations.types b/tests/baselines/reference/uniqueSymbolsDeclarations.types index a741802e83f..b8c32385f4b 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarations.types +++ b/tests/baselines/reference/uniqueSymbolsDeclarations.types @@ -106,17 +106,17 @@ function funcReturnConstCallWithTypeQuery(): typeof constCall { return constCall // generator function yield inference function* genFuncYieldConstCall() { yield constCall; } ->genFuncYieldConstCall : () => IterableIterator +>genFuncYieldConstCall : () => Generator >yield constCall : any >constCall : unique symbol function* genFuncYieldLetCall() { yield letCall; } ->genFuncYieldLetCall : () => IterableIterator +>genFuncYieldLetCall : () => Generator >yield letCall : any >letCall : symbol function* genFuncYieldVarCall() { yield varCall; } ->genFuncYieldVarCall : () => IterableIterator +>genFuncYieldVarCall : () => Generator >yield varCall : any >varCall : symbol @@ -124,7 +124,7 @@ function* genFuncYieldVarCall() { yield varCall; } function* genFuncYieldConstCallWithTypeQuery(): IterableIterator { yield constCall; } >genFuncYieldConstCallWithTypeQuery : () => IterableIterator >constCall : unique symbol ->yield constCall : any +>yield constCall : undefined >constCall : unique symbol // async function return inference @@ -142,17 +142,17 @@ async function asyncFuncReturnVarCall() { return varCall; } // async generator function yield inference async function* asyncGenFuncYieldConstCall() { yield constCall; } ->asyncGenFuncYieldConstCall : () => AsyncIterableIterator +>asyncGenFuncYieldConstCall : () => AsyncGenerator >yield constCall : any >constCall : unique symbol async function* asyncGenFuncYieldLetCall() { yield letCall; } ->asyncGenFuncYieldLetCall : () => AsyncIterableIterator +>asyncGenFuncYieldLetCall : () => AsyncGenerator >yield letCall : any >letCall : symbol async function* asyncGenFuncYieldVarCall() { yield varCall; } ->asyncGenFuncYieldVarCall : () => AsyncIterableIterator +>asyncGenFuncYieldVarCall : () => AsyncGenerator >yield varCall : any >varCall : symbol @@ -477,8 +477,8 @@ f(N["s"]); // property assignments/methods const o2 = { ->o2 : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: symbol): symbol; } ->{ a: s, b: N.s, c: N["s"], method1() { return s; }, async method2() { return s; }, async * method3() { yield s; }, * method4() { yield s; }, method5(p = s) { return p; }} : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: symbol): symbol; } +>o2 : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: symbol): symbol; } +>{ a: s, b: N.s, c: N["s"], method1() { return s; }, async method2() { return s; }, async * method3() { yield s; }, * method4() { yield s; }, method5(p = s) { return p; }} : { a: symbol; b: symbol; c: symbol; method1(): symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: symbol): symbol; } a: s, >a : symbol @@ -505,12 +505,12 @@ const o2 = { >s : unique symbol async * method3() { yield s; }, ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator >yield s : any >s : unique symbol * method4() { yield s; }, ->method4 : () => IterableIterator +>method4 : () => Generator >yield s : any >s : unique symbol @@ -599,12 +599,12 @@ class C0 { >s : unique symbol async * method3() { yield s; } ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator >yield s : any >s : unique symbol * method4() { yield s; } ->method4 : () => IterableIterator +>method4 : () => Generator >yield s : any >s : unique symbol @@ -812,7 +812,7 @@ interface Context { const o4: Context = { >o4 : Context ->{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; }} : { method1(): unique symbol; method2(): Promise; method3(): AsyncIterableIterator; method4(): IterableIterator; method5(p?: unique symbol): unique symbol; } +>{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; }} : { method1(): unique symbol; method2(): Promise; method3(): AsyncGenerator; method4(): Generator; method5(p?: unique symbol): unique symbol; } method1() { >method1 : () => unique symbol @@ -829,7 +829,7 @@ const o4: Context = { }, async * method3() { ->method3 : () => AsyncIterableIterator +>method3 : () => AsyncGenerator yield s; // yield type should not widen due to contextual type >yield s : any @@ -837,7 +837,7 @@ const o4: Context = { }, * method4() { ->method4 : () => IterableIterator +>method4 : () => Generator yield s; // yield type should not widen due to contextual type >yield s : any diff --git a/tests/baselines/reference/yieldExpression1.types b/tests/baselines/reference/yieldExpression1.types index 5f7a1c2f69b..3e2510229e0 100644 --- a/tests/baselines/reference/yieldExpression1.types +++ b/tests/baselines/reference/yieldExpression1.types @@ -1,6 +1,6 @@ === tests/cases/compiler/yieldExpression1.ts === function* a() { ->a : () => IterableIterator<0 | undefined> +>a : () => Generator<0 | undefined, void, unknown> yield; >yield : any @@ -14,10 +14,10 @@ function* b(): IterableIterator { >b : () => IterableIterator yield; ->yield : any +>yield : undefined yield 0; ->yield 0 : any +>yield 0 : undefined >0 : 0 } diff --git a/tests/baselines/reference/yieldExpressionInControlFlow.types b/tests/baselines/reference/yieldExpressionInControlFlow.types index 14650ef0582..8e2a3dc76f5 100644 --- a/tests/baselines/reference/yieldExpressionInControlFlow.types +++ b/tests/baselines/reference/yieldExpressionInControlFlow.types @@ -1,6 +1,6 @@ === tests/cases/conformance/es6/yieldExpressions/bug25149.js === function* f() { ->f : () => IterableIterator +>f : () => Generator var o >o : any @@ -19,7 +19,7 @@ function* f() { === tests/cases/conformance/es6/yieldExpressions/alsoFails.ts === // fails in Typescript too function* g() { ->g : () => IterableIterator +>g : () => Generator var o = [] >o : any[] diff --git a/tests/baselines/reference/yieldExpressionInFlowLoop.types b/tests/baselines/reference/yieldExpressionInFlowLoop.types index a178d4b5ce7..9af0ffd5901 100644 --- a/tests/baselines/reference/yieldExpressionInFlowLoop.types +++ b/tests/baselines/reference/yieldExpressionInFlowLoop.types @@ -1,6 +1,6 @@ === tests/cases/compiler/yieldExpressionInFlowLoop.ts === function* f() { ->f : () => IterableIterator +>f : () => Generator let result; >result : any diff --git a/tests/baselines/reference/yieldExpressionInnerCommentEmit.types b/tests/baselines/reference/yieldExpressionInnerCommentEmit.types index d6d384712f7..3c0aec3fdd5 100644 --- a/tests/baselines/reference/yieldExpressionInnerCommentEmit.types +++ b/tests/baselines/reference/yieldExpressionInnerCommentEmit.types @@ -1,6 +1,6 @@ === tests/cases/compiler/yieldExpressionInnerCommentEmit.ts === function * foo2() { ->foo2 : () => IterableIterator +>foo2 : () => Generator /*comment1*/ yield 1; >yield 1 : any diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of30.ts b/tests/cases/conformance/es6/for-ofStatements/for-of30.ts index 67e1e3da70a..3d8ac3a93af 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of30.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of30.ts @@ -6,9 +6,9 @@ class StringIterator { value: "" } } - + return = 0; - + [Symbol.iterator]() { return this; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of31.ts b/tests/cases/conformance/es6/for-ofStatements/for-of31.ts index 701fcb50ed0..1e8d7e10630 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of31.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of31.ts @@ -6,7 +6,7 @@ class StringIterator { value: "" } } - + [Symbol.iterator]() { return this; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of34.ts b/tests/cases/conformance/es6/for-ofStatements/for-of34.ts index 63b88223996..b38a6a68bf6 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of34.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of34.ts @@ -4,7 +4,7 @@ class StringIterator { next() { return v; } - + [Symbol.iterator]() { return this; } diff --git a/tests/cases/conformance/es6/for-ofStatements/for-of35.ts b/tests/cases/conformance/es6/for-ofStatements/for-of35.ts index ab6e26d6d60..041f611699e 100644 --- a/tests/cases/conformance/es6/for-ofStatements/for-of35.ts +++ b/tests/cases/conformance/es6/for-ofStatements/for-of35.ts @@ -7,7 +7,7 @@ class StringIterator { value: v } } - + [Symbol.iterator]() { return this; } diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall12.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall12.ts index 06bceec84f5..d34f3b3b164 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall12.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall12.ts @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,4 +29,4 @@ class StringIterator { } } -new Foo(...[...new SymbolIterator, ...[...new StringIterator]]); \ No newline at end of file +new Foo(...[...new SymbolIterator, ...[...new _StringIterator]]); \ No newline at end of file diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall5.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall5.ts index 53b0e660379..0bc67491e94 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall5.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall5.ts @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,4 +26,4 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); \ No newline at end of file +foo(...new SymbolIterator, ...new _StringIterator); \ No newline at end of file diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts index c48260e97ea..d5a49882e45 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall6.ts @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,4 +26,4 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); \ No newline at end of file +foo(...new SymbolIterator, ...new _StringIterator); \ No newline at end of file diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts index 6893cd9d8a4..be057412abd 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall7.ts @@ -13,7 +13,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -26,4 +26,4 @@ class StringIterator { } } -foo(...new SymbolIterator, ...new StringIterator); \ No newline at end of file +foo(...new SymbolIterator, ...new _StringIterator); \ No newline at end of file diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts index c81a475d7de..9f84a5b2bde 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall8.ts @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,4 +29,4 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...new StringIterator); \ No newline at end of file +new Foo(...new SymbolIterator, ...new _StringIterator); \ No newline at end of file diff --git a/tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts b/tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts index 41ee21a5645..7f3f02eafb3 100644 --- a/tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts +++ b/tests/cases/conformance/es6/spread/iteratorSpreadInCall9.ts @@ -16,7 +16,7 @@ class SymbolIterator { } } -class StringIterator { +class _StringIterator { next() { return { value: "", @@ -29,4 +29,4 @@ class StringIterator { } } -new Foo(...new SymbolIterator, ...[...new StringIterator]); +new Foo(...new SymbolIterator, ...[...new _StringIterator]); diff --git a/tests/cases/conformance/generators/generatorAssignability.ts b/tests/cases/conformance/generators/generatorAssignability.ts new file mode 100644 index 00000000000..8dfa7f7d8cf --- /dev/null +++ b/tests/cases/conformance/generators/generatorAssignability.ts @@ -0,0 +1,73 @@ +// @target: esnext +// @strict: true +// @noEmit: true + +declare let _: any; +declare const g1: Generator; +declare const g2: Generator; +declare const g3: Generator; +declare const g4: AsyncGenerator; +declare const g5: AsyncGenerator; +declare const g6: AsyncGenerator; + +// spread iterable +[...g1]; // error +[...g2]; // ok + +// binding pattern over iterable +let [x1] = g1; // error +let [x2] = g2; // ok + +// binding rest pattern over iterable +let [...y1] = g1; // error +let [...y2] = g2; // ok + +// assignment pattern over iterable +[_] = g1; // error +[_] = g2; // ok + +// assignment rest pattern over iterable +[..._] = g1; // error +[..._] = g2; // ok + +// for-of over iterable +for (_ of g1); // error +for (_ of g2); // ok + +async function asyncfn() { + // for-await-of over iterable + for await (_ of g1); // error + for await (_ of g2); // ok + + // for-await-of over asynciterable + for await (_ of g4); // error + for await (_ of g5); // ok +} + +function* f1(): Generator { + // yield* over iterable + yield* g1; // error + yield* g3; // ok +} + +async function* f2(): AsyncGenerator { + // yield* over iterable + yield* g1; // error + yield* g3; // ok + + // yield* over asynciterable + yield* g4; // error + yield* g6; // ok +} + +async function f3() { + const syncGenerator = function*() { + yield 1; + yield 2; + }; + + const o = {[Symbol.asyncIterator]: syncGenerator}; + + for await (const x of o) { + } +} diff --git a/tests/cases/conformance/generators/generatorExplicitReturnType.ts b/tests/cases/conformance/generators/generatorExplicitReturnType.ts new file mode 100644 index 00000000000..affcc011467 --- /dev/null +++ b/tests/cases/conformance/generators/generatorExplicitReturnType.ts @@ -0,0 +1,28 @@ +// @target: esnext +// @strictNullChecks: true +// @noImplicitReturns: true +// @noImplicitAny: true + +function* g1(): Generator { + yield; // error + yield "a"; // error + const x: number = yield 1; // error + return 10; // error +} + +function* g2(): Generator { + const x = yield 1; + return true; +} + +declare const generator: Generator; + +function* g3(): Generator { + const x: number = yield* generator; // error + return true; +} + +function* g4(): Generator { + const x = yield* generator; + return true; +} \ No newline at end of file diff --git a/tests/cases/conformance/generators/generatorImplicitAny.ts b/tests/cases/conformance/generators/generatorImplicitAny.ts new file mode 100644 index 00000000000..441107defe5 --- /dev/null +++ b/tests/cases/conformance/generators/generatorImplicitAny.ts @@ -0,0 +1,6 @@ +// @target: esnext +// @strictNullChecks: true +// @noImplicitReturns: true +// @noImplicitAny: true + +function* g() {} \ No newline at end of file diff --git a/tests/cases/conformance/generators/generatorReturnTypeInference.ts b/tests/cases/conformance/generators/generatorReturnTypeInference.ts new file mode 100644 index 00000000000..30d35cebd77 --- /dev/null +++ b/tests/cases/conformance/generators/generatorReturnTypeInference.ts @@ -0,0 +1,137 @@ +// @target: esnext +// @strictNullChecks: true +// @noImplicitReturns: true +// @noImplicitAny: true + +declare const iterableIterator: IterableIterator; +declare const generator: Generator; +declare const never: never; + +function* g000() { // Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator + yield; +} + +function* g002() { // Generator + yield 1; +} + +function* g003() { // Generator + yield* []; +} + +function* g004() { // Generator + yield* iterableIterator; +} + +function* g005() { // Generator + const x = yield* generator; +} + +function* g006() { // Generator<1 | 2, void, unknown> + yield 1; + yield 2; +} + +function* g007() { // Generator + yield never; +} + +// 'return' iteration type inference +function* g102() { // Generator + return 1; +} + +function* g103() { // Generator + if (Math.random()) return 1; + return 2; +} + +function* g104() { // Generator + return never; +} + +// 'next' iteration type inference +function* g201() { // Generator + let a: string = yield 1; +} + +function* g202() { // Generator<1 | 2, void, never> + let a: string = yield 1; + let b: number = yield 2; +} + +declare function f1(x: string): void; +declare function f1(x: number): void; + +function* g203() { // Generator + const x = f1(yield 1); +} + +declare function f2(x: T): T; + +function* g204() { // Generator + const x = f2(yield 1); +} + +// mixed iteration types inference + +function* g301() { // Generator + yield; + return; +} + +function* g302() { // Generator + yield 1; + return; +} + +function* g303() { // Generator + yield; + return "a"; +} + +function* g304() { // Generator + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> + if (Math.random()) yield 1; + yield 2; + if (Math.random()) return "a"; + return "b"; +} + +function* g306() { // Generator + const a: "hi" = yield 1; + return true; +} + +function* g307() { // Generator + const a: T = yield 0; + return a; +} + +function* g308(x: T) { // Generator + const a: T = yield x; + return a; +} + +function* g309(x: T, y: U) { // Generator + const a: V = yield x; + return y; +} + +function* g310() { // Generator + const [a = 1, b = 2] = yield; +} + +function* g311() { // Generator + yield* (function*() { + const y: string = yield; + })(); +} diff --git a/tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts b/tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts new file mode 100644 index 00000000000..98519e20663 --- /dev/null +++ b/tests/cases/conformance/generators/generatorReturnTypeInferenceNonStrict.ts @@ -0,0 +1,139 @@ +// @target: esnext +// @strictNullChecks: false +// @noImplicitReturns: true +// @noImplicitAny: true + +declare const iterableIterator: IterableIterator; +declare const generator: Generator; +declare const never: never; + +function* g000() { // Generator +} + +// 'yield' iteration type inference +function* g001() { // Generator + yield; +} + +function* g002() { // Generator + yield 1; +} + +function* g003() { // Generator + // NOTE: In strict mode, `[]` produces the type `never[]`. + // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. + yield* []; +} + +function* g004() { // Generator + yield* iterableIterator; +} + +function* g005() { // Generator + const x = yield* generator; +} + +function* g006() { // Generator<1 | 2, void, unknown> + yield 1; + yield 2; +} + +function* g007() { // Generator + yield never; +} + +// 'return' iteration type inference +function* g102() { // Generator + return 1; +} + +function* g103() { // Generator + if (Math.random()) return 1; + return 2; +} + +function* g104() { // Generator + return never; +} + +// 'next' iteration type inference +function* g201() { // Generator + let a: string = yield 1; +} + +function* g202() { // Generator<1 | 2, void, never> + let a: string = yield 1; + let b: number = yield 2; +} + +declare function f1(x: string): void; +declare function f1(x: number): void; + +function* g203() { // Generator + const x = f1(yield 1); +} + +declare function f2(x: T): T; + +function* g204() { // Generator + const x = f2(yield 1); +} + +// mixed iteration types inference + +function* g301() { // Generator + yield; + return; +} + +function* g302() { // Generator + yield 1; + return; +} + +function* g303() { // Generator + yield; + return "a"; +} + +function* g304() { // Generator + yield 1; + return "a"; +} + +function* g305() { // Generator<1 | 2, "a" | "b", unknown> + if (Math.random()) yield 1; + yield 2; + if (Math.random()) return "a"; + return "b"; +} + +function* g306() { // Generator + const a: "hi" = yield 1; + return true; +} + +function* g307() { // Generator + const a: T = yield 0; + return a; +} + +function* g308(x: T) { // Generator + const a: T = yield x; + return a; +} + +function* g309(x: T, y: U) { // Generator + const a: V = yield x; + return y; +} + +function* g310() { // Generator + const [a = 1, b = 2] = yield; +} + +function* g311() { // Generator + yield* (function*() { + const y: string = yield; + })(); +}