diff options
| author | Amanieu d'Antras <amanieu@gmail.com> | 2015-12-05 08:18:24 +0000 |
|---|---|---|
| committer | Amanieu d'Antras <amanieu@gmail.com> | 2015-12-05 10:11:20 +0000 |
| commit | 65707dfc001b4dea745a040c2ecc61847ccba608 (patch) | |
| tree | 164a1736ee4a1e3609cab2d0f8acd248cee590a5 /src/libsyntax | |
| parent | ce5b0351a57dcf335ea214de3ff59466e9b929d9 (diff) | |
| download | rust-65707dfc001b4dea745a040c2ecc61847ccba608.tar.gz rust-65707dfc001b4dea745a040c2ecc61847ccba608.zip | |
Use a struct instead of a tuple for inline asm output operands
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/ext/asm.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 4 |
5 files changed, 29 insertions, 11 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index ac3e26d0335..46110a3bee9 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1459,10 +1459,18 @@ pub enum AsmDialect { } #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] +pub struct InlineAsmOutput { + pub constraint: InternedString, + pub expr: P<Expr>, + pub is_rw: bool, + pub is_indirect: bool, +} + +#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub struct InlineAsm { pub asm: InternedString, pub asm_str_style: StrStyle, - pub outputs: Vec<(InternedString, P<Expr>, bool, bool)>, + pub outputs: Vec<InlineAsmOutput>, pub inputs: Vec<(InternedString, P<Expr>)>, pub clobbers: Vec<InternedString>, pub volatile: bool, diff --git a/src/libsyntax/ext/asm.rs b/src/libsyntax/ext/asm.rs index f643f0be276..b4f29f83726 100644 --- a/src/libsyntax/ext/asm.rs +++ b/src/libsyntax/ext/asm.rs @@ -126,7 +126,12 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) let is_rw = output.is_some(); let is_indirect = constraint.contains("*"); - outputs.push((output.unwrap_or(constraint), out, is_rw, is_indirect)); + outputs.push(ast::InlineAsmOutput { + constraint: output.unwrap_or(constraint), + expr: out, + is_rw: is_rw, + is_indirect: is_indirect, + }); } } Inputs => { diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 8619c3c0bdb..c637813f07e 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -1303,8 +1303,13 @@ pub fn noop_fold_expr<T: Folder>(Expr {id, node, span, attrs}: Expr, folder: &mu inputs: inputs.move_map(|(c, input)| { (c, folder.fold_expr(input)) }), - outputs: outputs.move_map(|(c, out, is_rw, is_indirect)| { - (c, folder.fold_expr(out), is_rw, is_indirect) + outputs: outputs.move_map(|out| { + InlineAsmOutput { + constraint: out.constraint, + expr: folder.fold_expr(out.expr), + is_rw: out.is_rw, + is_indirect: out.is_indirect, + } }), asm: asm, asm_str_style: asm_str_style, diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index a0b7df3e2e9..a96908e23db 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2221,16 +2221,16 @@ impl<'a> State<'a> { try!(self.word_space(":")); try!(self.commasep(Inconsistent, &a.outputs, - |s, &(ref co, ref o, is_rw, _)| { - match co.slice_shift_char() { - Some(('=', operand)) if is_rw => { + |s, out| { + match out.constraint.slice_shift_char() { + Some(('=', operand)) if out.is_rw => { try!(s.print_string(&format!("+{}", operand), ast::CookedStr)) } - _ => try!(s.print_string(&co, ast::CookedStr)) + _ => try!(s.print_string(&out.constraint, ast::CookedStr)) } try!(s.popen()); - try!(s.print_expr(&**o)); + try!(s.print_expr(&*out.expr)); try!(s.pclose()); Ok(()) })); diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 5ede6596e8f..22bf135f4f9 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -786,8 +786,8 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) { for &(_, ref input) in &ia.inputs { visitor.visit_expr(&input) } - for &(_, ref output, _, _) in &ia.outputs { - visitor.visit_expr(&output) + for output in &ia.outputs { + visitor.visit_expr(&output.expr) } } } |
