From 023572b9577a388eaf354962635766dc9708244b Mon Sep 17 00:00:00 2001 From: klutzy Date: Wed, 17 Dec 2014 22:02:50 +0900 Subject: [PATCH] pprust: Fix asm options --- src/libsyntax/print/pprust.rs | 28 +++++++++++++++++++++++----- src/test/pretty/asm-options.rs | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 src/test/pretty/asm-options.rs diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index a9717a526ad..66ef7a9aee1 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1786,11 +1786,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(":")); @@ -1828,6 +1824,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 or the MIT license +// , 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"); + } +}