mirror of
https://github.com/denoland/deno.git
synced 2025-03-06 11:18:57 -05:00
chore: support more nodes
This commit is contained in:
parent
b972fc996b
commit
9124e0a0df
2 changed files with 61 additions and 27 deletions
|
@ -266,7 +266,20 @@ fn serialize_stmt(
|
|||
let raw = ctx.header(AstNode::DebuggerStatement, parent, &node.span);
|
||||
ctx.commit_schema(raw)
|
||||
}
|
||||
Stmt::With(_) => todo!(),
|
||||
Stmt::With(node) => {
|
||||
let raw = ctx.header(AstNode::WithStatement, parent, &node.span);
|
||||
let obj_pos = ctx.ref_field(AstProp::Object);
|
||||
let body_pos = ctx.ref_field(AstProp::Body);
|
||||
let pos = ctx.commit_schema(raw);
|
||||
|
||||
let obj = serialize_expr(ctx, &node.obj, pos);
|
||||
let body = serialize_stmt(ctx, &node.body, pos);
|
||||
|
||||
ctx.write_ref(obj_pos, obj);
|
||||
ctx.write_ref(body_pos, body);
|
||||
|
||||
pos
|
||||
}
|
||||
Stmt::Return(node) => {
|
||||
let raw = ctx.header(AstNode::ReturnStatement, parent, &node.span);
|
||||
let arg_pos = ctx.ref_field(AstProp::Argument);
|
||||
|
@ -842,6 +855,24 @@ fn serialize_expr(
|
|||
pos
|
||||
}
|
||||
Expr::Call(node) => {
|
||||
if let Callee::Import(_) = node.callee {
|
||||
let raw = ctx.header(AstNode::ImportExpression, parent, &node.span);
|
||||
let source_pos = ctx.ref_field(AstProp::Source);
|
||||
let options_pos = ctx.ref_field(AstProp::Options);
|
||||
let pos = ctx.commit_schema(raw);
|
||||
|
||||
if let Some(arg) = node.args.first() {
|
||||
let source = serialize_expr_or_spread(ctx, arg, pos);
|
||||
ctx.write_ref(source_pos, source);
|
||||
}
|
||||
|
||||
if let Some(arg) = node.args.get(1) {
|
||||
let obj = serialize_expr_or_spread(ctx, arg, pos);
|
||||
ctx.write_ref(options_pos, obj);
|
||||
}
|
||||
|
||||
pos
|
||||
} else {
|
||||
let raw = ctx.header(AstNode::CallExpression, parent, &node.span);
|
||||
let opt_pos = ctx.bool_field(AstProp::Optional);
|
||||
let callee_pos = ctx.ref_field(AstProp::Callee);
|
||||
|
@ -854,7 +885,7 @@ fn serialize_expr(
|
|||
let raw = ctx.header(AstNode::Super, pos, &super_node.span);
|
||||
ctx.commit_schema(raw)
|
||||
}
|
||||
Callee::Import(_) => todo!(),
|
||||
Callee::Import(_) => unreachable!("Already handled"),
|
||||
Callee::Expr(expr) => serialize_expr(ctx, expr, pos),
|
||||
};
|
||||
|
||||
|
@ -875,6 +906,7 @@ fn serialize_expr(
|
|||
|
||||
pos
|
||||
}
|
||||
}
|
||||
Expr::New(node) => {
|
||||
let raw = ctx.header(AstNode::NewExpression, parent, &node.span);
|
||||
let callee_pos = ctx.ref_field(AstProp::Callee);
|
||||
|
|
|
@ -277,6 +277,7 @@ pub enum AstProp {
|
|||
OpeningFragment,
|
||||
Operator,
|
||||
Optional,
|
||||
Options,
|
||||
Out,
|
||||
Param,
|
||||
ParameterName,
|
||||
|
@ -391,6 +392,7 @@ impl Display for AstProp {
|
|||
AstProp::OpeningFragment => "openingFragment",
|
||||
AstProp::Operator => "operator",
|
||||
AstProp::Optional => "optional",
|
||||
AstProp::Options => "options",
|
||||
AstProp::Out => "out",
|
||||
AstProp::Param => "param",
|
||||
AstProp::ParameterName => "parameterName",
|
||||
|
|
Loading…
Add table
Reference in a new issue