Allow reserved words in type queries.

Fixes #181.
This commit is contained in:
Anders Hejlsberg
2014-07-22 15:11:24 -07:00
parent 33a643f563
commit 0550b93635
3 changed files with 46 additions and 3 deletions

View File

@@ -865,12 +865,12 @@ module ts {
return createMissingList<T>();
}
function parseEntityName(): EntityName {
function parseEntityName(allowReservedWords?: boolean): EntityName {
var entity: EntityName = parseIdentifier();
while (parseOptional(SyntaxKind.DotToken)) {
var node = <QualifiedName>createNode(SyntaxKind.QualifiedName, entity.pos);
node.left = entity;
node.right = parseIdentifier();
node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier();
entity = finishNode(node);
}
return entity;
@@ -909,7 +909,7 @@ module ts {
function parseTypeQuery(): TypeQueryNode {
var node = <TypeQueryNode>createNode(SyntaxKind.TypeQuery);
parseExpected(SyntaxKind.TypeOfKeyword);
node.exprName = parseEntityName();
node.exprName = parseEntityName(/*allowReservedWords*/ true);
return finishNode(node);
}

View File

@@ -0,0 +1,29 @@
//// [typeQueryWithReservedWords.ts]
class Controller {
create() {
}
delete() {
}
var() {
}
}
interface IScope {
create: typeof Controller.prototype.create;
delete: typeof Controller.prototype.delete; // Should not error
var: typeof Controller.prototype.var; // Should not error
}
//// [typeQueryWithReservedWords.js]
var Controller = (function () {
function Controller() {
}
Controller.prototype.create = function () {
};
Controller.prototype.delete = function () {
};
Controller.prototype.var = function () {
};
return Controller;
})();

View File

@@ -0,0 +1,14 @@
class Controller {
create() {
}
delete() {
}
var() {
}
}
interface IScope {
create: typeof Controller.prototype.create;
delete: typeof Controller.prototype.delete; // Should not error
var: typeof Controller.prototype.var; // Should not error
}