about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorEric Holk <eric.holk@gmail.com>2012-06-28 15:00:03 -0700
committerEric Holk <eric.holk@gmail.com>2012-06-28 15:11:09 -0700
commit87eaf91be34e1a6e38e4a043102910e1f3e77824 (patch)
tree9aba96871ad4d79524b1339364603df966073c2b /src/rustc
parent54713afa20a9e3cb09ffe678aeb7d32630ef7b59 (diff)
Replaced almost all vector+ in rustc (#2719)
Didn't update shape because the changes were causing segfaults.
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/back/link.rs12
-rw-r--r--src/rustc/back/rpath.rs23
-rw-r--r--src/rustc/back/upcall.rs2
-rw-r--r--src/rustc/driver/driver.rs6
-rw-r--r--src/rustc/driver/rustc.rs4
-rw-r--r--src/rustc/front/core_inject.rs2
-rw-r--r--src/rustc/front/intrinsic_inject.rs2
-rw-r--r--src/rustc/front/test.rs9
-rw-r--r--src/rustc/lib/llvm.rs2
-rw-r--r--src/rustc/metadata/creader.rs2
-rw-r--r--src/rustc/metadata/csearch.rs2
-rw-r--r--src/rustc/metadata/cstore.rs2
-rw-r--r--src/rustc/metadata/decoder.rs6
-rw-r--r--src/rustc/metadata/encoder.rs44
-rw-r--r--src/rustc/metadata/filesearch.rs26
-rw-r--r--src/rustc/middle/check_alt.rs17
-rw-r--r--src/rustc/middle/freevars.rs4
-rw-r--r--src/rustc/middle/kind.rs2
-rw-r--r--src/rustc/middle/lint.rs2
-rw-r--r--src/rustc/middle/liveness.rs6
-rw-r--r--src/rustc/middle/pat_util.rs2
-rw-r--r--src/rustc/middle/region.rs2
-rw-r--r--src/rustc/middle/resolve.rs29
-rw-r--r--src/rustc/middle/trans/debuginfo.rs2
-rw-r--r--src/rustc/middle/trans/foreign.rs11
-rw-r--r--src/rustc/middle/trans/reflect.rs22
-rw-r--r--src/rustc/middle/tstate/annotate.rs2
-rw-r--r--src/rustc/middle/tstate/auxiliary.rs45
-rw-r--r--src/rustc/middle/tstate/tritv.rs12
-rw-r--r--src/rustc/middle/ty.rs15
-rw-r--r--src/rustc/middle/typeck/check/method.rs2
-rw-r--r--src/rustc/middle/typeck/collect.rs4
-rw-r--r--src/rustc/util/ppaux.rs6
33 files changed, 182 insertions, 147 deletions
diff --git a/src/rustc/back/link.rs b/src/rustc/back/link.rs
index 0b7231565de..ac68287f8b7 100644
--- a/src/rustc/back/link.rs
+++ b/src/rustc/back/link.rs
@@ -490,7 +490,9 @@ fn mangle(ss: path) -> str {
 }
 
 fn exported_name(path: path, hash: @str, vers: @str) -> str {
-    ret mangle(path + [path_name(hash)]/~ + [path_name(vers)]/~);
+    ret mangle(
+        vec::append_one(vec::append_one(path, path_name(hash)),
+                        path_name(vers)));
 }
 
 fn mangle_exported_name(ccx: @crate_ctxt, path: path, t: ty::t) -> str {
@@ -508,7 +510,7 @@ fn mangle_internal_name_by_type_only(ccx: @crate_ctxt,
 
 fn mangle_internal_name_by_path_and_seq(ccx: @crate_ctxt, path: path,
                                         flav: @str) -> str {
-    ret mangle(path + [path_name(@ccx.names(*flav))]/~);
+    ret mangle(vec::append_one(path, path_name(@ccx.names(*flav))));
 }
 
 fn mangle_internal_name_by_path(_ccx: @crate_ctxt, path: path) -> str {
@@ -577,8 +579,10 @@ fn link_binary(sess: session,
     // The invocations of cc share some flags across platforms
 
     let mut cc_args =
-        [stage]/~ + sess.targ_cfg.target_strs.cc_args +
-        ["-o", output, obj_filename]/~;
+        vec::append([stage]/~, sess.targ_cfg.target_strs.cc_args);
+    vec::push(cc_args, "-o");
+    vec::push(cc_args, output);
+    vec::push(cc_args, obj_filename);
 
     let mut lib_cmd;
     let os = sess.targ_cfg.os;
diff --git a/src/rustc/back/rpath.rs b/src/rustc/back/rpath.rs
index dbe70a8085f..d0a36d3ad5a 100644
--- a/src/rustc/back/rpath.rs
+++ b/src/rustc/back/rpath.rs
@@ -29,7 +29,7 @@ fn get_rpath_flags(sess: session::session, out_filename: str) -> [str]/~ {
     let libs = cstore::get_used_crate_files(sess.cstore);
     // We don't currently rpath native libraries, but we know
     // where rustrt is and we know every rust program needs it
-    let libs = libs + [get_sysroot_absolute_rt_lib(sess)]/~;
+    let libs = vec::append_one(libs, get_sysroot_absolute_rt_lib(sess));
 
     let target_triple = sess.opts.target_triple;
     let rpaths = get_rpaths(os, cwd, sysroot, output, libs, target_triple);
@@ -37,10 +37,10 @@ fn get_rpath_flags(sess: session::session, out_filename: str) -> [str]/~ {
 }
 
 fn get_sysroot_absolute_rt_lib(sess: session::session) -> path::path {
-    let path = [sess.filesearch.sysroot()]/~
-        + filesearch::relative_target_lib_path(
-            sess.opts.target_triple)
-        + [os::dll_filename("rustrt")]/~;
+    let mut path = vec::append([sess.filesearch.sysroot()]/~,
+                           filesearch::relative_target_lib_path(
+                               sess.opts.target_triple));
+    vec::push(path, os::dll_filename("rustrt"));
     path::connect_many(path)
 }
 
@@ -83,7 +83,9 @@ fn get_rpaths(os: session::os, cwd: path::path, sysroot: path::path,
     log_rpaths("absolute", abs_rpaths);
     log_rpaths("fallback", fallback_rpaths);
 
-    let rpaths = rel_rpaths + abs_rpaths + fallback_rpaths;
+    let mut rpaths = rel_rpaths;
+    vec::push_all(rpaths, abs_rpaths);
+    vec::push_all(rpaths, fallback_rpaths);
 
     // Remove duplicates
     let rpaths = minimize_rpaths(rpaths);
@@ -142,7 +144,7 @@ fn get_relative_to(abs1: path::path, abs2: path::path) -> path::path {
     let mut path = []/~;
     for uint::range(start_idx, len1 - 1u) {|_i| vec::push(path, ".."); };
 
-    path += vec::slice(split2, start_idx, len2 - 1u);
+    vec::push_all(path, vec::view(split2, start_idx, len2 - 1u));
 
     if check vec::is_not_empty(path) {
         ret path::connect_many(path);
@@ -174,8 +176,9 @@ fn get_install_prefix_rpath(cwd: path::path, target_triple: str) -> str {
         fail "rustc compiled without CFG_PREFIX environment variable";
     }
 
-    let path = [install_prefix]/~
-        + filesearch::relative_target_lib_path(target_triple);
+    let path = vec::append(
+        [install_prefix]/~,
+        filesearch::relative_target_lib_path(target_triple));
     get_absolute(cwd, path::connect_many(path))
 }
 
@@ -184,7 +187,7 @@ fn minimize_rpaths(rpaths: [str]/~) -> [str]/~ {
     let mut minimized = []/~;
     for rpaths.each {|rpath|
         if !set.contains_key(rpath) {
-            minimized += [rpath]/~;
+            vec::push(minimized, rpath);
             set.insert(rpath, ());
         }
     }
diff --git a/src/rustc/back/upcall.rs b/src/rustc/back/upcall.rs
index 98dc3200b89..eb2fe10a821 100644
--- a/src/rustc/back/upcall.rs
+++ b/src/rustc/back/upcall.rs
@@ -36,7 +36,7 @@ fn declare_upcalls(targ_cfg: @session::config,
             tys: [TypeRef]/~, rv: TypeRef) ->
        ValueRef {
         let mut arg_tys: [TypeRef]/~ = []/~;
-        for tys.each {|t| arg_tys += [t]/~; }
+        for tys.each {|t| vec::push(arg_tys, t); }
         let fn_ty = T_fn(arg_tys, rv);
         ret base::decl_cdecl_fn(llmod, prefix + name, fn_ty);
     }
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs
index 13c0035011c..16c043aa74b 100644
--- a/src/rustc/driver/driver.rs
+++ b/src/rustc/driver/driver.rs
@@ -73,7 +73,7 @@ fn build_configuration(sess: session, argv0: str, input: input) ->
                 [attr::mk_word_item(@"test")]/~
             } else { []/~ }
         };
-    ret user_cfg + gen_cfg + default_cfg;
+    ret vec::append(vec::append(user_cfg, gen_cfg), default_cfg);
 }
 
 // Convert strings provided as --cfg [cfgspec] into a crate_cfg
@@ -414,8 +414,8 @@ fn build_session_options(match: getopts::match,
     let parse_only = opt_present(match, "parse-only");
     let no_trans = opt_present(match, "no-trans");
 
-    let lint_flags = (getopts::opt_strs(match, "W")
-                      + getopts::opt_strs(match, "warn"));
+    let lint_flags = vec::append(getopts::opt_strs(match, "W"),
+                                 getopts::opt_strs(match, "warn"));
     let lint_dict = lint::get_lint_dict();
     let lint_opts = vec::map(lint_flags) {|flag|
         alt lint::lookup_lint(lint_dict, flag) {
diff --git a/src/rustc/driver/rustc.rs b/src/rustc/driver/rustc.rs
index 1d99f3a7012..35e633573ce 100644
--- a/src/rustc/driver/rustc.rs
+++ b/src/rustc/driver/rustc.rs
@@ -131,8 +131,8 @@ fn run_compiler(args: [str]/~, demitter: diagnostic::emitter) {
         ret;
     }
 
-    let lint_flags = (getopts::opt_strs(match, "W")
-                      + getopts::opt_strs(match, "warn"));
+    let lint_flags = vec::append(getopts::opt_strs(match, "W"),
+                                 getopts::opt_strs(match, "warn"));
     if lint_flags.contains("help") {
         describe_warnings();
         ret;
diff --git a/src/rustc/front/core_inject.rs b/src/rustc/front/core_inject.rs
index c15f08e561f..f042c6c9e1b 100644
--- a/src/rustc/front/core_inject.rs
+++ b/src/rustc/front/core_inject.rs
@@ -41,7 +41,7 @@ fn inject_libcore_ref(sess: session,
                 vis: ast::public,
                 span: dummy_sp()};
 
-    let vis = [vi1, vi2]/~ + crate.node.module.view_items;
+    let vis = vec::append([vi1, vi2]/~, crate.node.module.view_items);
 
     ret @{node: {module: { view_items: vis with crate.node.module }
                  with crate.node} with *crate }
diff --git a/src/rustc/front/intrinsic_inject.rs b/src/rustc/front/intrinsic_inject.rs
index 06f8bbe92c9..f215d95e2de 100644
--- a/src/rustc/front/intrinsic_inject.rs
+++ b/src/rustc/front/intrinsic_inject.rs
@@ -22,7 +22,7 @@ fn inject_intrinsic(sess: session,
           }
         };
 
-    let items = [item]/~ + crate.node.module.items;
+    let items = vec::append([item]/~, crate.node.module.items);
 
     ret @{node: {module: { items: items with crate.node.module }
                  with crate.node} with *crate }
diff --git a/src/rustc/front/test.rs b/src/rustc/front/test.rs
index d9240dc8877..2e80d248de9 100644
--- a/src/rustc/front/test.rs
+++ b/src/rustc/front/test.rs
@@ -98,7 +98,7 @@ fn fold_crate(cx: test_ctxt, c: ast::crate_, fld: fold::ast_fold) ->
 fn fold_item(cx: test_ctxt, &&i: @ast::item, fld: fold::ast_fold) ->
    @ast::item {
 
-    cx.path += [i.ident]/~;
+    vec::push(cx.path, i.ident);
     #debug("current path: %s", ast_util::path_name_i(cx.path));
 
     if is_test_fn(i) {
@@ -161,7 +161,7 @@ fn should_fail(i: @ast::item) -> bool {
 
 fn add_test_module(cx: test_ctxt, m: ast::_mod) -> ast::_mod {
     let testmod = mk_test_module(cx);
-    ret {items: m.items + [testmod]/~ with m};
+    ret {items: vec::append_one(m.items, testmod) with m};
 }
 
 /*
@@ -252,7 +252,8 @@ fn mk_path(cx: test_ctxt, path: [ast::ident]/~) -> [ast::ident]/~ {
           _ { false }
         }
     };
-    (if is_std { []/~ } else { [@"std"]/~ }) + path
+    if is_std { path }
+    else { vec::append([@"std"]/~, path) }
 }
 
 // The ast::ty of [std::test::test_desc]/~
@@ -278,7 +279,7 @@ fn mk_test_desc_vec(cx: test_ctxt) -> @ast::expr {
     #debug("building test vector from %u tests", cx.testfns.len());
     let mut descs = []/~;
     for cx.testfns.each {|test|
-        descs += [mk_test_desc_rec(cx, test)]/~;
+        vec::push(descs, mk_test_desc_rec(cx, test));
     }
 
     let inner_expr = @{id: cx.sess.next_node_id(),
diff --git a/src/rustc/lib/llvm.rs b/src/rustc/lib/llvm.rs
index e43f73697c7..dec7d363155 100644
--- a/src/rustc/lib/llvm.rs
+++ b/src/rustc/lib/llvm.rs
@@ -991,7 +991,7 @@ fn type_to_str_inner(names: type_names, outer0: [TypeRef]/~, ty: TypeRef) ->
       _ {}
     }
 
-    let outer = outer0 + [ty]/~;
+    let outer = vec::append_one(outer0, ty);
 
     let kind = llvm::LLVMGetTypeKind(ty);
 
diff --git a/src/rustc/metadata/creader.rs b/src/rustc/metadata/creader.rs
index 4f9c4189feb..aa02bb84c8c 100644
--- a/src/rustc/metadata/creader.rs
+++ b/src/rustc/metadata/creader.rs
@@ -164,7 +164,7 @@ fn metas_with(ident: ast::ident, key: ast::ident,
                     metas: [@ast::meta_item]/~) -> [@ast::meta_item]/~ {
     let name_items = attr::find_meta_items_by_name(metas, *key);
     if name_items.is_empty() {
-        metas + [attr::mk_name_value_item_str(key, *ident)]/~
+        vec::append_one(metas, attr::mk_name_value_item_str(key, *ident))
     } else {
         metas
     }
diff --git a/src/rustc/metadata/csearch.rs b/src/rustc/metadata/csearch.rs
index 1f9b2d427f8..6b30bf3090b 100644
--- a/src/rustc/metadata/csearch.rs
+++ b/src/rustc/metadata/csearch.rs
@@ -88,7 +88,7 @@ fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path {
 
     // FIXME #1920: This path is not always correct if the crate is not linked
     // into the root namespace.
-    [ast_map::path_mod(@cdata.name)]/~ + path
+    vec::append([ast_map::path_mod(@cdata.name)]/~, path)
 }
 
 enum found_ast {
diff --git a/src/rustc/metadata/cstore.rs b/src/rustc/metadata/cstore.rs
index b1eba8e3875..8d828aed69d 100644
--- a/src/rustc/metadata/cstore.rs
+++ b/src/rustc/metadata/cstore.rs
@@ -134,7 +134,7 @@ fn get_used_libraries(cstore: cstore) -> [str]/~ {
 }
 
 fn add_used_link_args(cstore: cstore, args: str) {
-    p(cstore).used_link_args += str::split_char(args, ' ');
+    vec::push_all(p(cstore).used_link_args, str::split_char(args, ' '));
 }
 
 fn get_used_link_args(cstore: cstore) -> [str]/~ {
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs
index 856ea024453..b738f1988c2 100644
--- a/src/rustc/metadata/decoder.rs
+++ b/src/rustc/metadata/decoder.rs
@@ -611,9 +611,9 @@ fn get_attributes(md: ebml::doc) -> [ast::attribute]/~ {
             // an attribute
             assert (vec::len(meta_items) == 1u);
             let meta_item = meta_items[0];
-            attrs +=
-                [{node: {style: ast::attr_outer, value: *meta_item},
-                  span: ast_util::dummy_sp()}]/~;
+            vec::push(attrs,
+                      {node: {style: ast::attr_outer, value: *meta_item},
+                       span: ast_util::dummy_sp()});
         };
       }
       option::none { }
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index 6c5b03a387d..1e4521276d2 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -119,9 +119,11 @@ fn encode_enum_variant_paths(ebml_w: ebml::writer, variants: [variant]/~,
     }
 }
 
-fn add_to_index(ebml_w: ebml::writer, path: [ident]/~, &index: [entry<str>]/~,
+fn add_to_index(ebml_w: ebml::writer, path: [ident]/&, &index: [entry<str>]/~,
                 name: ident) {
-    let full_path = path + [name]/~;
+    let mut full_path = []/~;
+    vec::push_all(full_path, path);
+    vec::push(full_path, name);
     vec::push(index, {val: ast_util::path_name_i(full_path),
                       pos: ebml_w.writer.tell()});
 }
@@ -171,15 +173,16 @@ fn encode_module_item_paths(ebml_w: ebml::writer, ecx: @encode_ctxt,
             ebml_w.wr_tag(tag_paths_data_mod) {||
                encode_name_and_def_id(ebml_w, it.ident, it.id);
                encode_module_item_paths(ebml_w, ecx, _mod,
-                                        path + [it.ident]/~,
+                                        vec::append_one(path, it.ident),
                                         index);
             }
           }
           item_foreign_mod(nmod) {
             ebml_w.wr_tag(tag_paths_data_mod) {||
               encode_name_and_def_id(ebml_w, it.ident, it.id);
-              encode_foreign_module_item_paths(ebml_w, nmod,
-                   path + [it.ident]/~, index);
+              encode_foreign_module_item_paths(
+                  ebml_w, nmod,
+                  vec::append_one(path, it.ident), index);
             }
           }
           item_ty(_, tps, _) {
@@ -197,7 +200,8 @@ fn encode_module_item_paths(ebml_w: ebml::writer, ecx: @encode_ctxt,
                 add_to_index(ebml_w, path, index, it.ident);
                 encode_named_def_id(ebml_w, it.ident,
                                     local_def(ctor.node.id));
-                encode_class_item_paths(ebml_w, items, path + [it.ident]/~,
+                encode_class_item_paths(ebml_w, items,
+                                        vec::append_one(path, it.ident),
                                         index);
             }
           }
@@ -451,11 +455,12 @@ fn encode_info_for_class(ecx: @encode_ctxt, ebml_w: ebml::writer,
                 vec::push(*index, {val: m.id, pos: ebml_w.writer.tell()});
                 vec::push(*global_index,
                           {val: m.id, pos: ebml_w.writer.tell()});
-                let impl_path = path + [ast_map::path_name(m.ident)]/~;
+                let impl_path = vec::append_one(path,
+                                                ast_map::path_name(m.ident));
                 #debug("encode_info_for_class: doing %s %d", *m.ident, m.id);
                 encode_info_for_method(ecx, ebml_w, impl_path,
                                        should_inline(m.attrs), id, m,
-                                       class_tps + m.tps);
+                                       vec::append(class_tps, m.tps));
             }
             _ { /* don't encode private methods */ }
           }
@@ -709,11 +714,13 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item,
         encode_path(ebml_w, path, ast_map::path_name(item.ident));
         ebml_w.end_tag();
 
-        let impl_path = path + [ast_map::path_name(item.ident)]/~;
+        let impl_path = vec::append_one(path,
+                                        ast_map::path_name(item.ident));
         for methods.each {|m|
             vec::push(*index, {val: m.id, pos: ebml_w.writer.tell()});
             encode_info_for_method(ecx, ebml_w, impl_path,
-                   should_inline(m.attrs), item.id, m, tps + m.tps);
+                                   should_inline(m.attrs), item.id, m,
+                                   vec::append(tps, m.tps));
         }
       }
       item_iface(tps, rp, ms) {
@@ -786,8 +793,8 @@ fn encode_info_for_items(ecx: @encode_ctxt, ebml_w: ebml::writer,
                    item_class(tps, _, _, ctor, m_dtor, _) {
                    #debug("encoding info for ctor %s %d", *i.ident,
                           ctor.node.id);
-                   *index +=
-                       [{val: ctor.node.id, pos: ebml_w.writer.tell()}]/~;
+                   vec::push(*index,
+                             {val: ctor.node.id, pos: ebml_w.writer.tell()});
                    encode_info_for_fn(ecx, ebml_w, ctor.node.id, i.ident,
                       *pt, if tps.len() > 0u {
                              some(ii_ctor(ctor, i.ident, tps,
@@ -933,7 +940,7 @@ fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: @crate) -> [attribute]/~ {
                 attr::remove_meta_items_by_name(tmp, @"vers")
             };
 
-        let meta_items = [name_item, vers_item]/~ + other_items;
+        let meta_items = vec::append([name_item, vers_item]/~, other_items);
         let link_item = attr::mk_list_item(@"link", meta_items);
 
         ret attr::mk_attr(link_item);
@@ -942,18 +949,19 @@ fn synthesize_crate_attrs(ecx: @encode_ctxt, crate: @crate) -> [attribute]/~ {
     let mut attrs: [attribute]/~ = []/~;
     let mut found_link_attr = false;
     for crate.node.attrs.each {|attr|
-        attrs +=
+        vec::push(
+            attrs,
             if *attr::get_attr_name(attr) != "link" {
-                [attr]/~
+                attr
             } else {
                 alt attr.node.value.node {
                   meta_list(n, l) {
                     found_link_attr = true;;
-                    [synthesize_link_attr(ecx, l)]/~
+                    synthesize_link_attr(ecx, l)
                   }
-                  _ { [attr]/~ }
+                  _ { attr }
                 }
-            };
+            });
     }
 
     if !found_link_attr { vec::push(attrs, synthesize_link_attr(ecx, []/~)); }
diff --git a/src/rustc/metadata/filesearch.rs b/src/rustc/metadata/filesearch.rs
index c66c02bce9c..9d382467214 100644
--- a/src/rustc/metadata/filesearch.rs
+++ b/src/rustc/metadata/filesearch.rs
@@ -39,16 +39,19 @@ fn mk_filesearch(maybe_sysroot: option<path>,
     impl of filesearch for filesearch_impl {
         fn sysroot() -> path { self.sysroot }
         fn lib_search_paths() -> [path]/~ {
-            self.addl_lib_search_paths
-                + [make_target_lib_path(self.sysroot, self.target_triple)]/~
-                + alt get_cargo_lib_path_nearest() {
-                  result::ok(p) { [p]/~ }
-                  result::err(p) { []/~ }
-                }
-                + alt get_cargo_lib_path() {
-                  result::ok(p) { [p]/~ }
-                  result::err(p) { []/~ }
-                }
+            let mut paths = self.addl_lib_search_paths;
+
+            vec::push(paths,
+                      make_target_lib_path(self.sysroot, self.target_triple));
+            alt get_cargo_lib_path_nearest() {
+              result::ok(p) { vec::push(paths, p) }
+              result::err(p) { }
+            }
+            alt get_cargo_lib_path() {
+              result::ok(p) { vec::push(paths, p) }
+              result::err(p) { }
+            }
+            paths
         }
         fn get_target_lib_path() -> path {
             make_target_lib_path(self.sysroot, self.target_triple)
@@ -91,7 +94,8 @@ fn relative_target_lib_path(target_triple: str) -> [path]/~ {
 
 fn make_target_lib_path(sysroot: path,
                         target_triple: str) -> path {
-    let path = [sysroot]/~ + relative_target_lib_path(target_triple);
+    let path = vec::append([sysroot]/~,
+                           relative_target_lib_path(target_triple));
     let path = path::connect_many(path);
     ret path;
 }
diff --git a/src/rustc/middle/check_alt.rs b/src/rustc/middle/check_alt.rs
index e9681c2d8cf..76084576ee8 100644
--- a/src/rustc/middle/check_alt.rs
+++ b/src/rustc/middle/check_alt.rs
@@ -47,7 +47,7 @@ fn check_arms(tcx: ty::ctxt, arms: [arm]/~) {
               }
               _ {}
             }
-            if option::is_none(arm.guard) { seen += [v]/~; }
+            if option::is_none(arm.guard) { vec::push(seen, v); }
         }
     }
 }
@@ -220,7 +220,7 @@ fn missing_ctor(tcx: ty::ctxt, m: matrix, left_ty: ty::t) -> option<ctor> {
         let mut found = []/~;
         for m.each {|r|
             option::iter(pat_ctor_id(tcx, r[0])) {|id|
-                if !vec::contains(found, id) { found += [id]/~; }
+                if !vec::contains(found, id) { vec::push(found, id); }
             }
         }
         let variants = ty::enum_variants(tcx, eid);
@@ -274,14 +274,15 @@ fn specialize(tcx: ty::ctxt, r: [@pat]/~, ctor_id: ctor, arity: uint,
               left_ty: ty::t) -> option<[@pat]/~> {
     let r0 = raw_pat(r[0]);
     alt r0.node {
-      pat_wild { some(vec::from_elem(arity, wild()) + vec::tail(r)) }
+      pat_wild { some(vec::append(vec::from_elem(arity, wild()),
+                                  vec::tail(r))) }
       pat_ident(_, _) {
         alt tcx.def_map.find(r0.id) {
           some(def_variant(_, id)) {
             if variant(id) == ctor_id { some(vec::tail(r)) }
             else { none }
           }
-          _ { some(vec::from_elem(arity, wild()) + vec::tail(r)) }
+          _ { some(vec::append(vec::from_elem(arity, wild()), vec::tail(r))) }
         }
       }
       pat_enum(_, args) {
@@ -291,7 +292,7 @@ fn specialize(tcx: ty::ctxt, r: [@pat]/~, ctor_id: ctor, arity: uint,
               some(args) { args }
               none { vec::from_elem(arity, wild()) }
             };
-            some(args + vec::tail(r))
+            some(vec::append(args, vec::tail(r)))
           }
           def_variant(_, _) { none }
         }
@@ -305,10 +306,10 @@ fn specialize(tcx: ty::ctxt, r: [@pat]/~, ctor_id: ctor, arity: uint,
               some(f) { f.pat } _ { wild() }
             }
         });
-        some(args + vec::tail(r))
+        some(vec::append(args, vec::tail(r)))
       }
-      pat_tup(args) { some(args + vec::tail(r)) }
-      pat_box(a) | pat_uniq(a) { some([a]/~ + vec::tail(r)) }
+      pat_tup(args) { some(vec::append(args, vec::tail(r))) }
+      pat_box(a) | pat_uniq(a) { some(vec::append([a]/~, vec::tail(r))) }
       pat_lit(expr) {
         let e_v = eval_const_expr(tcx, expr);
         let match = alt check ctor_id {
diff --git a/src/rustc/middle/freevars.rs b/src/rustc/middle/freevars.rs
index bbfc16b64b2..9ebf4d13970 100644
--- a/src/rustc/middle/freevars.rs
+++ b/src/rustc/middle/freevars.rs
@@ -64,8 +64,8 @@ fn collect_freevars(def_map: resolve::def_map, blk: ast::blk)
                       if i == depth { // Made it to end of loop
                         let dnum = ast_util::def_id_of_def(def).node;
                         if !seen.contains_key(dnum) {
-                           *refs += [@{def:def, span:expr.span}]/~;
-                           seen.insert(dnum, ());
+                            vec::push(*refs, @{def:def, span:expr.span});
+                            seen.insert(dnum, ());
                         }
                       }
                     }
diff --git a/src/rustc/middle/kind.rs b/src/rustc/middle/kind.rs
index b34880de3f2..d3bd8e75316 100644
--- a/src/rustc/middle/kind.rs
+++ b/src/rustc/middle/kind.rs
@@ -274,7 +274,7 @@ fn check_expr(e: @expr, cx: ctx, v: visit::vt<ctx>) {
                     let ifce_bounds =
                         ty::lookup_item_type(cx.tcx, ifce_id).bounds;
                     let mth = ty::iface_methods(cx.tcx, ifce_id)[n_mth];
-                    @(*ifce_bounds + *mth.tps)
+                    @(vec::append(*ifce_bounds, *mth.tps))
                   }
                 }
               }
diff --git a/src/rustc/middle/lint.rs b/src/rustc/middle/lint.rs
index ec665470918..54467207c51 100644
--- a/src/rustc/middle/lint.rs
+++ b/src/rustc/middle/lint.rs
@@ -358,7 +358,7 @@ fn check_item_ctypes(cx: ty::ctxt, it: @ast::item) {
     fn check_foreign_fn(cx: ty::ctxt, fn_id: ast::node_id,
                        decl: ast::fn_decl) {
         let tys = vec::map(decl.inputs) {|a| a.ty };
-        for vec::each(tys + [decl.output]/~) {|ty|
+        for vec::each(vec::append_one(tys, decl.output)) {|ty|
             alt ty.node {
               ast::ty_path(_, id) {
                 alt cx.def_map.get(id) {
diff --git a/src/rustc/middle/liveness.rs b/src/rustc/middle/liveness.rs
index 836dced30c4..436443d1538 100644
--- a/src/rustc/middle/liveness.rs
+++ b/src/rustc/middle/liveness.rs
@@ -242,7 +242,7 @@ class ir_maps {
 
     fn add_live_node(lnk: live_node_kind) -> live_node {
         let ln = live_node(self.num_live_nodes);
-        self.lnks += [lnk]/~;
+        vec::push(self.lnks, lnk);
         self.num_live_nodes += 1u;
 
         #debug["%s is of kind %?", ln.to_str(), lnk];
@@ -259,7 +259,7 @@ class ir_maps {
 
     fn add_variable(vk: var_kind) -> variable {
         let v = variable(self.num_vars);
-        self.var_kinds += [vk]/~;
+        vec::push(self.var_kinds, vk);
         self.num_vars += 1u;
 
         alt vk {
@@ -444,7 +444,7 @@ fn visit_expr(expr: @expr, &&self: @ir_maps, vt: vt<@ir_maps>) {
                   cap_move | cap_drop {true} // var must be dead afterwards
                   cap_copy | cap_ref {false} // var can still be used
                 };
-                call_caps += [{ln: cv_ln, is_move: is_move, rv: rv}]/~;
+                vec::push(call_caps, {ln: cv_ln, is_move: is_move, rv: rv});
               }
               none {}
             }
diff --git a/src/rustc/middle/pat_util.rs b/src/rustc/middle/pat_util.rs
index fa5ab8fc5c5..ba463ace91d 100644
--- a/src/rustc/middle/pat_util.rs
+++ b/src/rustc/middle/pat_util.rs
@@ -51,6 +51,6 @@ fn pat_bindings(dm: resolve::def_map, pat: @pat,
 
 fn pat_binding_ids(dm: resolve::def_map, pat: @pat) -> [node_id]/~ {
     let mut found = []/~;
-    pat_bindings(dm, pat) {|b_id, _sp, _pt| found += [b_id]/~; };
+    pat_bindings(dm, pat) {|b_id, _sp, _pt| vec::push(found, b_id); };
     ret found;
 }
diff --git a/src/rustc/middle/region.rs b/src/rustc/middle/region.rs
index 6b79b3c6aa8..37959b51fd5 100644
--- a/src/rustc/middle/region.rs
+++ b/src/rustc/middle/region.rs
@@ -221,7 +221,7 @@ fn nearest_common_ancestor(region_map: region_map, scope_a: ast::node_id,
             alt region_map.find(scope) {
                 none { ret result; }
                 some(superscope) {
-                    result += [superscope]/~;
+                    vec::push(result, superscope);
                     scope = superscope;
                 }
             }
diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs
index ff07e105338..a2ea60379b9 100644
--- a/src/rustc/middle/resolve.rs
+++ b/src/rustc/middle/resolve.rs
@@ -243,7 +243,8 @@ fn map_crate(e: @env, c: @ast::crate) {
               ast::view_path_list(mod_path, idents, _) {
                 for idents.each {|ident|
                     let t = todo(ident.node.name,
-                                 @(mod_path.idents + [ident.node.name]/~),
+                                 @(vec::append_one(mod_path.idents,
+                                                   ident.node.name)),
                                  ident.span, sc);
                     e.imports.insert(ident.node.id, t);
                 }
@@ -305,7 +306,7 @@ fn map_crate(e: @env, c: @ast::crate) {
                       }
                       scope_block(b, _, _) {
                         let globs = alt e.block_map.find(b.node.id) {
-                          some(globs) { globs + [glob]/~ }
+                          some(globs) { vec::append_one(globs, glob) }
                           none { [glob]/~ }
                         };
                         e.block_map.insert(b.node.id, globs);
@@ -557,7 +558,8 @@ fn visit_item_with_scope(e: @env, i: @ast::item,
         v.visit_ty(sty, sc, v);
         for methods.each {|m|
             v.visit_ty_params(m.tps, sc, v);
-            let msc = @cons(scope_method(m.self_id, tps + m.tps), sc);
+            let msc = @cons(scope_method(m.self_id, vec::append(tps, m.tps)),
+                            sc);
             v.visit_fn(visit::fk_method(m.ident, []/~, m),
                        m.decl, m.body, m.span, m.id, msc, v);
         }
@@ -567,7 +569,7 @@ fn visit_item_with_scope(e: @env, i: @ast::item,
         let isc = @cons(scope_method(i.id, tps), sc);
         for methods.each {|m|
             v.visit_ty_params(m.tps, isc, v);
-            let msc = @cons(scope_method(i.id, tps + m.tps), sc);
+            let msc = @cons(scope_method(i.id, vec::append(tps, m.tps)), sc);
             for m.decl.inputs.each {|a| v.visit_ty(a.ty, msc, v); }
             v.visit_ty(m.decl.output, msc, v);
         }
@@ -600,7 +602,8 @@ fn visit_item_with_scope(e: @env, i: @ast::item,
         for members.each {|cm|
             alt cm.node {
               class_method(m) {
-                  let msc = @cons(scope_method(m.self_id, tps + m.tps),
+                  let msc = @cons(scope_method(m.self_id,
+                                               vec::append(tps, m.tps)),
                                   class_scope);
                   visit_fn_with_scope(e,
                      visit::fk_item_fn(m.ident, tps), m.decl, m.body,
@@ -911,7 +914,8 @@ fn unresolved_err(e: env, cx: ctxt, sp: span, name: ident, kind: str) {
             path = @(e.mod_map.get(did.node).path + *path);
         } else if did.node != ast::crate_node_id {
             let paths = e.ext_map.get(did);
-            path = @str::connect((paths + [path]/~).map({|x|*x}), "::");
+            path = @str::connect(vec::append_one(paths, path).map({|x|*x}),
+                                 "::");
         }
       }
     }
@@ -1372,7 +1376,7 @@ fn lookup_in_mod(e: env, m: def, sp: span, name: ident, ns: namespace,
         if !is_none(cached) { ret cached; }
         let mut path = [name]/~;
         if defid.node != ast::crate_node_id {
-            path = cstore::get_path(e.cstore, defid) + path;
+            path = vec::append(cstore::get_path(e.cstore, defid), path);
         }
         alt lookup_external(e, defid.crate, path, ns) {
            some(df) {
@@ -1990,7 +1994,8 @@ fn check_exports(e: @env) {
           some(f) { f } none { []/~ }
         };
         e.exp_map.insert(export_id,
-                         found + [{reexp: reexp, id: target_id}]/~);
+                         vec::append_one(found,
+                                         {reexp: reexp, id: target_id}));
     }
 
     fn check_export(e: @env, ident: ident, _mod: @indexed_mod,
@@ -2186,7 +2191,9 @@ fn find_impls_in_view_item(e: env, vi: @ast::view_item,
                                               @{ident: name with *imp});
                                 }
                             }
-                            if vec::len(found) > 0u { impls += found; }
+                            if vec::len(found) > 0u {
+                                vec::push_all(impls, found);
+                            }
                         }
                     }
                 }
@@ -2201,7 +2208,9 @@ fn find_impls_in_view_item(e: env, vi: @ast::view_item,
 
           ast::view_path_list(base, names, _) {
             for names.each {|nm|
-                lookup_imported_impls(e, nm.node.id) {|is| impls += *is; }
+                lookup_imported_impls(e, nm.node.id) {|is|
+                    vec::push_all(impls, *is);
+                }
             }
           }
 
diff --git a/src/rustc/middle/trans/debuginfo.rs b/src/rustc/middle/trans/debuginfo.rs
index fb80b1246c3..7c75b9b3ae4 100644
--- a/src/rustc/middle/trans/debuginfo.rs
+++ b/src/rustc/middle/trans/debuginfo.rs
@@ -101,7 +101,7 @@ fn update_cache(cache: metadata_cache, mdtag: int, val: debug_metadata) {
     } else {
         []/~
     };
-    cache.insert(mdtag, existing + [val]/~);
+    cache.insert(mdtag, vec::append_one(existing, val));
 }
 
 type metadata<T> = {node: ValueRef, data: T};
diff --git a/src/rustc/middle/trans/foreign.rs b/src/rustc/middle/trans/foreign.rs
index b83fc11e85c..c7f5d1932b7 100644
--- a/src/rustc/middle/trans/foreign.rs
+++ b/src/rustc/middle/trans/foreign.rs
@@ -382,11 +382,11 @@ fn x86_64_tys(atys: [TypeRef]/~,
                                        StructRetAttribute);
     let sret = option::is_some(ret_attr);
     if sret {
-        arg_tys = [ret_ty]/~ + arg_tys;
+        arg_tys = vec::append([ret_ty]/~, arg_tys);
         ret_ty = { cast:  false,
                    ty: T_void()
                  };
-        attrs = [ret_attr]/~ + attrs;
+        attrs = vec::append([ret_attr]/~, attrs);
     } else if !ret_def {
         ret_ty = { cast: false,
                    ty: T_void()
@@ -450,7 +450,7 @@ fn c_arg_and_ret_lltys(ccx: @crate_ctxt,
 fn c_stack_tys(ccx: @crate_ctxt,
                id: ast::node_id) -> @c_stack_tys {
     let (llargtys, llretty, ret_ty) = c_arg_and_ret_lltys(ccx, id);
-    let bundle_ty = T_struct(llargtys + [T_ptr(llretty)]/~);
+    let bundle_ty = T_struct(vec::append_one(llargtys, T_ptr(llretty)));
     let ret_def = !ty::type_is_bot(ret_ty) && !ty::type_is_nil(ret_ty);
     let x86_64 = if ccx.sess.targ_cfg.arch == arch_x86_64 {
         option::some(x86_64_tys(llargtys, llretty, ret_def))
@@ -933,7 +933,7 @@ fn trans_extern_fn(ccx: @crate_ctxt, path: ast_map::path, decl: ast::fn_decl,
         let _icx = ccx.insn_ctxt("foreign::extern::build_rust_fn");
         let t = ty::node_id_to_type(ccx.tcx, id);
         let ps = link::mangle_internal_name_by_path(
-            ccx, path + [ast_map::path_name(@"__rust_abi")]/~);
+            ccx, vec::append_one(path, ast_map::path_name(@"__rust_abi")));
         let llty = type_of_fn_from_ty(ccx, t);
         let llfndecl = decl_internal_cdecl_fn(ccx.llmod, ps, llty);
         trans_fn(ccx, path, decl, body, llfndecl, no_self, none, id);
@@ -970,7 +970,8 @@ fn trans_extern_fn(ccx: @crate_ctxt, path: ast_map::path, decl: ast::fn_decl,
         }
 
         let shim_name = link::mangle_internal_name_by_path(
-            ccx, path + [ast_map::path_name(@"__rust_stack_shim")]/~);
+            ccx, vec::append_one(path,
+                                 ast_map::path_name(@"__rust_stack_shim")));
         ret build_shim_fn_(ccx, shim_name, llrustfn, tys,
                            lib::llvm::CCallConv,
                            build_args, build_ret);
diff --git a/src/rustc/middle/trans/reflect.rs b/src/rustc/middle/trans/reflect.rs
index edfb7e6f826..b00eb7b5dc5 100644
--- a/src/rustc/middle/trans/reflect.rs
+++ b/src/rustc/middle/trans/reflect.rs
@@ -77,7 +77,8 @@ impl methods for reflector {
 
     fn bracketed_mt(bracket_name: str, mt: ty::mt, extra: [ValueRef]/~) {
         self.bracketed_t(bracket_name, mt.ty,
-                         [self.c_uint(mt.mutbl as uint)]/~ + extra);
+                         vec::append([self.c_uint(mt.mutbl as uint)]/~,
+                                     extra));
     }
 
     fn vstore_name_and_extra(t: ty::t,
@@ -85,7 +86,8 @@ impl methods for reflector {
                              f: fn(str,[ValueRef]/~)) {
         alt vstore {
           ty::vstore_fixed(n) {
-            let extra = [self.c_uint(n)]/~ + self.c_size_and_align(t);
+            let extra = vec::append([self.c_uint(n)]/~,
+                                    self.c_size_and_align(t));
             f("fixed", extra)
           }
           ty::vstore_slice(_) { f("slice", []/~) }
@@ -142,8 +144,8 @@ impl methods for reflector {
           ty::ty_rptr(_, mt) { self.bracketed_mt("rptr", mt, []/~) }
 
           ty::ty_rec(fields) {
-            let extra = ([self.c_uint(vec::len(fields))]/~
-                         + self.c_size_and_align(t));
+            let extra = (vec::append([self.c_uint(vec::len(fields))]/~,
+                                     self.c_size_and_align(t)));
             self.visit("enter_rec", extra);
             for fields.eachi {|i, field|
                 self.bracketed_mt("rec_field", field.mt,
@@ -154,8 +156,8 @@ impl methods for reflector {
           }
 
           ty::ty_tup(tys) {
-            let extra = ([self.c_uint(vec::len(tys))]/~
-                         + self.c_size_and_align(t));
+            let extra = (vec::append([self.c_uint(vec::len(tys))]/~,
+                                     self.c_size_and_align(t)));
             self.visit("enter_tup", extra);
             for tys.eachi {|i, t|
                 self.bracketed_t("tup_field", t, [self.c_uint(i)]/~);
@@ -214,8 +216,8 @@ impl methods for reflector {
             let bcx = self.bcx;
             let tcx = bcx.ccx().tcx;
             let fields = ty::class_items_as_fields(tcx, did, substs);
-            let extra = ([self.c_uint(vec::len(fields))]/~
-                         + self.c_size_and_align(t));
+            let extra = vec::append([self.c_uint(vec::len(fields))]/~,
+                                    self.c_size_and_align(t));
 
             self.visit("enter_class", extra);
             for fields.eachi {|i, field|
@@ -234,8 +236,8 @@ impl methods for reflector {
             let bcx = self.bcx;
             let tcx = bcx.ccx().tcx;
             let variants = ty::substd_enum_variants(tcx, did, substs);
-            let extra = ([self.c_uint(vec::len(variants))]/~
-                         + self.c_size_and_align(t));
+            let extra = vec::append([self.c_uint(vec::len(variants))]/~,
+                                    self.c_size_and_align(t));
 
             self.visit("enter_enum", extra);
             for variants.eachi {|i, v|
diff --git a/src/rustc/middle/tstate/annotate.rs b/src/rustc/middle/tstate/annotate.rs
index 0427e480181..42b6e90b4d8 100644
--- a/src/rustc/middle/tstate/annotate.rs
+++ b/src/rustc/middle/tstate/annotate.rs
@@ -24,7 +24,7 @@ fn collect_ids_stmt(s: @stmt, rs: @mut [node_id]/~) {
 }
 
 fn collect_ids_local(tcx: ty::ctxt, l: @local, rs: @mut [node_id]/~) {
-    *rs += pat_binding_ids(tcx.def_map, l.node.pat);
+    vec::push_all(*rs, pat_binding_ids(tcx.def_map, l.node.pat));
 }
 
 fn node_ids_in_fn(tcx: ty::ctxt, body: blk, rs: @mut [node_id]/~) {
diff --git a/src/rustc/middle/tstate/auxiliary.rs b/src/rustc/middle/tstate/auxiliary.rs
index b45d058970e..23ea039d2c0 100644
--- a/src/rustc/middle/tstate/auxiliary.rs
+++ b/src/rustc/middle/tstate/auxiliary.rs
@@ -474,11 +474,11 @@ fn node_id_to_def(ccx: crate_ctxt, id: node_id) -> option<def> {
 fn norm_a_constraint(id: def_id, c: constraint) -> [norm_constraint]/~ {
     let mut rslt: [norm_constraint]/~ = []/~;
     for (*c.descs).each {|pd|
-        rslt +=
-            [{bit_num: pd.node.bit_num,
-              c: respan(pd.span, {path: c.path,
-                                  def_id: id,
-                                  args: pd.node.args})}]/~;
+        vec::push(rslt,
+                  {bit_num: pd.node.bit_num,
+                   c: respan(pd.span, {path: c.path,
+                                       def_id: id,
+                                       args: pd.node.args})});
     }
     ret rslt;
 }
@@ -489,7 +489,7 @@ fn norm_a_constraint(id: def_id, c: constraint) -> [norm_constraint]/~ {
 fn constraints(fcx: fn_ctxt) -> [norm_constraint]/~ {
     let mut rslt: [norm_constraint]/~ = []/~;
     for fcx.enclosing.constrs.each {|key, val|
-        rslt += norm_a_constraint(key, val);
+        vec::push_all(rslt, norm_a_constraint(key, val));
     };
     ret rslt;
 }
@@ -887,22 +887,23 @@ fn args_to_constr_args(tcx: ty::ctxt, args: [arg]/~,
     let mut actuals: [@constr_arg_use]/~ = []/~;
     let num_args = vec::len(args);
     for indices.each {|a|
-        actuals +=
-            [@respan(a.span,
-                     alt a.node {
-                       carg_base { carg_base }
-                       carg_ident(i) {
-                         if i < num_args {
-                             carg_ident({ident: args[i].ident,
-                                         node: args[i].id})
-                         } else {
-                             tcx.sess.span_bug(a.span,
-                                               "index out of bounds in \
-                  constraint arg");
-                         }
-                       }
-                       carg_lit(l) { carg_lit(l) }
-                     })]/~;
+        vec::push(
+            actuals,
+            @respan(a.span,
+                    alt a.node {
+                        carg_base { carg_base }
+                        carg_ident(i) {
+                            if i < num_args {
+                                carg_ident({ident: args[i].ident,
+                                            node: args[i].id})
+                            } else {
+                                tcx.sess.span_bug(a.span,
+                                                  "index out of bounds in \
+                                                   constraint arg");
+                            }
+                        }
+                        carg_lit(l) { carg_lit(l) }
+                    }));
     }
     ret actuals;
 }
diff --git a/src/rustc/middle/tstate/tritv.rs b/src/rustc/middle/tstate/tritv.rs
index b66cfe00b3f..7f1ba5f0db8 100644
--- a/src/rustc/middle/tstate/tritv.rs
+++ b/src/rustc/middle/tstate/tritv.rs
@@ -253,12 +253,12 @@ fn to_vec(v: t) -> [uint]/~ {
     let mut i: uint = 0u;
     let mut rslt: [uint]/~ = []/~;
     while i < v.nbits {
-        rslt +=
-            [alt tritv_get(v, i) {
-               dont_care { 2u }
-               ttrue { 1u }
-               tfalse { 0u }
-             }]/~;
+        vec::push(rslt,
+                  alt tritv_get(v, i) {
+                      dont_care { 2u }
+                      ttrue { 1u }
+                      tfalse { 0u }
+                  });
         i += 1u;
     }
     ret rslt;
diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs
index f3f4c0a53de..be490f98fe4 100644
--- a/src/rustc/middle/ty.rs
+++ b/src/rustc/middle/ty.rs
@@ -2188,7 +2188,7 @@ fn is_fn_ty(fty: t) -> bool {
 
 // Returns a vec of all the input and output types of fty.
 fn tys_in_fn_ty(fty: fn_ty) -> [t]/~ {
-    fty.inputs.map({|a| a.ty}) + [fty.output]/~
+    vec::append_one(fty.inputs.map({|a| a.ty}), fty.output)
 }
 
 // Just checks whether it's a fn that returns bool,
@@ -2624,26 +2624,27 @@ fn item_path(cx: ctxt, id: ast::def_id) -> ast_map::path {
                 ast_map::path_name(item.ident)
               }
             };
-            *path + [item_elt]/~
+            vec::append_one(*path, item_elt)
           }
 
           ast_map::node_foreign_item(nitem, _, path) {
-            *path + [ast_map::path_name(nitem.ident)]/~
+            vec::append_one(*path, ast_map::path_name(nitem.ident))
           }
 
           ast_map::node_method(method, _, path) {
-            *path + [ast_map::path_name(method.ident)]/~
+            vec::append_one(*path, ast_map::path_name(method.ident))
           }
 
           ast_map::node_variant(variant, _, path) {
-            vec::init(*path) + [ast_map::path_name(variant.node.name)]/~
+            vec::append_one(vec::init(*path),
+                            ast_map::path_name(variant.node.name))
           }
 
           ast_map::node_ctor(nm, _, _, _, path) {
-              *path + [ast_map::path_name(nm)]/~
+            vec::append_one(*path, ast_map::path_name(nm))
           }
           ast_map::node_dtor(_, _, _, path) {
-              *path + [ast_map::path_name(@"dtor")]/~
+            vec::append_one(*path, ast_map::path_name(@"dtor"))
           }
 
 
diff --git a/src/rustc/middle/typeck/check/method.rs b/src/rustc/middle/typeck/check/method.rs
index 367dc256c16..bf3f4b1f3b6 100644
--- a/src/rustc/middle/typeck/check/method.rs
+++ b/src/rustc/middle/typeck/check/method.rs
@@ -403,7 +403,7 @@ class lookup {
             }
         };
 
-        let all_substs = {tps: cand.self_substs.tps + m_substs
+        let all_substs = {tps: vec::append(cand.self_substs.tps, m_substs)
                           with cand.self_substs};
 
         self.fcx.write_ty_substs(self.node_id, cand.fty, all_substs);
diff --git a/src/rustc/middle/typeck/collect.rs b/src/rustc/middle/typeck/collect.rs
index 8167a9c11de..6e4b7a370ab 100644
--- a/src/rustc/middle/typeck/collect.rs
+++ b/src/rustc/middle/typeck/collect.rs
@@ -204,7 +204,7 @@ fn compare_impl_method(tcx: ty::ctxt, sp: span,
         let substs = {
             self_r: some(dummy_self_r),
             self_ty: some(self_ty),
-            tps: if_substs.tps + dummy_tps
+            tps: vec::append(if_substs.tps, dummy_tps)
         };
         let if_fty = ty::mk_fn(tcx, if_m.fty);
         ty::subst(tcx, substs, if_fty)
@@ -286,7 +286,7 @@ fn convert_methods(ccx: @crate_ctxt,
 
             // n.b.: the type of a method is parameterized by both
             // the tps on the receiver and those on the method itself
-            {bounds: @(*rcvr_bounds + *bounds), rp: rp, ty: fty});
+            {bounds: @(vec::append(*rcvr_bounds, *bounds)), rp: rp, ty: fty});
         write_ty_to_tcx(tcx, m.id, fty);
         {mty: mty, id: m.id, span: m.span}
     }
diff --git a/src/rustc/util/ppaux.rs b/src/rustc/util/ppaux.rs
index 5d2098a2e5f..d7a25fabfa6 100644
--- a/src/rustc/util/ppaux.rs
+++ b/src/rustc/util/ppaux.rs
@@ -133,7 +133,7 @@ fn ty_to_str(cx: ctxt, typ: t) -> str {
         alt ident { some(i) { s += " "; s += *i; } _ { } }
         s += "(";
         let mut strs = []/~;
-        for inputs.each {|a| strs += [fn_input_to_str(cx, a)]/~; }
+        for inputs.each {|a| vec::push(strs, fn_input_to_str(cx, a)); }
         s += str::connect(strs, ", ");
         s += ")";
         if ty::get(output).struct != ty_nil {
@@ -190,12 +190,12 @@ fn ty_to_str(cx: ctxt, typ: t) -> str {
       ty_type { "type" }
       ty_rec(elems) {
         let mut strs: [str]/~ = []/~;
-        for elems.each {|fld| strs += [field_to_str(cx, fld)]/~; }
+        for elems.each {|fld| vec::push(strs, field_to_str(cx, fld)); }
         "{" + str::connect(strs, ",") + "}"
       }
       ty_tup(elems) {
         let mut strs = []/~;
-        for elems.each {|elem| strs += [ty_to_str(cx, elem)]/~; }
+        for elems.each {|elem| vec::push(strs, ty_to_str(cx, elem)); }
         "(" + str::connect(strs, ",") + ")"
       }
       ty_fn(f) {