8000 Merge pull request #199 from Microsoft/reservedWordsInTypeQueries · robertknight/TypeScript@e742694 · GitHub
[go: up one dir, main page]

Skip to content

Commit e742694

Browse files
committed
Merge pull request microsoft#199 from Microsoft/reservedWordsInTypeQueries
Allow reserved words in type queries.
2 parents bc26d48 + 1c594d0 commit e742694

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

src/compiler/parser.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -865,12 +865,13 @@ module ts {
865865
return createMissingList<T>();
866866
}
867867

868-
function parseEntityName(): EntityName {
868+
// The allowReservedWords parameter controls whether reserved words are permitted after the first dot
869+
function parseEntityName(allowReservedWords: boolean): EntityName {
869870
var entity: EntityName = parseIdentifier();
870871
while (parseOptional(SyntaxKind.DotToken)) {
871872
var node = <QualifiedName>createNode(SyntaxKind.QualifiedName, entity.pos);
872873
node.left = entity;
873-
node.right = parseIdentifier();
874+
node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier();
874875
entity = finishNode(node);
875876
}
876877
return entity;
@@ -899,7 +900,7 @@ module ts {
899900

900901
function parseTypeReference(): TypeReferenceNode {
901902
var node = <TypeReferenceNode>createNode(SyntaxKind.TypeReference);
902-
node.typeName = parseEntityName();
903+
node.typeName = parseEntityName(/*allowReservedWords*/ false);
903904
if (!scanner.hasPrecedingLineBreak() && token === SyntaxKind.LessThanToken) {
904905
node.typeArguments = parseTypeArguments();
905906
}
@@ -909,7 +910,7 @@ module ts {
909910
function parseTypeQuery(): TypeQueryNode {
910911
var node = <TypeQueryNode>createNode(SyntaxKind.TypeQuery);
911912
parseExpected(SyntaxKind.TypeOfKeyword);
912-
node.exprName = parseEntityName();
913+
node.exprName = parseEntityName(/*allowReservedWords*/ true);
913914
return finishNode(node);
914915
}
915916

@@ -2820,7 +2821,7 @@ module ts {
28202821
parseExpected(SyntaxKind.ImportKeyword);
28212822
node.name = parseIdentifier();
28222823
parseExpected(SyntaxKind.EqualsToken);
2823-
var entityName = parseEntityName();
2824+
var entityName = parseEntityName(/*allowReservedWords*/ false);
28242825
if (entityName.kind === SyntaxKind.Identifier && (<Identifier>entityName).text === "require" && parseOptional(SyntaxKind.OpenParenToken)) {
28252826
node.externalModuleName = parseStringLiteral();
28262827
parseExpected(SyntaxKind.CloseParenToken);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [typeQueryWithReservedWords.ts]
2+
class Controller {
3+
create() {
4+
}
5+
delete() {
6+
}
7+
var() {
8+
}
9+
}
10+
11+
interface IScope {
12+
create: typeof Controller.prototype.create;
13+
delete: typeof Controller.prototype.delete; // Should not error
14+
var: typeof Controller.prototype.var; // Should not error
15+
}
16+
17+
18+
//// [typeQueryWithReservedWords.js]
19+
var Controller = (function () {
20+
function Controller() {
21+
}
22+
Controller.prototype.create = function () {
23+
};
24+
Controller.prototype.delete = function () {
25+
};
26+
Controller.prototype.var = function () {
27+
};
28+
return Controller;
29+
})();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Controller {
2+
create() {
3+
}
4+
delete() {
5+
}
6+
var() {
7+
}
8+
}
9+
10+
interface IScope {
11+
create: typeof Controller.prototype.create;
12+
delete: typeof Controller.prototype.delete; // Should not error
13+
var: typeof Controller.prototype.var; // Should not error
14+
}

0 commit comments

Comments
 (0)
0