diff options
| author | John Clements <clements@racket-lang.org> | 2014-07-03 17:20:25 -0700 |
|---|---|---|
| committer | John Clements <clements@racket-lang.org> | 2014-07-04 13:20:14 -0700 |
| commit | cc13f9bae8b4175513375f9de66f198a706c67d3 (patch) | |
| tree | 2aee0349594bde4ebcdb0e413826cc8a701a8707 /src/libsyntax/ext | |
| parent | ff9995e08978cec4b6987d198e09ac5ba6b6c152 (diff) | |
| download | rust-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.rs | 16 |
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( |
