Fix macro expansion in for loop pattern

This commit is contained in:
Jonas Schievink 2015-08-12 10:34:14 +02:00
parent 91c618f133
commit a016dfb1d1
2 changed files with 21 additions and 1 deletions

View File

@ -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)

View File

@ -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);
}
}