}
pat_tag(_, args) {
let vdef = variant_def_ids(tcx.def_map.get(pat.id));
- if vec::len(ty::tag_variants(tcx, vdef.tg)) != 1u { ret true; }
+ if vec::len(*ty::tag_variants(tcx, vdef.tg)) != 1u { ret true; }
for p: @pat in args { if is_refutable(tcx, p) { ret true; } }
false
}
ty::ty_tag(did, tps) {
let variants = ty::tag_variants(cx, did);
- for variant in variants {
+ for variant in *variants {
for aty in variant.args {
let arg_ty = ty::substitute_type_params(cx, tps, aty);
if type_is_gc_relevant(cx, arg_ty) { ret true; }
}
ty::ty_tag(did, tps) {
let variants = ty::tag_variants(tcx, did);
- if vec::len(variants) != 1u ||
+ if vec::len(*variants) != 1u ||
vec::len(variants[0].args) != 1u {
break;
}
// just T.
let ranges = [];
let variants = ty::tag_variants(ccx.tcx, tag_id);
- for variant: ty::variant_info in variants {
+ for variant: ty::variant_info in *variants {
let bounded = true;
let {a: min_size, b: min_align} = {a: 0u, b: 0u};
for elem_t: ty::t in variant.args {
// Initialize the candidate set to contain all variants.
let candidates = [mutable];
- for variant in variants { candidates += [mutable true]; }
+ for variant in *variants { candidates += [mutable true]; }
// Do a pairwise comparison among all variants still in the candidate set.
// Throw out any variant that we know has size and alignment at least as
// Add space for the tag if applicable.
// FIXME (issue #792): This is wrong. If the tag starts with an 8 byte
// aligned quantity, we don't align it.
- if vec::len(variants) > 1u {
+ if vec::len(*variants) > 1u {
let variant_t = T_tag_variant(ccx);
max_size += trans::llsize_of_real(ccx, variant_t) as u16;
let align = trans::llalign_of_real(ccx, variant_t) as u8;
fn tag_kind(ccx: @crate_ctxt, did: ast::def_id) -> tag_kind {
let variants = ty::tag_variants(ccx.tcx, did);
- if vec::len(variants) == 0u { ret tk_complex; }
- for v: ty::variant_info in variants {
+ if vec::len(*variants) == 0u { ret tk_complex; }
+ for v: ty::variant_info in *variants {
if vec::len(v.args) > 0u { ret tk_complex; }
}
- if vec::len(variants) == 1u { ret tk_unit; }
+ if vec::len(*variants) == 1u { ret tk_unit; }
ret tk_enum;
}
let item_tyt = ty::lookup_item_type(ccx.tcx, did);
let ty_param_count = vec::len(item_tyt.kinds);
- for v: ty::variant_info in variants {
+ for v: ty::variant_info in *variants {
offsets += [vec::len(data) as u16];
let variant_shape = shape_of_variant(ccx, v, ty_param_count);
let did = did_; // Satisfy alias checker.
let variants = ty::tag_variants(ccx.tcx, did);
add_u16(header, header_sz + info_sz);
- info_sz += 2u16 * ((vec::len(variants) as u16) + 2u16) + 3u16;
+ info_sz += 2u16 * ((vec::len(*variants) as u16) + 2u16) + 3u16;
}
// Construct the info tables, which contain offsets to the shape of each
for did_: ast::def_id in ccx.shape_cx.tag_order {
let did = did_; // Satisfy alias checker.
let variants = ty::tag_variants(ccx.tcx, did);
- add_u16(info, vec::len(variants) as u16);
+ add_u16(info, vec::len(*variants) as u16);
// Construct the largest-variants table.
add_u16(info,
// Determine whether the tag has dynamic size.
let dynamic = false;
- for variant: ty::variant_info in variants {
+ for variant: ty::variant_info in *variants {
for typ: ty::t in variant.args {
if ty::type_has_dynamic_size(ccx.tcx, typ) { dynamic = true; }
}
info += [size_align.align];
// Now write in the offset of each variant.
- for v: ty::variant_info in variants {
+ for v: ty::variant_info in *variants {
add_u16(info, header_sz + info_sz + offsets[i]);
i += 1u;
}
fn type_of_tag(cx: @crate_ctxt, sp: span, did: ast::def_id, t: ty::t)
-> TypeRef {
- let degen = vec::len(ty::tag_variants(cx.tcx, did)) == 1u;
+ let degen = vec::len(*ty::tag_variants(cx.tcx, did)) == 1u;
if check type_has_static_size(cx, t) {
let size = static_size_of_tag(cx, sp, t);
if !degen { T_tag(cx, size) }
let max_size = 0u;
let variants = ty::tag_variants(cx.tcx, tid);
- for variant: ty::variant_info in variants {
+ for variant: ty::variant_info in *variants {
let tup_ty = simplify_type(cx, ty::mk_tup(cx.tcx, variant.args));
// Perform any type parameter substitutions.
let max_size: ValueRef = alloca(bcx, ccx.int_type);
Store(bcx, C_int(ccx, 0), max_size);
let variants = ty::tag_variants(bcx_tcx(bcx), tid);
- for variant: ty::variant_info in variants {
+ for variant: ty::variant_info in *variants {
// Perform type substitution on the raw argument types.
let raw_tys: [ty::t] = variant.args;
}
let max_size_val = Load(bcx, max_size);
let total_size =
- if vec::len(variants) != 1u {
+ if vec::len(*variants) != 1u {
Add(bcx, max_size_val, llsize_of(ccx, ccx.int_type))
} else { max_size_val };
ret rslt(bcx, total_size);
}
ty::ty_tag(tid, tps) {
let variants = ty::tag_variants(bcx_tcx(cx), tid);
- let n_variants = vec::len(variants);
+ let n_variants = vec::len(*variants);
// Cast the tags to types we can GEP into.
if n_variants == 1u {
let llswitch = Switch(cx, lldiscrim_a, unr_cx.llbb, n_variants);
let next_cx = new_sub_block_ctxt(cx, "tag-iter-next");
let i = 0u;
- for variant: ty::variant_info in variants {
+ for variant: ty::variant_info in *variants {
let variant_cx =
new_sub_block_ctxt(cx,
"tag-iter-variant-" +
}
ty::ty_tag(did, tps) {
let variants = ty::tag_variants(ccx.tcx, did);
- if vec::len(variants) != 1u ||
+ if vec::len(*variants) != 1u ||
vec::len(variants[0].args) != 1u {
break;
}
let bcx = alloc_result.bcx;
let lltagptr = PointerCast(bcx, lltagblob, T_ptr(lltagty));
let lldiscrimptr = GEPi(bcx, lltagptr, [0, 0]);
- let d = if vec::len(ty::tag_variants(ccx.tcx, tid)) != 1u {
+ let d = if vec::len(*ty::tag_variants(ccx.tcx, tid)) != 1u {
let lldiscrim_gv = lookup_discriminant(bcx.fcx.lcx, vid);
let lldiscrim = Load(bcx, lldiscrim_gv);
lldiscrim
let vdef = ast_util::variant_def_ids(ccx.tcx.def_map.get(pat_id));
let variants = ty::tag_variants(ccx.tcx, vdef.tg);
let i = 0u;
- for v: ty::variant_info in variants {
+ for v: ty::variant_info in *variants {
if vdef.var == v.id { ret var(i, vdef); }
i += 1u;
}
let args = [];
let size =
vec::len(ty::tag_variant_with_id(ccx.tcx, vdefs.tg, vdefs.var).args);
- if size > 0u && vec::len(variants) != 1u {
+ if size > 0u && vec::len(*variants) != 1u {
let tagptr =
PointerCast(bcx, val, trans_common::T_opaque_tag_ptr(ccx));
blobptr = GEPi(bcx, tagptr, [0, 1]);
if vec::len(opts) > 0u {
alt opts[0] {
var(_, vdef) {
- if vec::len(ty::tag_variants(ccx.tcx, vdef.tg)) == 1u {
+ if vec::len(*ty::tag_variants(ccx.tcx, vdef.tg)) == 1u {
kind = single;
} else {
let tagptr =
}
ty_tag(did, tps) {
let variants = tag_variants(cx, did);
- for variant in variants {
+ for variant in *variants {
for aty in variant.args {
// Perform any type parameter substitutions.
let arg_ty = substitute_type_params(cx, tps, aty);
// Tags lower to the lowest of their variants.
ty_tag(did, tps) {
let lowest = ast::kind_sendable;
- for variant in tag_variants(cx, did) {
+ for variant in *tag_variants(cx, did) {
for aty in variant.args {
// Perform any type parameter substitutions.
let arg_ty = substitute_type_params(cx, tps, aty);
if test(sty) { ret true; }
alt sty {
ty_tag(did, tps) {
- for variant in tag_variants(cx, did) {
+ for variant in *tag_variants(cx, did) {
for aty in variant.args {
let sty = substitute_type_params(cx, tps, aty);
if type_structurally_contains(cx, sty, test) { ret true; }
// Structural types
ty_tag(did, tps) {
let variants = tag_variants(cx, did);
- for variant: variant_info in variants {
+ for variant: variant_info in *variants {
let tup_ty = mk_tup(cx, variant.args);
// Perform any type parameter substitutions.
}
ty_tag(did, tps) {
let variants = tag_variants(cx, did);
- if vec::len(variants) != 1u || vec::len(variants[0].args) != 1u {
+ if vec::len(*variants) != 1u || vec::len(variants[0].args) != 1u {
break;
}
t1 = substitute_type_params(cx, tps, variants[0].args[0]);
// Tag information
type variant_info = {args: [ty::t], ctor_ty: ty::t, id: ast::def_id};
-fn tag_variants(cx: ctxt, id: ast::def_id) -> [variant_info] {
- if ast::local_crate != id.crate { ret csearch::get_tag_variants(cx, id); }
+fn tag_variants(cx: ctxt, id: ast::def_id) -> @mutable [variant_info] {
+ if ast::local_crate != id.crate {
+ ret @mutable csearch::get_tag_variants(cx, id);
+ }
assert (id.node >= 0);
alt smallintmap::find(*cx.tag_var_cache, id.node as uint) {
- option::some(variants) { ret *variants; }
+ option::some(variants) { ret variants; }
_ { /* fallthrough */ }
}
let item =
id: ast_util::local_def(did)}];
}
smallintmap::insert(*cx.tag_var_cache, id.node as uint, result);
- ret *result;
+ ret result;
}
}
}
-> variant_info {
let variants = tag_variants(cx, tag_id);
let i = 0u;
- while i < vec::len::<variant_info>(variants) {
+ while i < vec::len::<variant_info>(*variants) {
let variant = variants[i];
if def_eq(variant.id, variant_id) { ret variant; }
i += 1u;
}
ty::ty_tag(did, tps) {
let variants = ty::tag_variants(fcx.ccx.tcx, did);
- if vec::len(variants) != 1u || vec::len(variants[0].args) != 1u {
+ if vec::len(*variants) != 1u || vec::len(variants[0].args) != 1u {
ret t1;
}
t1 =
ty::ty_res(_, inner, _) { oper_t = inner; }
ty::ty_tag(id, tps) {
let variants = ty::tag_variants(tcx, id);
- if vec::len(variants) != 1u ||
+ if vec::len(*variants) != 1u ||
vec::len(variants[0].args) != 1u {
tcx.sess.span_fatal(expr.span,
"can only dereference tags " +