diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-12-22 12:48:07 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-12-22 12:48:07 -0800 |
| commit | 55cf032f43c04e2c884589dd8737b9ac58fcab20 (patch) | |
| tree | 044590712a37c198a566100646e3ff4a16e69103 | |
| parent | 941361b3950500c9c356759e6fd33243588bc59b (diff) | |
| parent | 023572b9577a388eaf354962635766dc9708244b (diff) | |
rollup merge of #20124: klutzy/pprust-asm
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 28 | ||||
| -rw-r--r-- | src/test/pretty/asm-options.rs | 21 |
2 files changed, 44 insertions, 5 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 0d79b7cf925..21410395a90 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1787,11 +1787,7 @@ impl<'a> State<'a> { } } ast::ExprInlineAsm(ref a) => { - if a.volatile { - try!(word(&mut self.s, "__volatile__ asm!")); - } else { - try!(word(&mut self.s, "asm!")); - } + try!(word(&mut self.s, "asm!")); try!(self.popen()); try!(self.print_string(a.asm.get(), a.asm_str_style)); try!(self.word_space(":")); @@ -1829,6 +1825,28 @@ impl<'a> State<'a> { try!(s.print_string(co.get(), ast::CookedStr)); Ok(()) })); + + let mut options = vec!(); + if a.volatile { + options.push("volatile"); + } + if a.alignstack { + options.push("alignstack"); + } + if a.dialect == ast::AsmDialect::AsmIntel { + options.push("intel"); + } + + if options.len() > 0 { + try!(space(&mut self.s)); + try!(self.word_space(":")); + try!(self.commasep(Inconsistent, &*options, + |s, &co| { + try!(s.print_string(co, ast::CookedStr)); + Ok(()) + })); + } + try!(self.pclose()); } ast::ExprMac(ref m) => try!(self.print_mac(m, token::Paren)), diff --git a/src/test/pretty/asm-options.rs b/src/test/pretty/asm-options.rs new file mode 100644 index 00000000000..bc9f89a3d15 --- /dev/null +++ b/src/test/pretty/asm-options.rs @@ -0,0 +1,21 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(asm)] + +// pp-exact + +pub fn main() { + unsafe { + asm!("" : : : : "volatile"); + asm!("" : : : : "alignstack"); + asm!("" : : : : "intel"); + } +} |
