From 1600b38760119457fe34c2e515e3920a43591faa Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 1 Dec 2014 03:15:51 -0800 Subject: [PATCH] Don't explicitly call 'error' when parsing a type. --- src/compiler/parser.ts | 20 +++++++------------ .../parservoidInQualifiedName1.errors.txt | 9 +++------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 9e8424030ab..db1f7b18ee3 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1603,8 +1603,8 @@ module ts { } // The allowReservedWords parameter controls whether reserved words are permitted after the first dot - function parseEntityName(allowReservedWords: boolean): EntityName { - var entity: EntityName = parseIdentifier(); + function parseEntityName(allowReservedWords: boolean, diagnosticMessage?: DiagnosticMessage): EntityName { + var entity: EntityName = parseIdentifier(diagnosticMessage); while (parseOptional(SyntaxKind.DotToken)) { var node = createNode(SyntaxKind.QualifiedName, entity.pos); node.left = entity; @@ -1732,7 +1732,7 @@ module ts { function parseTypeReference(): TypeReferenceNode { var node = createNode(SyntaxKind.TypeReference); - node.typeName = parseEntityName(/*allowReservedWords*/ false); + node.typeName = parseEntityName(/*allowReservedWords*/ false, Diagnostics.Type_expected); if (!scanner.hasPrecedingLineBreak() && token === SyntaxKind.LessThanToken) { node.typeArguments = parseTypeArguments(); } @@ -2102,9 +2102,11 @@ module ts { case SyntaxKind.StringKeyword: case SyntaxKind.NumberKeyword: case SyntaxKind.BooleanKeyword: - case SyntaxKind.VoidKeyword: + // If these are followed by a dot, then parse these out as a dotted type reference instead. var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); + case SyntaxKind.VoidKeyword: + return parseTokenNode(); case SyntaxKind.TypeOfKeyword: return parseTypeQuery(); case SyntaxKind.OpenBraceToken: @@ -2114,12 +2116,8 @@ module ts { case SyntaxKind.OpenParenToken: return parseParenType(); default: - if (isIdentifier()) { - return parseTypeReference(); - } + return parseTypeReference(); } - error(Diagnostics.Type_expected); - return createMissingNode(); } function isStartOfType(): boolean { @@ -3852,10 +3850,6 @@ module ts { return parseList(ParsingContext.ClassMembers, /*checkForStrictMode*/ false, parseClassElement); } - function parseClassBaseType(): TypeReferenceNode { - return parseOptional(SyntaxKind.ExtendsKeyword) ? parseTypeReference() : undefined; - } - function parseInterfaceDeclaration(fullStart: number, modifiers: ModifiersArray): InterfaceDeclaration { var node = createNode(SyntaxKind.InterfaceDeclaration, fullStart); setModifiers(node, modifiers); diff --git a/tests/baselines/reference/parservoidInQualifiedName1.errors.txt b/tests/baselines/reference/parservoidInQualifiedName1.errors.txt index a8a77c9a220..d5433fb9078 100644 --- a/tests/baselines/reference/parservoidInQualifiedName1.errors.txt +++ b/tests/baselines/reference/parservoidInQualifiedName1.errors.txt @@ -1,10 +1,7 @@ -tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName1.ts(1,9): error TS1003: Identifier expected. -tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName1.ts(1,13): error TS1109: Expression expected. +tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName1.ts(1,13): error TS1005: ',' expected. -==== tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName1.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName1.ts (1 errors) ==== var v : void.x; - ~~~~ -!!! error TS1003: Identifier expected. ~ -!!! error TS1109: Expression expected. \ No newline at end of file +!!! error TS1005: ',' expected. \ No newline at end of file