replace more vector + (issue #2719)

This commit is contained in:
Eric Holk
2012-06-28 13:52:13 -07:00
parent 58a39d1ca3
commit 59221e9ac8
9 changed files with 106 additions and 66 deletions

View File

@@ -5,6 +5,7 @@ import ptr::addr_of;
import libc::size_t; import libc::size_t;
export append; export append;
export append_one;
export init_op; export init_op;
export is_empty; export is_empty;
export is_not_empty; export is_not_empty;
@@ -492,6 +493,13 @@ pure fn append<T: copy>(+lhs: [T]/~, rhs: [const T]/&) -> [T]/~ {
ret v; ret v;
} }
#[inline(always)]
pure fn append_one<T>(+lhs: [T]/~, +x: T) -> [T]/~ {
let mut v <- lhs;
unchecked { push(v, x); }
v
}
#[inline(always)] #[inline(always)]
pure fn append_mut<T: copy>(lhs: [mut T]/&, rhs: [const T]/&) -> [mut T]/~ { pure fn append_mut<T: copy>(lhs: [mut T]/&, rhs: [const T]/&) -> [mut T]/~ {
let mut v = [mut]/~; let mut v = [mut]/~;

View File

@@ -57,7 +57,7 @@ type ctx = {map: map, mut path: path,
type vt = visit::vt<ctx>; type vt = visit::vt<ctx>;
fn extend(cx: ctx, +elt: ident) -> @path { fn extend(cx: ctx, +elt: ident) -> @path {
@(cx.path + [path_name(elt)]/~) @(vec::append(cx.path, [path_name(elt)]/~))
} }
fn mk_ast_map_visitor() -> vt { fn mk_ast_map_visitor() -> vt {

View File

@@ -740,14 +740,15 @@ fn mk_deser_fn(cx: ext_ctxt, span: span,
[]/~))]/~; []/~))]/~;
let deser_tps: [ast::ty_param]/~ = let deser_tps: [ast::ty_param]/~ =
[{ident: @"__D", vec::append([{ident: @"__D",
id: cx.next_id(), id: cx.next_id(),
bounds: deser_bnds}]/~ + vec::map(tps) {|tp| bounds: deser_bnds}]/~,
vec::map(tps) {|tp|
let cloned = cx.clone_ty_param(tp); let cloned = cx.clone_ty_param(tp);
{bounds: @(vec::append(*cloned.bounds, {bounds: @(vec::append(*cloned.bounds,
[ast::bound_copy]/~)) [ast::bound_copy]/~))
with cloned} with cloned}
}; });
let deser_blk = cx.expr_blk(f(cx, tps_map, #ast(expr){__d})); let deser_blk = cx.expr_blk(f(cx, tps_map, #ast(expr){__d}));

View File

@@ -108,11 +108,15 @@ fn expand_nested_bindings(m: match, col: uint, val: ValueRef) -> match {
for vec::each(m) {|br| for vec::each(m) {|br|
alt br.pats[col].node { alt br.pats[col].node {
ast::pat_ident(name, some(inner)) { ast::pat_ident(name, some(inner)) {
let pats = vec::slice(br.pats, 0u, col) + [inner]/~ + let pats = vec::append(
vec::slice(br.pats, col + 1u, br.pats.len()); vec::slice(br.pats, 0u, col),
vec::push(result, @{pats: pats, vec::append([inner]/~,
bound: br.bound + [{ident: path_to_ident(name), vec::view(br.pats, col + 1u, br.pats.len())));
val: val}]/~ vec::push(result,
@{pats: pats,
bound: vec::append(
br.bound, [{ident: path_to_ident(name),
val: val}]/~)
with *br}); with *br});
} }
_ { vec::push(result, br); } _ { vec::push(result, br); }
@@ -129,12 +133,14 @@ fn enter_match(dm: def_map, m: match, col: uint, val: ValueRef,
for vec::each(m) {|br| for vec::each(m) {|br|
alt e(br.pats[col]) { alt e(br.pats[col]) {
some(sub) { some(sub) {
let pats = sub + vec::slice(br.pats, 0u, col) + let pats = vec::append(
vec::slice(br.pats, col + 1u, br.pats.len()); vec::append(sub, vec::view(br.pats, 0u, col)),
vec::view(br.pats, col + 1u, br.pats.len()));
let self = br.pats[col]; let self = br.pats[col];
let bound = alt self.node { let bound = alt self.node {
ast::pat_ident(name, none) if !pat_is_variant(dm, self) { ast::pat_ident(name, none) if !pat_is_variant(dm, self) {
br.bound + [{ident: path_to_ident(name), val: val}]/~ vec::append(br.bound,
[{ident: path_to_ident(name), val: val}]/~)
} }
_ { br.bound } _ { br.bound }
}; };
@@ -417,8 +423,8 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
expand_nested_bindings(m, col, val) expand_nested_bindings(m, col, val)
} else { m }; } else { m };
let vals_left = vec::slice(vals, 0u, col) + let vals_left = vec::append(vec::slice(vals, 0u, col),
vec::slice(vals, col + 1u, vals.len()); vec::view(vals, col + 1u, vals.len()));
let ccx = bcx.fcx.ccx; let ccx = bcx.fcx.ccx;
let mut pat_id = 0; let mut pat_id = 0;
for vec::each(m) {|br| for vec::each(m) {|br|
@@ -439,7 +445,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
vec::push(rec_vals, GEPi(bcx, val, [0u, ix]/~)); vec::push(rec_vals, GEPi(bcx, val, [0u, ix]/~));
} }
compile_submatch(bcx, enter_rec(dm, m, col, rec_fields, val), compile_submatch(bcx, enter_rec(dm, m, col, rec_fields, val),
rec_vals + vals_left, chk, exits); vec::append(rec_vals, vals_left), chk, exits);
ret; ret;
} }
@@ -455,7 +461,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
i += 1u; i += 1u;
} }
compile_submatch(bcx, enter_tup(dm, m, col, val, n_tup_elts), compile_submatch(bcx, enter_tup(dm, m, col, val, n_tup_elts),
tup_vals + vals_left, chk, exits); vec::append(tup_vals, vals_left), chk, exits);
ret; ret;
} }
@@ -465,8 +471,8 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
let box_no_addrspace = non_gc_box_cast(bcx, llbox); let box_no_addrspace = non_gc_box_cast(bcx, llbox);
let unboxed = let unboxed =
GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~); GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~);
compile_submatch(bcx, enter_box(dm, m, col, val), [unboxed]/~ compile_submatch(bcx, enter_box(dm, m, col, val),
+ vals_left, chk, exits); vec::append([unboxed]/~, vals_left), chk, exits);
ret; ret;
} }
@@ -476,7 +482,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
let unboxed = let unboxed =
GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~); GEPi(bcx, box_no_addrspace, [0u, abi::box_field_body]/~);
compile_submatch(bcx, enter_uniq(dm, m, col, val), compile_submatch(bcx, enter_uniq(dm, m, col, val),
[unboxed]/~ + vals_left, chk, exits); vec::append([unboxed]/~, vals_left), chk, exits);
ret; ret;
} }
@@ -580,7 +586,7 @@ fn compile_submatch(bcx: block, m: match, vals: [ValueRef]/~,
lit(_) | range(_, _) { } lit(_) | range(_, _) { }
} }
compile_submatch(opt_cx, enter_opt(tcx, m, opt, col, size, val), compile_submatch(opt_cx, enter_opt(tcx, m, opt, col, size, val),
unpacked + vals_left, chk, exits); vec::append(unpacked, vals_left), chk, exits);
} }
// Compile the fall-through case, if any // Compile the fall-through case, if any

View File

@@ -2203,7 +2203,7 @@ fn monomorphic_fn(ccx: @crate_ctxt, fn_id: ast::def_id,
} }
ccx.monomorphizing.insert(fn_id, depth + 1u); ccx.monomorphizing.insert(fn_id, depth + 1u);
let pt = *pt + [path_name(@ccx.names(*name))]/~; let pt = vec::append(*pt, [path_name(@ccx.names(*name))]/~);
let s = mangle_exported_name(ccx, pt, mono_ty); let s = mangle_exported_name(ccx, pt, mono_ty);
let mk_lldecl = {|| let mk_lldecl = {||
@@ -2346,8 +2346,9 @@ fn maybe_instantiate_inline(ccx: @crate_ctxt, fn_id: ast::def_id)
ty::lookup_item_type(ccx.tcx, impl_did); ty::lookup_item_type(ccx.tcx, impl_did);
if (*impl_bnds).len() + mth.tps.len() == 0u { if (*impl_bnds).len() + mth.tps.len() == 0u {
let llfn = get_item_val(ccx, mth.id); let llfn = get_item_val(ccx, mth.id);
let path = ty::item_path(ccx.tcx, impl_did) + let path = vec::append(
[path_name(mth.ident)]/~; ty::item_path(ccx.tcx, impl_did),
[path_name(mth.ident)]/~);
trans_fn(ccx, path, mth.decl, mth.body, trans_fn(ccx, path, mth.decl, mth.body,
llfn, impl_self(impl_ty), none, mth.id); llfn, impl_self(impl_ty), none, mth.id);
} }
@@ -3113,7 +3114,7 @@ fn trans_args(cx: block, llenv: ValueRef, args: call_args, fn_ty: ty::t,
} }
} }
arg_vals(vs) { arg_vals(vs) {
llargs += vs; vec::push_all(llargs, vs);
} }
} }
@@ -3867,10 +3868,11 @@ fn trans_log(log_ex: @ast::expr, lvl: @ast::expr,
ret trans_expr(bcx, lvl, ignore); ret trans_expr(bcx, lvl, ignore);
} }
let modpath = [path_mod(ccx.link_meta.name)]/~ + let modpath = vec::append(
[path_mod(ccx.link_meta.name)]/~,
vec::filter(bcx.fcx.path, {|e| vec::filter(bcx.fcx.path, {|e|
alt e { path_mod(_) { true } _ { false } } alt e { path_mod(_) { true } _ { false } }
}); }));
let modname = path_str(modpath); let modname = path_str(modpath);
let global = if ccx.module_data.contains_key(modname) { let global = if ccx.module_data.contains_key(modname) {
@@ -4901,12 +4903,16 @@ fn trans_item(ccx: @crate_ctxt, item: ast::item) {
ast::item_fn(decl, tps, body) { ast::item_fn(decl, tps, body) {
if decl.purity == ast::extern_fn { if decl.purity == ast::extern_fn {
let llfndecl = get_item_val(ccx, item.id); let llfndecl = get_item_val(ccx, item.id);
foreign::trans_extern_fn(ccx, *path + [path_name(item.ident)]/~, foreign::trans_extern_fn(ccx,
vec::append(
*path,
[path_name(item.ident)]/~),
decl, body, llfndecl, item.id); decl, body, llfndecl, item.id);
} else if tps.len() == 0u { } else if tps.len() == 0u {
let llfndecl = get_item_val(ccx, item.id); let llfndecl = get_item_val(ccx, item.id);
trans_fn(ccx, *path + [path_name(item.ident)]/~, decl, body, trans_fn(ccx,
llfndecl, no_self, none, item.id); vec::append(*path, [path_name(item.ident)]/~),
decl, body, llfndecl, no_self, none, item.id);
} else { } else {
for vec::each(body.node.stmts) {|stmt| for vec::each(body.node.stmts) {|stmt|
alt stmt.node { alt stmt.node {
@@ -5112,9 +5118,11 @@ fn fill_fn_pair(bcx: block, pair: ValueRef, llfn: ValueRef,
} }
fn item_path(ccx: @crate_ctxt, i: @ast::item) -> path { fn item_path(ccx: @crate_ctxt, i: @ast::item) -> path {
vec::append(
*alt check ccx.tcx.items.get(i.id) { *alt check ccx.tcx.items.get(i.id) {
ast_map::node_item(_, p) { p } ast_map::node_item(_, p) { p }
} + [path_name(i.ident)]/~ },
[path_name(i.ident)]/~)
} }
/* If there's already a symbol for the dtor with <id> and substs <substs>, /* If there's already a symbol for the dtor with <id> and substs <substs>,
@@ -5125,8 +5133,9 @@ fn get_dtor_symbol(ccx: @crate_ctxt, path: path, id: ast::node_id,
alt ccx.item_symbols.find(id) { alt ccx.item_symbols.find(id) {
some(s) { s } some(s) { s }
none if is_none(substs) { none if is_none(substs) {
let s = mangle_exported_name(ccx, let s = mangle_exported_name(
path + [path_name(@ccx.names("dtor"))]/~, ccx,
vec::append(path, [path_name(@ccx.names("dtor"))]/~),
t); t);
ccx.item_symbols.insert(id, s); ccx.item_symbols.insert(id, s);
s s
@@ -5137,8 +5146,11 @@ fn get_dtor_symbol(ccx: @crate_ctxt, path: path, id: ast::node_id,
alt substs { alt substs {
some(ss) { some(ss) {
let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, t); let mono_ty = ty::subst_tps(ccx.tcx, ss.tys, t);
mangle_exported_name(ccx, path + mangle_exported_name(
[path_name(@ccx.names("dtor"))]/~, mono_ty) ccx,
vec::append(path,
[path_name(@ccx.names("dtor"))]/~),
mono_ty)
} }
none { none {
ccx.sess.bug(#fmt("get_dtor_symbol: not monomorphizing and \ 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 {
let mut exprt = false; let mut exprt = false;
let val = alt check ccx.tcx.items.get(id) { let val = alt check ccx.tcx.items.get(id) {
ast_map::node_item(i, pth) { ast_map::node_item(i, pth) {
let my_path = *pth + [path_name(i.ident)]/~; let my_path = vec::append(*pth, [path_name(i.ident)]/~);
alt check i.node { alt check i.node {
ast::item_const(_, _) { ast::item_const(_, _) {
let typ = ty::node_id_to_type(ccx.tcx, i.id); 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 {
ast_map::node_method(m, impl_id, pth) { ast_map::node_method(m, impl_id, pth) {
exprt = true; exprt = true;
let mty = ty::node_id_to_type(ccx.tcx, id); let mty = ty::node_id_to_type(ccx.tcx, id);
let pth = *pth + [path_name(@ccx.names("meth")), let pth = vec::append(*pth, [path_name(@ccx.names("meth")),
path_name(m.ident)]/~; path_name(m.ident)]/~);
let llfn = register_fn_full(ccx, m.span, pth, id, mty); let llfn = register_fn_full(ccx, m.span, pth, id, mty);
set_inline_hint_if_appr(m.attrs, llfn); set_inline_hint_if_appr(m.attrs, llfn);
llfn llfn
} }
ast_map::node_foreign_item(ni, _, pth) { ast_map::node_foreign_item(ni, _, pth) {
exprt = true; exprt = true;
register_fn(ccx, ni.span, *pth + [path_name(ni.ident)]/~, ni.id) register_fn(ccx, ni.span,
vec::append(*pth, [path_name(ni.ident)]/~),
ni.id)
} }
ast_map::node_ctor(nm, tps, ctor, _, pt) { ast_map::node_ctor(nm, tps, ctor, _, pt) {
let my_path = *pt + [path_name(nm)]/~; let my_path = vec::append(*pt, [path_name(nm)]/~);
register_fn(ccx, ctor.span, my_path, ctor.node.id) register_fn(ccx, ctor.span, my_path, ctor.node.id)
} }
ast_map::node_dtor(tps, dt, parent_id, pt) { 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 {
ast_map::node_variant(v, enm, pth) { ast_map::node_variant(v, enm, pth) {
assert v.node.args.len() != 0u; assert v.node.args.len() != 0u;
let pth = *pth + [path_name(enm.ident), path_name(v.node.name)]/~; let pth = vec::append(*pth,
[path_name(enm.ident),
path_name(v.node.name)]/~);
let llfn = alt check enm.node { let llfn = alt check enm.node {
ast::item_enum(_, _, _) { ast::item_enum(_, _, _) {
register_fn(ccx, v.span, pth, id) register_fn(ccx, v.span, pth, id)
@@ -5248,8 +5264,8 @@ fn trans_constant(ccx: @crate_ctxt, it: @ast::item) {
let mut i = 0; let mut i = 0;
let path = item_path(ccx, it); let path = item_path(ccx, it);
for vec::each(variants) {|variant| for vec::each(variants) {|variant|
let p = path + [path_name(variant.node.name), let p = vec::append(path, [path_name(variant.node.name),
path_name(@"discrim")]/~; path_name(@"discrim")]/~);
let s = mangle_exported_name(ccx, p, ty::mk_int(ccx.tcx)); let s = mangle_exported_name(ccx, p, ty::mk_int(ccx.tcx));
let disr_val = vi[i].disr_val; let disr_val = vi[i].disr_val;
note_unique_llvm_symbol(ccx, s); note_unique_llvm_symbol(ccx, s);
@@ -5454,7 +5470,7 @@ fn crate_ctxt_to_encode_parms(cx: @crate_ctxt)
let mut result = []/~; let mut result = []/~;
for list::each(cx.maps.impl_map.get(id)) { for list::each(cx.maps.impl_map.get(id)) {
|impls| |impls|
result += (*impls).map({|i| (i.ident, i.did) }); vec::push_all(result, (*impls).map({|i| (i.ident, i.did) }));
} }
ret result; ret result;
} }

View File

@@ -329,9 +329,11 @@ fn build_closure(bcx0: block,
none { bcx.fcx.llretptr } none { bcx.fcx.llretptr }
}; };
let nil_ret = PointerCast(bcx, our_ret, T_ptr(T_nil())); let nil_ret = PointerCast(bcx, our_ret, T_ptr(T_nil()));
env_vals += vec::push(env_vals,
[env_ref(flagptr, ty::mk_mut_ptr(tcx, ty::mk_bool(tcx)), owned), env_ref(flagptr,
env_ref(nil_ret, ty::mk_nil_ptr(tcx), owned)]/~; ty::mk_mut_ptr(tcx, ty::mk_bool(tcx)), owned));
vec::push(env_vals,
env_ref(nil_ret, ty::mk_nil_ptr(tcx), owned));
} }
ret store_environment(bcx, env_vals, ck); ret store_environment(bcx, env_vals, ck);
} }
@@ -391,7 +393,7 @@ fn trans_expr_fn(bcx: block,
let ccx = bcx.ccx(), bcx = bcx; let ccx = bcx.ccx(), bcx = bcx;
let fty = node_id_type(bcx, id); let fty = node_id_type(bcx, id);
let llfnty = type_of_fn_from_ty(ccx, fty); let llfnty = type_of_fn_from_ty(ccx, fty);
let sub_path = bcx.fcx.path + [path_name(@"anon")]/~; let sub_path = vec::append_one(bcx.fcx.path, path_name(@"anon"));
let s = mangle_internal_name_by_path(ccx, sub_path); let s = mangle_internal_name_by_path(ccx, sub_path);
let llfn = decl_internal_cdecl_fn(ccx.llmod, s, llfnty); let llfn = decl_internal_cdecl_fn(ccx.llmod, s, llfnty);
@@ -475,7 +477,8 @@ fn trans_bind_1(cx: block, outgoing_fty: ty::t,
// Actually construct the closure // Actually construct the closure
let {llbox, cdata_ty, bcx} = store_environment( let {llbox, cdata_ty, bcx} = store_environment(
bcx, env_vals + vec::map(bound, {|x| env_expr(x, expr_ty(bcx, x))}), bcx, vec::append(env_vals,
vec::map(bound, {|x| env_expr(x, expr_ty(bcx, x))})),
ty::ck_box); ty::ck_box);
// Make thunk // Make thunk

View File

@@ -312,8 +312,10 @@ fn revoke_clean(cx: block, val: ValueRef) {
alt cu { clean_temp(v, _, _) if v == val { true } _ { false } } alt cu { clean_temp(v, _, _) if v == val { true } _ { false } }
})) {|i| })) {|i|
info.cleanups = info.cleanups =
vec::slice(info.cleanups, 0u, i) + vec::append(vec::slice(info.cleanups, 0u, i),
vec::slice(info.cleanups, i + 1u, info.cleanups.len()); vec::view(info.cleanups,
i + 1u,
info.cleanups.len()));
scope_clean_changed(info); scope_clean_changed(info);
} }
} }
@@ -706,7 +708,7 @@ fn T_box_header(cx: @crate_ctxt) -> TypeRef {
} }
fn T_box(cx: @crate_ctxt, t: TypeRef) -> TypeRef { fn T_box(cx: @crate_ctxt, t: TypeRef) -> TypeRef {
ret T_struct(T_box_header_fields(cx) + [t]/~); ret T_struct(vec::append(T_box_header_fields(cx), [t]/~));
} }
fn T_box_ptr(t: TypeRef) -> TypeRef { fn T_box_ptr(t: TypeRef) -> TypeRef {
@@ -723,7 +725,7 @@ fn T_opaque_box_ptr(cx: @crate_ctxt) -> TypeRef {
} }
fn T_unique(cx: @crate_ctxt, t: TypeRef) -> TypeRef { fn T_unique(cx: @crate_ctxt, t: TypeRef) -> TypeRef {
ret T_struct(T_box_header_fields(cx) + [t]/~); ret T_struct(vec::append(T_box_header_fields(cx), [t]/~));
} }
fn T_unique_ptr(t: TypeRef) -> TypeRef { fn T_unique_ptr(t: TypeRef) -> TypeRef {

View File

@@ -19,11 +19,13 @@ fn trans_impl(ccx: @crate_ctxt, path: path, name: ast::ident,
methods: [@ast::method]/~, tps: [ast::ty_param]/~) { methods: [@ast::method]/~, tps: [ast::ty_param]/~) {
let _icx = ccx.insn_ctxt("impl::trans_impl"); let _icx = ccx.insn_ctxt("impl::trans_impl");
if tps.len() > 0u { ret; } if tps.len() > 0u { ret; }
let sub_path = path + [path_name(name)]/~; let sub_path = vec::append_one(path, path_name(name));
for vec::each(methods) {|m| for vec::each(methods) {|m|
if m.tps.len() == 0u { if m.tps.len() == 0u {
let llfn = get_item_val(ccx, m.id); let llfn = get_item_val(ccx, m.id);
trans_fn(ccx, sub_path + [path_name(m.ident)]/~, m.decl, m.body, trans_fn(ccx,
vec::append_one(sub_path, path_name(m.ident)),
m.decl, m.body,
llfn, impl_self(ty::node_id_to_type(ccx.tcx, m.self_id)), llfn, impl_self(ty::node_id_to_type(ccx.tcx, m.self_id)),
none, m.id); none, m.id);
} }
@@ -121,8 +123,10 @@ fn trans_monomorphized_callee(bcx: block, callee_id: ast::node_id,
let mth_id = method_with_name(bcx.ccx(), impl_did, mname); let mth_id = method_with_name(bcx.ccx(), impl_did, mname);
let n_m_tps = method_ty_param_count(ccx, mth_id, impl_did); let n_m_tps = method_ty_param_count(ccx, mth_id, impl_did);
let node_substs = node_id_type_params(bcx, callee_id); let node_substs = node_id_type_params(bcx, callee_id);
let ty_substs = impl_substs + let ty_substs
vec::tailn(node_substs, node_substs.len() - n_m_tps); = vec::append(impl_substs,
vec::tailn(node_substs,
node_substs.len() - n_m_tps));
let {bcx, val} = trans_self_arg(bcx, base, derefs); let {bcx, val} = trans_self_arg(bcx, base, derefs);
let lval = lval_static_fn_inner(bcx, mth_id, callee_id, ty_substs, let lval = lval_static_fn_inner(bcx, mth_id, callee_id, ty_substs,
some(sub_origins)); some(sub_origins));

View File

@@ -37,7 +37,7 @@ fn type_of_fn(cx: @crate_ctxt, inputs: [ty::arg]/~,
vec::push(atys, T_opaque_box_ptr(cx)); vec::push(atys, T_opaque_box_ptr(cx));
// ... then explicit args. // ... then explicit args.
atys += type_of_explicit_args(cx, inputs); vec::push_all(atys, type_of_explicit_args(cx, inputs));
ret T_fn(atys, llvm::LLVMVoidType()); ret T_fn(atys, llvm::LLVMVoidType());
} }