summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-12-10 11:58:37 -0800
committerPatrick Walton <pcwalton@mimiga.net>2012-12-13 15:49:07 -0800
commitcd120736cbe9a8157a8d0e3fb66f48a32545ef68 (patch)
treeb996632e467b591f6d2cdde343017dc25ab3efbd /src/libsyntax
parent45848b20402cb3ad07dd0b0442155ca9c6b14f01 (diff)
downloadrust-cd120736cbe9a8157a8d0e3fb66f48a32545ef68.tar.gz
rust-cd120736cbe9a8157a8d0e3fb66f48a32545ef68.zip
librustc: Allow moves out of `self`. r=nmatsakis
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast.rs13
-rw-r--r--src/libsyntax/ast_util.rs6
2 files changed, 13 insertions, 6 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index c21aa7d248e..444f90c7f04 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -118,7 +118,8 @@ enum def {
     def_static_method(/* method */ def_id,
                       /* trait */  Option<def_id>,
                       purity),
-    def_self(node_id),
+    def_self(node_id, bool /* is_implicit */),
+    def_self_ty(node_id),
     def_mod(def_id),
     def_foreign_mod(def_id),
     def_const(def_id),
@@ -156,9 +157,15 @@ impl def : cmp::Eq {
                     _ => false
                 }
             }
-            def_self(e0a) => {
+            def_self(e0a, e1a) => {
                 match (*other) {
-                    def_self(e0b) => e0a == e0b,
+                    def_self(e0b, e1b) => e0a == e0b && e1a == e1b,
+                    _ => false
+                }
+            }
+            def_self_ty(e0a) => {
+                match (*other) {
+                    def_self_ty(e0b) => e0a == e0b,
                     _ => false
                 }
             }
diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs
index 3a8d399a45c..ef7bd1d8928 100644
--- a/src/libsyntax/ast_util.rs
+++ b/src/libsyntax/ast_util.rs
@@ -71,8 +71,8 @@ pure fn def_id_of_def(d: def) -> def_id {
       def_use(id) | def_struct(id) => {
         id
       }
-      def_arg(id, _) | def_local(id, _) | def_self(id) |
-      def_upvar(id, _, _, _) | def_binding(id, _) | def_region(id)
+      def_arg(id, _) | def_local(id, _) | def_self(id, _) | def_self_ty(id)
+      | def_upvar(id, _, _, _) | def_binding(id, _) | def_region(id)
       | def_typaram_binder(id) | def_label(id) => {
         local_def(id)
       }
@@ -384,7 +384,7 @@ impl inlined_item: inlined_item_utils {
  referring to a def_self */
 fn is_self(d: ast::def) -> bool {
   match d {
-    def_self(_)           => true,
+    def_self(*)           => true,
     def_upvar(_, d, _, _) => is_self(*d),
     _                     => false
   }