Skip to content

Commit 59221e9

Browse files
committed
replace more vector + (issue #2719)
1 parent 58a39d1 commit 59221e9

File tree

9 files changed

+106
-66
lines changed

9 files changed

+106
-66
lines changed

src/libcore/vec.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import ptr::addr_of;
55
import libc::size_t;
66

77
export append;
8+
export append_one;
89
export init_op;
910
export is_empty;
1011
export is_not_empty;
@@ -492,6 +493,13 @@ pure fn append<T: copy>(+lhs: [T]/~, rhs: [const T]/&) -> [T]/~ {
492493
ret v;
493494
}
494495

496+
#[inline(always)]
497+
pure fn append_one<T>(+lhs: [T]/~, +x: T) -> [T]/~ {
498+
let mut v <- lhs;
499+
unchecked { push(v, x); }
500+
v
501+
}
502+
495503
#[inline(always)]
496504
pure fn append_mut<T: copy>(lhs: [mut T]/&, rhs: [const T]/&) -> [mut T]/~ {
497505
let mut v = [mut]/~;

src/libsyntax/ast_map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ type ctx = {map: map, mut path: path,
5757
type vt = visit::vt<ctx>;
5858

5959
fn extend(cx: ctx, +elt: ident) -> @path {
60-
@(cx.path + [path_name(elt)]/~)
60+
@(vec::append(cx.path, [path_name(elt)]/~))
6161
}
6262

6363
fn mk_ast_map_visitor() -> vt {

src/libsyntax/ext/auto_serialize.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -740,14 +740,15 @@ fn mk_deser_fn(cx: ext_ctxt, span: span,
740740
[]/~))]/~;
741741

742742
let deser_tps: [ast::ty_param]/~ =
743-
[{ident: @"__D",
744-
id: cx.next_id(),
745-
bounds: deser_bnds}]/~ + vec::map(tps) {|tp|
746-
let cloned = cx.clone_ty_param(tp);
747-
{bounds: @(vec::append(*cloned.bounds,
748-
[ast::bound_copy]/~))
749-
with cloned}
750-
};
743+
vec::append([{ident: @"__D",
744+
id: cx.next_id(),
745+
bounds: deser_bnds}]/~,
746+
vec::map(tps) {|tp|
747+
let cloned = cx.clone_ty_param(tp);
748+
{bounds: @(vec::append(*cloned.bounds,
749+
[ast::bound_copy]/~))
750+
with cloned}
751+
});
751752

752753
let deser_blk = cx.expr_blk(f(cx, tps_map, #ast(expr){__d}));
753754

src/rustc/middle/trans/alt.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,16 @@ fn expand_nested_bindings(m: match, col: uint, val: ValueRef) -> match {
108108
for vec::each(m) {|br|
109109
alt br.pats[col].node {
110110
ast::pat_ident(name, some(inner)) {
111-
let pats = vec::slice(br.pats, 0u, col) + [inner]/~ +
112-
vec::slice(br.pats, col + 1u, br.pats.len());
113-
vec::push(result, @{pats: pats,
114-
bound: br.bound + [{ident: path_to_ident(name),
115-
val: val}]/~
116-
with *br});
111+
let pats = vec::append(
112+
vec::slice(br.pats, 0u, col),
113+
vec::append([inner]/~,
114+
vec::view(br.pats, col + 1u, br.pats.len())));
115+
vec::push(result,
116+
@{pats: pats,
117+
bound: vec::append(
118+
br.bound, [{ident: path_to_ident(name),
119+
val: val}]/~)
120+
with *br});
117121
}
118122
_ { vec::push(result, br); }
119123
}
@@ -129,12 +133,14 @@ fn enter_match(dm: def_map, m: match, col: uint, val: ValueRef,
129133
for vec::each(m) {|br|
130134
alt e(br.pats[col]) {
131135
some(sub) {
132-
let pats = sub + vec::slice(br.pats, 0u, col) +
133-
vec::slice(br.pats, col + 1u, br.pats.len());
136+
let pats = vec::append(
137+
vec::append(sub, vec::view(br.pats, 0u, col)),
138+
vec::view(br.pats, col + 1u, br.pats.len()));
134139
let self = br.pats[col];
135140
let bound = alt self.node {
136141
ast::pat_ident(name, none) if !pat_is_variant(dm, self) {
137-
br.bound + [{ident: path_to_ident(name), val: val}]/~
142+
vec::append(br.bound,
143+
[{ident: path_to_ident(name), val: val}]/~)
138144
}
139145
_ { br.bound }
140146
};
@@ -417,8 +423,8 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
417423
expand_nested_bindings(m, col, val)
418424
} else { m };
419425

420-
let vals_left = vec::slice(vals, 0u, col) +
421-
vec::slice(vals, col + 1u, vals.len());
426+
let vals_left = vec::append(vec::slice(vals, 0u, col),
427+
vec::view(vals, col + 1u, vals.len()));
422428
let ccx = bcx.fcx.ccx;
423429
let mut pat_id = 0;
424430
for vec::each(m) {|br|
@@ -439,7 +445,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
439445
vec::push(rec_vals, GEPi(bcx, val, [0u, ix]/~));
440446
}
441447
compile_submatch(bcx, enter_rec(dm, m, col, rec_fields, val),
442-
rec_vals + vals_left, chk, exits);
448+
vec::append(rec_vals, vals_left), chk, exits);
443449
ret;
444450
}
445451

@@ -455,7 +461,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
455461
i += 1u;
456462
}
457463
compile_submatch(bcx, enter_tup(dm, m, col, val, n_tup_elts),
458-
tup_vals + vals_left, chk, exits);
464+
vec::append(tup_vals, vals_left), chk, exits);
459465
ret;
460466
}
461467

@@ -465,8 +471,8 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
465471
let box_no_addrspace = non_gc_box_cast(bcx, llbox);
466472
let unboxed =
467473
GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~);
468-
compile_submatch(bcx, enter_box(dm, m, col, val), [unboxed]/~
469-
+ vals_left, chk, exits);
474+
compile_submatch(bcx, enter_box(dm, m, col, val),
475+
vec::append([unboxed]/~, vals_left), chk, exits);
470476
ret;
471477
}
472478

@@ -476,7 +482,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
476482
let unboxed =
477483
GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~);
478484
compile_submatch(bcx, enter_uniq(dm, m, col, val),
479-
[unboxed]/~ + vals_left, chk, exits);
485+
vec::append([unboxed]/~, vals_left), chk, exits);
480486
ret;
481487
}
482488

@@ -580,7 +586,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
580586
lit(_) | range(_, _) { }
581587
}
582588
compile_submatch(opt_cx, enter_opt(tcx, m, opt, col, size, val),
583-
unpacked + vals_left, chk, exits);
589+
vec::append(unpacked, vals_left), chk, exits);
584590
}
585591

586592
// Compile the fall-through case, if any

src/rustc/middle/trans/base.rs

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2203,7 +2203,7 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id,
22032203
}
22042204
ccx.monomorphizing.insert(fn_id, depth + 1u);
22052205

2206-
let pt = *pt + [path_name(@ccx.names(*name))]/~;
2206+
let pt = vec::append(*pt, [path_name(@ccx.names(*name))]/~);
22072207
let s = mangle_exported_name(ccx, pt, mono_ty);
22082208

22092209
let mk_lldecl = {||
@@ -2346,8 +2346,9 @@ fn maybe_instantiate_inline(ccx: @crate_ctxt, fn_id: ast::def_id)
23462346
ty::lookup_item_type(ccx.tcx, impl_did);
23472347
if (*impl_bnds).len() + mth.tps.len() == 0u {
23482348
let llfn = get_item_val(ccx, mth.id);
2349-
let path = ty::item_path(ccx.tcx, impl_did) +
2350-
[path_name(mth.ident)]/~;
2349+
let path = vec::append(
2350+
ty::item_path(ccx.tcx, impl_did),
2351+
[path_name(mth.ident)]/~);
23512352
trans_fn(ccx, path, mth.decl, mth.body,
23522353
llfn, impl_self(impl_ty), none, mth.id);
23532354
}
@@ -3113,7 +3114,7 @@ fn trans_args(cx: block, llenv: ValueRef, args: call_args, fn_ty: ty::t,
31133114
}
31143115
}
31153116
arg_vals(vs) {
3116-
llargs += vs;
3117+
vec::push_all(llargs, vs);
31173118
}
31183119
}
31193120

@@ -3867,10 +3868,11 @@ fn trans_log(log_ex: @ast::expr, lvl: @ast::expr,
38673868
ret trans_expr(bcx, lvl, ignore);
38683869
}
38693870

3870-
let modpath = [path_mod(ccx.link_meta.name)]/~ +
3871+
let modpath = vec::append(
3872+
[path_mod(ccx.link_meta.name)]/~,
38713873
vec::filter(bcx.fcx.path, {|e|
38723874
alt e { path_mod(_) { true } _ { false } }
3873-
});
3875+
}));
38743876
let modname = path_str(modpath);
38753877

38763878
let global = if ccx.module_data.contains_key(modname) {
@@ -4901,12 +4903,16 @@ fn trans_item(ccx: @crate_ctxt, item: ast::item) {
49014903
ast::item_fn(decl, tps, body) {
49024904
if decl.purity == ast::extern_fn {
49034905
let llfndecl = get_item_val(ccx, item.id);
4904-
foreign::trans_extern_fn(ccx, *path + [path_name(item.ident)]/~,
4906+
foreign::trans_extern_fn(ccx,
4907+
vec::append(
4908+
*path,
4909+
[path_name(item.ident)]/~),
49054910
decl, body, llfndecl, item.id);
49064911
} else if tps.len() == 0u {
49074912
let llfndecl = get_item_val(ccx, item.id);
4908-
trans_fn(ccx, *path + [path_name(item.ident)]/~, decl, body,
4909-
llfndecl, no_self, none, item.id);
4913+
trans_fn(ccx,
4914+
vec::append(*path, [path_name(item.ident)]/~),
4915+
decl, body, llfndecl, no_self, none, item.id);
49104916
} else {
49114917
for vec::each(body.node.stmts) {|stmt|
49124918
alt stmt.node {
@@ -5112,9 +5118,11 @@ fn fill_fn_pair(bcx: block, pair: ValueRef, llfn: ValueRef,
51125118
}
51135119

51145120
fn item_path(ccx: @crate_ctxt, i: @ast::item) -> path {
5115-
*alt check ccx.tcx.items.get(i.id) {
5116-
ast_map::node_item(_, p) { p }
5117-
} + [path_name(i.ident)]/~
5121+
vec::append(
5122+
*alt check ccx.tcx.items.get(i.id) {
5123+
ast_map::node_item(_, p) { p }
5124+
},
5125+
[path_name(i.ident)]/~)
51185126
}
51195127

51205128
/* If there's already a symbol for the dtor with <id> and substs <substs>,
@@ -5125,9 +5133,10 @@ fn get_dtor_symbol(ccx: @crate_ctxt, path: path, id: ast::node_id,
51255133
alt ccx.item_symbols.find(id) {
51265134
some(s) { s }
51275135
none if is_none(substs) {
5128-
let s = mangle_exported_name(ccx,
5129-
path + [path_name(@ccx.names("dtor"))]/~,
5130-
t);
5136+
let s = mangle_exported_name(
5137+
ccx,
5138+
vec::append(path, [path_name(@ccx.names("dtor"))]/~),
5139+
t);
51315140
ccx.item_symbols.insert(id, s);
51325141
s
51335142
}
@@ -5137,8 +5146,11 @@ fn get_dtor_symbol(ccx: @crate_ctxt, path: path, id: ast::node_id,
51375146
alt substs {
51385147
some(ss) {
51395148
let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, t);
5140-
mangle_exported_name(ccx, path +
5141-
[path_name(@ccx.names("dtor"))]/~, mono_ty)
5149+
mangle_exported_name(
5150+
ccx,
5151+
vec::append(path,
5152+
[path_name(@ccx.names("dtor"))]/~),
5153+
mono_ty)
51425154
}
51435155
none {
51445156
ccx.sess.bug(#fmt("get_dtor_symbol: not monomorphizing and \
@@ -5157,7 +5169,7 @@ fn get_item_val(ccx: @crate_ctxt, id: ast::node_id) -> ValueRef {
51575169
let mut exprt = false;
51585170
let val = alt check ccx.tcx.items.get(id) {
51595171
ast_map::node_item(i, pth) {
5160-
let my_path = *pth + [path_name(i.ident)]/~;
5172+
let my_path = vec::append(*pth, [path_name(i.ident)]/~);
51615173
alt check i.node {
51625174
ast::item_const(_, _) {
51635175
let typ = ty::node_id_to_type(ccx.tcx, i.id);
@@ -5182,18 +5194,20 @@ fn get_item_val(ccx: @crate_ctxt, id: ast::node_id) -> ValueRef {
51825194
ast_map::node_method(m, impl_id, pth) {
51835195
exprt = true;
51845196
let mty = ty::node_id_to_type(ccx.tcx, id);
5185-
let pth = *pth + [path_name(@ccx.names("meth")),
5186-
path_name(m.ident)]/~;
5197+
let pth = vec::append(*pth, [path_name(@ccx.names("meth")),
5198+
path_name(m.ident)]/~);
51875199
let llfn = register_fn_full(ccx, m.span, pth, id, mty);
51885200
set_inline_hint_if_appr(m.attrs, llfn);
51895201
llfn
51905202
}
51915203
ast_map::node_foreign_item(ni, _, pth) {
51925204
exprt = true;
5193-
register_fn(ccx, ni.span, *pth + [path_name(ni.ident)]/~, ni.id)
5205+
register_fn(ccx, ni.span,
5206+
vec::append(*pth, [path_name(ni.ident)]/~),
5207+
ni.id)
51945208
}
51955209
ast_map::node_ctor(nm, tps, ctor, _, pt) {
5196-
let my_path = *pt + [path_name(nm)]/~;
5210+
let my_path = vec::append(*pt, [path_name(nm)]/~);
51975211
register_fn(ccx, ctor.span, my_path, ctor.node.id)
51985212
}
51995213
ast_map::node_dtor(tps, dt, parent_id, pt) {
@@ -5219,7 +5233,9 @@ fn get_item_val(ccx: @crate_ctxt, id: ast::node_id) -> ValueRef {
52195233

52205234
ast_map::node_variant(v, enm, pth) {
52215235
assert v.node.args.len() != 0u;
5222-
let pth = *pth + [path_name(enm.ident), path_name(v.node.name)]/~;
5236+
let pth = vec::append(*pth,
5237+
[path_name(enm.ident),
5238+
path_name(v.node.name)]/~);
52235239
let llfn = alt check enm.node {
52245240
ast::item_enum(_, _, _) {
52255241
register_fn(ccx, v.span, pth, id)
@@ -5248,8 +5264,8 @@ fn trans_constant(ccx: @crate_ctxt, it: @ast::item) {
52485264
let mut i = 0;
52495265
let path = item_path(ccx, it);
52505266
for vec::each(variants) {|variant|
5251-
let p = path + [path_name(variant.node.name),
5252-
path_name(@"discrim")]/~;
5267+
let p = vec::append(path, [path_name(variant.node.name),
5268+
path_name(@"discrim")]/~);
52535269
let s = mangle_exported_name(ccx, p, ty::mk_int(ccx.tcx));
52545270
let disr_val = vi[i].disr_val;
52555271
note_unique_llvm_symbol(ccx, s);
@@ -5454,7 +5470,7 @@ fn crate_ctxt_to_encode_parms(cx: @crate_ctxt)
54545470
let mut result = []/~;
54555471
for list::each(cx.maps.impl_map.get(id)) {
54565472
|impls|
5457-
result += (*impls).map({|i| (i.ident, i.did) });
5473+
vec::push_all(result, (*impls).map({|i| (i.ident, i.did) }));
54585474
}
54595475
ret result;
54605476
}

src/rustc/middle/trans/closure.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,11 @@ fn build_closure(bcx0: block,
329329
none { bcx.fcx.llretptr }
330330
};
331331
let nil_ret = PointerCast(bcx, our_ret, T_ptr(T_nil()));
332-
env_vals +=
333-
[env_ref(flagptr, ty::mk_mut_ptr(tcx, ty::mk_bool(tcx)), owned),
334-
env_ref(nil_ret, ty::mk_nil_ptr(tcx), owned)]/~;
332+
vec::push(env_vals,
333+
env_ref(flagptr,
334+
ty::mk_mut_ptr(tcx, ty::mk_bool(tcx)), owned));
335+
vec::push(env_vals,
336+
env_ref(nil_ret, ty::mk_nil_ptr(tcx), owned));
335337
}
336338
ret store_environment(bcx, env_vals, ck);
337339
}
@@ -391,7 +393,7 @@ fn trans_expr_fn(bcx: block,
391393
let ccx = bcx.ccx(), bcx = bcx;
392394
let fty = node_id_type(bcx, id);
393395
let llfnty = type_of_fn_from_ty(ccx, fty);
394-
let sub_path = bcx.fcx.path + [path_name(@"anon")]/~;
396+
let sub_path = vec::append_one(bcx.fcx.path, path_name(@"anon"));
395397
let s = mangle_internal_name_by_path(ccx, sub_path);
396398
let llfn = decl_internal_cdecl_fn(ccx.llmod, s, llfnty);
397399

@@ -475,7 +477,8 @@ fn trans_bind_1(cx: block, outgoing_fty: ty::t,
475477

476478
// Actually construct the closure
477479
let {llbox, cdata_ty, bcx} = store_environment(
478-
bcx, env_vals + vec::map(bound, {|x| env_expr(x, expr_ty(bcx, x))}),
480+
bcx, vec::append(env_vals,
481+
vec::map(bound, {|x| env_expr(x, expr_ty(bcx, x))})),
479482
ty::ck_box);
480483

481484
// Make thunk

src/rustc/middle/trans/common.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,10 @@ fn revoke_clean(cx: block, val: ValueRef) {
312312
alt cu { clean_temp(v, _, _) if v == val { true } _ { false } }
313313
})) {|i|
314314
info.cleanups =
315-
vec::slice(info.cleanups, 0u, i) +
316-
vec::slice(info.cleanups, i + 1u, info.cleanups.len());
315+
vec::append(vec::slice(info.cleanups, 0u, i),
316+
vec::view(info.cleanups,
317+
i + 1u,
318+
info.cleanups.len()));
317319
scope_clean_changed(info);
318320
}
319321
}
@@ -706,7 +708,7 @@ fn T_box_header(cx: @crate_ctxt) -> TypeRef {
706708
}
707709

708710
fn T_box(cx: @crate_ctxt, t: TypeRef) -> TypeRef {
709-
ret T_struct(T_box_header_fields(cx) + [t]/~);
711+
ret T_struct(vec::append(T_box_header_fields(cx), [t]/~));
710712
}
711713

712714
fn T_box_ptr(t: TypeRef) -> TypeRef {
@@ -723,7 +725,7 @@ fn T_opaque_box_ptr(cx: @crate_ctxt) -> TypeRef {
723725
}
724726

725727
fn T_unique(cx: @crate_ctxt, t: TypeRef) -> TypeRef {
726-
ret T_struct(T_box_header_fields(cx) + [t]/~);
728+
ret T_struct(vec::append(T_box_header_fields(cx), [t]/~));
727729
}
728730

729731
fn T_unique_ptr(t: TypeRef) -> TypeRef {

0 commit comments

Comments
 (0)