fix existential type param parsing

This commit is contained in:
Sebastian McKenzie 2015-11-03 20:04:55 +00:00
parent 4ad8a1dc83
commit 0e76a5ace1
2 changed files with 21 additions and 7 deletions

View File

@ -164,7 +164,7 @@ pp.flowParseTypeParameterDeclaration = function () {
this.expectRelational("<"); this.expectRelational("<");
while (!this.isRelational(">")) { while (!this.isRelational(">")) {
node.params.push(this.parseFlowTypeParam()); node.params.push(this.flowParseExistentialTypeParam() || this.flowParseTypeAnnotatableIdentifier());
if (!this.isRelational(">")) { if (!this.isRelational(">")) {
this.expect(tt.comma); this.expect(tt.comma);
} }
@ -174,13 +174,11 @@ pp.flowParseTypeParameterDeclaration = function () {
return this.finishNode(node, "TypeParameterDeclaration"); return this.finishNode(node, "TypeParameterDeclaration");
}; };
pp.parseFlowTypeParam = function () { pp.flowParseExistentialTypeParam = function () {
if (this.match(tt.star)) { if (this.match(tt.star)) {
let node = this.startNode(); let node = this.startNode();
this.next(); this.next();
return this.finishNode(node, "ExistentialTypeParam"); return this.finishNode(node, "ExistentialTypeParam");
} else {
return this.flowParseTypeAnnotatableIdentifier();
} }
}; };
@ -192,7 +190,7 @@ pp.flowParseTypeParameterInstantiation = function () {
this.expectRelational("<"); this.expectRelational("<");
while (!this.isRelational(">")) { while (!this.isRelational(">")) {
node.params.push(this.parseFlowTypeParam()); node.params.push(this.flowParseExistentialTypeParam() || this.flowParseType());
if (!this.isRelational(">")) { if (!this.isRelational(">")) {
this.expect(tt.comma); this.expect(tt.comma);
} }

View File

@ -121,7 +121,7 @@
}, },
"params": [ "params": [
{ {
"type": "Identifier", "type": "GenericTypeAnnotation",
"start": 23, "start": 23,
"end": 24, "end": 24,
"loc": { "loc": {
@ -134,7 +134,23 @@
"column": 24 "column": 24
} }
}, },
"name": "T" "typeParameters": null,
"id": {
"type": "Identifier",
"start": 23,
"end": 24,
"loc": {
"start": {
"line": 1,
"column": 23
},
"end": {
"line": 1,
"column": 24
}
},
"name": "T"
}
}, },
{ {
"type": "ExistentialTypeParam", "type": "ExistentialTypeParam",