diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-08-08 11:52:23 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2012-08-08 11:53:08 -0700 |
| commit | c7d60ee05307eab7f7def3d6855ca471253e7810 (patch) | |
| tree | 7b95d39cfad5da8069c84efcbe96f56c3d00174c /src/rustc | |
| parent | c5fbff01ce2b3e2d3020182891d4a22b8958f7f3 (diff) | |
| download | rust-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.rs | 24 |
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 |
