@@ -9,8 +9,7 @@ use middle::pat_util::{pat_bindings};
9
9
use syntax:: ast:: { _mod, add, arm} ;
10
10
use syntax:: ast:: { bind_by_ref, bind_by_implicit_ref, bind_by_value} ;
11
11
use syntax:: ast:: { bitand, bitor, bitxor} ;
12
- use syntax:: ast:: { binding_mode, blk,
13
- capture_clause, class_ctor, class_dtor} ;
12
+ use syntax:: ast:: { binding_mode, blk, capture_clause, class_ctor, class_dtor} ;
14
13
use syntax:: ast:: { crate , crate_num, decl_item} ;
15
14
use syntax:: ast:: { def, def_arg, def_binding, def_class, def_const, def_fn} ;
16
15
use syntax:: ast:: { def_foreign_mod, def_id, def_label, def_local, def_mod} ;
@@ -39,7 +38,7 @@ use syntax::ast::{trait_ref, tuple_variant_kind, Ty, ty_bool, ty_char};
39
38
use syntax:: ast:: { ty_f, ty_f32, ty_f64, ty_float, ty_i, ty_i16, ty_i32} ;
40
39
use syntax:: ast:: { ty_i64, ty_i8, ty_int, ty_param, ty_path, ty_str, ty_u} ;
41
40
use syntax:: ast:: { ty_u16, ty_u32, ty_u64, ty_u8, ty_uint, type_value_ns} ;
42
- use syntax:: ast:: { ty_param_bound} ;
41
+ use syntax:: ast:: { ty_param_bound, unnamed_field } ;
43
42
use syntax:: ast:: { variant, view_item, view_item_export, view_item_import} ;
44
43
use syntax:: ast:: { view_item_use, view_path_glob, view_path_list} ;
45
44
use syntax:: ast:: { view_path_simple, visibility, anonymous, named} ;
@@ -1179,12 +1178,22 @@ impl Resolver {
1179
1178
}
1180
1179
1181
1180
// These items live in both the type and value namespaces.
1182
- item_class( * ) => {
1181
+ item_class( struct_def , _ ) => {
1183
1182
let ( name_bindings, new_parent) =
1184
1183
self . add_child ( ident, parent, ForbidDuplicateTypes , sp) ;
1185
1184
1186
- ( * name_bindings) . define_type
1187
- ( privacy, def_ty ( local_def ( item. id ) ) , sp) ;
1185
+ name_bindings. define_type (
1186
+ privacy, def_ty ( local_def ( item. id ) ) , sp) ;
1187
+
1188
+ // If this struct is tuple-like or enum-like, define a name
1189
+ // in the value namespace.
1190
+ if struct_def. fields . len ( ) == 0 ||
1191
+ struct_def. fields [ 0 ] . node . kind == unnamed_field {
1192
+ name_bindings. define_value (
1193
+ privacy,
1194
+ def_class ( local_def ( struct_def. ctor_id ) ) ,
1195
+ sp) ;
1196
+ }
1188
1197
1189
1198
// Record the def ID of this struct.
1190
1199
self . structs . insert ( local_def ( item. id ) , ( ) ) ;
0 commit comments