提交 582c7173 编写于 作者: B Brian Anderson

rustc: Clean up some enum code

上级 dfc81dfa
...@@ -680,25 +680,14 @@ fn T_opaque_cbox_ptr(cx: @crate_ctxt) -> TypeRef { ...@@ -680,25 +680,14 @@ fn T_opaque_cbox_ptr(cx: @crate_ctxt) -> TypeRef {
ret T_opaque_box_ptr(cx); ret T_opaque_box_ptr(cx);
} }
fn T_enum_variant(cx: @crate_ctxt) -> TypeRef { fn T_enum_discrim(cx: @crate_ctxt) -> TypeRef {
ret cx.int_type; ret cx.int_type;
} }
fn T_enum(cx: @crate_ctxt, size: uint) -> TypeRef {
let s = "enum_" + uint::to_str(size, 10u);
alt name_has_type(cx.tn, s) { some(t) { ret t; } _ {} }
let t =
if size == 0u {
T_struct([T_enum_variant(cx)])
} else { T_struct([T_enum_variant(cx), T_array(T_i8(), size)]) };
associate_type(cx.tn, s, t);
ret t;
}
fn T_opaque_enum(cx: @crate_ctxt) -> TypeRef { fn T_opaque_enum(cx: @crate_ctxt) -> TypeRef {
let s = "opaque_enum"; let s = "opaque_enum";
alt name_has_type(cx.tn, s) { some(t) { ret t; } _ {} } alt name_has_type(cx.tn, s) { some(t) { ret t; } _ {} }
let t = T_struct([T_enum_variant(cx), T_i8()]); let t = T_struct([T_enum_discrim(cx), T_i8()]);
associate_type(cx.tn, s, t); associate_type(cx.tn, s, t);
ret t; ret t;
} }
......
...@@ -200,7 +200,7 @@ fn compute_static_enum_size(ccx: @crate_ctxt, largest_variants: [uint], ...@@ -200,7 +200,7 @@ fn compute_static_enum_size(ccx: @crate_ctxt, largest_variants: [uint],
// FIXME (issue #792): This is wrong. If the enum starts with an 8 byte // FIXME (issue #792): This is wrong. If the enum starts with an 8 byte
// aligned quantity, we don't align it. // aligned quantity, we don't align it.
if vec::len(*variants) > 1u { if vec::len(*variants) > 1u {
let variant_t = T_enum_variant(ccx); let variant_t = T_enum_discrim(ccx);
max_size += llsize_of_real(ccx, variant_t) as u16; max_size += llsize_of_real(ccx, variant_t) as u16;
let align = llalign_of_pref(ccx, variant_t) as u8; let align = llalign_of_pref(ccx, variant_t) as u8;
if max_align < align { max_align = align; } if max_align < align { max_align = align; }
......
...@@ -158,10 +158,10 @@ fn type_of_enum(cx: @crate_ctxt, did: ast::def_id, t: ty::t) ...@@ -158,10 +158,10 @@ fn type_of_enum(cx: @crate_ctxt, did: ast::def_id, t: ty::t)
let degen = (*ty::enum_variants(cx.tcx, did)).len() == 1u; let degen = (*ty::enum_variants(cx.tcx, did)).len() == 1u;
let size = shape::static_size_of_enum(cx, t); let size = shape::static_size_of_enum(cx, t);
if !degen { if !degen {
[T_enum_variant(cx), T_array(T_i8(), size)] [T_enum_discrim(cx), T_array(T_i8(), size)]
} }
else if size == 0u { else if size == 0u {
[T_enum_variant(cx)] [T_enum_discrim(cx)]
} }
else { else {
[T_array(T_i8(), size)] [T_array(T_i8(), size)]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册