diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 240385df8dfcf..dd1e7f6431a7e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2745,6 +2745,7 @@ namespace ts { const startPos = scanner.getStartPos(); const result = parseListElement(kind, parseElement); if (!result) { + parsingContext = saveParsingContext; return undefined; } list.push(result as NonNullable); diff --git a/tests/baselines/reference/parserUnparsedTokenCrash1.errors.txt b/tests/baselines/reference/parserUnparsedTokenCrash1.errors.txt new file mode 100644 index 0000000000000..133be2968a22d --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash1.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/a.js(1,9): error TS1005: ')' expected. +tests/cases/compiler/a.js(1,13): error TS1005: ';' expected. + + +==== tests/cases/compiler/a.js (2 errors) ==== + ( y = 1 ; 2 ) + ~ +!!! error TS1005: ')' expected. + ~ +!!! error TS1005: ';' expected. + \ No newline at end of file diff --git a/tests/baselines/reference/parserUnparsedTokenCrash1.js b/tests/baselines/reference/parserUnparsedTokenCrash1.js new file mode 100644 index 0000000000000..feffea8688a38 --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash1.js @@ -0,0 +1,7 @@ +//// [a.js] +( y = 1 ; 2 ) + + +//// [a.js] +(y = 1); +2; diff --git a/tests/baselines/reference/parserUnparsedTokenCrash1.symbols b/tests/baselines/reference/parserUnparsedTokenCrash1.symbols new file mode 100644 index 0000000000000..a07da336f8147 --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash1.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/a.js === +( y = 1 ; 2 ) +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserUnparsedTokenCrash1.types b/tests/baselines/reference/parserUnparsedTokenCrash1.types new file mode 100644 index 0000000000000..836ba475b5d0f --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash1.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/a.js === +( y = 1 ; 2 ) +>( y = 1 : 1 +>y = 1 : 1 +>y : any +>1 : 1 +>2 : 2 + diff --git a/tests/baselines/reference/parserUnparsedTokenCrash2.errors.txt b/tests/baselines/reference/parserUnparsedTokenCrash2.errors.txt new file mode 100644 index 0000000000000..4f23134ef9f9f --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash2.errors.txt @@ -0,0 +1,30 @@ +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,10): error TS1109: Expression expected. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,12): error TS2304: Cannot find name 'x'. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,16): error TS2364: The left-hand side of an assignment expression must be a variable or a property access. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,18): error TS2304: Cannot find name 'y'. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,22): error TS2304: Cannot find name 'z'. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,27): error TS1109: Expression expected. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(1,39): error TS1005: ';' expected. +tests/cases/compiler/parserUnparsedTokenCrash2.ts(2,1): error TS1005: '}' expected. + + +==== tests/cases/compiler/parserUnparsedTokenCrash2.ts (8 errors) ==== + export = } x = ( y = z ==== 'function') { + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS2304: Cannot find name 'x'. + ~~~~~~~~~~~ +!!! error TS2364: The left-hand side of an assignment expression must be a variable or a property access. + ~ +!!! error TS2304: Cannot find name 'y'. + ~ +!!! error TS2304: Cannot find name 'z'. + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1005: ';' expected. + + +!!! error TS1005: '}' expected. +!!! related TS1007 tests/cases/compiler/parserUnparsedTokenCrash2.ts:1:41: The parser expected to find a '}' to match the '{' token here. \ No newline at end of file diff --git a/tests/baselines/reference/parserUnparsedTokenCrash2.js b/tests/baselines/reference/parserUnparsedTokenCrash2.js new file mode 100644 index 0000000000000..e7ff31800ebf2 --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash2.js @@ -0,0 +1,10 @@ +//// [parserUnparsedTokenCrash2.ts] +export = } x = ( y = z ==== 'function') { + + +//// [parserUnparsedTokenCrash2.js] +"use strict"; +x = (y = z === ) = 'function'; +{ +} +module.exports = ; diff --git a/tests/baselines/reference/parserUnparsedTokenCrash2.symbols b/tests/baselines/reference/parserUnparsedTokenCrash2.symbols new file mode 100644 index 0000000000000..a027cd161a7db --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash2.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/parserUnparsedTokenCrash2.ts === +export = } x = ( y = z ==== 'function') { +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/parserUnparsedTokenCrash2.types b/tests/baselines/reference/parserUnparsedTokenCrash2.types new file mode 100644 index 0000000000000..62e37ed344323 --- /dev/null +++ b/tests/baselines/reference/parserUnparsedTokenCrash2.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/parserUnparsedTokenCrash2.ts === +export = } x = ( y = z ==== 'function') { +> : any +>x = ( y = z ==== 'function' : "function" +>x : any +>( y = z ==== 'function' : "function" +>( y = z === : boolean +>y = z === : boolean +>y : any +>z === : boolean +>z : any +> : any +>'function' : "function" + diff --git a/tests/cases/compiler/parserUnparsedTokenCrash1.ts b/tests/cases/compiler/parserUnparsedTokenCrash1.ts new file mode 100644 index 0000000000000..303c455825bc9 --- /dev/null +++ b/tests/cases/compiler/parserUnparsedTokenCrash1.ts @@ -0,0 +1,4 @@ +// @allowJs: true +// @outDir: ./out +// @filename: a.js +( y = 1 ; 2 ) diff --git a/tests/cases/compiler/parserUnparsedTokenCrash2.ts b/tests/cases/compiler/parserUnparsedTokenCrash2.ts new file mode 100644 index 0000000000000..d470175462b2c --- /dev/null +++ b/tests/cases/compiler/parserUnparsedTokenCrash2.ts @@ -0,0 +1 @@ +export = } x = ( y = z ==== 'function') {