From ddb2466f6a1bb66f22824334022a4cee61c73bdc Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 14 Nov 2014 09:18:10 -0800 Subject: librustc: Always parse `macro!()`/`macro![]` as expressions if not 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] --- src/test/debuginfo/lexical-scope-with-macro.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/test/debuginfo') diff --git a/src/test/debuginfo/lexical-scope-with-macro.rs b/src/test/debuginfo/lexical-scope-with-macro.rs index 5a59ed5b2f3..2c76f2ca7df 100644 --- a/src/test/debuginfo/lexical-scope-with-macro.rs +++ b/src/test/debuginfo/lexical-scope-with-macro.rs @@ -113,23 +113,23 @@ #![feature(macro_rules)] -macro_rules! trivial( +macro_rules! trivial { ($e1:expr) => ($e1) -) +} -macro_rules! no_new_scope( +macro_rules! no_new_scope { ($e1:expr) => (($e1 + 2) - 1) -) +} -macro_rules! new_scope( +macro_rules! new_scope { () => ({ let a = 890242i; zzz(); // #break sentinel(); }) -) +} -macro_rules! shadow_within_macro( +macro_rules! shadow_within_macro { ($e1:expr) => ({ let a = $e1 + 2; @@ -141,12 +141,12 @@ macro_rules! shadow_within_macro( zzz(); // #break sentinel(); }) -) +} -macro_rules! dup_expr( +macro_rules! dup_expr { ($e1:expr) => (($e1) + ($e1)) -) +} fn main() { -- cgit 1.4.1-3-g733a5