Skip to content

Commit f2e880b

Browse files
committed
Add [X].len() to core, use it in trans modules
1 parent f3dba33 commit f2e880b

File tree

10 files changed

+83
-82
lines changed

10 files changed

+83
-82
lines changed

src/comp/middle/trans/alt.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ fn expand_nested_bindings(m: match, col: uint, val: ValueRef) -> match {
106106
alt br.pats[col].node {
107107
ast::pat_ident(name, some(inner)) {
108108
let pats = vec::slice(br.pats, 0u, col) + [inner] +
109-
vec::slice(br.pats, col + 1u, vec::len(br.pats));
109+
vec::slice(br.pats, col + 1u, br.pats.len());
110110
result += [@{pats: pats,
111111
bound: br.bound + [{ident: path_to_ident(name),
112112
val: val}]
@@ -126,7 +126,7 @@ fn enter_match(m: match, col: uint, val: ValueRef, e: enter_pat) -> match {
126126
alt e(br.pats[col]) {
127127
some(sub) {
128128
let pats = sub + vec::slice(br.pats, 0u, col) +
129-
vec::slice(br.pats, col + 1u, vec::len(br.pats));
129+
vec::slice(br.pats, col + 1u, br.pats.len());
130130
let new_br = @{pats: pats,
131131
bound: alt br.pats[col].node {
132132
ast::pat_ident(name, none) {
@@ -197,7 +197,7 @@ fn enter_rec(m: match, col: uint, fields: [ast::ident], val: ValueRef) ->
197197
}
198198
ret some(pats);
199199
}
200-
_ { ret some(vec::init_elt(vec::len(fields), dummy)); }
200+
_ { ret some(vec::init_elt(fields.len(), dummy)); }
201201
}
202202
}
203203
ret enter_match(m, col, val, bind e(dummy, fields, _));
@@ -269,9 +269,9 @@ fn extract_variant_args(bcx: @block_ctxt, pat_id: ast::node_id,
269269
let blobptr = val;
270270
let variants = ty::enum_variants(ccx.tcx, vdefs.enm);
271271
let args = [];
272-
let size =
273-
vec::len(ty::enum_variant_with_id(ccx.tcx, vdefs.enm, vdefs.var).args);
274-
if size > 0u && vec::len(*variants) != 1u {
272+
let size = ty::enum_variant_with_id(ccx.tcx, vdefs.enm,
273+
vdefs.var).args.len();
274+
if size > 0u && (*variants).len() != 1u {
275275
let enumptr =
276276
PointerCast(bcx, val, T_opaque_enum_ptr(ccx));
277277
blobptr = GEPi(bcx, enumptr, [0, 1]);
@@ -343,7 +343,7 @@ fn pick_col(m: match) -> uint {
343343
_ { 0u }
344344
}
345345
}
346-
let scores = vec::init_elt_mut(vec::len(m[0].pats), 0u);
346+
let scores = vec::init_elt_mut(m[0].pats.len(), 0u);
347347
for br: match_branch in m {
348348
let i = 0u;
349349
for p: @ast::pat in br.pats { scores[i] += score(p); i += 1u; }
@@ -366,8 +366,8 @@ fn pick_col(m: match) -> uint {
366366
fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
367367
&exits: [exit_node]) {
368368
let bcx = bcx;
369-
if vec::len(m) == 0u { Br(bcx, f()); ret; }
370-
if vec::len(m[0].pats) == 0u {
369+
if m.len() == 0u { Br(bcx, f()); ret; }
370+
if m[0].pats.len() == 0u {
371371
let data = m[0].data;
372372
alt data.guard {
373373
some(e) {
@@ -385,7 +385,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
385385
let next_cx = new_sub_block_ctxt(guard_cx, "submatch_next");
386386
let else_cx = new_sub_block_ctxt(guard_cx, "submatch_else");
387387
CondBr(guard_bcx, guard_val, next_cx.llbb, else_cx.llbb);
388-
compile_submatch(else_cx, vec::slice(m, 1u, vec::len(m)), vals, f,
388+
compile_submatch(else_cx, vec::slice(m, 1u, m.len()), vals, f,
389389
exits);
390390
bcx = next_cx;
391391
}
@@ -408,7 +408,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
408408

409409
let vals_left =
410410
vec::slice(vals, 0u, col) +
411-
vec::slice(vals, col + 1u, vec::len(vals));
411+
vec::slice(vals, col + 1u, vals.len());
412412
let ccx = bcx.fcx.ccx;
413413
let pat_id = 0;
414414
for br: match_branch in m {
@@ -419,7 +419,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
419419

420420
let rec_fields = collect_record_fields(m, col);
421421
// Separate path for extracting and binding record fields
422-
if vec::len(rec_fields) > 0u {
422+
if rec_fields.len() > 0u {
423423
let rec_ty = node_id_type(bcx, pat_id);
424424
let fields = ty::get_fields(rec_ty);
425425
let rec_vals = [];
@@ -437,7 +437,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
437437
if any_tup_pat(m, col) {
438438
let tup_ty = node_id_type(bcx, pat_id);
439439
let n_tup_elts = alt ty::get(tup_ty).struct {
440-
ty::ty_tup(elts) { vec::len(elts) }
440+
ty::ty_tup(elts) { elts.len() }
441441
_ { ccx.sess.bug("Non-tuple type in tuple pattern"); }
442442
};
443443
let tup_vals = [], i = 0u;
@@ -473,10 +473,10 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
473473
enum branch_kind { no_branch, single, switch, compare, }
474474
let kind = no_branch;
475475
let test_val = val;
476-
if vec::len(opts) > 0u {
476+
if opts.len() > 0u {
477477
alt opts[0] {
478478
var(_, vdef) {
479-
if vec::len(*ty::enum_variants(ccx.tcx, vdef.enm)) == 1u {
479+
if (*ty::enum_variants(ccx.tcx, vdef.enm)).len() == 1u {
480480
kind = single;
481481
} else {
482482
let enumptr =
@@ -511,7 +511,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
511511
};
512512
let sw;
513513
if kind == switch {
514-
sw = Switch(bcx, test_val, else_cx.llbb, vec::len(opts));
514+
sw = Switch(bcx, test_val, else_cx.llbb, opts.len());
515515
// FIXME This statement is purely here as a work-around for a bug that
516516
// I expect to be the same as issue #951. If I remove it, sw ends up
517517
// holding a corrupted value (when the compiler is optimized).
@@ -573,7 +573,7 @@ fn compile_submatch(bcx: @block_ctxt, m: match, vals: [ValueRef], f: mk_fail,
573573
alt opt {
574574
var(_, vdef) {
575575
let args = extract_variant_args(opt_cx, pat_id, vdef, val);
576-
size = vec::len(args.vals);
576+
size = args.vals.len();
577577
unpacked = args.vals;
578578
opt_cx = args.bcx;
579579
}
@@ -607,7 +607,7 @@ fn make_phi_bindings(bcx: @block_ctxt, map: [exit_node],
607607
}
608608
}
609609
}
610-
if vec::len(vals) > 0u {
610+
if vals.len() > 0u {
611611
let local = Phi(bcx, val_ty(vals[0]), vals, llbbs);
612612
bcx.fcx.lllocals.insert(node_id, local_mem(local));
613613
} else { success = false; }
@@ -728,7 +728,7 @@ fn bind_irrefutable_pat(bcx: @block_ctxt, pat: @ast::pat, val: ValueRef,
728728
}
729729
}
730730
ast::pat_enum(_, sub) {
731-
if vec::len(sub) == 0u { ret bcx; }
731+
if sub.len() == 0u { ret bcx; }
732732
let vdefs = ast_util::variant_def_ids(ccx.tcx.def_map.get(pat.id));
733733
let args = extract_variant_args(bcx, pat.id, vdefs, val);
734734
let i = 0;

src/comp/middle/trans/base.rs

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ fn type_of(cx: @crate_ctxt, t: ty::t) -> TypeRef {
162162

163163
fn type_of_enum(cx: @crate_ctxt, did: ast::def_id, t: ty::t)
164164
-> TypeRef {
165-
let degen = vec::len(*ty::enum_variants(cx.tcx, did)) == 1u;
165+
let degen = (*ty::enum_variants(cx.tcx, did)).len() == 1u;
166166
if check type_has_static_size(cx, t) {
167167
let size = static_size_of_enum(cx, t);
168168
if !degen { T_enum(cx, size) }
@@ -289,7 +289,7 @@ fn get_simple_extern_fn(cx: @block_ctxt,
289289
fn trans_native_call(cx: @block_ctxt, externs: hashmap<str, ValueRef>,
290290
llmod: ModuleRef, name: str, args: [ValueRef]) ->
291291
ValueRef {
292-
let n: int = vec::len::<ValueRef>(args) as int;
292+
let n = args.len() as int;
293293
let llnative: ValueRef =
294294
get_simple_extern_fn(cx, externs, llmod, name, n);
295295
let call_args: [ValueRef] = [];
@@ -388,7 +388,7 @@ fn GEP_tup_like(bcx: @block_ctxt, t: ty::t, base: ValueRef, ixs: [int])
388388
t: ty::t,
389389
ixs: [int],
390390
n: uint) -> (@block_ctxt, ValueRef, ty::t) {
391-
if n == vec::len(ixs) {
391+
if n == ixs.len() {
392392
ret (bcx, off, t);
393393
}
394394

@@ -638,8 +638,8 @@ fn get_derived_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
638638
// promising to do so itself.
639639
let n_params = ty::count_ty_params(bcx_tcx(bcx), t);
640640

641-
assert (n_params == vec::len::<uint>(tys.params));
642-
assert (n_params == vec::len::<ValueRef>(tys.descs));
641+
assert n_params == tys.params.len();
642+
assert n_params == tys.descs.len();
643643

644644
let llparamtydescs =
645645
alloca(bcx, T_array(T_ptr(bcx_ccx(bcx).tydesc_type), n_params + 1u));
@@ -687,7 +687,7 @@ fn get_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool,
687687
// Is the supplied type a type param? If so, return the passed-in tydesc.
688688
alt ty::type_param(t) {
689689
some(id) {
690-
if id < vec::len(cx.fcx.lltyparams) {
690+
if id < cx.fcx.lltyparams.len() {
691691
ret {kind: tk_param,
692692
result: rslt(cx, cx.fcx.lltyparams[id].desc)};
693693
} else {
@@ -821,7 +821,7 @@ fn make_generic_glue_inner(ccx: @crate_ctxt, t: ty::t,
821821
T_ptr(type_of(ccx, t))
822822
} else { T_ptr(T_i8()) };
823823

824-
let ty_param_count = vec::len(ty_params);
824+
let ty_param_count = ty_params.len();
825825
let lltyparams = llvm::LLVMGetParam(llfn, 2u as c_uint);
826826
let load_env_bcx = new_raw_block_ctxt(fcx, fcx.llloadenv);
827827
let lltydescs = [mutable];
@@ -1072,7 +1072,7 @@ fn trans_res_drop(cx: @block_ctxt, rs: ValueRef, did: ast::def_id,
10721072
// for type variables.
10731073
let val_llty = lib::llvm::fn_ty_param_tys
10741074
(llvm::LLVMGetElementType
1075-
(llvm::LLVMTypeOf(dtor_addr)))[vec::len(args)];
1075+
(llvm::LLVMTypeOf(dtor_addr)))[args.len()];
10761076
let val_cast = BitCast(cx, val.val, val_llty);
10771077
Call(cx, dtor_addr, args + [val_cast]);
10781078

@@ -1244,7 +1244,7 @@ fn iter_structural_ty(cx: @block_ctxt, av: ValueRef, t: ty::t,
12441244
fn iter_variant(cx: @block_ctxt, a_tup: ValueRef,
12451245
variant: ty::variant_info, tps: [ty::t], tid: ast::def_id,
12461246
f: val_and_ty_fn) -> @block_ctxt {
1247-
if vec::len::<ty::t>(variant.args) == 0u { ret cx; }
1247+
if variant.args.len() == 0u { ret cx; }
12481248
let fn_ty = variant.ctor_ty;
12491249
let ccx = bcx_ccx(cx);
12501250
let cx = cx;
@@ -1299,7 +1299,7 @@ fn iter_structural_ty(cx: @block_ctxt, av: ValueRef, t: ty::t,
12991299
}
13001300
ty::ty_enum(tid, tps) {
13011301
let variants = ty::enum_variants(bcx_tcx(cx), tid);
1302-
let n_variants = vec::len(*variants);
1302+
let n_variants = (*variants).len();
13031303

13041304
// Cast the enums to types we can GEP into.
13051305
if n_variants == 1u {
@@ -1912,8 +1912,7 @@ fn autoderef(cx: @block_ctxt, v: ValueRef, t: ty::t) -> result_t {
19121912
}
19131913
ty::ty_enum(did, tps) {
19141914
let variants = ty::enum_variants(ccx.tcx, did);
1915-
if vec::len(*variants) != 1u ||
1916-
vec::len(variants[0].args) != 1u {
1915+
if (*variants).len() != 1u || variants[0].args.len() != 1u {
19171916
break;
19181917
}
19191918
t1 =
@@ -2278,7 +2277,7 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id, substs: [ty::t],
22782277
let this_tv = option::get(vec::find(*tvs, {|tv|
22792278
tv.id.node == fn_id.node}));
22802279
trans_enum_variant(ccx, enum_id.node, v, this_tv.disr_val,
2281-
vec::len(*tvs) == 1u, [], psubsts, lldecl);
2280+
(*tvs).len() == 1u, [], psubsts, lldecl);
22822281
}
22832282
ast_map::node_method(mth, impl_id, _) {
22842283
let selfty = ty::node_id_to_type(ccx.tcx, impl_id);
@@ -2301,12 +2300,12 @@ fn lval_static_fn(bcx: @block_ctxt, fn_id: ast::def_id, id: ast::node_id,
23012300
// monomorphized and non-monomorphized functions at the moment. If
23022301
// monomorphizing becomes the only approach, this'll be much simpler.
23032302
if ccx.sess.opts.monomorphize &&
2304-
(option::is_some(substs) || vec::len(tys) > 0u) &&
2303+
(option::is_some(substs) || tys.len() > 0u) &&
23052304
fn_id.crate == ast::local_crate &&
23062305
!vec::any(tys, {|t| ty::type_has_params(t)}) {
23072306
let mono = alt substs {
23082307
some((stys, dicts)) {
2309-
if (vec::len(stys) + vec::len(tys)) > 0u {
2308+
if (stys.len() + tys.len()) > 0u {
23102309
monomorphic_fn(ccx, fn_id, stys + tys, some(dicts))
23112310
} else { none }
23122311
}
@@ -2340,7 +2339,7 @@ fn lval_static_fn(bcx: @block_ctxt, fn_id: ast::def_id, id: ast::node_id,
23402339
trans_external_path(bcx, fn_id, tpt)
23412340
};
23422341
let gen = generic_none, bcx = bcx;
2343-
if vec::len(tys) > 0u {
2342+
if tys.len() > 0u {
23442343
let tydescs = [], tis = [];
23452344
for t in tys {
23462345
// TODO: Doesn't always escape.
@@ -2424,7 +2423,7 @@ fn trans_var(cx: @block_ctxt, def: ast::def, id: ast::node_id)
24242423
ret lval_static_fn(cx, did, id, none);
24252424
}
24262425
ast::def_variant(tid, vid) {
2427-
if vec::len(ty::enum_variant_with_id(ccx.tcx, tid, vid).args) > 0u {
2426+
if ty::enum_variant_with_id(ccx.tcx, tid, vid).args.len() > 0u {
24282427
// N-ary variant.
24292428
ret lval_static_fn(cx, vid, id, none);
24302429
} else {
@@ -2616,7 +2615,7 @@ fn maybe_add_env(bcx: @block_ctxt, c: lval_maybe_callee)
26162615
fn lval_maybe_callee_to_lval(c: lval_maybe_callee, ty: ty::t) -> lval_result {
26172616
alt c.generic {
26182617
generic_full(gi) {
2619-
let n_args = vec::len(ty::ty_fn_args(ty));
2618+
let n_args = ty::ty_fn_args(ty).len();
26202619
let args = vec::init_elt(n_args, none::<@ast::expr>);
26212620
let space = alloc_ty(c.bcx, ty);
26222621
let bcx = closure::trans_bind_1(space.bcx, ty, c, args, ty,
@@ -3877,10 +3876,8 @@ fn new_raw_block_ctxt(fcx: @fn_ctxt, llbb: BasicBlockRef) -> @block_ctxt {
38773876
fn trans_block_cleanups(bcx: @block_ctxt, cleanup_cx: @block_ctxt) ->
38783877
@block_ctxt {
38793878
if bcx.unreachable { ret bcx; }
3880-
if cleanup_cx.kind == NON_SCOPE_BLOCK {
3881-
assert (vec::len::<cleanup>(cleanup_cx.cleanups) == 0u);
3882-
}
3883-
let i = vec::len::<cleanup>(cleanup_cx.cleanups), bcx = bcx;
3879+
let i = cleanup_cx.cleanups.len(), bcx = bcx;
3880+
if cleanup_cx.kind == NON_SCOPE_BLOCK { assert i == 0u; }
38843881
while i > 0u {
38853882
i -= 1u;
38863883
let c = cleanup_cx.cleanups[i];
@@ -4535,7 +4532,7 @@ fn trans_native_mod(ccx: @crate_ctxt,
45354532
let bcx = new_top_block_ctxt(fcx, none);
45364533
let lltop = bcx.llbb;
45374534
let llargbundle = llvm::LLVMGetParam(llshimfn, 0 as c_uint);
4538-
let i = 0u, n = vec::len(tys.arg_tys);
4535+
let i = 0u, n = tys.arg_tys.len();
45394536
let llargvals = [];
45404537
while i < n {
45414538
let llargval = load_inbounds(bcx, llargbundle, [0, i as int]);
@@ -4573,7 +4570,7 @@ fn trans_native_mod(ccx: @crate_ctxt,
45734570

45744571
// Allocate the struct and write the arguments into it.
45754572
let llargbundle = alloca(bcx, tys.bundle_ty);
4576-
let i = 0u, n = vec::len(tys.arg_tys);
4573+
let i = 0u, n = tys.arg_tys.len();
45774574
let implicit_args = 2u + num_tps; // ret + env
45784575
while i < n {
45794576
let llargval = llvm::LLVMGetParam(llwrapfn,
@@ -4608,7 +4605,7 @@ fn trans_native_mod(ccx: @crate_ctxt,
46084605
alt ccx.item_ids.find(id) {
46094606
some(llwrapfn) {
46104607
let llshimfn = build_shim_fn(ccx, native_item, tys, cc);
4611-
build_wrap_fn(ccx, tys, vec::len(tps), llshimfn, llwrapfn);
4608+
build_wrap_fn(ccx, tys, tps.len(), llshimfn, llwrapfn);
46124609
}
46134610
none {
46144611
ccx.sess.span_fatal(
@@ -4661,11 +4658,11 @@ fn trans_item(ccx: @crate_ctxt, item: ast::item) {
46614658
trans_mod(ccx, m);
46624659
}
46634660
ast::item_enum(variants, tps) {
4664-
let degen = vec::len(variants) == 1u;
4661+
let degen = variants.len() == 1u;
46654662
let vi = ty::enum_variants(ccx.tcx, local_def(item.id));
46664663
let i = 0;
46674664
for variant: ast::variant in variants {
4668-
if vec::len(variant.node.args) > 0u {
4665+
if variant.node.args.len() > 0u {
46694666
trans_enum_variant(ccx, item.id, variant,
46704667
vi[i].disr_val, degen, tps,
46714668
none, ccx.item_ids.get(variant.node.id));
@@ -4737,7 +4734,7 @@ fn create_main_wrapper(ccx: @crate_ctxt, sp: span, main_llfn: ValueRef,
47374734
let main_takes_argv =
47384735
// invariant!
47394736
alt ty::get(main_node_type).struct {
4740-
ty::ty_fn({inputs, _}) { vec::len(inputs) != 0u }
4737+
ty::ty_fn({inputs, _}) { inputs.len() != 0u }
47414738
_ { ccx.sess.span_fatal(sp, "main has a non-function type"); }
47424739
};
47434740

@@ -4800,7 +4797,7 @@ fn create_main_wrapper(ccx: @crate_ctxt, sp: span, main_llfn: ValueRef,
48004797
llvm::LLVMGetParam(llfn, 1 as c_uint), crate_map];
48014798
let result = unsafe {
48024799
llvm::LLVMBuildCall(bld, start, vec::to_ptr(args),
4803-
vec::len(args) as c_uint, noname())
4800+
args.len() as c_uint, noname())
48044801
};
48054802
llvm::LLVMBuildRet(bld, result);
48064803
}
@@ -4938,7 +4935,7 @@ fn collect_item(ccx: @crate_ctxt, abi: @mutable option<ast::native_abi>,
49384935
}
49394936
ast::item_enum(variants, tps) {
49404937
for variant in variants {
4941-
if vec::len(variant.node.args) != 0u {
4938+
if variant.node.args.len() != 0u {
49424939
register_fn(ccx, i.span,
49434940
my_path + [path_name(variant.node.name)],
49444941
"enum", tps, variant.node.id);

0 commit comments

Comments
 (0)