diff options
| author | Jonas Schievink <jonas@schievink.net> | 2015-08-12 10:34:14 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonas@schievink.net> | 2015-08-12 10:34:14 +0200 |
| commit | a016dfb1d110f7dfcd5f8e36ed02c2fd029532d3 (patch) | |
| tree | 73a7b57b1ad2f579970db11b83a867b5e45992a6 /src | |
| parent | 91c618f133a35ffccc7e03e06f9318c59d091ae3 (diff) | |
| download | rust-a016dfb1d110f7dfcd5f8e36ed02c2fd029532d3.tar.gz rust-a016dfb1d110f7dfcd5f8e36ed02c2fd029532d3.zip | |
Fix macro expansion in for loop pattern
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/for-loop-macro.rs | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index cd60ee0691c..6c09d6c107e 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -400,7 +400,7 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> { // `::std::option::Option::Some(<pat>) => <body>` let pat_arm = { let body_expr = fld.cx.expr_block(body); - let pat = noop_fold_pat(pat, fld); + let pat = fld.fold_pat(pat); let some_pat = fld.cx.pat_some(pat_span, pat); fld.cx.arm(pat_span, vec![some_pat], body_expr) diff --git a/src/test/run-pass/for-loop-macro.rs b/src/test/run-pass/for-loop-macro.rs new file mode 100644 index 00000000000..17c5a98246b --- /dev/null +++ b/src/test/run-pass/for-loop-macro.rs @@ -0,0 +1,20 @@ +// Copyright 2015 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. + +macro_rules! var { + ( $name:ident ) => ( $name ); +} + +pub fn main() { + let x = [ 3, 3, 3 ]; + for var!(i) in &x { + assert_eq!(*i, 3); + } +} |
