about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJunyoung Cho <june0.cho@samsung.com>2013-05-15 13:49:30 +0900
committerJunyoung Cho <june0.cho@samsung.com>2013-05-15 21:33:33 +0900
commit37fe2b60d5a31c6dda957d5ee42c1f1e6f408d2e (patch)
tree85e44f5b199f97f1290ace29ba176c2fd621e51f
parent2fc6b0998b3bd8c7ef796a9f4c795814b4ad30ea (diff)
downloadrust-37fe2b60d5a31c6dda957d5ee42c1f1e6f408d2e.tar.gz
rust-37fe2b60d5a31c6dda957d5ee42c1f1e6f408d2e.zip
Merge type_span and type_def, and ditto with value_span and value_def
-rw-r--r--src/librustc/middle/resolve.rs43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index a962ea07c54..ba24ea63a10 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -512,13 +512,15 @@ pub impl Module {
 pub struct TypeNsDef {
     privacy: Privacy,
     module_def: Option<@mut Module>,
-    type_def: Option<def>
+    type_def: Option<def>,
+    type_span: Option<span>
 }
 
 // Records a possibly-private value definition.
 pub struct ValueNsDef {
     privacy: Privacy,
     def: def,
+    value_span: Option<span>,
 }
 
 // Records the definitions (at most one for each namespace) that a name is
@@ -526,11 +528,6 @@ pub struct ValueNsDef {
 pub struct NameBindings {
     type_def: Option<TypeNsDef>,    //< Meaning in type namespace.
     value_def: Option<ValueNsDef>,  //< Meaning in value namespace.
-
-    // For error reporting
-    // FIXME (#3783): Merge me into TypeNsDef and ValueNsDef.
-    type_span: Option<span>,
-    value_span: Option<span>,
 }
 
 pub impl NameBindings {
@@ -548,18 +545,19 @@ pub impl NameBindings {
                 self.type_def = Some(TypeNsDef {
                     privacy: privacy,
                     module_def: Some(module_),
-                    type_def: None
+                    type_def: None,
+                    type_span: Some(sp)
                 });
             }
             Some(copy type_def) => {
                 self.type_def = Some(TypeNsDef {
                     privacy: privacy,
                     module_def: Some(module_),
+                    type_span: Some(sp),
                     .. type_def
                 });
             }
         }
-        self.type_span = Some(sp);
     }
 
     /// Records a type definition.
@@ -570,24 +568,24 @@ pub impl NameBindings {
                 self.type_def = Some(TypeNsDef {
                     privacy: privacy,
                     module_def: None,
-                    type_def: Some(def)
+                    type_def: Some(def),
+                    type_span: Some(sp)
                 });
             }
             Some(copy type_def) => {
                 self.type_def = Some(TypeNsDef {
                     privacy: privacy,
                     type_def: Some(def),
+                    type_span: Some(sp),
                     .. type_def
                 });
             }
         }
-        self.type_span = Some(sp);
     }
 
     /// Records a value definition.
     fn define_value(@mut self, privacy: Privacy, def: def, sp: span) {
-        self.value_def = Some(ValueNsDef { privacy: privacy, def: def });
-        self.value_span = Some(sp);
+        self.value_def = Some(ValueNsDef { privacy: privacy, def: def, value_span: Some(sp) });
     }
 
     /// Returns the module node if applicable.
@@ -686,8 +684,18 @@ pub impl NameBindings {
     fn span_for_namespace(&self, namespace: Namespace) -> Option<span> {
         if self.defined_in_namespace(namespace) {
             match namespace {
-                TypeNS  => self.type_span,
-                ValueNS => self.value_span,
+                TypeNS  => {
+                    match self.type_def {
+                        None => None,
+                        Some(type_def) => type_def.type_span
+                    }
+                }
+                ValueNS => {
+                    match self.value_def {
+                        None => None,
+                        Some(value_def) => value_def.value_span
+                    }
+                }
             }
         } else {
             None
@@ -698,9 +706,7 @@ pub impl NameBindings {
 pub fn NameBindings() -> NameBindings {
     NameBindings {
         type_def: None,
-        value_def: None,
-        type_span: None,
-        value_span: None
+        value_def: None
     }
 }
 
@@ -2110,10 +2116,9 @@ pub impl Resolver {
                 privacy: Public,
                 module_def: Some(module),
                 type_def: None,
+                type_span: None
             }),
             value_def: None,
-            type_span: None,
-            value_span: None,
         }
     }