diff options
| author | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-10-20 08:31:23 -0400 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-10-25 01:21:07 -0400 |
| commit | 12308db3d23fe59b7ccfed6c535896ac6fdb5abe (patch) | |
| tree | 0ee8744bc3fa89748369deb97429df97a83ef056 /src/libsyntax/ext | |
| parent | c16a95c587bb5ff5f06894657a1d7aafc69a2084 (diff) | |
| download | rust-12308db3d23fe59b7ccfed6c535896ac6fdb5abe.tar.gz rust-12308db3d23fe59b7ccfed6c535896ac6fdb5abe.zip | |
libsyntax/librustc: Allow mut qualifier in patterns.
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/build.rs | 17 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/generic.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 15 |
3 files changed, 20 insertions, 16 deletions
diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 78cdc3f585b..4c3ab840b44 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -399,9 +399,12 @@ impl AstBuilder for @ExtCtxt { } fn stmt_let(&self, sp: Span, mutbl: bool, ident: ast::Ident, ex: @ast::Expr) -> @ast::Stmt { - let pat = self.pat_ident(sp, ident); + let pat = if mutbl { + self.pat_ident_binding_mode(sp, ident, ast::BindByValue(ast::MutMutable)) + } else { + self.pat_ident(sp, ident) + }; let local = @ast::Local { - is_mutbl: mutbl, ty: self.ty_infer(sp), pat: pat, init: Some(ex), @@ -419,9 +422,12 @@ impl AstBuilder for @ExtCtxt { typ: ast::Ty, ex: @ast::Expr) -> @ast::Stmt { - let pat = self.pat_ident(sp, ident); + let pat = if mutbl { + self.pat_ident_binding_mode(sp, ident, ast::BindByValue(ast::MutMutable)) + } else { + self.pat_ident(sp, ident) + }; let local = @ast::Local { - is_mutbl: mutbl, ty: typ, pat: pat, init: Some(ex), @@ -624,7 +630,7 @@ impl AstBuilder for @ExtCtxt { self.pat(span, ast::PatLit(expr)) } fn pat_ident(&self, span: Span, ident: ast::Ident) -> @ast::Pat { - self.pat_ident_binding_mode(span, ident, ast::BindInfer) + self.pat_ident_binding_mode(span, ident, ast::BindByValue(ast::MutImmutable)) } fn pat_ident_binding_mode(&self, @@ -710,7 +716,6 @@ impl AstBuilder for @ExtCtxt { fn arg(&self, span: Span, ident: ast::Ident, ty: ast::Ty) -> ast::arg { let arg_pat = self.pat_ident(span, ident); ast::arg { - is_mutbl: false, ty: ty, pat: arg_pat, id: ast::DUMMY_NODE_ID diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index c31c609d4e7..82a779546fc 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -922,7 +922,7 @@ fn create_struct_pattern(cx: @ExtCtxt, if struct_def.fields.is_empty() { return ( cx.pat_ident_binding_mode( - span, struct_ident, ast::BindInfer), + span, struct_ident, ast::BindByValue(ast::MutImmutable)), ~[]); } @@ -985,7 +985,7 @@ fn create_enum_variant_pattern(cx: @ExtCtxt, ast::tuple_variant_kind(ref variant_args) => { if variant_args.is_empty() { return (cx.pat_ident_binding_mode( - span, variant_ident, ast::BindInfer), ~[]); + span, variant_ident, ast::BindByValue(ast::MutImmutable)), ~[]); } let matching_path = cx.path_ident(span, variant_ident); diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 99bcb36eedb..9526357f9ae 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -551,13 +551,13 @@ fn expand_non_macro_stmt(exts: SyntaxEnv, s: &Stmt, fld: &MacroExpander) let pending_renames = block_info.pending_renames; // take it apart: - let @Local{is_mutbl:is_mutbl, - ty:_, - pat:pat, - init:init, - id:id, - span:span - } = *local; + let @Local { + ty: _, + pat: pat, + init: init, + id: id, + span: span + } = *local; // types can't be copied automatically because of the owned ptr in ty_tup... let ty = local.ty.clone(); // expand the pat (it might contain exprs... #:(o)> @@ -585,7 +585,6 @@ fn expand_non_macro_stmt(exts: SyntaxEnv, s: &Stmt, fld: &MacroExpander) let new_init_opt = init.map(|e| fld.fold_expr(e)); let rewritten_local = @Local { - is_mutbl: is_mutbl, ty: ty, pat: rewritten_pat, init: new_init_opt, |
