Skip to content

Commit 5706bd0

Browse files
committed
Unify walk_inline_asm
1 parent 78ffa6c commit 5706bd0

File tree

1 file changed

+40
-61
lines changed

1 file changed

+40
-61
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 40 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,46 @@ macro_rules! make_ast_visitor {
766766
return_result!(V)
767767
}
768768

769+
pub fn walk_inline_asm<$($lt,)? V: $trait$(<$lt>)?>(
770+
vis: &mut V,
771+
asm: ref_t!(InlineAsm)
772+
) -> result!(V) {
773+
// FIXME: Visit spans inside all this currently ignored stuff.
774+
let InlineAsm {
775+
template: _,
776+
template_strs: _,
777+
operands,
778+
clobber_abis: _,
779+
options: _,
780+
line_spans: _,
781+
} = asm;
782+
for (op, span) in operands {
783+
match op {
784+
InlineAsmOperand::In { expr, reg: _ }
785+
| InlineAsmOperand::Out { expr: Some(expr), reg: _, late: _ }
786+
| InlineAsmOperand::InOut { expr, reg: _, late: _ } => {
787+
try_v!(vis.visit_expr(expr));
788+
}
789+
InlineAsmOperand::Out { expr: None, reg: _, late: _ } => {}
790+
InlineAsmOperand::SplitInOut { in_expr, out_expr, reg: _, late: _ } => {
791+
try_v!(vis.visit_expr(in_expr));
792+
visit_o!(out_expr, |out_expr| vis.visit_expr(out_expr));
793+
}
794+
InlineAsmOperand::Const { anon_const } => {
795+
try_v!(vis.visit_anon_const(anon_const));
796+
}
797+
InlineAsmOperand::Sym { sym } => {
798+
try_v!(vis.visit_inline_asm_sym(sym));
799+
}
800+
InlineAsmOperand::Label { block } => {
801+
try_v!(vis.visit_block(block));
802+
}
803+
}
804+
try_v!(visit_span!(vis, span));
805+
}
806+
return_result!(V)
807+
}
808+
769809
make_walk_flat_map!{Arm, walk_flat_map_arm, visit_arm}
770810
make_walk_flat_map!{Attribute, walk_flat_map_attribute, visit_attribute}
771811
make_walk_flat_map!{ExprField, walk_flat_map_expr_field, visit_expr_field}
@@ -1441,37 +1481,6 @@ pub mod visit {
14411481
visitor.visit_path(path, DUMMY_NODE_ID)
14421482
}
14431483

1444-
pub fn walk_inline_asm<'a, V: Visitor<'a>>(visitor: &mut V, asm: &'a InlineAsm) -> V::Result {
1445-
let InlineAsm {
1446-
template: _,
1447-
template_strs: _,
1448-
operands,
1449-
clobber_abis: _,
1450-
options: _,
1451-
line_spans: _,
1452-
} = asm;
1453-
for (op, _span) in operands {
1454-
match op {
1455-
InlineAsmOperand::In { expr, reg: _ }
1456-
| InlineAsmOperand::Out { expr: Some(expr), reg: _, late: _ }
1457-
| InlineAsmOperand::InOut { expr, reg: _, late: _ } => {
1458-
try_visit!(visitor.visit_expr(expr))
1459-
}
1460-
InlineAsmOperand::Out { expr: None, reg: _, late: _ } => {}
1461-
InlineAsmOperand::SplitInOut { in_expr, out_expr, reg: _, late: _ } => {
1462-
try_visit!(visitor.visit_expr(in_expr));
1463-
visit_opt!(visitor, visit_expr, out_expr);
1464-
}
1465-
InlineAsmOperand::Const { anon_const } => {
1466-
try_visit!(visitor.visit_anon_const(anon_const))
1467-
}
1468-
InlineAsmOperand::Sym { sym } => try_visit!(visitor.visit_inline_asm_sym(sym)),
1469-
InlineAsmOperand::Label { block } => try_visit!(visitor.visit_block(block)),
1470-
}
1471-
}
1472-
V::Result::output()
1473-
}
1474-
14751484
pub fn walk_inline_asm_sym<'a, V: Visitor<'a>>(
14761485
visitor: &mut V,
14771486
InlineAsmSym { id, qself, path }: &'a InlineAsmSym,
@@ -2608,36 +2617,6 @@ pub mod mut_visit {
26082617
vis.visit_span(span);
26092618
}
26102619

2611-
fn walk_inline_asm<T: MutVisitor>(vis: &mut T, asm: &mut InlineAsm) {
2612-
// FIXME: Visit spans inside all this currently ignored stuff.
2613-
let InlineAsm {
2614-
template: _,
2615-
template_strs: _,
2616-
operands,
2617-
clobber_abis: _,
2618-
options: _,
2619-
line_spans: _,
2620-
} = asm;
2621-
for (op, span) in operands {
2622-
match op {
2623-
InlineAsmOperand::In { expr, reg: _ }
2624-
| InlineAsmOperand::Out { expr: Some(expr), reg: _, late: _ }
2625-
| InlineAsmOperand::InOut { expr, reg: _, late: _ } => vis.visit_expr(expr),
2626-
InlineAsmOperand::Out { expr: None, reg: _, late: _ } => {}
2627-
InlineAsmOperand::SplitInOut { in_expr, out_expr, reg: _, late: _ } => {
2628-
vis.visit_expr(in_expr);
2629-
if let Some(out_expr) = out_expr {
2630-
vis.visit_expr(out_expr);
2631-
}
2632-
}
2633-
InlineAsmOperand::Const { anon_const } => vis.visit_anon_const(anon_const),
2634-
InlineAsmOperand::Sym { sym } => vis.visit_inline_asm_sym(sym),
2635-
InlineAsmOperand::Label { block } => vis.visit_block(block),
2636-
}
2637-
vis.visit_span(span);
2638-
}
2639-
}
2640-
26412620
fn walk_inline_asm_sym<T: MutVisitor>(
26422621
vis: &mut T,
26432622
InlineAsmSym { id, qself, path }: &mut InlineAsmSym,

0 commit comments

Comments
 (0)