From 27b5dd6d73e1159547c5189d3f48920c4c2b91b3 Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Fri, 8 Apr 2022 00:19:10 +0900 Subject: [PATCH 01/12] #1125 Fix parsing of unusual trailing expressions separated by whitespace --- NOTICE | 1 + src/parser.ts | 14 ++++++++++++-- src/tokenizer.ts | 12 ++++++++++++ tests/parser/trailing-exps-separated-by-space.ts | 8 ++++++++ .../trailing-exps-separated-by-space.ts.fixture.ts | 11 +++++++++++ 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/parser/trailing-exps-separated-by-space.ts create mode 100644 tests/parser/trailing-exps-separated-by-space.ts.fixture.ts diff --git a/NOTICE b/NOTICE index 3160d03559..81d66167db 100644 --- a/NOTICE +++ b/NOTICE @@ -44,6 +44,7 @@ under the licensing terms detailed in LICENSE: * Felipe Gasper * Congcong Cai <77575210+HerrCai0907@users.noreply.github.com> * mooooooi +* Yasushi Ando Portions of this software are derived from third-party works licensed under the following terms: diff --git a/src/parser.ts b/src/parser.ts index b9dc2fc7b3..951eb4bad7 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,7 +938,12 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.COMMA)); var ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - tn.skip(Token.SEMICOLON); + if (!tn.skip(Token.SEMICOLON) && !isFor && !tn.hasNoExpressionInLine()) { + this.error( + DiagnosticCode.Unexpected_token, + tn.range() + ); + } return ret; } @@ -1115,7 +1120,12 @@ export class Parser extends DiagnosticEmitter { } var ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - tn.skip(Token.SEMICOLON); + if (!tn.skip(Token.SEMICOLON) && !tn.hasNoExpressionInLine()) { + this.error( + DiagnosticCode.Unexpected_token, + tn.range() + ); + } return ret; } diff --git a/src/tokenizer.ts b/src/tokenizer.ts index fab060fd5c..906d278605 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1697,6 +1697,18 @@ export class Tokenizer extends DiagnosticEmitter { return this.readHexadecimalEscape(4, startIfTaggedTemplate); } + hasNoExpressionInLine(): bool { + let pos = this.pos; + const end = this.end; + do { + const c = this.source.text.charCodeAt(pos); + if (isLineBreak(c)) return true; + if (!isWhiteSpace(c)) break; + pos++; + } while (pos < end); + return pos === end; + } + private readExtendedUnicodeEscape(startIfTaggedTemplate: i32 = -1): string { var start = this.pos; var value = this.readHexInteger(); diff --git a/tests/parser/trailing-exps-separated-by-space.ts b/tests/parser/trailing-exps-separated-by-space.ts new file mode 100644 index 0000000000..a21531e9f3 --- /dev/null +++ b/tests/parser/trailing-exps-separated-by-space.ts @@ -0,0 +1,8 @@ +function add(y: i32): i32 { + let x = y 234; + return x + y; +} + +function foo(): i32 { + return 123 456; +} \ No newline at end of file diff --git a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts new file mode 100644 index 0000000000..dcac76f1ca --- /dev/null +++ b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts @@ -0,0 +1,11 @@ +function add(y: i32): i32 { + let x = y; + 234; + return x + y; +} +function foo(): i32 { + return 123; + 456; +} +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,11+1) +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,10+3) From 874b6ce1a1cde1c424ba7f14d373cfe44adce467 Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Fri, 8 Apr 2022 08:21:18 +0900 Subject: [PATCH 02/12] rename method --- src/parser.ts | 4 ++-- src/tokenizer.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 951eb4bad7..0dc2f3d5f7 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,7 +938,7 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.COMMA)); var ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && !isFor && !tn.hasNoExpressionInLine()) { + if (!tn.skip(Token.SEMICOLON) && !isFor && !tn.hasNoMoreExpressionInLine()) { this.error( DiagnosticCode.Unexpected_token, tn.range() @@ -1120,7 +1120,7 @@ export class Parser extends DiagnosticEmitter { } var ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && !tn.hasNoExpressionInLine()) { + if (!tn.skip(Token.SEMICOLON) && !tn.hasNoMoreExpressionInLine()) { this.error( DiagnosticCode.Unexpected_token, tn.range() diff --git a/src/tokenizer.ts b/src/tokenizer.ts index 906d278605..aeb11ddebd 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1697,7 +1697,7 @@ export class Tokenizer extends DiagnosticEmitter { return this.readHexadecimalEscape(4, startIfTaggedTemplate); } - hasNoExpressionInLine(): bool { + hasNoMoreExpressionInLine(): bool { let pos = this.pos; const end = this.end; do { From e53408eb273c0b17d813d49f965d43b4d2054cfc Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Mon, 11 Apr 2022 23:00:55 +0900 Subject: [PATCH 03/12] accept close brace & close paren --- src/tokenizer.ts | 9 ++++----- tests/parser/trailing-exps-separated-by-space.ts | 11 +++++++++-- .../trailing-exps-separated-by-space.ts.fixture.ts | 10 ++++++++-- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/tokenizer.ts b/src/tokenizer.ts index aeb11ddebd..8c7d508243 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1699,14 +1699,13 @@ export class Tokenizer extends DiagnosticEmitter { hasNoMoreExpressionInLine(): bool { let pos = this.pos; - const end = this.end; - do { + while (pos < this.end) { const c = this.source.text.charCodeAt(pos); - if (isLineBreak(c)) return true; + if (isLineBreak(c) || c === CharCode.CLOSEBRACE || c === CharCode.CLOSEPAREN) return true; if (!isWhiteSpace(c)) break; pos++; - } while (pos < end); - return pos === end; + } + return pos === this.end; } private readExtendedUnicodeEscape(startIfTaggedTemplate: i32 = -1): string { diff --git a/tests/parser/trailing-exps-separated-by-space.ts b/tests/parser/trailing-exps-separated-by-space.ts index a21531e9f3..42aea19aad 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts +++ b/tests/parser/trailing-exps-separated-by-space.ts @@ -1,8 +1,15 @@ -function add(y: i32): i32 { +function failLet(y: i32): i32 { let x = y 234; return x + y; } -function foo(): i32 { +function failReturn(): i32 { return 123 456; +} + +function successCloseBrace(): i32 { + return 123 } + +function successCloseParen(): i32 { + return ( 123 ) } \ No newline at end of file diff --git a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts index dcac76f1ca..f9fcaf376b 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts +++ b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts @@ -1,11 +1,17 @@ -function add(y: i32): i32 { +function failLet(y: i32): i32 { let x = y; 234; return x + y; } -function foo(): i32 { +function failReturn(): i32 { return 123; 456; } +function successCloseBrace(): i32 { + return 123; +} +function successCloseParen(): i32 { + return (123); +} // ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,11+1) // ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,10+3) From 64dba4f51420b7b85c3f7d86954338092fa6d6b3 Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Mon, 11 Apr 2022 23:16:05 +0900 Subject: [PATCH 04/12] rename to checkOffendingToken --- src/parser.ts | 4 ++-- src/tokenizer.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 0dc2f3d5f7..5537aae881 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,7 +938,7 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.COMMA)); var ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && !isFor && !tn.hasNoMoreExpressionInLine()) { + if (!tn.skip(Token.SEMICOLON) && !isFor && tn.checkOffendingToken()) { this.error( DiagnosticCode.Unexpected_token, tn.range() @@ -1120,7 +1120,7 @@ export class Parser extends DiagnosticEmitter { } var ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && !tn.hasNoMoreExpressionInLine()) { + if (!tn.skip(Token.SEMICOLON) && tn.checkOffendingToken()) { this.error( DiagnosticCode.Unexpected_token, tn.range() diff --git a/src/tokenizer.ts b/src/tokenizer.ts index 8c7d508243..6d71948b90 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1697,15 +1697,15 @@ export class Tokenizer extends DiagnosticEmitter { return this.readHexadecimalEscape(4, startIfTaggedTemplate); } - hasNoMoreExpressionInLine(): bool { + checkOffendingToken(): bool { let pos = this.pos; while (pos < this.end) { const c = this.source.text.charCodeAt(pos); - if (isLineBreak(c) || c === CharCode.CLOSEBRACE || c === CharCode.CLOSEPAREN) return true; + if (isLineBreak(c) || c === CharCode.CLOSEBRACE || c === CharCode.CLOSEPAREN) return false; if (!isWhiteSpace(c)) break; pos++; } - return pos === this.end; + return pos !== this.end; } private readExtendedUnicodeEscape(startIfTaggedTemplate: i32 = -1): string { From 66216be880abf5d1d1700b62e42077f7fce957a6 Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Tue, 12 Apr 2022 00:12:35 +0900 Subject: [PATCH 05/12] handle throw statement --- src/parser.ts | 28 ++++++++++--------- .../trailing-exps-separated-by-space.ts | 4 +++ ...ling-exps-separated-by-space.ts.fixture.ts | 5 ++++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 5537aae881..568cbc0b7c 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,12 +938,7 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.COMMA)); var ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && !isFor && tn.checkOffendingToken()) { - this.error( - DiagnosticCode.Unexpected_token, - tn.range() - ); - } + this.checkRuleCompleted(tn, isFor); return ret; } @@ -1120,12 +1115,7 @@ export class Parser extends DiagnosticEmitter { } var ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.SEMICOLON) && tn.checkOffendingToken()) { - this.error( - DiagnosticCode.Unexpected_token, - tn.range() - ); - } + this.checkRuleCompleted(tn); return ret; } @@ -3386,7 +3376,7 @@ export class Parser extends DiagnosticEmitter { var expression = this.parseExpression(tn); if (!expression) return null; var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos)); - tn.skip(Token.SEMICOLON); + this.checkRuleCompleted(tn); return ret; } @@ -4321,6 +4311,18 @@ export class Parser extends DiagnosticEmitter { return expr; } + private checkRuleCompleted( + tn: Tokenizer, + isFor: bool = false + ) { + if (!tn.skip(Token.SEMICOLON) && !isFor && tn.checkOffendingToken()) { + this.error( + DiagnosticCode.Unexpected_token, + tn.range() + ); + } + } + /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */ skipStatement(tn: Tokenizer): void { tn.peek(true); diff --git a/tests/parser/trailing-exps-separated-by-space.ts b/tests/parser/trailing-exps-separated-by-space.ts index 42aea19aad..3bef368afb 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts +++ b/tests/parser/trailing-exps-separated-by-space.ts @@ -7,6 +7,10 @@ function failReturn(): i32 { return 123 456; } +function failThrow(): i32 { + throw 123 456; +} + function successCloseBrace(): i32 { return 123 } diff --git a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts index f9fcaf376b..4ce4a6dbfd 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts +++ b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts @@ -7,6 +7,10 @@ function failReturn(): i32 { return 123; 456; } +function failThrow(): i32 { + throw 123; + 456; +} function successCloseBrace(): i32 { return 123; } @@ -15,3 +19,4 @@ function successCloseParen(): i32 { } // ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,11+1) // ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,10+3) +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(11,9+3) From c79762a7f1cb6c9703d3a47e358ef8d3170111ca Mon Sep 17 00:00:00 2001 From: ANDO Yasushi Date: Tue, 12 Apr 2022 00:56:15 +0900 Subject: [PATCH 06/12] add type --- src/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.ts b/src/parser.ts index 568cbc0b7c..8c69ae4861 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -4314,7 +4314,7 @@ export class Parser extends DiagnosticEmitter { private checkRuleCompleted( tn: Tokenizer, isFor: bool = false - ) { + ): void { if (!tn.skip(Token.SEMICOLON) && !isFor && tn.checkOffendingToken()) { this.error( DiagnosticCode.Unexpected_token, From 024ceac0fc278a4c08c7bc459dcd2b7e37aeb33b Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 12:54:13 +0100 Subject: [PATCH 07/12] fix --- src/tokenizer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tokenizer.ts b/src/tokenizer.ts index 94ed40ecff..e750f7732b 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1714,7 +1714,7 @@ export class Tokenizer extends DiagnosticEmitter { let pos = this.pos; while (pos < this.end) { const c = this.source.text.charCodeAt(pos); - if (isLineBreak(c) || c === CharCode.CLOSEBRACE || c === CharCode.CLOSEPAREN) return false; + if (isLineBreak(c) || c === CharCode.CloseBrace || c === CharCode.CloseParen) return false; if (!isWhiteSpace(c)) break; pos++; } From 07a70d5a79845309c1d34895b11c0f5fc033827e Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 12:55:22 +0100 Subject: [PATCH 08/12] var -> let --- src/parser.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 85a3ecec00..efad16a5ff 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,7 +938,7 @@ export class Parser extends DiagnosticEmitter { declarations.push(declaration); } while (tn.skip(Token.Comma)); - var ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); + let ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); this.checkRuleCompleted(tn, isFor); return ret; } @@ -1121,7 +1121,7 @@ export class Parser extends DiagnosticEmitter { if (!(expr = this.parseExpression(tn))) return null; } - var ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); + let ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); this.checkRuleCompleted(tn); return ret; } @@ -3416,7 +3416,7 @@ export class Parser extends DiagnosticEmitter { let startPos = tn.tokenPos; let expression = this.parseExpression(tn); if (!expression) return null; - var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos)); + let ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos)); this.checkRuleCompleted(tn); return ret; } From 218ec9a4863bf50d24cd8c68b33c0c7dfc24b2af Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 12:56:08 +0100 Subject: [PATCH 09/12] whitespace --- src/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.ts b/src/parser.ts index efad16a5ff..434ad9791f 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -938,7 +938,7 @@ export class Parser extends DiagnosticEmitter { declarations.push(declaration); } while (tn.skip(Token.Comma)); - let ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); + let ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); this.checkRuleCompleted(tn, isFor); return ret; } From 74f4b35d5647926419290807d4faad3960e2b056 Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 13:43:51 +0100 Subject: [PATCH 10/12] simplify --- src/parser.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 434ad9791f..b9a4c5cf42 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -939,7 +939,7 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.Comma)); let ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - this.checkRuleCompleted(tn, isFor); + if (!tn.skip(Token.Semicolon) && !isFor) this.checkRuleCompleted(tn, isFor); return ret; } @@ -1122,7 +1122,7 @@ export class Parser extends DiagnosticEmitter { } let ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - this.checkRuleCompleted(tn); + if (!tn.skip(Token.Semicolon)) this.checkRuleCompleted(tn); return ret; } @@ -3417,7 +3417,7 @@ export class Parser extends DiagnosticEmitter { let expression = this.parseExpression(tn); if (!expression) return null; let ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos)); - this.checkRuleCompleted(tn); + if (!tn.skip(Token.Semicolon)) this.checkRuleCompleted(tn); return ret; } @@ -4402,10 +4402,9 @@ export class Parser extends DiagnosticEmitter { } private checkRuleCompleted( - tn: Tokenizer, - isFor: bool = false + tn: Tokenizer ): void { - if (!tn.skip(Token.Semicolon) && !isFor && tn.checkOffendingToken()) { + if (tn.checkOffendingToken()) { this.error( DiagnosticCode.Unexpected_token, tn.range() From 3ec977e730649005bf84462222019aa15053ea99 Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 14:28:12 +0100 Subject: [PATCH 11/12] refactor --- src/parser.ts | 23 +++++----- src/tokenizer.ts | 11 ----- ...ling-exps-separated-by-space.ts.fixture.ts | 44 +++++++++---------- 3 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index b9a4c5cf42..27f0af6320 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -939,7 +939,7 @@ export class Parser extends DiagnosticEmitter { } while (tn.skip(Token.Comma)); let ret = Node.createVariableStatement(decorators, declarations, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.Semicolon) && !isFor) this.checkRuleCompleted(tn, isFor); + if (!tn.skip(Token.Semicolon) && !isFor) this.checkASI(tn); return ret; } @@ -1122,7 +1122,7 @@ export class Parser extends DiagnosticEmitter { } let ret = Node.createReturnStatement(expr, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.Semicolon)) this.checkRuleCompleted(tn); + if (!tn.skip(Token.Semicolon)) this.checkASI(tn); return ret; } @@ -3009,7 +3009,7 @@ export class Parser extends DiagnosticEmitter { } } let ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos)); - tn.skip(Token.Semicolon); + if (topLevel) tn.skip(Token.Semicolon); return ret; } @@ -3417,7 +3417,7 @@ export class Parser extends DiagnosticEmitter { let expression = this.parseExpression(tn); if (!expression) return null; let ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos)); - if (!tn.skip(Token.Semicolon)) this.checkRuleCompleted(tn); + if (!tn.skip(Token.Semicolon)) this.checkASI(tn); return ret; } @@ -4401,15 +4401,16 @@ export class Parser extends DiagnosticEmitter { return expr; } - private checkRuleCompleted( + private checkASI( tn: Tokenizer ): void { - if (tn.checkOffendingToken()) { - this.error( - DiagnosticCode.Unexpected_token, - tn.range() - ); - } + // see: https://tc39.es/ecma262/#sec-automatic-semicolon-insertion + let token = tn.peek(true); + if (tn.nextTokenOnNewLine || token == Token.EndOfFile || token == Token.CloseBrace) return; + this.error( + DiagnosticCode.Unexpected_token, + tn.range(tn.nextTokenPos) + ); } /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */ diff --git a/src/tokenizer.ts b/src/tokenizer.ts index e750f7732b..767ee03489 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1710,17 +1710,6 @@ export class Tokenizer extends DiagnosticEmitter { return this.readHexadecimalEscape(4, startIfTaggedTemplate); } - checkOffendingToken(): bool { - let pos = this.pos; - while (pos < this.end) { - const c = this.source.text.charCodeAt(pos); - if (isLineBreak(c) || c === CharCode.CloseBrace || c === CharCode.CloseParen) return false; - if (!isWhiteSpace(c)) break; - pos++; - } - return pos !== this.end; - } - private readExtendedUnicodeEscape(startIfTaggedTemplate: i32 = -1): string { let start = this.pos; let value = this.readHexInteger(); diff --git a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts index 4ce4a6dbfd..3001745422 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts +++ b/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts @@ -1,22 +1,22 @@ -function failLet(y: i32): i32 { - let x = y; - 234; - return x + y; -} -function failReturn(): i32 { - return 123; - 456; -} -function failThrow(): i32 { - throw 123; - 456; -} -function successCloseBrace(): i32 { - return 123; -} -function successCloseParen(): i32 { - return (123); -} -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,11+1) -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,10+3) -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(11,9+3) +function failLet(y: i32): i32 { + let x = y; + 234; + return x + y; +} +function failReturn(): i32 { + return 123; + 456; +} +function failThrow(): i32 { + throw 123; + 456; +} +function successCloseBrace(): i32 { + return 123; +} +function successCloseParen(): i32 { + return (123); +} +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,13+0) +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,14+0) +// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(11,13+0) From 3855542b75f31f870faf47bb8c941a5623ef72aa Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 8 Jan 2023 14:41:21 +0100 Subject: [PATCH 12/12] rename test case --- ...ling-exps-separated-by-space.ts => asi.ts} | 36 +++++++++---------- ...-space.ts.fixture.ts => asi.ts.fixture.ts} | 6 ++-- 2 files changed, 21 insertions(+), 21 deletions(-) rename tests/parser/{trailing-exps-separated-by-space.ts => asi.ts} (93%) rename tests/parser/{trailing-exps-separated-by-space.ts.fixture.ts => asi.ts.fixture.ts} (52%) diff --git a/tests/parser/trailing-exps-separated-by-space.ts b/tests/parser/asi.ts similarity index 93% rename from tests/parser/trailing-exps-separated-by-space.ts rename to tests/parser/asi.ts index 3bef368afb..542d063520 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts +++ b/tests/parser/asi.ts @@ -1,19 +1,19 @@ -function failLet(y: i32): i32 { - let x = y 234; - return x + y; -} - -function failReturn(): i32 { - return 123 456; -} - -function failThrow(): i32 { - throw 123 456; -} - -function successCloseBrace(): i32 { - return 123 } - -function successCloseParen(): i32 { - return ( 123 ) +function failLet(y: i32): i32 { + let x = y 234; + return x + y; +} + +function failReturn(): i32 { + return 123 456; +} + +function failThrow(): i32 { + throw 123 456; +} + +function successCloseBrace(): i32 { + return 123 } + +function successCloseParen(): i32 { + return ( 123 ) } \ No newline at end of file diff --git a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts b/tests/parser/asi.ts.fixture.ts similarity index 52% rename from tests/parser/trailing-exps-separated-by-space.ts.fixture.ts rename to tests/parser/asi.ts.fixture.ts index 3001745422..d6d8e567b8 100644 --- a/tests/parser/trailing-exps-separated-by-space.ts.fixture.ts +++ b/tests/parser/asi.ts.fixture.ts @@ -17,6 +17,6 @@ function successCloseBrace(): i32 { function successCloseParen(): i32 { return (123); } -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(2,13+0) -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(7,14+0) -// ERROR 1012: "Unexpected token." in trailing-exps-separated-by-space.ts(11,13+0) +// ERROR 1012: "Unexpected token." in asi.ts(2,13+0) +// ERROR 1012: "Unexpected token." in asi.ts(7,14+0) +// ERROR 1012: "Unexpected token." in asi.ts(11,13+0)