From a63003fe1aac487d3c0c527c4c984375c998de99 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 23 Jul 2014 12:43:29 -0700 Subject: librustc: Parse, but do not fully turn on, the `ref` keyword for by-reference upvars. This partially implements RFC 38. A snapshot will be needed to turn this on, because stage0 cannot yet parse the keyword. Part of #12381. --- src/libsyntax/ext/build.rs | 4 ++-- src/libsyntax/ext/expand.rs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'src/libsyntax/ext') diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 0e687c02c1d..f7eddca4b7a 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -876,14 +876,14 @@ impl<'a> AstBuilder for ExtCtxt<'a> { fn lambda_fn_decl(&self, span: Span, fn_decl: P, blk: P) -> Gc { - self.expr(span, ast::ExprFnBlock(fn_decl, blk)) + self.expr(span, ast::ExprFnBlock(ast::CaptureByRef, fn_decl, blk)) } fn lambda(&self, span: Span, ids: Vec , blk: P) -> Gc { let fn_decl = self.fn_decl( ids.iter().map(|id| self.arg(span, *id, self.ty_infer(span))).collect(), self.ty_infer(span)); - self.expr(span, ast::ExprFnBlock(fn_decl, blk)) + self.expr(span, ast::ExprFnBlock(ast::CaptureByRef, fn_decl, blk)) } fn lambda0(&self, span: Span, blk: P) -> Gc { self.lambda(span, Vec::new(), blk) diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 808532d55bb..d918b28d4dc 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -74,10 +74,12 @@ fn expand_expr(e: Gc, fld: &mut MacroExpander) -> Gc { fld.cx.expr(e.span, ast::ExprForLoop(pat, head, body, opt_ident)) } - ast::ExprFnBlock(fn_decl, block) => { + ast::ExprFnBlock(capture_clause, 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); + let new_node = ast::ExprFnBlock(capture_clause, + rewritten_fn_decl, + rewritten_block); box(GC) ast::Expr{id:e.id, node: new_node, span: fld.new_span(e.span)} } -- cgit 1.4.1-3-g733a5