summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2013-01-24 16:24:45 -0800
committerNiko Matsakis <niko@alum.mit.edu>2013-01-28 10:00:23 -0800
commitd4fd30c6ace41638f10e415f6cad175997ec21c4 (patch)
treef306370ee07fa03b8f42234559be9bbcf8b28c09 /src/libsyntax/ext
parent83ca034d2ed3acf3e9ae3075964763129ab51c23 (diff)
downloadrust-d4fd30c6ace41638f10e415f6cad175997ec21c4.tar.gz
rust-d4fd30c6ace41638f10e415f6cad175997ec21c4.zip
Link the lifetimes of regions resulting from borrows of the
contents of other borrowed pointers to the lifetimes of the
borrowed value.  Fixes #3148.

r=catamorphism
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/auto_encode.rs2
-rw-r--r--src/libsyntax/ext/build.rs8
-rw-r--r--src/libsyntax/ext/deriving.rs3
3 files changed, 10 insertions, 3 deletions
diff --git a/src/libsyntax/ext/auto_encode.rs b/src/libsyntax/ext/auto_encode.rs
index 77f23031135..1bb516e831f 100644
--- a/src/libsyntax/ext/auto_encode.rs
+++ b/src/libsyntax/ext/auto_encode.rs
@@ -879,7 +879,7 @@ fn ser_variant(
 
     let pat_node = if pats.is_empty() {
         ast::pat_ident(
-            ast::bind_by_ref(ast::m_imm),
+            ast::bind_infer,
             cx.path(span, ~[v_name]),
             None
         )
diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs
index 5a8a1d8753d..5ff69539606 100644
--- a/src/libsyntax/ext/build.rs
+++ b/src/libsyntax/ext/build.rs
@@ -267,8 +267,14 @@ fn mk_pat(cx: ext_ctxt, span: span, +pat: ast::pat_) -> @ast::pat {
     @ast::pat { id: cx.next_id(), node: pat, span: span }
 }
 fn mk_pat_ident(cx: ext_ctxt, span: span, ident: ast::ident) -> @ast::pat {
+    mk_pat_ident_with_binding_mode(cx, span, ident, ast::bind_by_value)
+}
+fn mk_pat_ident_with_binding_mode(cx: ext_ctxt,
+                                  span: span,
+                                  ident: ast::ident,
+                                  bm: ast::binding_mode) -> @ast::pat {
     let path = mk_raw_path(span, ~[ ident ]);
-    let pat = ast::pat_ident(ast::bind_by_value, path, None);
+    let pat = ast::pat_ident(bm, path, None);
     mk_pat(cx, span, move pat)
 }
 fn mk_pat_enum(cx: ext_ctxt,
diff --git a/src/libsyntax/ext/deriving.rs b/src/libsyntax/ext/deriving.rs
index d7059fc1977..d542b104e54 100644
--- a/src/libsyntax/ext/deriving.rs
+++ b/src/libsyntax/ext/deriving.rs
@@ -363,7 +363,8 @@ fn create_enum_variant_pattern(cx: ext_ctxt,
     match variant.node.kind {
         tuple_variant_kind(ref variant_args) => {
             if variant_args.len() == 0 {
-                return build::mk_pat_ident(cx, span, variant_ident);
+                return build::mk_pat_ident_with_binding_mode(
+                    cx, span, variant_ident, ast::bind_infer);
             }
 
             let matching_path = build::mk_raw_path(span, ~[ variant_ident ]);