diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 8c69cccba1282..e7df125036429 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -7328,9 +7328,16 @@ namespace Parser { return nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(/*disallowOf*/ true); } + function nextTokenIsEqualsOrSemicolonOrColonToken() { + nextToken(); + return token() === SyntaxKind.EqualsToken || token() === SyntaxKind.SemicolonToken || token() === SyntaxKind.ColonToken; + } + function nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(disallowOf?: boolean) { nextToken(); - if (disallowOf && token() === SyntaxKind.OfKeyword) return false; + if (disallowOf && token() === SyntaxKind.OfKeyword) { + return lookAhead(nextTokenIsEqualsOrSemicolonOrColonToken); + } return (isBindingIdentifier() || token() === SyntaxKind.OpenBraceToken) && !scanner.hasPrecedingLineBreak(); } diff --git a/tests/baselines/reference/usingDeclarationsInForOf.4.errors.txt b/tests/baselines/reference/usingDeclarationsInForOf.4.errors.txt new file mode 100644 index 0000000000000..2f75f6f5bebcb --- /dev/null +++ b/tests/baselines/reference/usingDeclarationsInForOf.4.errors.txt @@ -0,0 +1,10 @@ +usingDeclarationsInForOf.4.ts(3,12): error TS1155: 'using' declarations must be initialized. + + +==== usingDeclarationsInForOf.4.ts (1 errors) ==== + for (using of = null;;) break; + for (using of: null = null;;) break; + for (using of;;) break; + ~~ +!!! error TS1155: 'using' declarations must be initialized. + \ No newline at end of file diff --git a/tests/baselines/reference/usingDeclarationsInForOf.4.js b/tests/baselines/reference/usingDeclarationsInForOf.4.js new file mode 100644 index 0000000000000..f16eec711487d --- /dev/null +++ b/tests/baselines/reference/usingDeclarationsInForOf.4.js @@ -0,0 +1,15 @@ +//// [tests/cases/conformance/statements/VariableStatements/usingDeclarations/usingDeclarationsInForOf.4.ts] //// + +//// [usingDeclarationsInForOf.4.ts] +for (using of = null;;) break; +for (using of: null = null;;) break; +for (using of;;) break; + + +//// [usingDeclarationsInForOf.4.js] +for (using of = null;;) + break; +for (using of = null;;) + break; +for (using of;;) + break; diff --git a/tests/cases/conformance/statements/VariableStatements/usingDeclarations/usingDeclarationsInForOf.4.ts b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/usingDeclarationsInForOf.4.ts new file mode 100644 index 0000000000000..359a01d2b06fd --- /dev/null +++ b/tests/cases/conformance/statements/VariableStatements/usingDeclarations/usingDeclarationsInForOf.4.ts @@ -0,0 +1,8 @@ +// @target: esnext +// @module: esnext +// @lib: esnext +// @noTypesAndSymbols: true + +for (using of = null;;) break; +for (using of: null = null;;) break; +for (using of;;) break;