diff options
| author | bors <bors@rust-lang.org> | 2014-12-18 17:32:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-12-18 17:32:07 +0000 |
| commit | f9a48492a82f805aa40d8b6fea290badbab0d1b1 (patch) | |
| tree | f496892ac2e9bfb5b7be8016c6d5ad5e5d6667ef /src/libstd/rt | |
| parent | c4d58ce15be0318622b42790a501e0d20a9f827c (diff) | |
| parent | ddb2466f6a1bb66f22824334022a4cee61c73bdc (diff) | |
| download | rust-f9a48492a82f805aa40d8b6fea290badbab0d1b1.tar.gz rust-f9a48492a82f805aa40d8b6fea290badbab0d1b1.zip | |
auto merge of #19984 : japaric/rust/macro-expressions, r=alexcrichton
followed by a semicolon.
This allows code like `vec![1i, 2, 3].len();` to work.
This breaks code that uses macros as statements without putting
semicolons after them, such as:
fn main() {
...
assert!(a == b)
assert!(c == d)
println(...);
}
It also breaks code that uses macros as items without semicolons:
local_data_key!(foo)
fn main() {
println("hello world")
}
Add semicolons to fix this code. Those two examples can be fixed as
follows:
fn main() {
...
assert!(a == b);
assert!(c == d);
println(...);
}
local_data_key!(foo);
fn main() {
println("hello world")
}
RFC #378.
Closes #18635.
[breaking-change]
---
Rebased version of #18958
r? @alexcrichton
cc @pcwalton
Diffstat (limited to 'src/libstd/rt')
| -rw-r--r-- | src/libstd/rt/backtrace.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/libstd/rt/backtrace.rs b/src/libstd/rt/backtrace.rs index ebbd3561313..d815a5ea4f7 100644 --- a/src/libstd/rt/backtrace.rs +++ b/src/libstd/rt/backtrace.rs @@ -116,7 +116,7 @@ fn demangle(writer: &mut Writer, s: &str) -> IoResult<()> { rest = rest.slice_to(i); while rest.len() > 0 { if rest.starts_with("$") { - macro_rules! demangle( + macro_rules! demangle { ($($pat:expr => $demangled:expr),*) => ({ $(if rest.starts_with($pat) { try!(writer.write_str($demangled)); @@ -128,7 +128,8 @@ fn demangle(writer: &mut Writer, s: &str) -> IoResult<()> { } }) - ) + } + // see src/librustc/back/link.rs for these mappings demangle! ( "$SP$" => "@", @@ -940,12 +941,12 @@ mod imp { Err(..) => return Ok(()), }; - macro_rules! sym( ($e:expr, $t:ident) => (unsafe { + macro_rules! sym { ($e:expr, $t:ident) => (unsafe { match lib.symbol($e) { Ok(f) => mem::transmute::<*mut u8, $t>(f), Err(..) => return Ok(()) } - }) ) + }) } // Fetch the symbols necessary from dbghelp.dll let SymFromAddr = sym!("SymFromAddr", SymFromAddrFn); @@ -1013,11 +1014,13 @@ mod imp { #[cfg(test)] mod test { use prelude::*; - macro_rules! t( ($a:expr, $b:expr) => ({ + use io::MemWriter; + + macro_rules! t { ($a:expr, $b:expr) => ({ let mut m = Vec::new(); super::demangle(&mut m, $a).unwrap(); assert_eq!(String::from_utf8(m).unwrap(), $b); - }) ) + }) } #[test] fn demangle() { |
