about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2012-08-08 11:52:23 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2012-08-08 11:53:08 -0700
commitc7d60ee05307eab7f7def3d6855ca471253e7810 (patch)
tree7b95d39cfad5da8069c84efcbe96f56c3d00174c /src/rustc
parentc5fbff01ce2b3e2d3020182891d4a22b8958f7f3 (diff)
downloadrust-c7d60ee05307eab7f7def3d6855ca471253e7810.tar.gz
rust-c7d60ee05307eab7f7def3d6855ca471253e7810.zip
Don't add struct names to the value name space if there's no constructor
Closes #3149
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/middle/resolve3.rs24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/rustc/middle/resolve3.rs b/src/rustc/middle/resolve3.rs
index 3eef3d118f7..3bd47b8d5f2 100644
--- a/src/rustc/middle/resolve3.rs
+++ b/src/rustc/middle/resolve3.rs
@@ -987,22 +987,30 @@ class Resolver {
                 }
             }
             item_class(struct_definition, _) => {
-              let (name_bindings, new_parent) = self.add_child(atom, parent,
-                                              ~[ValueNS, TypeNS], sp);
-
-                (*name_bindings).define_type(def_ty(local_def(item.id)), sp);
-
-                match struct_definition.ctor {
+                let (name_bindings, new_parent) =
+                    match struct_definition.ctor {
                     none => {
-                        // Nothing to do.
+                        let (name_bindings, new_parent) = self.add_child(atom,
+                              parent, ~[TypeNS], sp);
+
+                        (*name_bindings).define_type(def_ty(
+                            local_def(item.id)), sp);
+                        (name_bindings, new_parent)
                     }
                     some(ctor) => {
+                        let (name_bindings, new_parent) = self.add_child(atom,
+                                 parent, ~[ValueNS, TypeNS], sp);
+
+                        (*name_bindings).define_type(def_ty(
+                            local_def(item.id)), sp);
+
                         let purity = ctor.node.dec.purity;
                         let ctor_def = def_fn(local_def(ctor.node.id),
                                               purity);
                         (*name_bindings).define_value(ctor_def, sp);
+                        (name_bindings, new_parent)
                     }
-                }
+                };
 
                 // Create the set of implementation information that the
                 // implementation scopes (ImplScopes) need and write it into