From 24f37949521e76daa3d4a7a5f52ee2af7a9932ae Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Wed, 23 Nov 2016 14:22:39 -0500 Subject: [PATCH] Simplify parse for (~+) and (~-) --- src/compiler/parser.ts | 15 ++++++--------- src/compiler/scanner.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7f453420970..a5b1cd3f8ae 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -926,6 +926,10 @@ namespace ts { return currentToken = scanner.reScanTemplateToken(); } + function reScanTildeToken(): SyntaxKind { + return currentToken = scanner.reScanTildeToken(); + } + function scanJsxIdentifier(): SyntaxKind { return currentToken = scanner.scanJsxIdentifier(); } @@ -4251,15 +4255,8 @@ namespace ts { } return undefined; case SyntaxKind.TildeToken: - nextToken(); - if (token() === SyntaxKind.PlusToken) { - nextToken(); - operator = SyntaxKind.TildePlusToken; - } - else if (token() === SyntaxKind.MinusToken) { - nextToken(); - operator = SyntaxKind.TildeMinusToken; - } + operator = reScanTildeToken(); + nextToken() if (token() === SyntaxKind.CloseParenToken) { nextToken(); const node = createNode(SyntaxKind.OperatorExpression, fullStart); diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 0f7a5e48eb7..ab2a53d6321 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -26,6 +26,7 @@ namespace ts { reScanGreaterToken(): SyntaxKind; reScanSlashToken(): SyntaxKind; reScanTemplateToken(): SyntaxKind; + reScanTildeToken(): SyntaxKind; scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): SyntaxKind; @@ -821,6 +822,7 @@ namespace ts { isUnterminated: () => tokenIsUnterminated, reScanGreaterToken, reScanSlashToken, + reScanTildeToken, reScanTemplateToken, scanJsxIdentifier, scanJsxAttributeValue, @@ -1647,6 +1649,22 @@ namespace ts { return token; } + function reScanTildeToken(): SyntaxKind { + if (token === SyntaxKind.TildeToken) { + if (text.charCodeAt(pos) === CharacterCodes.plus) { + if (text.charCodeAt(pos + 1) === CharacterCodes.closeParen) { + return pos += 1, token = SyntaxKind.TildePlusToken; + } + } + else if (text.charCodeAt(pos) === CharacterCodes.minus) { + if (text.charCodeAt(pos + 1) === CharacterCodes.closeParen) { + return pos += 1, token = SyntaxKind.TildeMinusToken; + } + } + } + return token; + } + function reScanSlashToken(): SyntaxKind { if (token === SyntaxKind.SlashToken || token === SyntaxKind.SlashEqualsToken) { let p = tokenPos + 1;