From 08d3e4a90ea694422a1d6f88cdb5356ef1964f76 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 1 Dec 2014 00:57:48 -0800 Subject: [PATCH] Don't directly create errors when parsing expressions. --- src/compiler/parser.ts | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9bfde417a2f..77d6d69ba10 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1272,7 +1272,7 @@ module ts { // An identifier that starts with two underscores has an extra underscore character prepended to it to avoid issues // with magic property names like '__proto__'. The 'identifiers' object is used to share a single string instance for // each identifier in order to reduce memory consumption. - function createIdentifier(isIdentifier: boolean): Identifier { + function createIdentifier(isIdentifier: boolean, diagnosticMessage?: DiagnosticMessage): Identifier { identifierCount++; if (isIdentifier) { var node = createNode(SyntaxKind.Identifier); @@ -1280,14 +1280,18 @@ module ts { nextToken(); return finishNode(node); } - error(Diagnostics.Identifier_expected); + error(diagnosticMessage || Diagnostics.Identifier_expected); + return createMissingIdentifier(); + } + + function createMissingIdentifier() { var node = createMissingNode(); node.text = ""; return node; } - function parseIdentifier(): Identifier { - return createIdentifier(isIdentifier()); + function parseIdentifier(diagnosticMessage?: DiagnosticMessage): Identifier { + return createIdentifier(isIdentifier(), diagnosticMessage); } function parseIdentifierName(): Identifier { @@ -1677,8 +1681,7 @@ module ts { } else { parseExpected(SyntaxKind.CloseBraceToken); - literal = createMissingNode(); - literal.text = ""; + literal = createMissingIdentifier(); } span.literal = literal; @@ -3032,14 +3035,9 @@ module ts { break; case SyntaxKind.TemplateHead: return parseTemplateExpression(); - - default: - if (isIdentifier()) { - return parseIdentifier(); - } } - error(Diagnostics.Expression_expected); - return createMissingNode(); + + return parseIdentifier(Diagnostics.Expression_expected); } function parseParenthesizedExpression(): ParenthesizedExpression {