mirror of
https://github.com/swc-project/swc.git
synced 2024-12-25 06:36:08 +03:00
fix(es/parser): Fix parsing of >
in typescript mode (#7407)
**Related issue:** - Closes #7403.
This commit is contained in:
parent
9440f4b196
commit
57ad722d06
@ -637,6 +637,15 @@ impl<'a> Lexer<'a> {
|
||||
let c = self.cur().unwrap();
|
||||
self.bump();
|
||||
|
||||
if self.syntax.typescript() && self.ctx.in_type && !self.ctx.should_not_lex_lt_or_gt_as_type
|
||||
{
|
||||
if c == '<' {
|
||||
return Ok(Some(tok!('<')));
|
||||
} else if c == '>' {
|
||||
return Ok(Some(tok!('>')));
|
||||
}
|
||||
}
|
||||
|
||||
// XML style comment. `<!--`
|
||||
if c == '<' && self.is(b'!') && self.peek() == Some('-') && self.peek_ahead() == Some('-') {
|
||||
self.skip_line_comment(3);
|
||||
|
@ -217,8 +217,8 @@ impl<'a> Iterator for Lexer<'a> {
|
||||
start = self.input.cur_pos();
|
||||
};
|
||||
|
||||
let c = match self.input.cur() {
|
||||
Some(c) => c,
|
||||
match self.input.cur() {
|
||||
Some(..) => {}
|
||||
// End of input.
|
||||
None => {
|
||||
if let Some(comments) = self.comments.as_mut() {
|
||||
@ -324,16 +324,6 @@ impl<'a> Iterator for Lexer<'a> {
|
||||
return self.read_tmpl_token(start_pos_of_tpl).map(Some);
|
||||
}
|
||||
|
||||
if self.syntax.typescript() && self.ctx.in_type {
|
||||
if c == '<' {
|
||||
self.input.bump();
|
||||
return Ok(Some(tok!('<')));
|
||||
} else if c == '>' {
|
||||
self.input.bump();
|
||||
return Ok(Some(tok!('>')));
|
||||
}
|
||||
}
|
||||
|
||||
self.read_token()
|
||||
})();
|
||||
|
||||
|
@ -383,6 +383,8 @@ pub struct Context {
|
||||
|
||||
in_type: bool,
|
||||
/// Typescript extension.
|
||||
should_not_lex_lt_or_gt_as_type: bool,
|
||||
/// Typescript extension.
|
||||
in_declare: bool,
|
||||
|
||||
/// If true, `:` should not be treated as a type annotation.
|
||||
|
@ -565,6 +565,15 @@ impl<I: Tokens> Parser<I> {
|
||||
/// `is_new_expr`: true iff we are parsing production 'NewExpression'.
|
||||
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
|
||||
fn parse_member_expr_or_new_expr(&mut self, is_new_expr: bool) -> PResult<Box<Expr>> {
|
||||
let ctx = Context {
|
||||
should_not_lex_lt_or_gt_as_type: true,
|
||||
..self.ctx()
|
||||
};
|
||||
self.with_ctx(ctx)
|
||||
.parse_member_expr_or_new_expr_inner(is_new_expr)
|
||||
}
|
||||
|
||||
fn parse_member_expr_or_new_expr_inner(&mut self, is_new_expr: bool) -> PResult<Box<Expr>> {
|
||||
trace_cur!(self, parse_member_expr_or_new_expr);
|
||||
|
||||
let start = cur_pos!(self);
|
||||
@ -622,7 +631,12 @@ impl<I: Tokens> Parser<I> {
|
||||
|
||||
let type_args = if self.input.syntax().typescript() && is!(self, '<') {
|
||||
self.try_parse_ts(|p| {
|
||||
let args = p.parse_ts_type_args()?;
|
||||
let ctx = Context {
|
||||
should_not_lex_lt_or_gt_as_type: false,
|
||||
..p.ctx()
|
||||
};
|
||||
|
||||
let args = p.with_ctx(ctx).parse_ts_type_args()?;
|
||||
if !is!(p, '(') {
|
||||
// This will fail
|
||||
expect!(p, '(');
|
||||
@ -680,6 +694,7 @@ impl<I: Tokens> Parser<I> {
|
||||
None
|
||||
};
|
||||
let obj = if let Some(type_args) = type_args {
|
||||
trace_cur!(self, parse_member_expr_or_new_expr__with_type_args);
|
||||
Box::new(Expr::TsInstantiation(TsInstantiation {
|
||||
expr: obj,
|
||||
type_args,
|
||||
@ -1102,6 +1117,7 @@ impl<I: Tokens> Parser<I> {
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
|
||||
pub(super) fn parse_subscripts(
|
||||
&mut self,
|
||||
mut obj: Callee,
|
||||
@ -1118,6 +1134,7 @@ impl<I: Tokens> Parser<I> {
|
||||
}
|
||||
|
||||
/// returned bool is true if this method should be called again.
|
||||
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
|
||||
fn parse_subscript(
|
||||
&mut self,
|
||||
start: BytePos,
|
||||
@ -1125,6 +1142,7 @@ impl<I: Tokens> Parser<I> {
|
||||
no_call: bool,
|
||||
no_computed_member: bool,
|
||||
) -> PResult<(Box<Expr>, bool)> {
|
||||
trace_cur!(self, parse_subscript);
|
||||
let _ = cur!(self, false);
|
||||
|
||||
if self.input.syntax().typescript() {
|
||||
@ -1169,7 +1187,11 @@ impl<I: Tokens> Parser<I> {
|
||||
|
||||
let mut_obj_opt = &mut obj_opt;
|
||||
|
||||
let result = self.try_parse_ts(|p| {
|
||||
let ctx: Context = Context {
|
||||
should_not_lex_lt_or_gt_as_type: true,
|
||||
..self.ctx()
|
||||
};
|
||||
let result = self.with_ctx(ctx).try_parse_ts(|p| {
|
||||
if !no_call
|
||||
&& p.at_possible_async(match &mut_obj_opt {
|
||||
Some(Callee::Expr(ref expr)) => expr,
|
||||
@ -1210,6 +1232,18 @@ impl<I: Tokens> Parser<I> {
|
||||
)
|
||||
.map(|expr| (Box::new(Expr::TaggedTpl(expr)), true))
|
||||
.map(Some)
|
||||
} else if is!(p, '=') {
|
||||
Ok(Some((
|
||||
Box::new(Expr::TsInstantiation(TsInstantiation {
|
||||
span: span!(p, start),
|
||||
expr: match mut_obj_opt {
|
||||
Some(Callee::Expr(obj)) => obj.take(),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
type_args,
|
||||
})),
|
||||
true,
|
||||
)))
|
||||
} else if no_call {
|
||||
unexpected!(p, "`")
|
||||
} else {
|
||||
@ -1500,6 +1534,7 @@ impl<I: Tokens> Parser<I> {
|
||||
}
|
||||
|
||||
/// Parse call, dot, and `[]`-subscript expressions.
|
||||
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
|
||||
pub(super) fn parse_lhs_expr(&mut self) -> PResult<Box<Expr>> {
|
||||
trace_cur!(self, parse_lhs_expr);
|
||||
|
||||
|
@ -231,7 +231,11 @@ impl<I: Tokens> Parser<I> {
|
||||
let type_name = self.parse_ts_entity_name(/* allow_reserved_words */ true)?;
|
||||
trace_cur!(self, parse_ts_type_ref__type_args);
|
||||
let type_params = if !self.input.had_line_break_before_cur() && is!(self, '<') {
|
||||
Some(self.parse_ts_type_args()?)
|
||||
let ctx = Context {
|
||||
should_not_lex_lt_or_gt_as_type: false,
|
||||
..self.ctx()
|
||||
};
|
||||
Some(self.with_ctx(ctx).parse_ts_type_args()?)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -568,7 +572,9 @@ impl<I: Tokens> Parser<I> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
|
||||
pub(super) fn try_parse_ts_type_args(&mut self) -> Option<Box<TsTypeParamInstantiation>> {
|
||||
trace_cur!(self, try_parse_ts_type_args);
|
||||
debug_assert!(self.input.syntax().typescript());
|
||||
|
||||
self.try_parse_ts(|p| {
|
||||
|
@ -0,0 +1 @@
|
||||
fn(z<Number, Object>(y))
|
@ -0,0 +1,124 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 24,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "z",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 22,
|
||||
"end": 23,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": {
|
||||
"type": "TsTypeParameterInstantiation",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 21,
|
||||
"ctxt": 0
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"type": "TsTypeReference",
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "Number",
|
||||
"optional": false
|
||||
},
|
||||
"typeParams": null
|
||||
},
|
||||
{
|
||||
"type": "TsTypeReference",
|
||||
"span": {
|
||||
"start": 14,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 14,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "Object",
|
||||
"optional": false
|
||||
},
|
||||
"typeParams": null
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x < y, x >>>= y)
|
@ -0,0 +1,137 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 27,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 27,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 27,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "AssignmentExpression",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>>=",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false,
|
||||
"typeAnnotation": null
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 25,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(z<Number, Object> = y)
|
@ -0,0 +1,128 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "AssignmentExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "=",
|
||||
"left": {
|
||||
"type": "TsInstantiation",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 21,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "z",
|
||||
"optional": false
|
||||
},
|
||||
"typeArguments": {
|
||||
"type": "TsTypeParameterInstantiation",
|
||||
"span": {
|
||||
"start": 5,
|
||||
"end": 21,
|
||||
"ctxt": 0
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"type": "TsTypeReference",
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 6,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "Number",
|
||||
"optional": false
|
||||
},
|
||||
"typeParams": null
|
||||
},
|
||||
{
|
||||
"type": "TsTypeReference",
|
||||
"span": {
|
||||
"start": 14,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"typeName": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 14,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "Object",
|
||||
"optional": false
|
||||
},
|
||||
"typeParams": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 24,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x > y)
|
@ -0,0 +1,104 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x >= y)
|
@ -0,0 +1,104 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">=",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 16,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x >> y)
|
@ -0,0 +1,104 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 16,
|
||||
"end": 17,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x >>= y)
|
@ -0,0 +1,105 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "AssignmentExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>=",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false,
|
||||
"typeAnnotation": null
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 17,
|
||||
"end": 18,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x >>>= y)
|
@ -0,0 +1,105 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 20,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "AssignmentExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>>=",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false,
|
||||
"typeAnnotation": null
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x < y, x >>= y)
|
@ -0,0 +1,137 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "AssignmentExpression",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>=",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false,
|
||||
"typeAnnotation": null
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 24,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
@ -0,0 +1 @@
|
||||
fn(x < y, x < y, x >>> y)
|
@ -0,0 +1,136 @@
|
||||
{
|
||||
"type": "Script",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 26,
|
||||
"ctxt": 0
|
||||
},
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 1,
|
||||
"end": 3,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "fn",
|
||||
"optional": false
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 4,
|
||||
"end": 5,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 8,
|
||||
"end": 9,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": "<",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 11,
|
||||
"end": 12,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 15,
|
||||
"end": 16,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"spread": null,
|
||||
"expression": {
|
||||
"type": "BinaryExpression",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"operator": ">>>",
|
||||
"left": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 18,
|
||||
"end": 19,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "x",
|
||||
"optional": false
|
||||
},
|
||||
"right": {
|
||||
"type": "Identifier",
|
||||
"span": {
|
||||
"start": 24,
|
||||
"end": 25,
|
||||
"ctxt": 0
|
||||
},
|
||||
"value": "y",
|
||||
"optional": false
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"typeArguments": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"interpreter": null
|
||||
}
|
Loading…
Reference in New Issue
Block a user