diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index baa89c6133534..112a4ecc2eec4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1217,8 +1217,8 @@ namespace ts { return createIdentifier(isIdentifier(), diagnosticMessage); } - function parseIdentifierName(): Identifier { - return createIdentifier(tokenIsIdentifierOrKeyword(token())); + function parseIdentifierName(diagnosticMessage?: DiagnosticMessage): Identifier { + return createIdentifier(tokenIsIdentifierOrKeyword(token()), diagnosticMessage); } function isLiteralPropertyName(): boolean { @@ -1956,7 +1956,7 @@ namespace ts { } function parseEntityName(allowReservedWords: boolean, diagnosticMessage?: DiagnosticMessage): EntityName { - let entity: EntityName = allowReservedWords ? parseIdentifierName() : parseIdentifier(diagnosticMessage); + let entity: EntityName = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage); let dotPos = scanner.getStartPos(); while (parseOptional(SyntaxKind.DotToken)) { if (token() === SyntaxKind.LessThanToken) { @@ -2096,7 +2096,7 @@ namespace ts { function parseTypeReference(): TypeReferenceNode { const node = createNode(SyntaxKind.TypeReference); - node.typeName = parseEntityName(/*allowReservedWords*/ !!(contextFlags & NodeFlags.JSDoc), Diagnostics.Type_expected); + node.typeName = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected); if (!scanner.hasPrecedingLineBreak() && token() === SyntaxKind.LessThanToken) { node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt index ab79f8d3e2354..84d9c31399512 100644 --- a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.errors.txt @@ -1,16 +1,18 @@ -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,8): error TS1110: Type expected. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,8): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,8): error TS2304: Cannot find name 'super'. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,13): error TS1005: '=' expected. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(8,14): error TS1109: Expression expected. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(10,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(13,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(17,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,15): error TS1110: Type expected. -tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,15): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,15): error TS2304: Cannot find name 'super'. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,20): error TS1005: '=' expected. +tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(20,21): error TS1109: Expression expected. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(22,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(25,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts(29,9): error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. -==== tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts (10 errors) ==== +==== tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassSuperCallsInNonConstructorMembers.ts (12 errors) ==== // error to use super calls outside a constructor class Base { @@ -20,9 +22,11 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS class Derived extends Base { a: super(); ~~~~~ -!!! error TS1110: Type expected. - ~~~~~ -!!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. +!!! error TS2304: Cannot find name 'super'. + ~ +!!! error TS1005: '=' expected. + ~ +!!! error TS1109: Expression expected. b() { super(); ~~~~~ @@ -42,9 +46,11 @@ tests/cases/conformance/classes/constructorDeclarations/superCalls/derivedClassS static a: super(); ~~~~~ -!!! error TS1110: Type expected. - ~~~~~ -!!! error TS2337: Super calls are not permitted outside constructors or in nested functions inside constructors. +!!! error TS2304: Cannot find name 'super'. + ~ +!!! error TS1005: '=' expected. + ~ +!!! error TS1109: Expression expected. static b() { super(); ~~~~~ diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js index 0205636e1f755..019e29f19409d 100644 --- a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.js @@ -52,7 +52,7 @@ var Derived = /** @class */ (function (_super) { __extends(Derived, _super); function Derived() { var _this = _super !== null && _super.apply(this, arguments) || this; - _this.a = _this = _super.call(this) || this; + _this.a = (); return _this; } Derived.prototype.b = function () { @@ -83,6 +83,6 @@ var Derived = /** @class */ (function (_super) { enumerable: true, configurable: true }); - Derived.a = _this = _super.call(this) || this; + Derived.a = (); return Derived; }(Base)); diff --git a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.types b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.types index 99d0c6e09f848..5964a25f6d462 100644 --- a/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.types +++ b/tests/baselines/reference/derivedClassSuperCallsInNonConstructorMembers.types @@ -14,9 +14,9 @@ class Derived extends Base { a: super(); >a : any -> : No type information available! ->super() : void ->super : any +>super : No type information available! +>() : any +> : any b() { >b : () => void @@ -46,9 +46,9 @@ class Derived extends Base { static a: super(); >a : any -> : No type information available! ->super() : void ->super : any +>super : No type information available! +>() : any +> : any static b() { >b : () => void diff --git a/tests/baselines/reference/jsdocParameterParsingInfiniteLoop.errors.txt b/tests/baselines/reference/jsdocParameterParsingInfiniteLoop.errors.txt index e42d67a62c10c..a43c72cf0c723 100644 --- a/tests/baselines/reference/jsdocParameterParsingInfiniteLoop.errors.txt +++ b/tests/baselines/reference/jsdocParameterParsingInfiniteLoop.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/example.js(3,20): error TS1003: Identifier expected. +tests/cases/compiler/example.js(3,20): error TS1110: Type expected. ==== tests/cases/compiler/example.js (1 errors) ==== @@ -6,6 +6,6 @@ tests/cases/compiler/example.js(3,20): error TS1003: Identifier expected. /** * @type {function(@foo)} ~ -!!! error TS1003: Identifier expected. +!!! error TS1110: Type expected. */ let x; \ No newline at end of file diff --git a/tests/baselines/reference/parseEntityNameWithReservedWord.js b/tests/baselines/reference/parseEntityNameWithReservedWord.js new file mode 100644 index 0000000000000..2de1b14b0593f --- /dev/null +++ b/tests/baselines/reference/parseEntityNameWithReservedWord.js @@ -0,0 +1,11 @@ +//// [parseEntityNameWithReservedWord.ts] +enum Bool { false } +const x: Bool.false = Bool.false; + + +//// [parseEntityNameWithReservedWord.js] +var Bool; +(function (Bool) { + Bool[Bool["false"] = 0] = "false"; +})(Bool || (Bool = {})); +var x = Bool["false"]; diff --git a/tests/baselines/reference/parseEntityNameWithReservedWord.symbols b/tests/baselines/reference/parseEntityNameWithReservedWord.symbols new file mode 100644 index 0000000000000..9c6599a9f0d4b --- /dev/null +++ b/tests/baselines/reference/parseEntityNameWithReservedWord.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/parseEntityNameWithReservedWord.ts === +enum Bool { false } +>Bool : Symbol(Bool, Decl(parseEntityNameWithReservedWord.ts, 0, 0)) +>false : Symbol(Bool.false, Decl(parseEntityNameWithReservedWord.ts, 0, 11)) + +const x: Bool.false = Bool.false; +>x : Symbol(x, Decl(parseEntityNameWithReservedWord.ts, 1, 5)) +>Bool : Symbol(Bool, Decl(parseEntityNameWithReservedWord.ts, 0, 0)) +>false : Symbol(Bool.false, Decl(parseEntityNameWithReservedWord.ts, 0, 11)) +>Bool.false : Symbol(Bool.false, Decl(parseEntityNameWithReservedWord.ts, 0, 11)) +>Bool : Symbol(Bool, Decl(parseEntityNameWithReservedWord.ts, 0, 0)) +>false : Symbol(Bool.false, Decl(parseEntityNameWithReservedWord.ts, 0, 11)) + diff --git a/tests/baselines/reference/parseEntityNameWithReservedWord.types b/tests/baselines/reference/parseEntityNameWithReservedWord.types new file mode 100644 index 0000000000000..a7287ea40101e --- /dev/null +++ b/tests/baselines/reference/parseEntityNameWithReservedWord.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/parseEntityNameWithReservedWord.ts === +enum Bool { false } +>Bool : Bool +>false : Bool + +const x: Bool.false = Bool.false; +>x : Bool +>Bool : any +>false : Bool +>Bool.false : Bool +>Bool : typeof Bool +>false : Bool + diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList6.errors.txt b/tests/baselines/reference/parserErrorRecovery_ParameterList6.errors.txt index 61ad2fb175f3e..ef00e8afa8605 100644 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList6.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList6.errors.txt @@ -1,15 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts(2,23): error TS1110: Type expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts(2,28): error TS1003: Identifier expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts(3,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts(2,23): error TS2304: Cannot find name 'break'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ParameterLists/parserErrorRecovery_ParameterList6.ts (1 errors) ==== class Foo { public banana (x: break) { } ~~~~~ -!!! error TS1110: Type expected. - ~ -!!! error TS1003: Identifier expected. - } - ~ -!!! error TS1128: Declaration or statement expected. \ No newline at end of file +!!! error TS2304: Cannot find name 'break'. + } \ No newline at end of file diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList6.js b/tests/baselines/reference/parserErrorRecovery_ParameterList6.js index c5d8463f3693e..5a99b39431aac 100644 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList6.js +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList6.js @@ -7,7 +7,6 @@ class Foo { var Foo = /** @class */ (function () { function Foo() { } + Foo.prototype.banana = function (x) { }; return Foo; }()); -break ; -{ } diff --git a/tests/baselines/reference/parserErrorRecovery_ParameterList6.types b/tests/baselines/reference/parserErrorRecovery_ParameterList6.types index 292f234b7b472..295b8f1d24d9d 100644 --- a/tests/baselines/reference/parserErrorRecovery_ParameterList6.types +++ b/tests/baselines/reference/parserErrorRecovery_ParameterList6.types @@ -3,8 +3,7 @@ class Foo { >Foo : Foo public banana (x: break) { } ->banana : (x: any) => any +>banana : (x: any) => void >x : any -> : No type information available! -> : any +>break : No type information available! } diff --git a/tests/baselines/reference/parservoidInQualifiedName2.errors.txt b/tests/baselines/reference/parservoidInQualifiedName2.errors.txt index 7ca94a8989ad2..e3f7fce56aecb 100644 --- a/tests/baselines/reference/parservoidInQualifiedName2.errors.txt +++ b/tests/baselines/reference/parservoidInQualifiedName2.errors.txt @@ -1,13 +1,7 @@ tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName2.ts(1,9): error TS2503: Cannot find namespace 'x'. -tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName2.ts(1,11): error TS1003: Identifier expected. -tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName2.ts(1,15): error TS1109: Expression expected. -==== tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName2.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/parservoidInQualifiedName2.ts (1 errors) ==== var v : x.void; ~ -!!! error TS2503: Cannot find namespace 'x'. - ~~~~ -!!! error TS1003: Identifier expected. - ~ -!!! error TS1109: Expression expected. \ No newline at end of file +!!! error TS2503: Cannot find namespace 'x'. \ No newline at end of file diff --git a/tests/baselines/reference/parservoidInQualifiedName2.js b/tests/baselines/reference/parservoidInQualifiedName2.js index e3ed00f37994a..818f347cb185a 100644 --- a/tests/baselines/reference/parservoidInQualifiedName2.js +++ b/tests/baselines/reference/parservoidInQualifiedName2.js @@ -2,4 +2,4 @@ var v : x.void; //// [parservoidInQualifiedName2.js] -var v = void ; +var v; diff --git a/tests/baselines/reference/parservoidInQualifiedName2.types b/tests/baselines/reference/parservoidInQualifiedName2.types index b3c5734bc3f63..788b6c0204b7c 100644 --- a/tests/baselines/reference/parservoidInQualifiedName2.types +++ b/tests/baselines/reference/parservoidInQualifiedName2.types @@ -2,7 +2,5 @@ var v : x.void; >v : any >x : any -> : No type information available! ->void : undefined -> : any +>void : No type information available! diff --git a/tests/cases/compiler/parseEntityNameWithReservedWord.ts b/tests/cases/compiler/parseEntityNameWithReservedWord.ts new file mode 100644 index 0000000000000..d05a078955c80 --- /dev/null +++ b/tests/cases/compiler/parseEntityNameWithReservedWord.ts @@ -0,0 +1,2 @@ +enum Bool { false } +const x: Bool.false = Bool.false;