mirror of
https://github.com/swc-project/swc.git
synced 2024-12-24 22:22:34 +03:00
fix(es/parser): Fix a typescript instantiation expression followed by EOF (#3699)
This commit is contained in:
parent
dd010a5a8c
commit
010fe048c2
@ -572,7 +572,7 @@ impl<'a, I: Tokens> Parser<I> {
|
||||
return_if_arrow!(self, obj);
|
||||
|
||||
let type_args = if self.syntax().typescript() && is!(self, '<') {
|
||||
self.try_parse_type_args_of_ts_expr_with_type_args()
|
||||
self.try_parse_ts_type_args()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -1109,7 +1109,7 @@ impl<'a, I: Tokens> Parser<I> {
|
||||
}
|
||||
|
||||
let type_args = if self.syntax().typescript() && is!(self, '<') {
|
||||
self.try_parse_type_args_of_ts_expr_with_type_args()
|
||||
self.try_parse_ts_type_args()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -1143,7 +1143,7 @@ impl<'a, I: Tokens> Parser<I> {
|
||||
};
|
||||
|
||||
let type_args = if self.syntax().typescript() && is!(self, '<') {
|
||||
self.try_parse_type_args_of_ts_expr_with_type_args()
|
||||
self.try_parse_ts_type_args()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -1262,7 +1262,7 @@ impl<'a, I: Tokens> Parser<I> {
|
||||
debug_assert_eq!(prop.span().hi(), span.hi());
|
||||
|
||||
let type_args = if self.syntax().typescript() && is!(self, '<') {
|
||||
self.try_parse_type_args_of_ts_expr_with_type_args()
|
||||
self.try_parse_ts_type_args()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
@ -506,9 +506,7 @@ impl<I: Tokens> Parser<I> {
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn try_parse_type_args_of_ts_expr_with_type_args(
|
||||
&mut self,
|
||||
) -> Option<TsTypeParamInstantiation> {
|
||||
pub(super) fn try_parse_ts_type_args(&mut self) -> Option<TsTypeParamInstantiation> {
|
||||
debug_assert!(self.input.syntax().typescript());
|
||||
|
||||
self.try_parse_ts(|p| {
|
||||
@ -517,6 +515,7 @@ impl<I: Tokens> Parser<I> {
|
||||
p, ',', '.', '?', ')', ']', ':', '&', '|', '^', '}', "??", "==", "===", "!=",
|
||||
"!==", "&&", "||"
|
||||
) || is_exact!(p, ';')
|
||||
|| eof!(p)
|
||||
{
|
||||
Ok(Some(type_args))
|
||||
} else {
|
||||
|
@ -0,0 +1 @@
|
||||
let v = f<x>
|
@ -0,0 +1,90 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "VariableDeclaration",
|
||||
"span": {
|
||||
"start": 0,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"kind": "let",
|
||||
"declare": false,
|
||||
"declarations": [
|
||||
{
|
||||
"type": "VariableDeclarator",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"id": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "v",
|
||||
"optional": false,
|
||||
"typeAnnotation": null
|
||||
},
|
||||
"init": {
|
||||
"type": "TsInstantiation",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "f",
|
||||
"optional": false
|
||||
},
|
||||
"typeArguments": {
|
||||
"type": "TsTypeParameterInstantiation",
|
||||
"span": {
|
||||
"start": 9,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"type": "TsTypeReference",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11,
|
||||
"ctxt": 0
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 10,
|
||||
"end": 11,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"typeParams": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"definite": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
Loading…
Reference in New Issue
Block a user