summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorJohn Clements <clements@racket-lang.org>2014-07-03 17:20:25 -0700
committerJohn Clements <clements@racket-lang.org>2014-07-04 13:20:14 -0700
commitcc13f9bae8b4175513375f9de66f198a706c67d3 (patch)
tree2aee0349594bde4ebcdb0e413826cc8a701a8707 /src/libsyntax/ext
parentff9995e08978cec4b6987d198e09ac5ba6b6c152 (diff)
downloadrust-cc13f9bae8b4175513375f9de66f198a706c67d3.tar.gz
rust-cc13f9bae8b4175513375f9de66f198a706c67d3.zip
implement hygiene for ExprFnBlock and ExprProc
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/expand.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index e9e722a18c4..b30b62c8901 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -229,6 +229,20 @@ pub fn expand_expr(e: Gc<ast::Expr>, fld: &mut MacroExpander) -> Gc<ast::Expr> {
             fld.cx.expr(e.span, ast::ExprLoop(loop_block, opt_ident))
         }
 
+        ast::ExprFnBlock(fn_decl, block) => {
+            let (rewritten_fn_decl, rewritten_block)
+                = expand_and_rename_fn_decl_and_block(fn_decl, block, fld);
+            let new_node = ast::ExprFnBlock(rewritten_fn_decl, rewritten_block);
+            box(GC) ast::Expr{id:e.id, node: new_node, span: fld.new_span(e.span)}
+        }
+
+        ast::ExprProc(fn_decl, block) => {
+            let (rewritten_fn_decl, rewritten_block)
+                = expand_and_rename_fn_decl_and_block(fn_decl, block, fld);
+            let new_node = ast::ExprProc(rewritten_fn_decl, rewritten_block);
+            box(GC) ast::Expr{id:e.id, node: new_node, span: fld.new_span(e.span)}
+        }
+
         _ => noop_fold_expr(e, fld)
     }
 }
@@ -1387,7 +1401,7 @@ mod test {
             0)
     }
 
-    // closure arg hygiene
+    // closure arg hygiene (ExprFnBlock)
     // expands to fn f(){(|x_1 : int| {(x_2 + x_1)})(3);}
     #[test] fn closure_arg_hygiene(){
         run_renaming_test(