about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2011-08-12 07:15:18 -0700
committerGraydon Hoare <graydon@mozilla.com>2011-08-16 15:05:56 -0700
commite4a0f997fb01b9cbb650532fea1278159faff064 (patch)
tree6544a660e7af2a2485a14d200730d38e08ef29e4 /src/comp
parentf764f9a8cf52e686ba6e54b594e6bbbdd5bc7b32 (diff)
downloadrust-e4a0f997fb01b9cbb650532fea1278159faff064.tar.gz
rust-e4a0f997fb01b9cbb650532fea1278159faff064.zip
Port the compiler to the typaram foo<T> syntax.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/README2
-rw-r--r--src/comp/back/link.rs8
-rw-r--r--src/comp/driver/rustc.rs2
-rw-r--r--src/comp/driver/session.rs4
-rw-r--r--src/comp/front/attr.rs10
-rw-r--r--src/comp/front/config.rs6
-rw-r--r--src/comp/front/test.rs4
-rw-r--r--src/comp/lib/llvm.rs8
-rw-r--r--src/comp/metadata/creader.rs8
-rw-r--r--src/comp/metadata/cstore.rs6
-rw-r--r--src/comp/metadata/decoder.rs2
-rw-r--r--src/comp/metadata/encoder.rs38
-rw-r--r--src/comp/metadata/tydecode.rs12
-rw-r--r--src/comp/metadata/tyencode.rs2
-rw-r--r--src/comp/middle/alias.rs28
-rw-r--r--src/comp/middle/ast_map.rs20
-rw-r--r--src/comp/middle/check_alt.rs4
-rw-r--r--src/comp/middle/freevars.rs12
-rw-r--r--src/comp/middle/resolve.rs128
-rw-r--r--src/comp/middle/shape.rs4
-rw-r--r--src/comp/middle/trans.rs102
-rw-r--r--src/comp/middle/trans_alt.rs18
-rw-r--r--src/comp/middle/trans_common.rs62
-rw-r--r--src/comp/middle/trans_objects.rs6
-rw-r--r--src/comp/middle/tstate/auxiliary.rs44
-rw-r--r--src/comp/middle/tstate/bitvectors.rs8
-rw-r--r--src/comp/middle/tstate/ck.rs6
-rw-r--r--src/comp/middle/tstate/collect_locals.rs4
-rw-r--r--src/comp/middle/tstate/pre_post_conditions.rs6
-rw-r--r--src/comp/middle/tstate/states.rs6
-rw-r--r--src/comp/middle/ty.rs72
-rw-r--r--src/comp/middle/typeck.rs68
-rw-r--r--src/comp/syntax/ast.rs94
-rw-r--r--src/comp/syntax/codemap.rs14
-rw-r--r--src/comp/syntax/ext/base.rs6
-rw-r--r--src/comp/syntax/ext/concat_idents.rs2
-rw-r--r--src/comp/syntax/ext/env.rs4
-rw-r--r--src/comp/syntax/ext/expand.rs2
-rw-r--r--src/comp/syntax/ext/fmt.rs2
-rw-r--r--src/comp/syntax/ext/ident_to_str.rs2
-rw-r--r--src/comp/syntax/ext/log_syntax.rs4
-rw-r--r--src/comp/syntax/ext/simplext.rs48
-rw-r--r--src/comp/syntax/fold.rs2
-rw-r--r--src/comp/syntax/parse/lexer.rs10
-rw-r--r--src/comp/syntax/parse/parser.rs60
-rw-r--r--src/comp/syntax/print/pprust.rs28
-rw-r--r--src/comp/syntax/untyped_ast.rs14
-rw-r--r--src/comp/syntax/util/interner.rs14
-rw-r--r--src/comp/syntax/visit.rs106
-rw-r--r--src/comp/util/common.rs8
-rw-r--r--src/comp/util/ppaux.rs6
51 files changed, 568 insertions, 568 deletions
diff --git a/src/comp/README b/src/comp/README
index dab8fc0a5cd..93b88a818c4 100644
--- a/src/comp/README
+++ b/src/comp/README
@@ -33,7 +33,7 @@ The 3 central data structures:
     structure:
 
       - Many -- though not all -- nodes within this data structure are
-        wrapped in the type spanned[T], meaning that the front-end has
+        wrapped in the type spanned<T>, meaning that the front-end has
         marked the input coordinates of that node. The member .node is
         the data itself, the member .span is the input location (file,
         line, column; both low and high).
diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs
index 5d58fe21961..f94a9d0e273 100644
--- a/src/comp/back/link.rs
+++ b/src/comp/back/link.rs
@@ -285,14 +285,14 @@ fn build_link_meta(sess: &session::session, c: &ast::crate, output: &str,
                    sha: sha1) -> link_meta {
 
     type provided_metas =
-        {name: option::t[str],
-         vers: option::t[str],
+        {name: option::t<str>,
+         vers: option::t<str>,
          cmh_items: [@ast::meta_item]};
 
     fn provided_link_metas(sess: &session::session, c: &ast::crate) ->
        provided_metas {
-        let name: option::t[str] = none;
-        let vers: option::t[str] = none;
+        let name: option::t<str> = none;
+        let vers: option::t<str> = none;
         let cmh_items: [@ast::meta_item] = ~[];
         let linkage_metas = attr::find_linkage_metas(c.node.attrs);
         attr::require_unique_names(sess, linkage_metas);
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index 0500244d010..8bd185bb9d4 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -437,7 +437,7 @@ fn opts() -> [getopts::opt] {
           optflag("lib"), optflag("static"), optflag("gc")];
 }
 
-fn main(args: vec[str]) {
+fn main(args: vec<str>) {
     let args_ivec = vec::from_vec(args);
     let binary = vec::shift(args_ivec);
     let binary_dir = fs::dirname(binary);
diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs
index fb5ab249669..ea3eae60767 100644
--- a/src/comp/driver/session.rs
+++ b/src/comp/driver/session.rs
@@ -54,7 +54,7 @@ obj session(targ_cfg: @config,
             parse_sess: parse_sess,
 
             // For a library crate, this is always none
-            mutable main_fn: option::t[node_id],
+            mutable main_fn: option::t<node_id>,
             mutable err_count: uint) {
     fn get_targ_cfg() -> @config { ret targ_cfg; }
     fn get_opts() -> @options { ret opts; }
@@ -111,7 +111,7 @@ obj session(targ_cfg: @config,
         ret codemap::span_to_str(sp, self.get_codemap());
     }
     fn set_main_id(d: node_id) { main_fn = some(d); }
-    fn get_main_id() -> option::t[node_id] { main_fn }
+    fn get_main_id() -> option::t<node_id> { main_fn }
 }
 // Local Variables:
 // fill-column: 78;
diff --git a/src/comp/front/attr.rs b/src/comp/front/attr.rs
index 48a33b4dd19..6474dfc1b77 100644
--- a/src/comp/front/attr.rs
+++ b/src/comp/front/attr.rs
@@ -45,7 +45,7 @@ fn find_attrs_by_name(attrs: &[ast::attribute], name: ast::ident) ->
    [ast::attribute] {
     let filter =
         bind fn (a: &ast::attribute, name: ast::ident) ->
-                option::t[ast::attribute] {
+                option::t<ast::attribute> {
                  if get_attr_name(a) == name {
                      option::some(a)
                  } else { option::none }
@@ -61,7 +61,7 @@ fn find_meta_items_by_name(metas: &[@ast::meta_item], name: ast::ident) ->
    [@ast::meta_item] {
     let filter =
         bind fn (m: &@ast::meta_item, name: ast::ident) ->
-                option::t[@ast::meta_item] {
+                option::t<@ast::meta_item> {
                  if get_meta_item_name(m) == name {
                      option::some(m)
                  } else { option::none }
@@ -79,7 +79,7 @@ fn get_meta_item_name(meta: &@ast::meta_item) -> ast::ident {
 
 // Gets the string value if the meta_item is a meta_name_value variant
 // containing a string, otherwise none
-fn get_meta_item_value_str(meta: &@ast::meta_item) -> option::t[str] {
+fn get_meta_item_value_str(meta: &@ast::meta_item) -> option::t<str> {
     alt meta.node {
       ast::meta_name_value(_, v) {
         alt v.node {
@@ -167,7 +167,7 @@ fn remove_meta_items_by_name(items: &[@ast::meta_item], name: str) ->
 
     let filter =
         bind fn (item: &@ast::meta_item, name: str) ->
-                option::t[@ast::meta_item] {
+                option::t<@ast::meta_item> {
                  if get_meta_item_name(item) != name {
                      option::some(item)
                  } else { option::none }
@@ -189,7 +189,7 @@ fn require_unique_names(sess: &session::session,
     }
 }
 
-fn span[T](item: &T) -> ast::spanned[T] {
+fn span[T](item: &T) -> ast::spanned<T> {
     ret {node: item, span: ast::mk_sp(0u, 0u)};
 }
 
diff --git a/src/comp/front/config.rs b/src/comp/front/config.rs
index 42d55688c1d..4a9eeac0d22 100644
--- a/src/comp/front/config.rs
+++ b/src/comp/front/config.rs
@@ -25,7 +25,7 @@ fn strip_unconfigured_items(crate: @ast::crate) -> @ast::crate {
 }
 
 fn filter_item(cfg: &ast::crate_cfg, item: &@ast::item) ->
-   option::t[@ast::item] {
+   option::t<@ast::item> {
     if item_in_cfg(cfg, item) { option::some(item) } else { option::none }
 }
 
@@ -38,7 +38,7 @@ fn fold_mod(cfg: &ast::crate_cfg, m: &ast::_mod, fld: fold::ast_fold) ->
 }
 
 fn filter_native_item(cfg: &ast::crate_cfg, item: &@ast::native_item) ->
-   option::t[@ast::native_item] {
+   option::t<@ast::native_item> {
     if native_item_in_cfg(cfg, item) {
         option::some(item)
     } else { option::none }
@@ -55,7 +55,7 @@ fn fold_native_mod(cfg: &ast::crate_cfg, nm: &ast::native_mod,
 }
 
 fn filter_stmt(cfg: &ast::crate_cfg, stmt: &@ast::stmt) ->
-   option::t[@ast::stmt] {
+   option::t<@ast::stmt> {
     alt stmt.node {
       ast::stmt_decl(decl, _) {
         alt decl.node {
diff --git a/src/comp/front/test.rs b/src/comp/front/test.rs
index 309d2e21777..0ad041e5edd 100644
--- a/src/comp/front/test.rs
+++ b/src/comp/front/test.rs
@@ -57,7 +57,7 @@ fn fold_mod(cx: &test_ctxt, m: &ast::_mod, fld: fold::ast_fold) -> ast::_mod {
     // the one we're going to add.  FIXME: This is sloppy. Instead we should
     // have some mechanism to indicate to the translation pass which function
     // we want to be main.
-    fn nomain(item: &@ast::item) -> option::t[@ast::item] {
+    fn nomain(item: &@ast::item) -> option::t<@ast::item> {
         alt item.node {
           ast::item_fn(f, _) {
             if item.ident == "main" {
@@ -167,7 +167,7 @@ fn mk_test_module(cx: &test_ctxt) -> @ast::item {
     ret @item;
 }
 
-fn nospan[T](t: &T) -> ast::spanned[T] {
+fn nospan[T](t: &T) -> ast::spanned<T> {
     ret {node: t, span: ast::dummy_sp()};
 }
 
diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs
index 3c22299b19c..12bcb5ad5fa 100644
--- a/src/comp/lib/llvm.rs
+++ b/src/comp/lib/llvm.rs
@@ -1420,8 +1420,8 @@ fn new_builder(llbb: BasicBlockRef) -> builder {
 
 /* Memory-managed object interface to type handles. */
 
-obj type_names(type_names: std::map::hashmap[TypeRef, str],
-               named_types: std::map::hashmap[str, TypeRef]) {
+obj type_names(type_names: std::map::hashmap<TypeRef, str>,
+               named_types: std::map::hashmap<str, TypeRef>) {
 
     fn associate(s: str, t: TypeRef) {
         assert (!named_types.contains_key(s));
@@ -1446,8 +1446,8 @@ fn mk_type_names() -> type_names {
 
     fn eq(a: &TypeRef, b: &TypeRef) -> bool { ret a as uint == b as uint; }
 
-    let hasher: std::map::hashfn[TypeRef] = hash;
-    let eqer: std::map::eqfn[TypeRef] = eq;
+    let hasher: std::map::hashfn<TypeRef> = hash;
+    let eqer: std::map::eqfn<TypeRef> = eq;
     let tn = std::map::mk_hashmap[TypeRef, str](hasher, eqer);
 
     ret type_names(tn, nt);
diff --git a/src/comp/metadata/creader.rs b/src/comp/metadata/creader.rs
index e00ddb11be6..58e85e90440 100644
--- a/src/comp/metadata/creader.rs
+++ b/src/comp/metadata/creader.rs
@@ -45,7 +45,7 @@ fn read_crates(sess: session::session, crate: &ast::crate) {
 
 type env =
     @{sess: session::session,
-      crate_cache: @hashmap[str, int],
+      crate_cache: @hashmap<str, int>,
       library_search_paths: [str],
       mutable next_crate_num: ast::crate_num};
 
@@ -118,7 +118,7 @@ fn default_native_lib_naming(sess: session::session, static: bool) ->
 fn find_library_crate(sess: &session::session, ident: &ast::ident,
                       metas: &[@ast::meta_item],
                       library_search_paths: &[str]) ->
-   option::t[{ident: str, data: @[u8]}] {
+   option::t<{ident: str, data: @[u8]}> {
 
     attr::require_unique_names(sess, metas);
 
@@ -148,7 +148,7 @@ fn find_library_crate(sess: &session::session, ident: &ast::ident,
 fn find_library_crate_aux(nn: &{prefix: str, suffix: str}, crate_name: str,
                           metas: &[@ast::meta_item],
                           library_search_paths: &[str]) ->
-   option::t[{ident: str, data: @[u8]}] {
+   option::t<{ident: str, data: @[u8]}> {
     let prefix: str = nn.prefix + crate_name;
     // FIXME: we could probably use a 'glob' function in std::fs but it will
     // be much easier to write once the unsafe module knows more about FFI
@@ -183,7 +183,7 @@ fn find_library_crate_aux(nn: &{prefix: str, suffix: str}, crate_name: str,
     ret none;
 }
 
-fn get_metadata_section(filename: str) -> option::t[@[u8]] {
+fn get_metadata_section(filename: str) -> option::t<@[u8]> {
     let b = str::buf(filename);
     let mb = llvm::LLVMRustCreateMemoryBufferWithContentsOfFile(b);
     if mb as int == 0 { ret option::none[@[u8]]; }
diff --git a/src/comp/metadata/cstore.rs b/src/comp/metadata/cstore.rs
index e93b674bc32..70e7ab1169d 100644
--- a/src/comp/metadata/cstore.rs
+++ b/src/comp/metadata/cstore.rs
@@ -27,7 +27,7 @@ export get_use_stmt_cnum;
 // local crate numbers (as generated during this session). Each external
 // crate may refer to types in other external crates, and each has their
 // own crate numbers.
-type cnum_map = map::hashmap[ast::crate_num, ast::crate_num];
+type cnum_map = map::hashmap<ast::crate_num, ast::crate_num>;
 
 type crate_metadata = {name: str, data: @[u8], cnum_map: cnum_map};
 
@@ -39,14 +39,14 @@ type crate_metadata = {name: str, data: @[u8], cnum_map: cnum_map};
 tag cstore { private(cstore_private); }
 
 type cstore_private =
-    @{metas: map::hashmap[ast::crate_num, crate_metadata],
+    @{metas: map::hashmap<ast::crate_num, crate_metadata>,
       use_crate_map: use_crate_map,
       mutable used_crate_files: [str],
       mutable used_libraries: [str],
       mutable used_link_args: [str]};
 
 // Map from node_id's of local use statements to crate numbers
-type use_crate_map = map::hashmap[ast::node_id, ast::crate_num];
+type use_crate_map = map::hashmap<ast::node_id, ast::crate_num>;
 
 // Internal method to retrieve the data from the cstore
 fn p(cstore: &cstore) -> cstore_private { alt cstore { private(p) { p } } }
diff --git a/src/comp/metadata/decoder.rs b/src/comp/metadata/decoder.rs
index d365d58fc60..b4203bd08e2 100644
--- a/src/comp/metadata/decoder.rs
+++ b/src/comp/metadata/decoder.rs
@@ -56,7 +56,7 @@ fn lookup_hash(d: &ebml::doc, eq_fn: fn(&[u8]) -> bool , hash: uint) ->
 }
 
 fn maybe_find_item(item_id: int, items: &ebml::doc) ->
-   option::t[ebml::doc] {
+   option::t<ebml::doc> {
     fn eq_item(bytes: &[u8], item_id: int) -> bool {
         ret ebml::be_uint_from_bytes(@bytes, 0u, 4u) as int == item_id;
     }
diff --git a/src/comp/metadata/encoder.rs b/src/comp/metadata/encoder.rs
index 8cd1380784e..62771235ee8 100644
--- a/src/comp/metadata/encoder.rs
+++ b/src/comp/metadata/encoder.rs
@@ -19,7 +19,7 @@ import front::attr;
 export encode_metadata;
 export encoded_ty;
 
-type abbrev_map = map::hashmap[ty::t, tyencode::ty_abbrev];
+type abbrev_map = map::hashmap<ty::t, tyencode::ty_abbrev>;
 
 type encode_ctxt = {ccx: @crate_ctxt, type_abbrevs: abbrev_map};
 
@@ -39,7 +39,7 @@ fn encode_def_id(ebml_w: &ebml::writer, id: &def_id) {
 type entry[T] = {val: T, pos: uint};
 
 fn encode_tag_variant_paths(ebml_w: &ebml::writer, variants: &[variant],
-                            path: &[str], index: &mutable [entry[str]]) {
+                            path: &[str], index: &mutable [entry<str>]) {
     for variant: variant in variants {
         add_to_index(ebml_w, path, index, variant.node.name);
         ebml::start_tag(ebml_w, tag_paths_data_item);
@@ -50,7 +50,7 @@ fn encode_tag_variant_paths(ebml_w: &ebml::writer, variants: &[variant],
 }
 
 fn add_to_index(ebml_w: &ebml::writer, path: &[str],
-                index: &mutable [entry[str]], name: &str) {
+                index: &mutable [entry<str>], name: &str) {
     let full_path = path + ~[name];
     index +=
         ~[{val: str::connect(full_path, "::"),
@@ -59,7 +59,7 @@ fn add_to_index(ebml_w: &ebml::writer, path: &[str],
 
 fn encode_native_module_item_paths(ebml_w: &ebml::writer,
                                    nmod: &native_mod, path: &[str],
-                                   index: &mutable [entry[str]]) {
+                                   index: &mutable [entry<str>]) {
     for nitem: @native_item in nmod.items {
         add_to_index(ebml_w, path, index, nitem.ident);
         ebml::start_tag(ebml_w, tag_paths_data_item);
@@ -70,7 +70,7 @@ fn encode_native_module_item_paths(ebml_w: &ebml::writer,
 }
 
 fn encode_module_item_paths(ebml_w: &ebml::writer, module: &_mod,
-                            path: &[str], index: &mutable [entry[str]]) {
+                            path: &[str], index: &mutable [entry<str>]) {
     for it: @item in module.items {
         if !is_exported(it.ident, module) { cont; }
         alt it.node {
@@ -149,8 +149,8 @@ fn encode_module_item_paths(ebml_w: &ebml::writer, module: &_mod,
 }
 
 fn encode_item_paths(ebml_w: &ebml::writer, crate: &@crate) ->
-   [entry[str]] {
-    let index: [entry[str]] = ~[];
+   [entry<str>] {
+    let index: [entry<str>] = ~[];
     let path: [str] = ~[];
     ebml::start_tag(ebml_w, tag_paths);
     encode_module_item_paths(ebml_w, crate.node.module, path, index);
@@ -226,7 +226,7 @@ fn encode_tag_id(ebml_w: &ebml::writer, id: &def_id) {
 
 fn encode_tag_variant_info(ecx: &@encode_ctxt, ebml_w: &ebml::writer,
                            id: node_id, variants: &[variant],
-                           index: &mutable [entry[int]],
+                           index: &mutable [entry<int>],
                            ty_params: &[ty_param]) {
     for variant: variant in variants {
         index += ~[{val: variant.node.id, pos: ebml_w.writer.tell()}];
@@ -246,7 +246,7 @@ fn encode_tag_variant_info(ecx: &@encode_ctxt, ebml_w: &ebml::writer,
 }
 
 fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: &ebml::writer,
-                        item: @item, index: &mutable [entry[int]]) {
+                        item: @item, index: &mutable [entry<int>]) {
     alt item.node {
       item_const(_, _) {
         ebml::start_tag(ebml_w, tag_items_data_item);
@@ -368,8 +368,8 @@ fn encode_info_for_native_item(ecx: &@encode_ctxt, ebml_w: &ebml::writer,
 }
 
 fn encode_info_for_items(ecx: &@encode_ctxt, ebml_w: &ebml::writer) ->
-   [entry[int]] {
-    let index: [entry[int]] = ~[];
+   [entry<int>] {
+    let index: [entry<int>] = ~[];
     ebml::start_tag(ebml_w, tag_items_data);
     for each kvp: @{key: node_id, val: middle::ast_map::ast_node}  in
              ecx.ccx.ast_map.items() {
@@ -392,32 +392,32 @@ fn encode_info_for_items(ecx: &@encode_ctxt, ebml_w: &ebml::writer) ->
 
 // Path and definition ID indexing
 
-fn create_index[T](index: &[entry[T]], hash_fn: fn(&T) -> uint ) ->
-   [@[entry[T]]] {
-    let buckets: [@mutable [entry[T]]] = ~[];
+fn create_index[T](index: &[entry<T>], hash_fn: fn(&T) -> uint ) ->
+   [@[entry<T>]] {
+    let buckets: [@mutable [entry<T>]] = ~[];
     for each i: uint in uint::range(0u, 256u) { buckets += ~[@mutable ~[]]; }
-    for elt: entry[T] in index {
+    for elt: entry<T> in index {
         let h = hash_fn(elt.val);
         *buckets.(h % 256u) += ~[elt];
     }
 
     let buckets_frozen = ~[];
-    for bucket: @mutable [entry[T]] in buckets {
+    for bucket: @mutable [entry<T>] in buckets {
         buckets_frozen += ~[@*bucket];
     }
     ret buckets_frozen;
 }
 
-fn encode_index[T](ebml_w: &ebml::writer, buckets: &[@[entry[T]]],
+fn encode_index[T](ebml_w: &ebml::writer, buckets: &[@[entry<T>]],
                    write_fn: fn(&io::writer, &T) ) {
     let writer = io::new_writer_(ebml_w.writer);
     ebml::start_tag(ebml_w, tag_index);
     let bucket_locs: [uint] = ~[];
     ebml::start_tag(ebml_w, tag_index_buckets);
-    for bucket: @[entry[T]] in buckets {
+    for bucket: @[entry<T>] in buckets {
         bucket_locs += ~[ebml_w.writer.tell()];
         ebml::start_tag(ebml_w, tag_index_buckets_bucket);
-        for elt: entry[T] in *bucket {
+        for elt: entry<T> in *bucket {
             ebml::start_tag(ebml_w, tag_index_buckets_bucket_elt);
             writer.write_be_uint(elt.pos, 4u);
             write_fn(writer, elt.val);
diff --git a/src/comp/metadata/tydecode.rs b/src/comp/metadata/tydecode.rs
index 95933ffec7f..7c102c2de62 100644
--- a/src/comp/metadata/tydecode.rs
+++ b/src/comp/metadata/tydecode.rs
@@ -115,7 +115,7 @@ fn parse_path(st: @pstate, sd: str_def) -> ast::path {
     fail "parse_path: ill-formed path";
 }
 
-type arg_parser[T] = fn(@pstate, str_def) -> ast::constr_arg_general_[T] ;
+type arg_parser[T] = fn(@pstate, str_def) -> ast::constr_arg_general_<T> ;
 
 fn parse_constr_arg(st: @pstate, sd: str_def) -> ast::fn_constr_arg {
     alt peek(st) as char {
@@ -143,22 +143,22 @@ fn parse_constr_arg(st: @pstate, sd: str_def) -> ast::fn_constr_arg {
 }
 
 fn parse_ty_constr_arg(st: @pstate, sd: str_def) ->
-   ast::constr_arg_general_[path] {
+   ast::constr_arg_general_<path> {
     alt peek(st) as char {
       '*' { st.pos += 1u; ret ast::carg_base; }
       c { ret ast::carg_ident(parse_path(st, sd)); }
     }
 }
 
-fn parse_constr[@T](st: @pstate, sd: str_def, pser: arg_parser[T]) ->
-   @ty::constr_general[T] {
+fn parse_constr[@T](st: @pstate, sd: str_def, pser: arg_parser<T>) ->
+   @ty::constr_general<T> {
     let sp = ast::dummy_sp(); // FIXME: use a real span
-    let args: [@sp_constr_arg[T]] = ~[];
+    let args: [@sp_constr_arg<T>] = ~[];
     let pth: path = parse_path(st, sd);
     let ignore: char = next(st) as char;
     assert (ignore as char == '(');
     let def = parse_def(st, sd);
-    let an_arg: constr_arg_general_[T];
+    let an_arg: constr_arg_general_<T>;
     do  {
         an_arg = pser(st, sd);
         // FIXME use a real span
diff --git a/src/comp/metadata/tyencode.rs b/src/comp/metadata/tyencode.rs
index 2b5345a1e72..23af6721887 100644
--- a/src/comp/metadata/tyencode.rs
+++ b/src/comp/metadata/tyencode.rs
@@ -26,7 +26,7 @@ type ctxt =  // Def -> str Callback:
 // Whatever format you choose should not contain pipe characters.
 type ty_abbrev = {pos: uint, len: uint, s: str};
 
-tag abbrev_ctxt { ac_no_abbrevs; ac_use_abbrevs(hashmap[ty::t, ty_abbrev]); }
+tag abbrev_ctxt { ac_no_abbrevs; ac_use_abbrevs(hashmap<ty::t, ty_abbrev>); }
 
 fn cx_uses_abbrevs(cx: &@ctxt) -> bool {
     alt cx.abbrevs {
diff --git a/src/comp/middle/alias.rs b/src/comp/middle/alias.rs
index 7969977e2b9..e3c31698955 100644
--- a/src/comp/middle/alias.rs
+++ b/src/comp/middle/alias.rs
@@ -36,7 +36,7 @@ type scope = @[restrict];
 
 tag local_info { arg(ast::mode); objfield(ast::mutability); }
 
-type ctx = {tcx: ty::ctxt, local_map: std::map::hashmap[node_id, local_info]};
+type ctx = {tcx: ty::ctxt, local_map: std::map::hashmap<node_id, local_info>};
 
 fn check_crate(tcx: ty::ctxt, crate: &@ast::crate) {
     // Stores information about object fields and function
@@ -52,7 +52,7 @@ fn check_crate(tcx: ty::ctxt, crate: &@ast::crate) {
 }
 
 fn visit_fn(cx: &@ctx, f: &ast::_fn, tp: &[ast::ty_param], sp: &span,
-            name: &fn_ident, id: ast::node_id, sc: &scope, v: &vt[scope]) {
+            name: &fn_ident, id: ast::node_id, sc: &scope, v: &vt<scope>) {
     visit::visit_fn_decl(f.decl, sc, v);
     for arg_: ast::arg in f.decl.inputs {
         cx.local_map.insert(arg_.id, arg(arg_.mode));
@@ -82,7 +82,7 @@ fn visit_fn(cx: &@ctx, f: &ast::_fn, tp: &[ast::ty_param], sp: &span,
     v.visit_block(f.body, scope, v);
 }
 
-fn visit_item(cx: &@ctx, i: &@ast::item, sc: &scope, v: &vt[scope]) {
+fn visit_item(cx: &@ctx, i: &@ast::item, sc: &scope, v: &vt<scope>) {
     alt i.node {
       ast::item_obj(o, _, _) {
         for f: ast::obj_field in o.fields {
@@ -94,7 +94,7 @@ fn visit_item(cx: &@ctx, i: &@ast::item, sc: &scope, v: &vt[scope]) {
     visit::visit_item(i, sc, v);
 }
 
-fn visit_expr(cx: &@ctx, ex: &@ast::expr, sc: &scope, v: &vt[scope]) {
+fn visit_expr(cx: &@ctx, ex: &@ast::expr, sc: &scope, v: &vt<scope>) {
     let handled = true;
     alt ex.node {
       ast::expr_call(f, args) {
@@ -145,7 +145,7 @@ fn visit_expr(cx: &@ctx, ex: &@ast::expr, sc: &scope, v: &vt[scope]) {
     if !handled { visit::visit_expr(ex, sc, v); }
 }
 
-fn visit_decl(cx: &@ctx, d: &@ast::decl, sc: &scope, v: &vt[scope]) {
+fn visit_decl(cx: &@ctx, d: &@ast::decl, sc: &scope, v: &vt<scope>) {
     visit::visit_decl(d, sc, v);
     alt d.node {
       ast::decl_local(locs) {
@@ -309,7 +309,7 @@ fn check_tail_call(cx: &ctx, call: &@ast::expr) {
 }
 
 fn check_alt(cx: &ctx, input: &@ast::expr, arms: &[ast::arm], sc: &scope,
-             v: &vt[scope]) {
+             v: &vt<scope>) {
     visit::visit_expr(input, sc, v);
     let root = expr_root(cx, input, true);
     let roots =
@@ -336,7 +336,7 @@ fn arm_defnums(arm: &ast::arm) -> [node_id] {
 }
 
 fn check_for_each(cx: &ctx, local: &@ast::local, call: &@ast::expr,
-                  blk: &ast::blk, sc: &scope, v: &vt[scope]) {
+                  blk: &ast::blk, sc: &scope, v: &vt<scope>) {
     visit::visit_expr(call, sc, v);
     alt call.node {
       ast::expr_call(f, args) {
@@ -354,7 +354,7 @@ fn check_for_each(cx: &ctx, local: &@ast::local, call: &@ast::expr,
 }
 
 fn check_for(cx: &ctx, local: &@ast::local, seq: &@ast::expr, blk: &ast::blk,
-             sc: &scope, v: &vt[scope]) {
+             sc: &scope, v: &vt<scope>) {
     visit::visit_expr(seq, sc, v);
     let root = expr_root(cx, seq, false);
     let root_def =
@@ -405,7 +405,7 @@ fn check_var(cx: &ctx, ex: &@ast::expr, p: &ast::path, id: ast::node_id,
     }
 }
 
-fn check_lval(cx: &@ctx, dest: &@ast::expr, sc: &scope, v: &vt[scope]) {
+fn check_lval(cx: &@ctx, dest: &@ast::expr, sc: &scope, v: &vt<scope>) {
     alt dest.node {
       ast::expr_path(p) {
         let dnum = ast::def_id_of_def(cx.tcx.def_map.get(dest.id)).node;
@@ -440,7 +440,7 @@ fn check_lval(cx: &@ctx, dest: &@ast::expr, sc: &scope, v: &vt[scope]) {
     }
 }
 
-fn check_move_rhs(cx: &@ctx, src: &@ast::expr, sc: &scope, v: &vt[scope]) {
+fn check_move_rhs(cx: &@ctx, src: &@ast::expr, sc: &scope, v: &vt<scope>) {
     alt src.node {
       ast::expr_path(p) {
         alt cx.tcx.def_map.get(src.id) {
@@ -464,7 +464,7 @@ fn check_move_rhs(cx: &@ctx, src: &@ast::expr, sc: &scope, v: &vt[scope]) {
 }
 
 fn check_assign(cx: &@ctx, dest: &@ast::expr, src: &@ast::expr, sc: &scope,
-                v: &vt[scope]) {
+                v: &vt<scope>) {
     visit_expr(cx, src, sc, v);
     check_lval(cx, dest, sc, v);
 }
@@ -630,19 +630,19 @@ fn mut_field(ds: &@[deref]) -> bool {
     ret false;
 }
 
-fn inner_mut(ds: &@[deref]) -> option::t[ty::t] {
+fn inner_mut(ds: &@[deref]) -> option::t<ty::t> {
     for d: deref in *ds { if d.mut { ret some(d.outer_t); } }
     ret none;
 }
 
-fn path_def(cx: &ctx, ex: &@ast::expr) -> option::t[ast::def] {
+fn path_def(cx: &ctx, ex: &@ast::expr) -> option::t<ast::def> {
     ret alt ex.node {
       ast::expr_path(_) { some(cx.tcx.def_map.get(ex.id)) }
       _ { none }
     }
 }
 
-fn path_def_id(cx: &ctx, ex: &@ast::expr) -> option::t[ast::def_id] {
+fn path_def_id(cx: &ctx, ex: &@ast::expr) -> option::t<ast::def_id> {
     alt ex.node {
       ast::expr_path(_) {
         ret some(ast::def_id_of_def(cx.tcx.def_map.get(ex.id)));
diff --git a/src/comp/middle/ast_map.rs b/src/comp/middle/ast_map.rs
index e1d9e398cc8..aa9cea21d7d 100644
--- a/src/comp/middle/ast_map.rs
+++ b/src/comp/middle/ast_map.rs
@@ -12,7 +12,7 @@ tag ast_node {
     node_expr(@expr);
 }
 
-type map = std::map::hashmap[node_id, ast_node];
+type map = std::map::hashmap<node_id, ast_node>;
 
 fn map_crate(c: &crate) -> map {
     // FIXME: This is using an adapter to convert the smallintmap
@@ -29,7 +29,7 @@ fn map_crate(c: &crate) -> map {
     ret map;
 }
 
-fn map_item(map: &map, i: &@item, e: &(), v: &vt[()]) {
+fn map_item(map: &map, i: &@item, e: &(), v: &vt<()>) {
     map.insert(i.id, node_item(i));
     alt i.node {
       item_obj(_, _, ctor_id) { map.insert(ctor_id, node_obj_ctor(i)); }
@@ -38,17 +38,17 @@ fn map_item(map: &map, i: &@item, e: &(), v: &vt[()]) {
     visit::visit_item(i, e, v);
 }
 
-fn map_native_item(map: &map, i: &@native_item, e: &(), v: &vt[()]) {
+fn map_native_item(map: &map, i: &@native_item, e: &(), v: &vt<()>) {
     map.insert(i.id, node_native_item(i));
     visit::visit_native_item(i, e, v);
 }
 
-fn map_expr(map: &map, ex: &@expr, e: &(), v: &vt[()]) {
+fn map_expr(map: &map, ex: &@expr, e: &(), v: &vt<()>) {
     map.insert(ex.id, node_expr(ex));
     visit::visit_expr(ex, e, v);
 }
 
-fn new_smallintmap_int_adapter[@V]() -> std::map::hashmap[int, V] {
+fn new_smallintmap_int_adapter[@V]() -> std::map::hashmap<int, V> {
     let key_idx = fn (key: &int) -> uint { key as uint };
     let idx_key = fn (idx: &uint) -> int { idx as int };
     ret new_smallintmap_adapter(key_idx, idx_key);
@@ -62,10 +62,10 @@ fn new_smallintmap_int_adapter[@V]() -> std::map::hashmap[int, V] {
 fn new_smallintmap_adapter[@K,
                            @V](key_idx: fn(&K) -> uint ,
                                idx_key: fn(&uint) -> K ) ->
-   std::map::hashmap[K, V] {
+   std::map::hashmap<K, V> {
 
     obj adapter[@K,
-                @V](map: smallintmap::smallintmap[V],
+                @V](map: smallintmap::smallintmap<V>,
                     key_idx: fn(&K) -> uint ,
                     idx_key: fn(&uint) -> K ) {
 
@@ -83,17 +83,17 @@ fn new_smallintmap_adapter[@K,
 
         fn get(key: &K) -> V { ret smallintmap::get(map, key_idx(key)); }
 
-        fn find(key: &K) -> option::t[V] {
+        fn find(key: &K) -> option::t<V> {
             ret smallintmap::find(map, key_idx(key));
         }
 
-        fn remove(key: &K) -> option::t[V] { fail }
+        fn remove(key: &K) -> option::t<V> { fail }
 
         fn rehash() { fail }
 
         iter items() -> @{key: K, val: V} {
             let idx = 0u;
-            for item: option::t[V] in map.v {
+            for item: option::t<V> in map.v {
                 alt item {
                   option::some(elt) {
                     let value = elt;
diff --git a/src/comp/middle/check_alt.rs b/src/comp/middle/check_alt.rs
index 630a3d6e160..54017c6e282 100644
--- a/src/comp/middle/check_alt.rs
+++ b/src/comp/middle/check_alt.rs
@@ -10,7 +10,7 @@ fn check_crate(tcx: &ty::ctxt, crate: &@crate) {
     tcx.sess.abort_if_errors();
 }
 
-fn check_expr(tcx: &ty::ctxt, ex: &@expr, s: &(), v: &visit::vt[()]) {
+fn check_expr(tcx: &ty::ctxt, ex: &@expr, s: &(), v: &visit::vt<()>) {
     visit::visit_expr(ex, s, v);
     alt ex.node { expr_alt(_, arms) { check_arms(tcx, arms); } _ { } }
 }
@@ -99,7 +99,7 @@ fn pattern_supersedes(tcx: &ty::ctxt, a: &@pat, b: &@pat) -> bool {
     }
 }
 
-fn check_local(tcx: &ty::ctxt, loc: &@local, s: &(), v: &visit::vt[()]) {
+fn check_local(tcx: &ty::ctxt, loc: &@local, s: &(), v: &visit::vt<()>) {
     visit::visit_local(loc, s, v);
     if is_refutable(tcx, loc.node.pat) {
         tcx.sess.span_err(loc.node.pat.span,
diff --git a/src/comp/middle/freevars.rs b/src/comp/middle/freevars.rs
index 12366d2aacb..ccd932049a3 100644
--- a/src/comp/middle/freevars.rs
+++ b/src/comp/middle/freevars.rs
@@ -28,9 +28,9 @@ export def_lookup;
 // "canonical" referencing node_id per free variable. The set is useful for
 // testing membership, the list of referencing sites is what you want for most
 // other things.
-type freevar_set = hashset[ast::node_id];
+type freevar_set = hashset<ast::node_id>;
 type freevar_info = {defs: freevar_set, refs: @[ast::node_id]};
-type freevar_map = hashmap[ast::node_id, freevar_info];
+type freevar_map = hashmap<ast::node_id, freevar_info>;
 
 // Searches through part of the AST for all references to locals or
 // upvars in this frame and returns the list of definition IDs thus found.
@@ -38,7 +38,7 @@ type freevar_map = hashmap[ast::node_id, freevar_info];
 // of the AST, we take a walker function that we invoke with a visitor
 // in order to start the search.
 fn collect_freevars(def_map: &resolve::def_map, sess: &session::session,
-                    walker: &fn(&visit::vt[()]) ,
+                    walker: &fn(&visit::vt<()>) ,
                     initial_decls: [ast::node_id]) -> freevar_info {
     let decls = new_int_hash();
     for decl: ast::node_id in initial_decls { set_add(decls, decl); }
@@ -108,7 +108,7 @@ fn annotate_freevars(sess: &session::session, def_map: &resolve::def_map,
 
     let walk_fn = lambda(f: &ast::_fn, tps: &[ast::ty_param], sp: &span,
                          i: &ast::fn_ident, nid: ast::node_id) {
-        let start_walk = lambda(v: &visit::vt[()]) {
+        let start_walk = lambda(v: &visit::vt<()>) {
             v.visit_fn(f, tps, sp, i, nid, (), v);
         };
         let vars = collect_freevars(def_map, sess, start_walk, ~[]);
@@ -117,7 +117,7 @@ fn annotate_freevars(sess: &session::session, def_map: &resolve::def_map,
     let walk_expr = lambda(expr: &@ast::expr) {
         alt expr.node {
           ast::expr_for_each(local, _, body) {
-            let start_walk = lambda(v: &visit::vt[()]) {
+            let start_walk = lambda(v: &visit::vt<()>) {
                 v.visit_block(body, (), v);
             };
             let bound = ast::pat_binding_ids(local.node.pat);
@@ -157,7 +157,7 @@ fn is_freevar_of(tcx: &ty::ctxt, def: ast::node_id, f: ast::node_id) -> bool {
     ret get_freevar_defs(tcx, f).contains_key(def);
 }
 fn def_lookup(tcx: &ty::ctxt, f: ast::node_id, id: ast::node_id) ->
-   option::t[ast::def] {
+   option::t<ast::def> {
     alt tcx.def_map.find(id) {
       none. { ret none; }
       some(d) {
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs
index 7a9b59357e4..e38d305a00c 100644
--- a/src/comp/middle/resolve.rs
+++ b/src/comp/middle/resolve.rs
@@ -57,20 +57,20 @@ tag scope {
     scope_arm(ast::arm);
 }
 
-type scopes = list[scope];
+type scopes = list<scope>;
 
 tag import_state {
     todo(@ast::view_item, scopes); // only used for explicit imports
 
     resolving(span);
-    resolved(option::t[def],
+    resolved(option::t<def>,
               /* value */
-             option::t[def],
+             option::t<def>,
               /* type */
-             option::t[def]); /* module */
+             option::t<def>); /* module */
 }
 
-type ext_hash = hashmap[{did: def_id, ident: str, ns: namespace}, def];
+type ext_hash = hashmap<{did: def_id, ident: str, ns: namespace}, def>;
 
 fn new_ext_hash() -> ext_hash {
     type key = {did: def_id, ident: str, ns: namespace};
@@ -96,30 +96,30 @@ tag mod_index_entry {
     mie_tag_variant(/* tag item */@ast::item, /* variant index */uint);
 }
 
-type mod_index = hashmap[ident, list[mod_index_entry]];
+type mod_index = hashmap<ident, list<mod_index_entry>>;
 
 // A tuple of an imported def and the import stmt that brung it
 type glob_imp_def = {def: def, item: @ast::view_item};
 
 type indexed_mod =
-    {m: option::t[ast::_mod],
+    {m: option::t<ast::_mod>,
      index: mod_index,
      mutable glob_imports: [glob_imp_def],
-     glob_imported_names: hashmap[str, import_state]};
+     glob_imported_names: hashmap<str, import_state>};
 
 
 /* native modules can't contain tags, and we don't store their ASTs because we
    only need to look at them to determine exports, which they can't control.*/
 
-type def_map = hashmap[node_id, def];
+type def_map = hashmap<node_id, def>;
 
 type env =
     {cstore: cstore::cstore,
      def_map: def_map,
      ast_map: ast_map::map,
-     imports: hashmap[ast::node_id, import_state],
-     mod_map: hashmap[ast::node_id, @indexed_mod],
-     ext_map: hashmap[def_id, [ident]],
+     imports: hashmap<ast::node_id, import_state>,
+     mod_map: hashmap<ast::node_id, @indexed_mod>,
+     ext_map: hashmap<def_id, [ident]>,
      ext_cache: ext_hash,
      mutable reported: [{ident: str, sc: scope}],
      sess: session};
@@ -168,7 +168,7 @@ fn map_crate(e: &@env, c: &@ast::crate) {
                        index: index_mod(c.node.module),
                        mutable glob_imports: ~[],
                        glob_imported_names: new_str_hash[import_state]()});
-    fn index_vi(e: @env, i: &@ast::view_item, sc: &scopes, v: &vt[scopes]) {
+    fn index_vi(e: @env, i: &@ast::view_item, sc: &scopes, v: &vt<scopes>) {
         alt i.node {
           ast::view_item_import(_, ids, id) {
             e.imports.insert(id, todo(i, sc));
@@ -176,7 +176,7 @@ fn map_crate(e: &@env, c: &@ast::crate) {
           _ { }
         }
     }
-    fn index_i(e: @env, i: &@ast::item, sc: &scopes, v: &vt[scopes]) {
+    fn index_i(e: @env, i: &@ast::item, sc: &scopes, v: &vt<scopes>) {
         visit_item_with_scope(i, sc, v);
         alt i.node {
           ast::item_mod(md) {
@@ -206,7 +206,7 @@ fn map_crate(e: &@env, c: &@ast::crate) {
              with *visit::default_visitor[scopes]()};
     visit::visit_crate(*c, cons(scope_crate, @nil),
                        visit::mk_vt(v_link_glob));
-    fn link_glob(e: @env, vi: &@ast::view_item, sc: &scopes, v: &vt[scopes]) {
+    fn link_glob(e: @env, vi: &@ast::view_item, sc: &scopes, v: &vt<scopes>) {
         fn find_mod(e: @env, sc: scopes) -> @indexed_mod {
             alt sc {
               cons(scope_item(i), tl) {
@@ -265,7 +265,7 @@ fn resolve_names(e: &@env, c: &@ast::crate) {
     visit::visit_crate(*c, cons(scope_crate, @nil), visit::mk_vt(v));
     e.sess.abort_if_errors();
 
-    fn walk_expr(e: @env, exp: &@ast::expr, sc: &scopes, v: &vt[scopes]) {
+    fn walk_expr(e: @env, exp: &@ast::expr, sc: &scopes, v: &vt<scopes>) {
         visit_expr_with_scope(exp, sc, v);
         alt exp.node {
           ast::expr_path(p) {
@@ -276,7 +276,7 @@ fn resolve_names(e: &@env, c: &@ast::crate) {
           _ { }
         }
     }
-    fn walk_ty(e: @env, t: &@ast::ty, sc: &scopes, v: &vt[scopes]) {
+    fn walk_ty(e: @env, t: &@ast::ty, sc: &scopes, v: &vt<scopes>) {
         visit::visit_ty(t, sc, v);
         alt t.node {
           ast::ty_path(p, id) {
@@ -287,13 +287,13 @@ fn resolve_names(e: &@env, c: &@ast::crate) {
         }
     }
     fn walk_constr(e: @env, p: &ast::path, sp: &span, id: node_id,
-                   sc: &scopes, v: &vt[scopes]) {
+                   sc: &scopes, v: &vt<scopes>) {
         maybe_insert(e, id, lookup_path_strict(*e, sc, sp, p.node, ns_value));
     }
-    fn walk_arm(e: @env, a: &ast::arm, sc: &scopes, v: &vt[scopes]) {
+    fn walk_arm(e: @env, a: &ast::arm, sc: &scopes, v: &vt<scopes>) {
         visit_arm_with_scope(a, sc, v);
     }
-    fn walk_pat(e: &@env, pat: &@ast::pat, sc: &scopes, v: &vt[scopes]) {
+    fn walk_pat(e: &@env, pat: &@ast::pat, sc: &scopes, v: &vt<scopes>) {
         visit::visit_pat(pat, sc, v);
         alt pat.node {
           ast::pat_tag(p, _) {
@@ -312,25 +312,25 @@ fn resolve_names(e: &@env, c: &@ast::crate) {
         }
     }
 
-    fn maybe_insert(e: @env, id: node_id, def: option::t[def]) {
+    fn maybe_insert(e: @env, id: node_id, def: option::t<def>) {
         if option::is_some(def) { e.def_map.insert(id, option::get(def)); }
     }
 }
 
 
 // Visit helper functions
-fn visit_item_with_scope(i: &@ast::item, sc: &scopes, v: &vt[scopes]) {
+fn visit_item_with_scope(i: &@ast::item, sc: &scopes, v: &vt<scopes>) {
     visit::visit_item(i, cons(scope_item(i), @sc), v);
 }
 
 fn visit_native_item_with_scope(ni: &@ast::native_item, sc: &scopes,
-                                v: &vt[scopes]) {
+                                v: &vt<scopes>) {
     visit::visit_native_item(ni, cons(scope_native_item(ni), @sc), v);
 }
 
 fn visit_fn_with_scope(e: &@env, f: &ast::_fn, tp: &[ast::ty_param],
                        sp: &span, name: &fn_ident, id: node_id, sc: &scopes,
-                       v: &vt[scopes]) {
+                       v: &vt<scopes>) {
     // is this a main fn declaration?
     alt name {
       some(nm) {
@@ -353,7 +353,7 @@ fn visit_fn_with_scope(e: &@env, f: &ast::_fn, tp: &[ast::ty_param],
                     cons(scope_fn(f.decl, f.proto, tp), @sc), v);
 }
 
-fn visit_block_with_scope(b: &ast::blk, sc: &scopes, v: &vt[scopes]) {
+fn visit_block_with_scope(b: &ast::blk, sc: &scopes, v: &vt<scopes>) {
     let pos = @mutable 0u, loc = @mutable 0u;
     let block_sc = cons(scope_block(b, pos, loc), @sc);
     for stmt in b.node.stmts {
@@ -364,7 +364,7 @@ fn visit_block_with_scope(b: &ast::blk, sc: &scopes, v: &vt[scopes]) {
     visit::visit_expr_opt(b.node.expr, block_sc, v);
 }
 
-fn visit_decl_with_scope(d: &@decl, sc: &scopes, v: &vt[scopes]) {
+fn visit_decl_with_scope(d: &@decl, sc: &scopes, v: &vt<scopes>) {
     let loc_pos = alt list::car(sc) {
       scope_block(_, _, pos) { pos }
       _ { @mutable 0u }
@@ -380,11 +380,11 @@ fn visit_decl_with_scope(d: &@decl, sc: &scopes, v: &vt[scopes]) {
     }
 }
 
-fn visit_arm_with_scope(a: &ast::arm, sc: &scopes, v: &vt[scopes]) {
+fn visit_arm_with_scope(a: &ast::arm, sc: &scopes, v: &vt<scopes>) {
     visit::visit_arm(a, cons(scope_arm(a), @sc), v);
 }
 
-fn visit_expr_with_scope(x: &@ast::expr, sc: &scopes, v: &vt[scopes]) {
+fn visit_expr_with_scope(x: &@ast::expr, sc: &scopes, v: &vt<scopes>) {
     alt x.node {
       ast::expr_for(decl, coll, blk) | ast::expr_for_each(decl, coll, blk) {
         let new_sc = cons[scope](scope_loop(decl), @sc);
@@ -400,7 +400,7 @@ fn visit_expr_with_scope(x: &@ast::expr, sc: &scopes, v: &vt[scopes]) {
 }
 
 fn follow_import(e: &env, sc: &scopes, path: &[ident], sp: &span) ->
-   option::t[def] {
+   option::t<def> {
     let path_len = vec::len(path);
     let dcur = lookup_in_scope_strict(e, sc, sp, path.(0), ns_module);
     let i = 1u;
@@ -425,7 +425,7 @@ fn follow_import(e: &env, sc: &scopes, path: &[ident], sp: &span) ->
 }
 
 fn resolve_constr(e: @env, id: node_id, c: &@ast::constr, sc: &scopes,
-                  v: &vt[scopes]) {
+                  v: &vt<scopes>) {
     let new_def =
         lookup_path_strict(*e, sc, c.span, c.node.path.node, ns_value);
     if option::is_some(new_def) {
@@ -506,13 +506,13 @@ fn resolve_import(e: &env, it: &@ast::view_item, sc_in: &scopes) {
         }
     }
     fn register(e: &env, defid: def_id, sp: &span, name: &ident, sc: &scopes,
-                val: &option::t[def], typ: &option::t[def],
-                md: &option::t[def]) {
+                val: &option::t<def>, typ: &option::t<def>,
+                md: &option::t<def>) {
         if is_none(val) && is_none(typ) && is_none(md) {
             unresolved_err(e, sc, sp, name, "import");
         } else { e.imports.insert(defid.node, resolved(val, typ, md)); }
     }
-    fn remove_if_unresolved(imports: hashmap[ast::node_id, import_state],
+    fn remove_if_unresolved(imports: hashmap<ast::node_id, import_state>,
                             node_id: ast::node_id) {
 
         // If we couldn't resolve the import, don't leave it in a partially
@@ -572,7 +572,7 @@ fn mk_unresolved_msg(id: &ident, kind: &str) -> str {
 
 // Lookup helpers
 fn lookup_path_strict(e: &env, sc: &scopes, sp: &span, pth: &ast::path_,
-                      ns: namespace) -> option::t[def] {
+                      ns: namespace) -> option::t<def> {
     let n_idents = vec::len(pth.idents);
     let headns = if n_idents == 1u { ns } else { ns_module };
 
@@ -596,7 +596,7 @@ fn lookup_path_strict(e: &env, sc: &scopes, sp: &span, pth: &ast::path_,
 }
 
 fn lookup_in_scope_strict(e: &env, sc: scopes, sp: &span, name: &ident,
-                          ns: namespace) -> option::t[def] {
+                          ns: namespace) -> option::t<def> {
     alt lookup_in_scope(e, sc, sp, name, ns) {
       none. { unresolved_err(e, sc, sp, name, ns_name(ns)); ret none; }
       some(d) { ret some(d); }
@@ -629,9 +629,9 @@ fn def_is_ty_arg(d: &def) -> bool {
 }
 
 fn lookup_in_scope(e: &env, sc: scopes, sp: &span, name: &ident,
-                   ns: namespace) -> option::t[def] {
+                   ns: namespace) -> option::t<def> {
     fn in_scope(e: &env, sp: &span, name: &ident, s: &scope, ns: namespace) ->
-       option::t[def] {
+       option::t<def> {
         alt s {
           scope_crate. {
             ret lookup_in_local_mod(e, -1, sp, name, ns, inside);
@@ -728,7 +728,7 @@ fn lookup_in_scope(e: &env, sc: scopes, sp: &span, name: &ident,
 }
 
 fn lookup_in_ty_params(name: &ident, ty_params: &[ast::ty_param]) ->
-   option::t[def] {
+   option::t<def> {
     let i = 0u;
     for tp: ast::ty_param in ty_params {
         if str::eq(tp.ident, name) { ret some(ast::def_ty_arg(i,tp.kind)); }
@@ -737,7 +737,7 @@ fn lookup_in_ty_params(name: &ident, ty_params: &[ast::ty_param]) ->
     ret none[def];
 }
 
-fn lookup_in_pat(name: &ident, pat: &@ast::pat) -> option::t[def_id] {
+fn lookup_in_pat(name: &ident, pat: &@ast::pat) -> option::t<def_id> {
     let found = none;
     for each bound in ast::pat_bindings(pat) {
         let p_name = alt bound.node { ast::pat_bind(n) { n } };
@@ -750,7 +750,7 @@ fn lookup_in_pat(name: &ident, pat: &@ast::pat) -> option::t[def_id] {
 
 fn lookup_in_fn(name: &ident, decl: &ast::fn_decl,
                 ty_params: &[ast::ty_param], ns: namespace) ->
-   option::t[def] {
+   option::t<def> {
     alt ns {
       ns_value. {
         for a: ast::arg in decl.inputs {
@@ -766,7 +766,7 @@ fn lookup_in_fn(name: &ident, decl: &ast::fn_decl,
 }
 
 fn lookup_in_obj(name: &ident, ob: &ast::_obj, ty_params: &[ast::ty_param],
-                 ns: namespace) -> option::t[def] {
+                 ns: namespace) -> option::t<def> {
     alt ns {
       ns_value. {
         for f: ast::obj_field in ob.fields {
@@ -782,7 +782,7 @@ fn lookup_in_obj(name: &ident, ob: &ast::_obj, ty_params: &[ast::ty_param],
 }
 
 fn lookup_in_block(name: &ident, b: &ast::blk_, pos: uint, loc_pos: uint,
-                   ns: namespace) -> option::t[def] {
+                   ns: namespace) -> option::t<def> {
     let i = vec::len(b.stmts);
     while i > 0u {
         i -= 1u;
@@ -838,7 +838,7 @@ fn lookup_in_block(name: &ident, b: &ast::blk_, pos: uint, loc_pos: uint,
     ret none[def];
 }
 
-fn found_def_item(i: &@ast::item, ns: namespace) -> option::t[def] {
+fn found_def_item(i: &@ast::item, ns: namespace) -> option::t<def> {
     alt i.node {
       ast::item_const(_, _) {
         if ns == ns_value { ret some(ast::def_const(local_def(i.id))); }
@@ -884,7 +884,7 @@ fn found_def_item(i: &@ast::item, ns: namespace) -> option::t[def] {
 }
 
 fn lookup_in_mod_strict(e: &env, sc: &scopes, m: def, sp: &span, name: &ident,
-                        ns: namespace, dr: dir) -> option::t[def] {
+                        ns: namespace, dr: dir) -> option::t<def> {
     alt lookup_in_mod(e, m, sp, name, ns, dr) {
       none. { unresolved_err(e, sc, sp, name, ns_name(ns)); ret none; }
       some(d) { ret some(d); }
@@ -892,7 +892,7 @@ fn lookup_in_mod_strict(e: &env, sc: &scopes, m: def, sp: &span, name: &ident,
 }
 
 fn lookup_in_mod(e: &env, m: &def, sp: &span, name: &ident, ns: namespace,
-                 dr: dir) -> option::t[def] {
+                 dr: dir) -> option::t<def> {
     let defid = ast::def_id_of_def(m);
     if defid.crate != ast::local_crate {
         // examining a module in an external crate
@@ -919,7 +919,7 @@ fn lookup_in_mod(e: &env, m: &def, sp: &span, name: &ident, ns: namespace,
 }
 
 fn found_view_item(e: &env, vi: @ast::view_item, ns: namespace) ->
-   option::t[def] {
+   option::t<def> {
     alt vi.node {
       ast::view_item_use(_, _, id) {
         let cnum = cstore::get_use_stmt_cnum(e.cstore, id);
@@ -935,7 +935,7 @@ fn found_view_item(e: &env, vi: @ast::view_item, ns: namespace) ->
     }
 }
 
-fn lookup_import(e: &env, defid: def_id, ns: namespace) -> option::t[def] {
+fn lookup_import(e: &env, defid: def_id, ns: namespace) -> option::t<def> {
     alt e.imports.get(defid.node) {
       todo(item, sc) {
         resolve_import(e, item, sc);
@@ -949,12 +949,12 @@ fn lookup_import(e: &env, defid: def_id, ns: namespace) -> option::t[def] {
 }
 
 fn lookup_in_local_native_mod(e: &env, node_id: node_id, sp: &span,
-                              id: &ident, ns: namespace) -> option::t[def] {
+                              id: &ident, ns: namespace) -> option::t<def> {
     ret lookup_in_local_mod(e, node_id, sp, id, ns, inside);
 }
 
 fn lookup_in_local_mod(e: &env, node_id: node_id, sp: &span, id: &ident,
-                       ns: namespace, dr: dir) -> option::t[def] {
+                       ns: namespace, dr: dir) -> option::t<def> {
     let info = e.mod_map.get(node_id);
     if dr == outside && !ast::is_exported(id, option::get(info.m)) {
         // if we're in a native mod, then dr==inside, so info.m is some _mod
@@ -984,13 +984,13 @@ fn lookup_in_local_mod(e: &env, node_id: node_id, sp: &span, id: &ident,
 }
 
 fn lookup_glob_in_mod(e: &env, info: @indexed_mod, sp: &span, id: &ident,
-                      wanted_ns: namespace, dr: dir) -> option::t[def] {
+                      wanted_ns: namespace, dr: dir) -> option::t<def> {
     fn per_ns(e: &env, info: @indexed_mod, sp: &span, id: &ident,
-              ns: namespace, dr: dir) -> option::t[def] {
+              ns: namespace, dr: dir) -> option::t<def> {
 
         fn lookup_in_mod_(e: &env, def: &glob_imp_def, sp: &span,
                           name: &ident, ns: namespace, dr: dir) ->
-           option::t[glob_imp_def] {
+           option::t<glob_imp_def> {
             alt lookup_in_mod(e, def.def, sp, name, ns, dr) {
               option::some(d) { option::some({def: d, item: def.item}) }
               option::none. { option::none }
@@ -1041,7 +1041,7 @@ fn lookup_glob_in_mod(e: &env, info: @indexed_mod, sp: &span, id: &ident,
 }
 
 fn lookup_in_mie(e: &env, mie: &mod_index_entry, ns: namespace) ->
-   option::t[def] {
+   option::t<def> {
     alt mie {
       mie_view_item(view_item) { ret found_view_item(e, view_item, ns); }
       mie_item(item) { ret found_def_item(item, ns); }
@@ -1077,7 +1077,7 @@ fn lookup_in_mie(e: &env, mie: &mod_index_entry, ns: namespace) ->
 
 
 // Module indexing
-fn add_to_index(index: &hashmap[ident, list[mod_index_entry]], id: &ident,
+fn add_to_index(index: &hashmap<ident, list<mod_index_entry>>, id: &ident,
                 ent: &mod_index_entry) {
     alt index.find(id) {
       none. { index.insert(id, cons(ent, @nil[mod_index_entry])); }
@@ -1086,7 +1086,7 @@ fn add_to_index(index: &hashmap[ident, list[mod_index_entry]], id: &ident,
 }
 
 fn index_mod(md: &ast::_mod) -> mod_index {
-    let index = new_str_hash[list[mod_index_entry]]();
+    let index = new_str_hash[list<mod_index_entry>]();
     for it: @ast::view_item in md.view_items {
         alt it.node {
           ast::view_item_import(ident, _, _) | ast::view_item_use(ident, _, _)
@@ -1121,7 +1121,7 @@ fn index_mod(md: &ast::_mod) -> mod_index {
 }
 
 fn index_nmod(md: &ast::native_mod) -> mod_index {
-    let index = new_str_hash[list[mod_index_entry]]();
+    let index = new_str_hash[list<mod_index_entry>]();
     for it: @ast::view_item in md.view_items {
         alt it.node {
           ast::view_item_use(ident, _, _) | ast::view_item_import(ident, _, _)
@@ -1158,7 +1158,7 @@ fn ns_for_def(d: def) -> namespace {
 }
 
 fn lookup_external(e: &env, cnum: int, ids: &[ident], ns: namespace) ->
-   option::t[def] {
+   option::t<def> {
     for d: def in csearch::lookup_defs(e.sess.get_cstore(), cnum, ids) {
         e.ext_map.insert(ast::def_id_of_def(d), ids);
         if ns == ns_for_def(d) { ret some(d); }
@@ -1173,7 +1173,7 @@ fn check_for_collisions(e: &@env, c: &ast::crate) {
     // name for multiple entities in the same namespace.
     for each m: @{key: ast::node_id, val: @indexed_mod}
         in e.mod_map.items() {
-        for each name: @{key: ident, val: list[mod_index_entry]}
+        for each name: @{key: ident, val: list<mod_index_entry>}
             in m.val.index.items() {
             check_mod_name(*e, name.key, name.val);
         }
@@ -1188,7 +1188,7 @@ fn check_for_collisions(e: &@env, c: &ast::crate) {
     visit::visit_crate(c, (), visit::mk_vt(v));
 }
 
-fn check_mod_name(e: &env, name: &ident, entries: list[mod_index_entry]) {
+fn check_mod_name(e: &env, name: &ident, entries: list<mod_index_entry>) {
     let saw_mod = false;
     let saw_type = false;
     let saw_value = false;
@@ -1229,7 +1229,7 @@ fn mie_span(mie: &mod_index_entry) -> span {
         };
 }
 
-fn check_item(e: &@env, i: &@ast::item, x: &(), v: &vt[()]) {
+fn check_item(e: &@env, i: &@ast::item, x: &(), v: &vt<()>) {
     fn typaram_names(tps: &[ast::ty_param]) -> [ident] {
         let x: [ast::ident] = ~[];
         for tp: ast::ty_param in tps { x += ~[tp.ident] }
@@ -1266,7 +1266,7 @@ fn check_pat(ch: checker, p: &@ast::pat) {
     }
 }
 
-fn check_arm(e: &@env, a: &ast::arm, x: &(), v: &vt[()]) {
+fn check_arm(e: &@env, a: &ast::arm, x: &(), v: &vt<()>) {
     visit::visit_arm(a, x, v);
     let ch0 = checker(*e, "binding");
     check_pat(ch0, a.pats.(0));
@@ -1296,7 +1296,7 @@ fn check_arm(e: &@env, a: &ast::arm, x: &(), v: &vt[()]) {
     }
 }
 
-fn check_block(e: &@env, b: &ast::blk, x: &(), v: &vt[()]) {
+fn check_block(e: &@env, b: &ast::blk, x: &(), v: &vt<()>) {
     visit::visit_block(b, x, v);
     let values = checker(*e, "value");
     let types = checker(*e, "type");
@@ -1349,7 +1349,7 @@ fn check_fn(e: &env, sp: &span, f: &ast::_fn) {
     ensure_unique(e, sp, f.decl.inputs, arg_name, "argument");
 }
 
-fn check_expr(e: &@env, ex: &@ast::expr, x: &(), v: &vt[()]) {
+fn check_expr(e: &@env, ex: &@ast::expr, x: &(), v: &vt<()>) {
     alt ex.node {
       ast::expr_rec(fields, _) {
         fn field_name(f: &ast::field) -> ident { ret f.node.ident; }
@@ -1360,7 +1360,7 @@ fn check_expr(e: &@env, ex: &@ast::expr, x: &(), v: &vt[()]) {
     visit::visit_expr(ex, x, v);
 }
 
-fn check_ty(e: &@env, ty: &@ast::ty, x: &(), v: &vt[()]) {
+fn check_ty(e: &@env, ty: &@ast::ty, x: &(), v: &vt<()>) {
     alt ty.node {
       ast::ty_rec(fields) {
         fn field_name(f: &ast::ty_field) -> ident { ret f.node.ident; }
diff --git a/src/comp/middle/shape.rs b/src/comp/middle/shape.rs
index 30b3e6fc05d..7927af71fe3 100644
--- a/src/comp/middle/shape.rs
+++ b/src/comp/middle/shape.rs
@@ -39,9 +39,9 @@ type res_info = { did: ast::def_id, t: ty::t };
 type ctxt = {
     mutable next_tag_id: u16,
     pad: u16,
-    tag_id_to_index: hashmap[ast::def_id,u16],
+    tag_id_to_index: hashmap<ast::def_id,u16>,
     mutable tag_order: [ast::def_id],
-    resources: interner::interner[res_info],
+    resources: interner::interner<res_info>,
     llshapetablesty: TypeRef,
     llshapetables: ValueRef
 };
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index e73d91ab203..3beef789129 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -361,7 +361,7 @@ fn decl_glue(llmod: ModuleRef, cx: &crate_ctxt, s: &str) -> ValueRef {
     ret decl_cdecl_fn(llmod, s, T_fn(~[T_taskptr(cx)], T_void()));
 }
 
-fn get_extern_fn(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
+fn get_extern_fn(externs: &hashmap<str, ValueRef>, llmod: ModuleRef,
                  name: &str, cc: uint, ty: TypeRef) -> ValueRef {
     if externs.contains_key(name) { ret externs.get(name); }
     let f = decl_fn(llmod, name, cc, ty);
@@ -369,7 +369,7 @@ fn get_extern_fn(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
     ret f;
 }
 
-fn get_extern_const(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
+fn get_extern_const(externs: &hashmap<str, ValueRef>, llmod: ModuleRef,
                     name: &str, ty: TypeRef) -> ValueRef {
     if externs.contains_key(name) { ret externs.get(name); }
     let c = llvm::LLVMAddGlobal(llmod, ty, str::buf(name));
@@ -377,7 +377,7 @@ fn get_extern_const(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
     ret c;
 }
 
-fn get_simple_extern_fn(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
+fn get_simple_extern_fn(externs: &hashmap<str, ValueRef>, llmod: ModuleRef,
                         name: &str, n_args: int) -> ValueRef {
     let inputs = std::vec::init_elt[TypeRef](T_int(), n_args as uint);
     let output = T_int();
@@ -386,7 +386,7 @@ fn get_simple_extern_fn(externs: &hashmap[str, ValueRef], llmod: ModuleRef,
 }
 
 fn trans_native_call(b: &builder, glues: @glue_fns, lltaskptr: ValueRef,
-                     externs: &hashmap[str, ValueRef], tn: &type_names,
+                     externs: &hashmap<str, ValueRef>, tn: &type_names,
                      llmod: ModuleRef, name: &str, pass_task: bool,
                      args: &[ValueRef]) -> ValueRef {
     let n: int = std::vec::len[ValueRef](args) as int;
@@ -939,7 +939,7 @@ fn trans_stack_local_derived_tydesc(cx: &@block_ctxt, llsz: ValueRef,
 }
 
 fn get_derived_tydesc(cx: &@block_ctxt, t: &ty::t, escapes: bool,
-                      static_ti: &mutable option::t[@tydesc_info]) -> result {
+                      static_ti: &mutable option::t<@tydesc_info>) -> result {
     alt cx.fcx.derived_tydescs.find(t) {
       some(info) {
 
@@ -1007,7 +1007,7 @@ fn get_derived_tydesc(cx: &@block_ctxt, t: &ty::t, escapes: bool,
 }
 
 fn get_tydesc(cx: &@block_ctxt, orig_t: &ty::t, escapes: bool,
-              static_ti: &mutable option::t[@tydesc_info]) -> result {
+              static_ti: &mutable option::t<@tydesc_info>) -> result {
 
     let t = ty::strip_cname(bcx_tcx(cx), orig_t);
 
@@ -1470,7 +1470,7 @@ fn trans_res_drop(cx: @block_ctxt, rs: ValueRef, did: &ast::def_id,
                                    ~[C_int(0), C_int(abi::fn_field_box)]));
     let args = ~[cx.fcx.llretptr, cx.fcx.lltaskptr, dtor_env];
     for tp: ty::t in tps {
-        let ti: option::t[@tydesc_info] = none;
+        let ti: option::t<@tydesc_info> = none;
         let td = get_tydesc(cx, tp, false, ti);
         args += ~[td.val];
         cx = td.bcx;
@@ -1983,7 +1983,7 @@ fn iter_sequence(cx: @block_ctxt, v: ValueRef, t: &ty::t, f: &val_and_ty_fn)
 }
 
 fn lazily_emit_all_tydesc_glue(cx: &@block_ctxt,
-                               static_ti: &option::t[@tydesc_info]) {
+                               static_ti: &option::t<@tydesc_info>) {
     lazily_emit_tydesc_glue(cx, abi::tydesc_field_copy_glue, static_ti);
     lazily_emit_tydesc_glue(cx, abi::tydesc_field_drop_glue, static_ti);
     lazily_emit_tydesc_glue(cx, abi::tydesc_field_free_glue, static_ti);
@@ -1992,13 +1992,13 @@ fn lazily_emit_all_tydesc_glue(cx: &@block_ctxt,
 
 fn lazily_emit_all_generic_info_tydesc_glues(cx: &@block_ctxt,
                                              gi: &generic_info) {
-    for ti: option::t[@tydesc_info] in gi.static_tis {
+    for ti: option::t<@tydesc_info> in gi.static_tis {
         lazily_emit_all_tydesc_glue(cx, ti);
     }
 }
 
 fn lazily_emit_tydesc_glue(cx: &@block_ctxt, field: int,
-                           static_ti: &option::t[@tydesc_info]) {
+                           static_ti: &option::t<@tydesc_info>) {
     alt static_ti {
       none. { }
       some(ti) {
@@ -2073,7 +2073,7 @@ fn lazily_emit_tydesc_glue(cx: &@block_ctxt, field: int,
 }
 
 fn call_tydesc_glue_full(cx: &@block_ctxt, v: ValueRef, tydesc: ValueRef,
-                         field: int, static_ti: &option::t[@tydesc_info]) {
+                         field: int, static_ti: &option::t<@tydesc_info>) {
     lazily_emit_tydesc_glue(cx, field, static_ti);
 
     let static_glue_fn = none;
@@ -2114,7 +2114,7 @@ fn call_tydesc_glue_full(cx: &@block_ctxt, v: ValueRef, tydesc: ValueRef,
 
 fn call_tydesc_glue(cx: &@block_ctxt, v: ValueRef, t: &ty::t, field: int) ->
    result {
-    let ti: option::t[@tydesc_info] = none[@tydesc_info];
+    let ti: option::t<@tydesc_info> = none[@tydesc_info];
     let td = get_tydesc(cx, t, false, ti);
     call_tydesc_glue_full(td.bcx, spill_if_immediate(td.bcx, v, t), td.val,
                           field, ti);
@@ -3376,7 +3376,7 @@ fn join_branches(parent_cx: &@block_ctxt, ins: &[result]) -> @block_ctxt {
 tag out_method { return; save_in(ValueRef); }
 
 fn trans_if(cx: &@block_ctxt, cond: &@ast::expr, thn: &ast::blk,
-            els: &option::t[@ast::expr], id: ast::node_id,
+            els: &option::t<@ast::expr>, id: ast::node_id,
             output: &out_method) -> result {
     let cond_res = trans_expr(cx, cond);
 
@@ -3778,15 +3778,15 @@ fn trans_do_while(cx: &@block_ctxt, body: &ast::blk, cond: &@ast::expr) ->
 
 type generic_info =
     {item_type: ty::t,
-     static_tis: [option::t[@tydesc_info]],
+     static_tis: [option::t<@tydesc_info>],
      tydescs: [ValueRef]};
 
 type lval_result =
     {res: result,
      is_mem: bool,
-     generic: option::t[generic_info],
-     llobj: option::t[ValueRef],
-     method_ty: option::t[ty::t]};
+     generic: option::t<generic_info>,
+     llobj: option::t<ValueRef>,
+     method_ty: option::t<ty::t>};
 
 fn lval_mem(cx: &@block_ctxt, val: ValueRef) -> lval_result {
     ret {res: rslt(cx, val),
@@ -3827,7 +3827,7 @@ fn lval_generic_fn(cx: &@block_ctxt, tpt: &ty::ty_param_kinds_and_ty,
     if std::vec::len[ty::t](tys) != 0u {
         let bcx = lv.res.bcx;
         let tydescs: [ValueRef] = ~[];
-        let tis: [option::t[@tydesc_info]] = ~[];
+        let tis: [option::t<@tydesc_info>] = ~[];
         for t: ty::t in tys {
             // TODO: Doesn't always escape.
 
@@ -4213,10 +4213,10 @@ fn trans_cast(cx: &@block_ctxt, e: &@ast::expr, id: ast::node_id) -> result {
 }
 
 fn trans_bind_thunk(cx: &@local_ctxt, sp: &span, incoming_fty: &ty::t,
-                    outgoing_fty: &ty::t, args: &[option::t[@ast::expr]],
+                    outgoing_fty: &ty::t, args: &[option::t<@ast::expr>],
                     env_ty: &ty::t, bound_tys: &[ty::t],
                     ty_param_count: uint,
-                    target_fn: &option::t[ValueRef]) ->
+                    target_fn: &option::t<ValueRef>) ->
     {val: ValueRef, ty: TypeRef} {
 
     // Here we're not necessarily constructing a thunk in the sense of
@@ -4330,7 +4330,7 @@ fn trans_bind_thunk(cx: &@local_ctxt, sp: &span, incoming_fty: &ty::t,
     let outgoing_arg_index: uint = 0u;
     let llout_arg_tys: [TypeRef] =
         type_of_explicit_args(cx.ccx, sp, outgoing_args);
-    for arg: option::t[@ast::expr] in args {
+    for arg: option::t<@ast::expr> in args {
         let out_arg = outgoing_args.(outgoing_arg_index);
         let llout_arg_ty = llout_arg_tys.(outgoing_arg_index);
         let is_val = out_arg.mode == ty::mo_val;
@@ -4405,16 +4405,16 @@ fn trans_bind_thunk(cx: &@local_ctxt, sp: &span, incoming_fty: &ty::t,
 }
 
 fn trans_bind(cx: &@block_ctxt, f: &@ast::expr,
-              args: &[option::t[@ast::expr]], id: ast::node_id) -> result {
+              args: &[option::t<@ast::expr>], id: ast::node_id) -> result {
     let f_res = trans_lval_gen(cx, f);
     ret trans_bind_1(cx, f, f_res, args, id);
 }
 
 fn trans_bind_1(cx: &@block_ctxt, f: &@ast::expr, f_res: &lval_result,
-                args: &[option::t[@ast::expr]], id: ast::node_id) ->
+                args: &[option::t<@ast::expr>], id: ast::node_id) ->
    result {
     let bound: [@ast::expr] = ~[];
-    for argopt: option::t[@ast::expr] in args {
+    for argopt: option::t<@ast::expr> in args {
         alt argopt { none. { } some(e) { bound += ~[e]; } }
     }
 
@@ -4561,7 +4561,7 @@ fn trans_arg_expr(cx: &@block_ctxt, arg: &ty::arg,
 //  - new_fn_ctxt
 //  - trans_args
 fn trans_args(cx: &@block_ctxt, llenv: ValueRef,
-              gen: &option::t[generic_info], lliterbody: &option::t[ValueRef],
+              gen: &option::t<generic_info>, lliterbody: &option::t<ValueRef>,
               es: &[@ast::expr], fn_ty: &ty::t) ->
    {bcx: @block_ctxt,
     args: [ValueRef],
@@ -4645,7 +4645,7 @@ fn trans_args(cx: &@block_ctxt, llenv: ValueRef,
 }
 
 fn trans_call(cx: &@block_ctxt, f: &@ast::expr,
-              lliterbody: &option::t[ValueRef], args: &[@ast::expr],
+              lliterbody: &option::t<ValueRef>, args: &[@ast::expr],
               id: ast::node_id) -> result {
     // NB: 'f' isn't necessarily a function; it might be an entire self-call
     // expression because of the hack that allows us to process self-calls
@@ -4910,7 +4910,7 @@ fn trans_ivec(bcx: @block_ctxt, args: &[@ast::expr], id: ast::node_id) ->
 }
 
 fn trans_rec(cx: &@block_ctxt, fields: &[ast::field],
-             base: &option::t[@ast::expr], id: ast::node_id) -> result {
+             base: &option::t<@ast::expr>, id: ast::node_id) -> result {
     let bcx = cx;
     let t = node_id_type(bcx_ccx(bcx), id);
     let rec_res = alloc_ty(bcx, t);
@@ -5263,8 +5263,8 @@ fn trans_check_expr(cx: &@block_ctxt, e: &@ast::expr, s: &str) -> result {
     ret rslt(next_cx, C_nil());
 }
 
-fn trans_fail_expr(cx: &@block_ctxt, sp_opt: &option::t[span],
-                   fail_expr: &option::t[@ast::expr]) -> result {
+fn trans_fail_expr(cx: &@block_ctxt, sp_opt: &option::t<span>,
+                   fail_expr: &option::t<@ast::expr>) -> result {
     let bcx = cx;
     alt fail_expr {
       some(expr) {
@@ -5290,13 +5290,13 @@ fn trans_fail_expr(cx: &@block_ctxt, sp_opt: &option::t[span],
     }
 }
 
-fn trans_fail(cx: &@block_ctxt, sp_opt: &option::t[span], fail_str: &str) ->
+fn trans_fail(cx: &@block_ctxt, sp_opt: &option::t<span>, fail_str: &str) ->
    result {
     let V_fail_str = C_cstr(bcx_ccx(cx), fail_str);
     ret trans_fail_value(cx, sp_opt, V_fail_str);
 }
 
-fn trans_fail_value(cx: &@block_ctxt, sp_opt: &option::t[span],
+fn trans_fail_value(cx: &@block_ctxt, sp_opt: &option::t<span>,
                     V_fail_str: &ValueRef) -> result {
     let V_filename;
     let V_line;
@@ -5316,7 +5316,7 @@ fn trans_fail_value(cx: &@block_ctxt, sp_opt: &option::t[span],
     ret rslt(cx, C_nil());
 }
 
-fn trans_put(cx: &@block_ctxt, e: &option::t[@ast::expr]) -> result {
+fn trans_put(cx: &@block_ctxt, e: &option::t<@ast::expr>) -> result {
     let llcallee = C_nil();
     let llenv = C_nil();
     alt { cx.fcx.lliterbody } {
@@ -5415,7 +5415,7 @@ fn trans_cont(sp: &span, cx: &@block_ctxt) -> result {
     ret trans_break_cont(sp, cx, false);
 }
 
-fn trans_ret(cx: &@block_ctxt, e: &option::t[@ast::expr]) -> result {
+fn trans_ret(cx: &@block_ctxt, e: &option::t<@ast::expr>) -> result {
     let bcx = cx;
     alt e {
       some(x) {
@@ -5552,7 +5552,7 @@ fn new_scope_block_ctxt(bcx: &@block_ctxt, n: &str) -> @block_ctxt {
 }
 
 fn new_loop_scope_block_ctxt(bcx: &@block_ctxt,
-                             _cont: &option::t[@block_ctxt],
+                             _cont: &option::t<@block_ctxt>,
                              _break: &@block_ctxt, n: &str) -> @block_ctxt {
     ret new_block_ctxt(bcx.fcx, parent_some(bcx),
                        LOOP_SCOPE_BLOCK(_cont, _break), n);
@@ -5788,11 +5788,11 @@ fn new_fn_ctxt_w_id(cx: @local_ctxt, sp: &span, llfndecl: ValueRef,
     let llretptr: ValueRef = llvm::LLVMGetParam(llfndecl, 0u);
     let lltaskptr: ValueRef = llvm::LLVMGetParam(llfndecl, 1u);
     let llenv: ValueRef = llvm::LLVMGetParam(llfndecl, 2u);
-    let llargs: hashmap[ast::node_id, ValueRef] = new_int_hash[ValueRef]();
-    let llobjfields: hashmap[ast::node_id, ValueRef] =
+    let llargs: hashmap<ast::node_id, ValueRef> = new_int_hash[ValueRef]();
+    let llobjfields: hashmap<ast::node_id, ValueRef> =
         new_int_hash[ValueRef]();
-    let lllocals: hashmap[ast::node_id, ValueRef] = new_int_hash[ValueRef]();
-    let llupvars: hashmap[ast::node_id, ValueRef] = new_int_hash[ValueRef]();
+    let lllocals: hashmap<ast::node_id, ValueRef> = new_int_hash[ValueRef]();
+    let llupvars: hashmap<ast::node_id, ValueRef> = new_int_hash[ValueRef]();
     let derived_tydescs =
         map::mk_hashmap[ty::t, derived_tydesc_info](ty::hash_ty, ty::eq_ty);
     let llbbs = mk_standard_basic_blocks(llfndecl);
@@ -5838,7 +5838,7 @@ fn new_fn_ctxt(cx: @local_ctxt, sp: &span, llfndecl: ValueRef) -> @fn_ctxt {
 // the function's fn_ctxt).  create_llargs_for_fn_args populates the llargs
 // field of the fn_ctxt with
 fn create_llargs_for_fn_args(cx: &@fn_ctxt, proto: ast::proto,
-                             ty_self: option::t[ty::t], ret_ty: ty::t,
+                             ty_self: option::t<ty::t>, ret_ty: ty::t,
                              args: &[ast::arg], ty_params: &[ast::ty_param]) {
     // Skip the implicit arguments 0, 1, and 2.  TODO: Pull out 3u and define
     // it as a constant, since we're using it in several places in trans this
@@ -5997,11 +5997,11 @@ fn finish_fn(fcx: &@fn_ctxt, lltop: BasicBlockRef) {
 // trans_closure: Builds an LLVM function out of a source function.
 // If the function closes over its environment a closure will be
 // returned.
-fn trans_closure(bcx_maybe: &option::t[@block_ctxt],
-                 llfnty: &option::t[TypeRef], cx: @local_ctxt, sp: &span,
-                 f: &ast::_fn, llfndecl: ValueRef, ty_self: option::t[ty::t],
+fn trans_closure(bcx_maybe: &option::t<@block_ctxt>,
+                 llfnty: &option::t<TypeRef>, cx: @local_ctxt, sp: &span,
+                 f: &ast::_fn, llfndecl: ValueRef, ty_self: option::t<ty::t>,
                  ty_params: &[ast::ty_param], id: ast::node_id)
-    -> option::t[{fn_pair: ValueRef, bcx: @block_ctxt}] {
+    -> option::t<{fn_pair: ValueRef, bcx: @block_ctxt}> {
     set_uwtable(llfndecl);
 
     // Set up arguments to the function.
@@ -6068,7 +6068,7 @@ fn trans_closure(bcx_maybe: &option::t[@block_ctxt],
 }
 
 fn trans_fn_inner(cx: @local_ctxt, sp: &span, f: &ast::_fn,
-                  llfndecl: ValueRef, ty_self: option::t[ty::t],
+                  llfndecl: ValueRef, ty_self: option::t<ty::t>,
                   ty_params: &[ast::ty_param], id: ast::node_id) {
     trans_closure(none, none, cx, sp, f, llfndecl, ty_self, ty_params, id);
 }
@@ -6077,7 +6077,7 @@ fn trans_fn_inner(cx: @local_ctxt, sp: &span, f: &ast::_fn,
 // trans_fn: creates an LLVM function corresponding to a source language
 // function.
 fn trans_fn(cx: @local_ctxt, sp: &span, f: &ast::_fn, llfndecl: ValueRef,
-            ty_self: option::t[ty::t], ty_params: &[ast::ty_param],
+            ty_self: option::t<ty::t>, ty_params: &[ast::ty_param],
             id: ast::node_id) {
     if !cx.ccx.sess.get_opts().stats {
         trans_fn_inner(cx, sp, f, llfndecl, ty_self, ty_params, id);
@@ -6747,7 +6747,7 @@ fn decl_native_fn_and_pair(ccx: &@crate_ctxt, sp: &span, path: &[str],
 fn item_path(item: &@ast::item) -> [str] { ret ~[item.ident]; }
 
 fn collect_native_item(ccx: @crate_ctxt, i: &@ast::native_item, pt: &[str],
-                       v: &vt[[str]]) {
+                       v: &vt<[str]>) {
     alt i.node {
       ast::native_item_fn(_, _, _) {
         if !ccx.obj_methods.contains_key(i.id) {
@@ -6759,7 +6759,7 @@ fn collect_native_item(ccx: @crate_ctxt, i: &@ast::native_item, pt: &[str],
 }
 
 fn collect_item_1(ccx: @crate_ctxt, i: &@ast::item, pt: &[str],
-                  v: &vt[[str]]) {
+                  v: &vt<[str]>) {
     visit::visit_item(i, pt + item_path(i), v);
     alt i.node {
       ast::item_const(_, _) {
@@ -6778,7 +6778,7 @@ fn collect_item_1(ccx: @crate_ctxt, i: &@ast::item, pt: &[str],
 }
 
 fn collect_item_2(ccx: &@crate_ctxt, i: &@ast::item, pt: &[str],
-                  v: &vt[[str]]) {
+                  v: &vt<[str]>) {
     let new_pt = pt + item_path(i);
     visit::visit_item(i, new_pt, v);
     alt i.node {
@@ -6818,7 +6818,7 @@ fn collect_items(ccx: &@crate_ctxt, crate: @ast::crate) {
 }
 
 fn collect_tag_ctor(ccx: @crate_ctxt, i: &@ast::item, pt: &[str],
-                    v: &vt[[str]]) {
+                    v: &vt<[str]>) {
     let new_pt = pt + item_path(i);
     visit::visit_item(i, new_pt, v);
     alt i.node {
@@ -6844,7 +6844,7 @@ fn collect_tag_ctors(ccx: &@crate_ctxt, crate: @ast::crate) {
 
 // The constant translation pass.
 fn trans_constant(ccx: @crate_ctxt, it: &@ast::item, pt: &[str],
-                  v: &vt[[str]]) {
+                  v: &vt<[str]>) {
     let new_pt = pt + item_path(it);
     visit::visit_item(it, new_pt, v);
     alt it.node {
@@ -6891,7 +6891,7 @@ fn i2p(v: ValueRef, t: TypeRef) -> ValueRef {
     ret llvm::LLVMConstIntToPtr(v, t);
 }
 
-fn declare_intrinsics(llmod: ModuleRef) -> hashmap[str, ValueRef] {
+fn declare_intrinsics(llmod: ModuleRef) -> hashmap<str, ValueRef> {
     let T_memmove32_args: [TypeRef] =
         ~[T_ptr(T_i8()), T_ptr(T_i8()), T_i32(), T_i32(), T_i1()];
     let T_memmove64_args: [TypeRef] =
diff --git a/src/comp/middle/trans_alt.rs b/src/comp/middle/trans_alt.rs
index 0f97432b361..78200726b2d 100644
--- a/src/comp/middle/trans_alt.rs
+++ b/src/comp/middle/trans_alt.rs
@@ -77,7 +77,7 @@ fn bind_for_pat(p: &@ast::pat, br: &match_branch, val: ValueRef) {
     }
 }
 
-type enter_pat = fn(&@ast::pat) -> option::t[[@ast::pat]] ;
+type enter_pat = fn(&@ast::pat) -> option::t<[@ast::pat]> ;
 
 fn enter_match(m: &match, col: uint, val: ValueRef, e: &enter_pat) -> match {
     let result = ~[];
@@ -98,7 +98,7 @@ fn enter_match(m: &match, col: uint, val: ValueRef, e: &enter_pat) -> match {
 }
 
 fn enter_default(m: &match, col: uint, val: ValueRef) -> match {
-    fn e(p: &@ast::pat) -> option::t[[@ast::pat]] {
+    fn e(p: &@ast::pat) -> option::t<[@ast::pat]> {
         ret if matches_always(p) { some(~[]) } else { none };
     }
     ret enter_match(m, col, val, e);
@@ -108,7 +108,7 @@ fn enter_opt(ccx: &@crate_ctxt, m: &match, opt: &opt, col: uint,
              tag_size: uint, val: ValueRef) -> match {
     let dummy = @{id: 0, node: ast::pat_wild, span: dummy_sp()};
     fn e(ccx: &@crate_ctxt, dummy: &@ast::pat, opt: &opt, size: uint,
-         p: &@ast::pat) -> option::t[[@ast::pat]] {
+         p: &@ast::pat) -> option::t<[@ast::pat]> {
         alt p.node {
           ast::pat_tag(ctor, subpats) {
             ret if opt_eq(variant_opt(ccx, p.id), opt) {
@@ -128,7 +128,7 @@ fn enter_rec(m: &match, col: uint, fields: &[ast::ident], val: ValueRef) ->
    match {
     let dummy = @{id: 0, node: ast::pat_wild, span: dummy_sp()};
     fn e(dummy: &@ast::pat, fields: &[ast::ident], p: &@ast::pat) ->
-       option::t[[@ast::pat]] {
+       option::t<[@ast::pat]> {
         alt p.node {
           ast::pat_rec(fpats, _) {
             let pats = ~[];
@@ -150,7 +150,7 @@ fn enter_rec(m: &match, col: uint, fields: &[ast::ident], val: ValueRef) ->
 fn enter_tup(m: &match, col: uint, val: ValueRef, n_elts: uint) -> match {
     let dummy = @{id: 0, node: ast::pat_wild, span: dummy_sp()};
     fn e(dummy: &@ast::pat, n_elts: uint, p: &@ast::pat)
-        -> option::t[[@ast::pat]] {
+        -> option::t<[@ast::pat]> {
         alt p.node {
           ast::pat_tup(elts) { ret some(elts); }
           _ { ret some(vec::init_elt(dummy, n_elts)); }
@@ -161,7 +161,7 @@ fn enter_tup(m: &match, col: uint, val: ValueRef, n_elts: uint) -> match {
 
 fn enter_box(m: &match, col: uint, val: ValueRef) -> match {
     let dummy = @{id: 0, node: ast::pat_wild, span: dummy_sp()};
-    fn e(dummy: &@ast::pat, p: &@ast::pat) -> option::t[[@ast::pat]] {
+    fn e(dummy: &@ast::pat, p: &@ast::pat) -> option::t<[@ast::pat]> {
         alt p.node {
           ast::pat_box(sub) { ret some(~[sub]); }
           _ { ret some(~[dummy]); }
@@ -431,7 +431,7 @@ fn compile_submatch(bcx: @block_ctxt, m: &match, vals: [ValueRef],
 // Returns false for unreachable blocks
 fn make_phi_bindings(bcx: &@block_ctxt, map: &[exit_node],
                      ids: &ast::pat_id_map) -> bool {
-    fn assoc(key: str, list: &bind_map) -> option::t[ValueRef] {
+    fn assoc(key: str, list: &bind_map) -> option::t<ValueRef> {
         for elt: {ident: ast::ident, val: ValueRef} in list {
             if str::eq(elt.ident, key) { ret some(elt.val); }
         }
@@ -486,7 +486,7 @@ fn trans_alt(cx: &@block_ctxt, expr: &@ast::expr, arms: &[ast::arm],
     // Cached fail-on-fallthrough block
     let fail_cx = @mutable none;
     fn mk_fail(cx: &@block_ctxt, sp: &span,
-               done: @mutable option::t[BasicBlockRef]) -> BasicBlockRef {
+               done: @mutable option::t<BasicBlockRef>) -> BasicBlockRef {
         alt *done { some(bb) { ret bb; } _ { } }
         let fail_cx = new_sub_block_ctxt(cx, "case_fallthrough");
         trans::trans_fail(fail_cx, some(sp), "non-exhaustive match failure");
@@ -517,7 +517,7 @@ fn trans_alt(cx: &@block_ctxt, expr: &@ast::expr, arms: &[ast::arm],
 
 // Not alt-related, but similar to the pattern-munging code above
 fn bind_irrefutable_pat(bcx: @block_ctxt, pat: &@ast::pat, val: ValueRef,
-                        table: hashmap[ast::node_id, ValueRef],
+                        table: hashmap<ast::node_id, ValueRef>,
                         make_copy: bool)
     -> @block_ctxt {
     let ccx = bcx.fcx.lcx.ccx;
diff --git a/src/comp/middle/trans_common.rs b/src/comp/middle/trans_common.rs
index 5a045e8fc04..fbec26fc646 100644
--- a/src/comp/middle/trans_common.rs
+++ b/src/comp/middle/trans_common.rs
@@ -75,10 +75,10 @@ type tydesc_info =
      tydesc: ValueRef,
      size: ValueRef,
      align: ValueRef,
-     mutable copy_glue: option::t[ValueRef],
-     mutable drop_glue: option::t[ValueRef],
-     mutable free_glue: option::t[ValueRef],
-     mutable cmp_glue: option::t[ValueRef],
+     mutable copy_glue: option::t<ValueRef>,
+     mutable drop_glue: option::t<ValueRef>,
+     mutable free_glue: option::t<ValueRef>,
+     mutable cmp_glue: option::t<ValueRef>,
      ty_params: [uint]};
 
 /*
@@ -110,32 +110,32 @@ type crate_ctxt = {
     llmod: ModuleRef,
     td: target_data,
     tn: type_names,
-    externs: hashmap[str, ValueRef],
-    intrinsics: hashmap[str, ValueRef],
+    externs: hashmap<str, ValueRef>,
+    intrinsics: hashmap<str, ValueRef>,
 
     // A mapping from the def_id of each item in this crate to the address
     // of the first instruction of the item's definition in the executable
     // we're generating.
-    item_ids: hashmap[ast::node_id, ValueRef],
+    item_ids: hashmap<ast::node_id, ValueRef>,
     ast_map: ast_map::map,
-    item_symbols: hashmap[ast::node_id, str],
-    mutable main_fn: option::t[ValueRef],
+    item_symbols: hashmap<ast::node_id, str>,
+    mutable main_fn: option::t<ValueRef>,
     link_meta: link::link_meta,
-    // TODO: hashmap[tup(tag_id,subtys), @tag_info]
-    tag_sizes: hashmap[ty::t, uint],
-    discrims: hashmap[ast::node_id, ValueRef],
-    discrim_symbols: hashmap[ast::node_id, str],
-    fn_pairs: hashmap[ast::node_id, ValueRef],
-    consts: hashmap[ast::node_id, ValueRef],
-    obj_methods: hashmap[ast::node_id, ()],
-    tydescs: hashmap[ty::t, @tydesc_info],
-    module_data: hashmap[str, ValueRef],
-    lltypes: hashmap[ty::t, TypeRef],
+    // TODO: hashmap<tup(tag_id,subtys), @tag_info>
+    tag_sizes: hashmap<ty::t, uint>,
+    discrims: hashmap<ast::node_id, ValueRef>,
+    discrim_symbols: hashmap<ast::node_id, str>,
+    fn_pairs: hashmap<ast::node_id, ValueRef>,
+    consts: hashmap<ast::node_id, ValueRef>,
+    obj_methods: hashmap<ast::node_id, ()>,
+    tydescs: hashmap<ty::t, @tydesc_info>,
+    module_data: hashmap<str, ValueRef>,
+    lltypes: hashmap<ty::t, TypeRef>,
     glues: @glue_fns,
     names: namegen,
     sha: std::sha1::sha1,
-    type_sha1s: hashmap[ty::t, str],
-    type_short_names: hashmap[ty::t, str],
+    type_sha1s: hashmap<ty::t, str>,
+    type_short_names: hashmap<ty::t, str>,
     tcx: ty::ctxt,
     stats: stats,
     upcalls: @upcall::upcalls,
@@ -216,37 +216,37 @@ type fn_ctxt = {
 
     // The 'self' object currently in use in this function, if there
     // is one.
-    mutable llself: option::t[val_self_pair],
+    mutable llself: option::t<val_self_pair>,
 
     // If this function is actually a iter, a block containing the
     // code called whenever the iter calls 'put'.
-    mutable lliterbody: option::t[ValueRef],
+    mutable lliterbody: option::t<ValueRef>,
 
     // If this function is actually a iter, the type of the function
     // that that we call when we call 'put'. Having to track this is
     // pretty irritating. We have to do it because we need the type if
     // we are going to put the iterbody into a closure (if it appears
     // in a for-each inside of an iter).
-    mutable iterbodyty: option::t[ty::t],
+    mutable iterbodyty: option::t<ty::t>,
 
     // The next four items: hash tables mapping from AST def_ids to
     // LLVM-stuff-in-the-frame.
 
     // Maps arguments to allocas created for them in llallocas.
-    llargs: hashmap[ast::node_id, ValueRef],
+    llargs: hashmap<ast::node_id, ValueRef>,
 
     // Maps fields in objects to pointers into the interior of
     // llself's body.
-    llobjfields: hashmap[ast::node_id, ValueRef],
+    llobjfields: hashmap<ast::node_id, ValueRef>,
 
     // Maps the def_ids for local variables to the allocas created for
     // them in llallocas.
-    lllocals: hashmap[ast::node_id, ValueRef],
+    lllocals: hashmap<ast::node_id, ValueRef>,
 
     // The same as above, but for variables accessed via the frame
     // pointer we pass into an iter, for access to the static
     // environment of the iter-calling frame.
-    llupvars: hashmap[ast::node_id, ValueRef],
+    llupvars: hashmap<ast::node_id, ValueRef>,
 
     // For convenience, a vector of the incoming tydescs for each of
     // this functions type parameters, fetched via llvm::LLVMGetParam.
@@ -263,7 +263,7 @@ type fn_ctxt = {
     // when information about both "[T]" and "T" are available.  When
     // such a tydesc is created, we cache it in the derived_tydescs
     // table for the next time that such a tydesc is needed.
-    derived_tydescs: hashmap[ty::t, derived_tydesc_info],
+    derived_tydescs: hashmap<ty::t, derived_tydesc_info>,
 
     // The node_id of the function, or -1 if it doesn't correspond to
     // a user-defined function.
@@ -350,7 +350,7 @@ tag block_kind {
     // which block to jump to in the case of "continue" or "break", with the
     // "continue" block optional, because "while" and "do while" don't support
     // "continue" (TODO: is this intentional?)
-    LOOP_SCOPE_BLOCK(option::t[@block_ctxt], @block_ctxt);
+    LOOP_SCOPE_BLOCK(option::t<@block_ctxt>, @block_ctxt);
 
 
     // A non-scope block is a basic block created as a translation artifact
@@ -397,7 +397,7 @@ type block_ctxt = {
     fcx: @fn_ctxt
 };
 
-// FIXME: we should be able to use option::t[@block_parent] here but
+// FIXME: we should be able to use option::t<@block_parent> here but
 // the infinite-tag check in rustboot gets upset.
 tag block_parent { parent_none; parent_some(@block_ctxt); }
 
diff --git a/src/comp/middle/trans_objects.rs b/src/comp/middle/trans_objects.rs
index f8911869343..d8f08f7fc2b 100644
--- a/src/comp/middle/trans_objects.rs
+++ b/src/comp/middle/trans_objects.rs
@@ -423,7 +423,7 @@ fn vtbl_mthd_lteq(a: &vtbl_mthd, b: &vtbl_mthd) -> bool {
 // ones that we don't need forwarding slots for.
 fn filtering_fn(cx: @local_ctxt, m: &vtbl_mthd,
                 addtl_meths: [@ast::method]) ->
-    option::t[vtbl_mthd] {
+    option::t<vtbl_mthd> {
 
     // Since m is a fwding_mthd, and we're checking to see if it's in
     // addtl_meths (which only contains normal_mthds), we can't just check if
@@ -448,7 +448,7 @@ fn filtering_fn(cx: @local_ctxt, m: &vtbl_mthd,
 // object, and return a pointer to it.
 fn create_vtbl(cx: @local_ctxt, sp: &span, outer_obj_ty: ty::t,
                ob: &ast::_obj, ty_params: &[ast::ty_param],
-               inner_obj_ty: option::t[ty::t],
+               inner_obj_ty: option::t<ty::t>,
                additional_field_tys: &[ty::t]) -> ValueRef {
 
     let llmethods: [ValueRef] = ~[];
@@ -892,7 +892,7 @@ fn process_fwding_mthd(cx: @local_ctxt, sp: &span, m: @ty::method,
 // object body: [tydesc, [typaram, ...], [field, ...], inner_obj].
 fn create_object_body_type(tcx: &ty::ctxt, fields_ty: &[ty::t],
                            typarams_ty: &[ty::t],
-                           maybe_inner_obj_ty: option::t[ty::t]) -> ty::t {
+                           maybe_inner_obj_ty: option::t<ty::t>) -> ty::t {
 
     let tydesc_ty: ty::t = ty::mk_type(tcx);
     let typarams_ty_tup: ty::t = ty::mk_tup(tcx, typarams_ty);
diff --git a/src/comp/middle/tstate/auxiliary.rs b/src/comp/middle/tstate/auxiliary.rs
index aff695c44b8..cf52ea94537 100644
--- a/src/comp/middle/tstate/auxiliary.rs
+++ b/src/comp/middle/tstate/auxiliary.rs
@@ -208,11 +208,11 @@ Both types store an ident and span, for error-logging purposes.
 */
 type pred_args_ = {args: [@constr_arg_use], bit_num: uint};
 
-type pred_args = spanned[pred_args_];
+type pred_args = spanned<pred_args_>;
 
 // The attached node ID is the *defining* node ID
 // for this local.
-type constr_arg_use = spanned[constr_arg_general_[inst]];
+type constr_arg_use = spanned<constr_arg_general_<inst>>;
 
 tag constraint {
     cinit(uint, span, ident);
@@ -232,11 +232,11 @@ tag tsconstr {
     npred(path, def_id, [@constr_arg_use]);
 }
 
-type sp_constr = spanned[tsconstr];
+type sp_constr = spanned<tsconstr>;
 
 type norm_constraint = {bit_num: uint, c: sp_constr};
 
-type constr_map = @std::map::hashmap[def_id, constraint];
+type constr_map = @std::map::hashmap<def_id, constraint>;
 
 /* Contains stuff that has to be computed up front */
 type fn_info =
@@ -295,7 +295,7 @@ type node_ann_table = @mutable [mutable ts_ann];
 
 
 /* mapping from function name to fn_info map */
-type fn_info_map = @std::map::hashmap[node_id, fn_info];
+type fn_info_map = @std::map::hashmap<node_id, fn_info>;
 
 type fn_ctxt =
     {enclosing: fn_info,
@@ -318,7 +318,7 @@ fn add_node(ccx: &crate_ctxt, i: node_id, a: &ts_ann) {
     ccx.node_anns.(i) = a;
 }
 
-fn get_ts_ann(ccx: &crate_ctxt, i: node_id) -> option::t[ts_ann] {
+fn get_ts_ann(ccx: &crate_ctxt, i: node_id) -> option::t<ts_ann> {
     if i as uint < vec::len(*ccx.node_anns) {
         ret some[ts_ann](ccx.node_anns.(i));
     } else { ret none[ts_ann]; }
@@ -547,10 +547,10 @@ fn node_id_to_def_strict(cx: &ty::ctxt, id: node_id) -> def {
     }
 }
 
-fn node_id_to_def(ccx: &crate_ctxt, id: node_id) -> option::t[def] {
+fn node_id_to_def(ccx: &crate_ctxt, id: node_id) -> option::t<def> {
     ret ccx.tcx.def_map.find(id);
 }
-fn node_id_to_def_upvar(cx: &fn_ctxt, id: node_id) -> option::t[def] {
+fn node_id_to_def_upvar(cx: &fn_ctxt, id: node_id) -> option::t<def> {
     ret freevars::def_lookup(cx.ccx.tcx, cx.id, id);
 }
 
@@ -704,7 +704,7 @@ fn substitute_arg(cx: &ty::ctxt, actuals: &[@expr], a: @constr_arg) ->
     }
 }
 
-fn pred_args_matches(pattern: &[constr_arg_general_[inst]],
+fn pred_args_matches(pattern: &[constr_arg_general_<inst>],
                      desc: &pred_args) -> bool {
     let i = 0u;
     for c: @constr_arg_use in desc.node.args {
@@ -729,8 +729,8 @@ fn pred_args_matches(pattern: &[constr_arg_general_[inst]],
     ret true;
 }
 
-fn find_instance_(pattern: &[constr_arg_general_[inst]],
-                  descs: &[pred_args]) -> option::t[uint] {
+fn find_instance_(pattern: &[constr_arg_general_<inst>],
+                  descs: &[pred_args]) -> option::t<uint> {
     for d: pred_args in descs {
         if pred_args_matches(pattern, d) { ret some(d.node.bit_num); }
     }
@@ -764,7 +764,7 @@ fn find_instances(fcx: &fn_ctxt, subst: &subst, c: &constraint) ->
     rslt
 }
 
-fn find_in_subst(id: node_id, s: &subst) -> option::t[inst] {
+fn find_in_subst(id: node_id, s: &subst) -> option::t<inst> {
     for p: {from: inst, to: inst} in s {
         if id == p.from.node { ret some(p.to); }
     }
@@ -775,9 +775,9 @@ fn find_in_subst_bool(s: &subst, id: node_id) -> bool {
     is_some(find_in_subst(id, s))
 }
 
-fn insts_to_str(stuff: &[constr_arg_general_[inst]]) -> str {
+fn insts_to_str(stuff: &[constr_arg_general_<inst>]) -> str {
     let rslt = "<";
-    for i: constr_arg_general_[inst] in stuff {
+    for i: constr_arg_general_<inst> in stuff {
         rslt +=
             " " +
                 alt i {
@@ -790,8 +790,8 @@ fn insts_to_str(stuff: &[constr_arg_general_[inst]]) -> str {
     rslt
 }
 
-fn replace(subst: subst, d: pred_args) -> [constr_arg_general_[inst]] {
-    let rslt: [constr_arg_general_[inst]] = ~[];
+fn replace(subst: subst, d: pred_args) -> [constr_arg_general_<inst>] {
+    let rslt: [constr_arg_general_<inst>] = ~[];
     for c: @constr_arg_use in d.node.args {
         alt c.node {
           carg_ident(p) {
@@ -808,7 +808,7 @@ fn replace(subst: subst, d: pred_args) -> [constr_arg_general_[inst]] {
     }
 
     /*
-    for (constr_arg_general_[tup(ident, def_id)] p in rslt) {
+    for (constr_arg_general_<tup(ident, def_id)> p in rslt) {
         alt (p) {
             case (carg_ident(?p)) {
                 log_err p._0;
@@ -849,11 +849,11 @@ fn local_node_id_to_def_id_strict(fcx: &fn_ctxt, sp: &span, i: &node_id) ->
     }
 }
 
-fn local_node_id_to_def(fcx: &fn_ctxt, i: &node_id) -> option::t[def] {
+fn local_node_id_to_def(fcx: &fn_ctxt, i: &node_id) -> option::t<def> {
     fcx.ccx.tcx.def_map.find(i)
 }
 
-fn local_node_id_to_def_id(fcx: &fn_ctxt, i: &node_id) -> option::t[def_id] {
+fn local_node_id_to_def_id(fcx: &fn_ctxt, i: &node_id) -> option::t<def_id> {
     alt local_node_id_to_def(fcx, i) {
       some(def_local(d_id)) { some(d_id) }
       some(def_arg(a_id)) { some(a_id) }
@@ -862,7 +862,7 @@ fn local_node_id_to_def_id(fcx: &fn_ctxt, i: &node_id) -> option::t[def_id] {
 }
 
 fn local_node_id_to_local_def_id(fcx: &fn_ctxt, i: &node_id) ->
-   option::t[node_id] {
+   option::t<node_id> {
     alt local_node_id_to_def(fcx, i) {
       some(def_local(d_id)) { some(d_id.node) }
       some(def_arg(a_id)) { some(a_id.node) }
@@ -1052,7 +1052,7 @@ fn op_to_oper_ty(io: init_op) -> oper_type {
 
 // default function visitor
 fn do_nothing[T](f: &_fn, tp: &[ty_param], sp: &span, i: &fn_ident,
-                 iid: node_id, cx: &T, v: &visit::vt[T]) {
+                 iid: node_id, cx: &T, v: &visit::vt<T>) {
 }
 
 
@@ -1077,7 +1077,7 @@ fn ast_constr_to_sp_constr(tcx: &ty::ctxt, args: &[arg], c: &@constr) ->
     ret respan(c.span, tconstr);
 }
 
-type binding = {lhs: [inst], rhs: option::t[initializer]};
+type binding = {lhs: [inst], rhs: option::t<initializer>};
 
 fn local_to_bindings(loc : &@local) -> binding {
     let lhs = ~[];
diff --git a/src/comp/middle/tstate/bitvectors.rs b/src/comp/middle/tstate/bitvectors.rs
index 3e90c08ec19..f61604e1ec4 100644
--- a/src/comp/middle/tstate/bitvectors.rs
+++ b/src/comp/middle/tstate/bitvectors.rs
@@ -139,13 +139,13 @@ fn declare_var(fcx: &fn_ctxt, c: &tsconstr, pre: prestate) -> prestate {
 }
 
 fn relax_precond_expr(e: &@expr, cx: &relax_ctxt,
-                      vt: &visit::vt[relax_ctxt]) {
+                      vt: &visit::vt<relax_ctxt>) {
     relax_precond(cx.i as uint, expr_precond(cx.fcx.ccx, e));
     visit::visit_expr(e, cx, vt);
 }
 
 fn relax_precond_stmt(s: &@stmt, cx: &relax_ctxt,
-                      vt: &visit::vt[relax_ctxt]) {
+                      vt: &visit::vt<relax_ctxt>) {
     relax_precond(cx.i as uint, stmt_precond(cx.fcx.ccx, *s));
     visit::visit_stmt(s, cx, vt);
 }
@@ -153,7 +153,7 @@ fn relax_precond_stmt(s: &@stmt, cx: &relax_ctxt,
 type relax_ctxt = {fcx:fn_ctxt, i:node_id};
 
 fn relax_precond_block_inner(b: &blk, cx: &relax_ctxt,
-                             vt: &visit::vt[relax_ctxt]) {
+                             vt: &visit::vt<relax_ctxt>) {
     relax_precond(cx.i as uint, block_precond(cx.fcx.ccx, b));
     visit::visit_block(b, cx, vt);
 }
@@ -166,7 +166,7 @@ fn relax_precond_block(fcx: &fn_ctxt, i: node_id, b:&blk) {
           visit_expr: relax_precond_expr,
           visit_stmt: relax_precond_stmt,
           visit_item: (fn (i: &@item, cx: &relax_ctxt,
-                           vt: &visit::vt[relax_ctxt]) {})
+                           vt: &visit::vt<relax_ctxt>) {})
           with *visitor};
     let v1 = visit::mk_vt(visitor);
     v1.visit_block(b, cx, v1);
diff --git a/src/comp/middle/tstate/ck.rs b/src/comp/middle/tstate/ck.rs
index 92afaf7cc3e..061ccd4811d 100644
--- a/src/comp/middle/tstate/ck.rs
+++ b/src/comp/middle/tstate/ck.rs
@@ -61,7 +61,7 @@ fn check_unused_vars(fcx: &fn_ctxt) {
     }
 }
 
-fn check_states_expr(e: &@expr, fcx: &fn_ctxt, v: &visit::vt[fn_ctxt]) {
+fn check_states_expr(e: &@expr, fcx: &fn_ctxt, v: &visit::vt<fn_ctxt>) {
     visit::visit_expr(e, fcx, v);
 
     let prec: precond = expr_precond(fcx.ccx, e);
@@ -92,7 +92,7 @@ fn check_states_expr(e: &@expr, fcx: &fn_ctxt, v: &visit::vt[fn_ctxt]) {
     }
 }
 
-fn check_states_stmt(s: &@stmt, fcx: &fn_ctxt, v: &visit::vt[fn_ctxt]) {
+fn check_states_stmt(s: &@stmt, fcx: &fn_ctxt, v: &visit::vt<fn_ctxt>) {
     visit::visit_stmt(s, fcx, v);
 
     let a = stmt_to_ann(fcx.ccx, *s);
@@ -184,7 +184,7 @@ fn check_fn_states(fcx: &fn_ctxt, f: &_fn, tps: &[ast::ty_param], id: node_id,
 }
 
 fn fn_states(f: &_fn, tps: &[ast::ty_param], sp: &span, i: &fn_ident,
-             id: node_id, ccx: &crate_ctxt, v: &visit::vt[crate_ctxt]) {
+             id: node_id, ccx: &crate_ctxt, v: &visit::vt<crate_ctxt>) {
     visit::visit_fn(f, tps, sp, i, id, ccx, v);
     /* Look up the var-to-bit-num map for this function */
 
diff --git a/src/comp/middle/tstate/collect_locals.rs b/src/comp/middle/tstate/collect_locals.rs
index 036c931376d..912bf1bd5e8 100644
--- a/src/comp/middle/tstate/collect_locals.rs
+++ b/src/comp/middle/tstate/collect_locals.rs
@@ -13,7 +13,7 @@ import syntax::ast::respan;
 
 type ctxt = {cs: @mutable [sp_constr], tcx: ty::ctxt};
 
-fn collect_local(loc: &@local, cx: &ctxt, v: &visit::vt[ctxt]) {
+fn collect_local(loc: &@local, cx: &ctxt, v: &visit::vt<ctxt>) {
     for each p: @pat in pat_bindings(loc.node.pat) {
         let ident = alt p.node { pat_bind(id) { id } };
         log "collect_local: pushing " + ident;
@@ -22,7 +22,7 @@ fn collect_local(loc: &@local, cx: &ctxt, v: &visit::vt[ctxt]) {
     visit::visit_local(loc, cx, v);
 }
 
-fn collect_pred(e: &@expr, cx: &ctxt, v: &visit::vt[ctxt]) {
+fn collect_pred(e: &@expr, cx: &ctxt, v: &visit::vt<ctxt>) {
     alt e.node {
       expr_check(_, ch) { *cx.cs += ~[expr_to_constr(cx.tcx, ch)]; }
       expr_if_check(ex, _, _) { *cx.cs += ~[expr_to_constr(cx.tcx, ex)]; }
diff --git a/src/comp/middle/tstate/pre_post_conditions.rs b/src/comp/middle/tstate/pre_post_conditions.rs
index c3c265b0745..9f7678878df 100644
--- a/src/comp/middle/tstate/pre_post_conditions.rs
+++ b/src/comp/middle/tstate/pre_post_conditions.rs
@@ -157,7 +157,7 @@ fn find_pre_post_loop(fcx: &fn_ctxt, l: &@local, index: &@expr, body: &blk,
 // annotation for an if-expression with consequent conseq
 // and alternative maybe_alt
 fn join_then_else(fcx: &fn_ctxt, antec: &@expr, conseq: &blk,
-                  maybe_alt: &option::t[@expr], id: node_id, chck: &if_ty) {
+                  maybe_alt: &option::t<@expr>, id: node_id, chck: &if_ty) {
     find_pre_post_expr(fcx, antec);
     find_pre_post_block(fcx, conseq);
     alt maybe_alt {
@@ -553,7 +553,7 @@ fn find_pre_post_expr(fcx: &fn_ctxt, e: @expr) {
         let cmodes = callee_modes(fcx, operator.id);
         let modes = ~[];
         let i = 0;
-        for expr_opt: option::t[@expr] in maybe_args {
+        for expr_opt: option::t<@expr> in maybe_args {
             alt expr_opt {
               none. {/* no-op */ }
               some(expr) {
@@ -723,7 +723,7 @@ fn find_pre_post_fn(fcx: &fn_ctxt, f: &_fn) {
 }
 
 fn fn_pre_post(f: &_fn, tps: &[ty_param], sp: &span, i: &fn_ident,
-               id: node_id, ccx: &crate_ctxt, v: &visit::vt[crate_ctxt]) {
+               id: node_id, ccx: &crate_ctxt, v: &visit::vt<crate_ctxt>) {
     visit::visit_fn(f, tps, sp, i, id, ccx, v);
     assert (ccx.fm.contains_key(id));
     let fcx =
diff --git a/src/comp/middle/tstate/states.rs b/src/comp/middle/tstate/states.rs
index 001c5f7d0e7..787f3ba2e03 100644
--- a/src/comp/middle/tstate/states.rs
+++ b/src/comp/middle/tstate/states.rs
@@ -84,7 +84,7 @@ fn seq_states(fcx: &fn_ctxt, pres: &prestate, bindings: &[binding])
 }
 
 fn find_pre_post_state_sub(fcx: &fn_ctxt, pres: &prestate, e: &@expr,
-                           parent: node_id, c: option::t[tsconstr]) -> bool {
+                           parent: node_id, c: option::t<tsconstr>) -> bool {
     let changed = find_pre_post_state_expr(fcx, pres, e);
 
     changed = set_prestate_ann(fcx.ccx, parent, pres) || changed;
@@ -238,7 +238,7 @@ fn gen_if_local(fcx: &fn_ctxt, p: &poststate, e: &@expr) -> bool {
 }
 
 fn join_then_else(fcx: &fn_ctxt, antec: &@expr, conseq: &blk,
-                  maybe_alt: &option::t[@expr], id: node_id, chk: &if_ty,
+                  maybe_alt: &option::t<@expr>, id: node_id, chk: &if_ty,
                   pres: &prestate) -> bool {
     let changed =
         set_prestate_ann(fcx.ccx, id, pres) |
@@ -328,7 +328,7 @@ fn find_pre_post_state_expr(fcx: &fn_ctxt, pres: &prestate, e: @expr) ->
         let callee_ops = callee_arg_init_ops(fcx, operator.id);
         let ops = ~[];
         let i = 0;
-        for a_opt: option::t[@expr] in maybe_args {
+        for a_opt: option::t<@expr> in maybe_args {
             alt a_opt {
               none. {/* no-op */ }
               some(a) {
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index d43333f8a19..c4d3cc0c384 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -199,14 +199,14 @@ type method =
      cf: controlflow,
      constrs: [@constr]};
 
-type constr_table = hashmap[ast::node_id, [constr]];
+type constr_table = hashmap<ast::node_id, [constr]>;
 
 type mt = {ty: t, mut: ast::mutability};
 
 
 // Contains information needed to resolve types and (in the future) look up
 // the types of AST nodes.
-type creader_cache = hashmap[{cnum: int, pos: uint, len: uint}, ty::t];
+type creader_cache = hashmap<{cnum: int, pos: uint, len: uint}, ty::t>;
 
 type ctxt =
 
@@ -219,11 +219,11 @@ type ctxt =
       freevars: freevars::freevar_map,
       tcache: type_cache,
       rcache: creader_cache,
-      short_names_cache: hashmap[t, str],
-      has_pointer_cache: hashmap[t, bool],
-      kind_cache: hashmap[t, ast::kind],
-      owns_heap_mem_cache: hashmap[t, bool],
-      ast_ty_to_ty_cache: hashmap[@ast::ty, option::t[t]]};
+      short_names_cache: hashmap<t, str>,
+      has_pointer_cache: hashmap<t, bool>,
+      kind_cache: hashmap<t, ast::kind>,
+      owns_heap_mem_cache: hashmap<t, bool>,
+      ast_ty_to_ty_cache: hashmap<@ast::ty, option::t<t>>};
 
 type ty_ctxt = ctxt;
 
@@ -239,7 +239,7 @@ fn method_ty_to_fn_ty(cx: &ctxt, m: method) -> t {
 // Never construct these manually. These are interned.
 type raw_t =
     {struct: sty,
-     cname: option::t[str],
+     cname: option::t<str>,
      hash: uint,
      has_params: bool,
      has_vars: bool};
@@ -284,9 +284,9 @@ tag sty {
 
 // In the middle end, constraints have a def_id attached, referring
 // to the definition of the operator in the constraint.
-type constr_general[ARG] = spanned[constr_general_[ARG, def_id]];
-type type_constr = constr_general[path];
-type constr = constr_general[uint];
+type constr_general[ARG] = spanned<constr_general_<ARG, def_id>>;
+type type_constr = constr_general<path>;
+type constr = constr_general<uint>;
 
 // Data structures used in type unification
 tag type_err {
@@ -308,7 +308,7 @@ tag type_err {
 
 type ty_param_kinds_and_ty = {kinds: [ast::kind], ty: t};
 
-type type_cache = hashmap[ast::def_id, ty_param_kinds_and_ty];
+type type_cache = hashmap<ast::def_id, ty_param_kinds_and_ty>;
 
 const idx_nil: uint = 0u;
 
@@ -352,12 +352,12 @@ const idx_bot: uint = 19u;
 
 const idx_first_others: uint = 20u;
 
-type type_store = interner::interner[@raw_t];
+type type_store = interner::interner<@raw_t>;
 
-type ty_param_substs_opt_and_ty = {substs: option::t[[ty::t]], ty: ty::t};
+type ty_param_substs_opt_and_ty = {substs: option::t<[ty::t]>, ty: ty::t};
 
 type node_type_table =
-    @smallintmap::smallintmap[ty::ty_param_substs_opt_and_ty];
+    @smallintmap::smallintmap<ty::ty_param_substs_opt_and_ty>;
 
 fn populate_type_store(cx: &ctxt) {
     intern(cx, ty_nil, none);
@@ -421,7 +421,7 @@ fn mk_ctxt(s: session::session, dm: resolve::def_map, amap: ast_map::map,
 
 
 // Type constructors
-fn mk_raw_ty(cx: &ctxt, st: &sty, in_cname: &option::t[str]) -> @raw_t {
+fn mk_raw_ty(cx: &ctxt, st: &sty, in_cname: &option::t<str>) -> @raw_t {
     let cname = none;
     let h = hash_type_info(st, cname);
     let has_params: bool = false;
@@ -502,11 +502,11 @@ fn mk_raw_ty(cx: &ctxt, st: &sty, in_cname: &option::t[str]) -> @raw_t {
           has_vars: has_vars};
 }
 
-fn intern(cx: &ctxt, st: &sty, cname: &option::t[str]) {
+fn intern(cx: &ctxt, st: &sty, cname: &option::t<str>) {
     interner::intern(*cx.ts, mk_raw_ty(cx, st, cname));
 }
 
-fn gen_ty_full(cx: &ctxt, st: &sty, cname: &option::t[str]) -> t {
+fn gen_ty_full(cx: &ctxt, st: &sty, cname: &option::t<str>) -> t {
     let raw_type = mk_raw_ty(cx, st, cname);
     ret interner::intern(*cx.ts, raw_type);
 }
@@ -621,7 +621,7 @@ fn struct(cx: &ctxt, typ: &t) -> sty {
 
 
 // Returns the canonical name of the given type.
-fn cname(cx: &ctxt, typ: &t) -> option::t[str] {
+fn cname(cx: &ctxt, typ: &t) -> option::t<str> {
     ret interner::get(*cx.ts, typ).cname;
 }
 
@@ -1363,7 +1363,7 @@ fn type_is_pod(cx : &ctxt, ty : &t) -> bool {
     ret result;
 }
 
-fn type_param(cx: &ctxt, ty: &t) -> option::t[uint] {
+fn type_param(cx: &ctxt, ty: &t) -> option::t<uint> {
     alt struct(cx, ty) {
       ty_param(id,_) { ret some(id); }
       _ {/* fall through */ }
@@ -1536,7 +1536,7 @@ fn hash_type_structure(st: &sty) -> uint {
     }
 }
 
-fn hash_type_info(st: &sty, cname_opt: &option::t[str]) -> uint {
+fn hash_type_info(st: &sty, cname_opt: &option::t<str>) -> uint {
     let h = hash_type_structure(st);
     alt cname_opt {
       none. {/* no-op */ }
@@ -1554,8 +1554,8 @@ fn hash_ty(typ: &t) -> uint { ret typ; }
 // users should use `eq_ty()` instead.
 fn eq_int(x: &uint, y: &uint) -> bool { ret x == y; }
 
-fn arg_eq[T](eq: &fn(&T, &T) -> bool , a: @sp_constr_arg[T],
-             b: @sp_constr_arg[T]) -> bool {
+fn arg_eq[T](eq: &fn(&T, &T) -> bool , a: @sp_constr_arg<T>,
+             b: @sp_constr_arg<T>) -> bool {
     alt a.node {
       ast::carg_base. {
         alt b.node { ast::carg_base. { ret true; } _ { ret false; } }
@@ -1569,10 +1569,10 @@ fn arg_eq[T](eq: &fn(&T, &T) -> bool , a: @sp_constr_arg[T],
     }
 }
 
-fn args_eq[T](eq: fn(&T, &T) -> bool , a: &[@sp_constr_arg[T]],
-              b: &[@sp_constr_arg[T]]) -> bool {
+fn args_eq[T](eq: fn(&T, &T) -> bool , a: &[@sp_constr_arg<T>],
+              b: &[@sp_constr_arg<T>]) -> bool {
     let i: uint = 0u;
-    for arg: @sp_constr_arg[T] in a {
+    for arg: @sp_constr_arg<T> in a {
         if !arg_eq(eq, arg, b.(i)) { ret false; }
         i += 1u;
     }
@@ -2008,7 +2008,7 @@ fn is_lval(expr: &@ast::expr) -> bool {
     }
 }
 
-fn occurs_check_fails(tcx: &ctxt, sp: &option::t[span], vid: int, rt: &t)
+fn occurs_check_fails(tcx: &ctxt, sp: &option::t<span>, vid: int, rt: &t)
     -> bool {
     if (!type_contains_vars(tcx, rt)) {
         // Fast path
@@ -2066,7 +2066,7 @@ mod unify {
 
     }
     type var_bindings =
-        {sets: ufind::ufind, types: smallintmap::smallintmap[t]};
+        {sets: ufind::ufind, types: smallintmap::smallintmap<t>};
 
     type ctxt = {vb: @var_bindings, tcx: ty_ctxt};
 
@@ -2198,7 +2198,7 @@ mod unify {
 
     // Unifies two mutability flags.
     fn unify_mut(expected: ast::mutability, actual: ast::mutability) ->
-       option::t[ast::mutability] {
+       option::t<ast::mutability> {
         if expected == actual { ret some(expected); }
         if expected == ast::maybe_mut { ret some(actual); }
         if actual == ast::maybe_mut { ret some(expected); }
@@ -2736,7 +2736,7 @@ mod unify {
         while i < vec::len[ufind::node](vb.sets.nodes) {
             let sets = "";
             let j = 0u;
-            while j < vec::len[option::t[uint]](vb.sets.nodes) {
+            while j < vec::len[option::t<uint>](vb.sets.nodes) {
                 if ufind::find(vb.sets, j) == i {
                     sets += #fmt(" %u", j);
                 }
@@ -2756,10 +2756,10 @@ mod unify {
     //    Takes an optional span - complain about occurs check violations
     //    iff the span is present (so that if we already know we're going
     //    to error anyway, we don't complain)
-    fn fixup_vars(tcx: ty_ctxt, sp: &option::t[span],
+    fn fixup_vars(tcx: ty_ctxt, sp: &option::t<span>,
                   vb: @var_bindings, typ: t) -> fixup_result {
-        fn subst_vars(tcx: ty_ctxt, sp: &option::t[span], vb: @var_bindings,
-                      unresolved: @mutable option::t[int], vid: int) -> t {
+        fn subst_vars(tcx: ty_ctxt, sp: &option::t<span>, vb: @var_bindings,
+                      unresolved: @mutable option::t<int>, vid: int) -> t {
             // Should really return a fixup_result instead of a t, but fold_ty
             // doesn't allow returning anything but a t.
             if vid as uint >= ufind::set_count(vb.sets) {
@@ -2789,7 +2789,7 @@ mod unify {
           some(var_id) { ret fix_err(var_id); }
         }
     }
-    fn resolve_type_var(tcx: &ty_ctxt, sp: &option::t[span],
+    fn resolve_type_var(tcx: &ty_ctxt, sp: &option::t<span>,
                         vb: &@var_bindings, vid: int) ->
        fixup_result {
         if vid as uint >= ufind::set_count(vb.sets) { ret fix_err(vid); }
@@ -3090,8 +3090,8 @@ fn is_binopable(cx: &ctxt, ty: t, op: ast::binop) -> bool {
     ret tbl.(tycat(cx, ty)).(opcat(op));
 }
 
-fn ast_constr_to_constr[T](tcx: ty::ctxt, c: &@ast::constr_general[T]) ->
-   @ty::constr_general[T] {
+fn ast_constr_to_constr[T](tcx: ty::ctxt, c: &@ast::constr_general<T>) ->
+   @ty::constr_general<T> {
     alt tcx.def_map.find(c.node.id) {
       some(ast::def_fn(pred_id, ast::pure_fn.)) {
         ret @respan(c.span,
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index eeeebc7e9b8..7d5d3acf951 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -49,7 +49,7 @@ import syntax::print::pprust::*;
 
 export check_crate;
 
-type ty_table = hashmap[ast::def_id, ty::t];
+type ty_table = hashmap<ast::def_id, ty::t>;
 
 // Used for typechecking the methods of an object.
 tag obj_info {
@@ -57,7 +57,7 @@ tag obj_info {
     regular_obj([ast::obj_field], ast::node_id);
     // Anonymous objects only have a type at compile time.  It's optional
     // because not all anonymous objects have a inner_obj to attach to.
-    anon_obj([ast::obj_field], option::t[ty::sty]);
+    anon_obj([ast::obj_field], option::t<ty::sty>);
 }
 
 type crate_ctxt = {mutable obj_infos: [obj_info], tcx: ty::ctxt};
@@ -70,8 +70,8 @@ type fn_ctxt =
      purity: ast::purity,
      proto: ast::proto,
      var_bindings: @ty::unify::var_bindings,
-     locals: hashmap[ast::node_id, int],
-     local_names: hashmap[ast::node_id, ast::ident],
+     locals: hashmap<ast::node_id, int>,
+     local_names: hashmap<ast::node_id, ast::ident>,
      next_var_id: @mutable int,
      mutable fixups: [ast::node_id],
      ccx: @crate_ctxt};
@@ -235,7 +235,7 @@ fn structure_of(fcx: &@fn_ctxt, sp: &span, typ: ty::t) -> ty::sty {
 // Returns the one-level-deep structure of the given type or none if it
 // is not known yet.
 fn structure_of_maybe(fcx: &@fn_ctxt, sp: &span, typ: ty::t) ->
-   option::t[ty::sty] {
+   option::t<ty::sty> {
     let r =
         ty::unify::resolve_type_structure(fcx.ccx.tcx, fcx.var_bindings, typ);
     ret alt r {
@@ -433,7 +433,7 @@ fn ast_ty_to_ty_crate(ccx: @crate_ctxt, ast_ty: &@ast::ty) -> ty::t {
 
 // A wrapper around ast_ty_to_ty_crate that handles ty_infer.
 fn ast_ty_to_ty_crate_infer(ccx: @crate_ctxt, ast_ty: &@ast::ty)
-    -> option::t[ty::t] {
+    -> option::t<ty::t> {
     alt ast_ty.node {
       ast::ty_infer. { none }
       _ { some(ast_ty_to_ty_crate(ccx, ast_ty)) }
@@ -544,7 +544,7 @@ mod collect {
     fn ty_of_fn_decl(cx: &@ctxt, convert: &fn(&@ast::ty) -> ty::t ,
                      ty_of_arg: &fn(&ast::arg) -> arg , decl: &ast::fn_decl,
                      proto: ast::proto, ty_params: &[ast::ty_param],
-                     def_id: &option::t[ast::def_id]) ->
+                     def_id: &option::t<ast::def_id>) ->
        ty::ty_param_kinds_and_ty {
         let input_tys = ~[];
         for a: ast::arg in decl.inputs { input_tys += ~[ty_of_arg(a)]; }
@@ -775,7 +775,7 @@ mod collect {
         }
         ret meths;
     }
-    fn convert(cx: @ctxt, abi: @mutable option::t[ast::native_abi],
+    fn convert(cx: @ctxt, abi: @mutable option::t<ast::native_abi>,
                it: &@ast::item) {
         alt it.node {
           ast::item_mod(_) {
@@ -850,7 +850,7 @@ mod collect {
           }
         }
     }
-    fn convert_native(cx: @ctxt, abi: @mutable option::t[ast::native_abi],
+    fn convert_native(cx: @ctxt, abi: @mutable option::t<ast::native_abi>,
                       i: &@ast::native_item) {
         // As above, this call populates the type table with the converted
         // type of the native item. We simply write it into the node type
@@ -1077,7 +1077,7 @@ mod writeback {
     export resolve_type_vars_in_expr;
 
     fn resolve_type_vars_in_type(fcx: &@fn_ctxt, sp: &span, typ: ty::t) ->
-       option::t[ty::t] {
+       option::t<ty::t> {
         if !ty::type_contains_vars(fcx.ccx.tcx, typ) { ret some(typ); }
         alt ty::unify::fixup_vars(fcx.ccx.tcx, some(sp),
                                   fcx.var_bindings, typ) {
@@ -1120,7 +1120,7 @@ mod writeback {
         // As soon as we hit an error we have to stop resolving
         // the entire function
         {fcx: @fn_ctxt, mutable success: bool};
-    type wb_vt = visit::vt[wb_ctxt];
+    type wb_vt = visit::vt<wb_ctxt>;
 
     fn visit_stmt(s: &@ast::stmt, wbcx: &wb_ctxt, v: &wb_vt) {
         if !wbcx.success { ret; }
@@ -1197,13 +1197,13 @@ mod writeback {
 // for them before typechecking the function.
 type gather_result =
     {var_bindings: @ty::unify::var_bindings,
-     locals: hashmap[ast::node_id, int],
-     local_names: hashmap[ast::node_id, ast::ident],
+     locals: hashmap<ast::node_id, int>,
+     local_names: hashmap<ast::node_id, ast::ident>,
      next_var_id: @mutable int};
 
 // Used only as a helper for check_fn.
 fn gather_locals(ccx: &@crate_ctxt, f: &ast::_fn, id: &ast::node_id,
-                 old_fcx: &option::t[@fn_ctxt]) -> gather_result {
+                 old_fcx: &option::t<@fn_ctxt>) -> gather_result {
     let {vb, locals, local_names, nvi} = alt old_fcx {
       none. {
         { vb: ty::unify::mk_var_bindings(),
@@ -1226,7 +1226,7 @@ fn gather_locals(ccx: &@crate_ctxt, f: &ast::_fn, id: &ast::node_id,
         ret rv;
     };
     let assign = lambda(nid: ast::node_id, ident: &ast::ident,
-                        ty_opt: option::t[ty::t]) {
+                        ty_opt: option::t<ty::t>) {
         let var_id = next_var_id();
         locals.insert(nid, var_id);
         local_names.insert(nid, ident);
@@ -1263,14 +1263,14 @@ fn gather_locals(ccx: &@crate_ctxt, f: &ast::_fn, id: &ast::node_id,
     }
 
     // Add explicitly-declared locals.
-    let visit_local = lambda(local: &@ast::local, e: &(), v: &visit::vt[()]) {
+    let visit_local = lambda(local: &@ast::local, e: &(), v: &visit::vt<()>) {
         let local_ty = ast_ty_to_ty_crate_infer(ccx, local.node.ty);
         assign(local.node.id, ident_for_local(local), local_ty);
         visit::visit_local(local, e, v);
     };
 
     // Add pattern bindings.
-    let visit_pat = lambda(p: &@ast::pat, e: &(), v: &visit::vt[()]) {
+    let visit_pat = lambda(p: &@ast::pat, e: &(), v: &visit::vt<()>) {
         alt p.node {
           ast::pat_bind(ident) {
             assign(p.id, ident, none);
@@ -1283,8 +1283,8 @@ fn gather_locals(ccx: &@crate_ctxt, f: &ast::_fn, id: &ast::node_id,
     // Don't descend into fns and items
     fn visit_fn[E](f: &ast::_fn, tp: &[ast::ty_param], sp: &span,
                    i: &ast::fn_ident, id: ast::node_id, e: &E,
-                   v: &visit::vt[E]) { }
-    fn visit_item[E](i: &@ast::item, e: &E, v: &visit::vt[E]) { }
+                   v: &visit::vt<E>) { }
+    fn visit_item[E](i: &@ast::item, e: &E, v: &visit::vt<E>) { }
 
     let visit =
         @{visit_local: visit_local,
@@ -1538,7 +1538,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
     // A generic function to factor out common logic from call and bind
     // expressions.
     fn check_call_or_bind(fcx: &@fn_ctxt, sp: &span, f: &@ast::expr,
-                          args: &[option::t[@ast::expr]],
+                          args: &[option::t<@ast::expr>],
                           call_kind: call_kind) -> bool {
         // Check the function.
         let bot = check_expr(fcx, f);
@@ -1587,7 +1587,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
 
         // Check that the correct number of arguments were supplied.
         let expected_arg_count = vec::len[ty::arg](arg_tys);
-        let supplied_arg_count = vec::len[option::t[@ast::expr]](args);
+        let supplied_arg_count = vec::len[option::t<@ast::expr>](args);
         if expected_arg_count != supplied_arg_count {
             fcx.ccx.tcx.sess.span_fatal(sp,
                                         #fmt("this function takes %u \
@@ -1612,7 +1612,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
         let check_args = lambda(check_blocks: bool) -> bool {
             let i = 0u;
             let bot = false;
-            for a_opt: option::t[@ast::expr] in args {
+            for a_opt: option::t<@ast::expr> in args {
                 alt a_opt {
                   some(a) {
                     let is_block =
@@ -1647,7 +1647,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
     // A generic function for checking call expressions
     fn check_call(fcx: &@fn_ctxt, sp: &span, f: &@ast::expr,
                   args: &[@ast::expr], call_kind: call_kind) -> bool {
-        let args_opt_0: [option::t[@ast::expr]] = ~[];
+        let args_opt_0: [option::t<@ast::expr>] = ~[];
         for arg: @ast::expr in args {
             args_opt_0 += ~[some[@ast::expr](arg)];
         }
@@ -1745,7 +1745,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
     // A generic function for checking the then and else in an if
     // or if-check
     fn check_then_else(fcx: &@fn_ctxt, thn: &ast::blk,
-                       elsopt: &option::t[@ast::expr], id: ast::node_id,
+                       elsopt: &option::t<@ast::expr>, id: ast::node_id,
                        sp: &span) -> bool {
         let then_bot = check_block(fcx, thn);
         let els_bot = false;
@@ -2093,7 +2093,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
             // For each blank argument, add the type of that argument
             // to the resulting function type.
             let i = 0u;
-            while i < vec::len[option::t[@ast::expr]](args) {
+            while i < vec::len[option::t<@ast::expr>](args) {
                 alt args.(i) {
                   some(_) {/* no-op */ }
                   none. { arg_tys_1 += ~[arg_tys.(i)]; }
@@ -2113,9 +2113,9 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
       }
       ast::expr_self_method(ident) {
         let t = ty::mk_nil(tcx);
-        let this_obj_sty: option::t[ty::sty] =
+        let this_obj_sty: option::t<ty::sty> =
             some(structure_of(fcx, expr.span, ty::mk_nil(tcx)));
-        let this_obj_info: option::t[obj_info] = get_obj_info(fcx.ccx);
+        let this_obj_info: option::t<obj_info> = get_obj_info(fcx.ccx);
         alt this_obj_info {
           some(oinfo) {
             alt oinfo {
@@ -2205,7 +2205,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
       }
       ast::expr_rec(fields, base) {
         alt base { none. {/* no-op */ } some(b_0) { check_expr(fcx, b_0); } }
-        let fields_t: [spanned[field]] = ~[];
+        let fields_t: [spanned<field>] = ~[];
         for f: ast::field in fields {
             bot |= check_expr(fcx, f.node.expr);
             let expr_t = expr_ty(tcx, f.node.expr);
@@ -2218,7 +2218,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
         }
         alt base {
           none. {
-            fn get_node(f: &spanned[field]) -> field { f.node }
+            fn get_node(f: &spanned<field>) -> field { f.node }
             let typ = ty::mk_rec(tcx, vec::map(get_node, fields_t));
             write::ty_only_fixup(fcx, id, typ);
           }
@@ -2234,7 +2234,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
               }
             }
             write::ty_only_fixup(fcx, id, bexpr_t);
-            for f: spanned[ty::field] in fields_t {
+            for f: spanned<ty::field> in fields_t {
                 let found = false;
                 for bf: ty::field in base_fields {
                     if str::eq(f.node.ident, bf.ident) {
@@ -2362,7 +2362,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
             // type.
             let inner_obj_methods: [ty::method] = ~[];
             let inner_obj_ty: ty::t = ty::mk_nil(tcx);
-            let inner_obj_sty: option::t[ty::sty] = none;
+            let inner_obj_sty: option::t<ty::sty> = none;
             alt ao.inner_obj {
               none. { }
               some(e) {
@@ -2399,7 +2399,7 @@ fn check_expr_with_unifier(fcx: &@fn_ctxt, expr: &@ast::expr,
             fn filtering_fn(ccx: @crate_ctxt,
                             m: &ty::method,
                             outer_obj_methods: [@ast::method]) ->
-                option::t[ty::method] {
+                option::t<ty::method> {
 
                 for om: @ast::method in outer_obj_methods {
                     if str::eq(om.node.ident, m.ident) {
@@ -2473,7 +2473,7 @@ fn next_ty_var(fcx: &@fn_ctxt) -> ty::t {
     ret ty::mk_var(fcx.ccx.tcx, next_ty_var_id(fcx));
 }
 
-fn get_obj_info(ccx: &@crate_ctxt) -> option::t[obj_info] {
+fn get_obj_info(ccx: &@crate_ctxt) -> option::t<obj_info> {
     ret vec::last[obj_info](ccx.obj_infos);
 }
 
@@ -2578,7 +2578,7 @@ fn check_const(ccx: &@crate_ctxt, sp: &span, e: &@ast::expr,
 }
 
 fn check_fn(ccx: &@crate_ctxt, f: &ast::_fn, id: &ast::node_id,
-            old_fcx: &option::t[@fn_ctxt]) {
+            old_fcx: &option::t<@fn_ctxt>) {
     let decl = f.decl;
     let body = f.body;
     let gather_result = gather_locals(ccx, f, id, old_fcx);
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs
index 53e00e8c6b4..05a9f86d04e 100644
--- a/src/comp/syntax/ast.rs
+++ b/src/comp/syntax/ast.rs
@@ -6,7 +6,7 @@ import codemap::span;
 import codemap::filename;
 
 type spanned[T] = {node: T, span: span};
-fn respan[T](sp: &span, t: &T) -> spanned[T] { ret {node: t, span: sp}; }
+fn respan[T](sp: &span, t: &T) -> spanned<T> { ret {node: t, span: sp}; }
 
 /* assuming that we're not in macro expansion */
 fn mk_sp(lo: uint, hi: uint) -> span {
@@ -18,14 +18,14 @@ fn dummy_sp() -> span { ret mk_sp(0u, 0u); }
 
 type ident = str;
 // Functions may or may not have names.
-type fn_ident = option::t[ident];
+type fn_ident = option::t<ident>;
 
 // FIXME: with typestate constraint, could say
 // idents and types are the same length, and are
 // non-empty
 type path_ = {global: bool, idents: [ident], types: [@ty]};
 
-type path = spanned[path_];
+type path = spanned<path_>;
 
 fn path_name(p: &path) -> str { path_name_i(p.node.idents) }
 
@@ -90,7 +90,7 @@ fn def_id_of_def(d: def) -> def_id {
 // used to drive conditional compilation
 type crate_cfg = [@meta_item];
 
-type crate = spanned[crate_];
+type crate = spanned<crate_>;
 
 type crate_ =
     {directives: [@crate_directive],
@@ -99,9 +99,9 @@ type crate_ =
      config: crate_cfg};
 
 tag crate_directive_ {
-    cdir_src_mod(ident, option::t[filename], [attribute]);
+    cdir_src_mod(ident, option::t<filename>, [attribute]);
     cdir_dir_mod(ident,
-                 option::t[filename],
+                 option::t<filename>,
                  [@crate_directive],
                  [attribute]);
     cdir_view_item(@view_item);
@@ -109,9 +109,9 @@ tag crate_directive_ {
     cdir_auth(path, _auth);
 }
 
-type crate_directive = spanned[crate_directive_];
+type crate_directive = spanned<crate_directive_>;
 
-type meta_item = spanned[meta_item_];
+type meta_item = spanned<meta_item_>;
 
 tag meta_item_ {
     meta_word(ident);
@@ -119,9 +119,9 @@ tag meta_item_ {
     meta_name_value(ident, lit);
 }
 
-type blk = spanned[blk_];
+type blk = spanned<blk_>;
 
-type blk_ = {stmts: [@stmt], expr: option::t[@expr], id: node_id};
+type blk_ = {stmts: [@stmt], expr: option::t<@expr>, id: node_id};
 
 type pat = {id: node_id, node: pat_, span: span};
 
@@ -137,7 +137,7 @@ tag pat_ {
     pat_box(@pat);
 }
 
-type pat_id_map = std::map::hashmap[str, ast::node_id];
+type pat_id_map = std::map::hashmap<str, ast::node_id>;
 
 // This is used because same-named variables in alternative patterns need to
 // use the node_id of their namesake in the first pattern.
@@ -252,7 +252,7 @@ fn unop_to_str(op: unop) -> str {
 
 tag mode { val; alias(bool); move; }
 
-type stmt = spanned[stmt_];
+type stmt = spanned<stmt_>;
 
 tag stmt_ {
     stmt_decl(@decl, node_id);
@@ -267,12 +267,12 @@ type initializer = {op: init_op, expr: @expr};
 
 type local_ = {ty: @ty,
                pat: @pat,
-               init: option::t[initializer],
+               init: option::t<initializer>,
                id: node_id};
 
-type local = spanned[local_];
+type local = spanned<local_>;
 
-type decl = spanned[decl_];
+type decl = spanned<decl_>;
 
 tag decl_ { decl_local([@local]); decl_item(@item); }
 
@@ -280,7 +280,7 @@ type arm = {pats: [@pat], body: blk};
 
 type field_ = {mut: mutability, ident: ident, expr: @expr};
 
-type field = spanned[field_];
+type field = spanned<field_>;
 
 tag spawn_dom { dom_implicit; dom_thread; }
 
@@ -293,16 +293,16 @@ type expr = {id: node_id, node: expr_, span: span};
 
 tag expr_ {
     expr_vec([@expr], mutability, seq_kind);
-    expr_rec([field], option::t[@expr]);
+    expr_rec([field], option::t<@expr>);
     expr_call(@expr, [@expr]);
     expr_tup([@expr]);
     expr_self_method(ident);
-    expr_bind(@expr, [option::t[@expr]]);
+    expr_bind(@expr, [option::t<@expr>]);
     expr_binary(binop, @expr, @expr);
     expr_unary(unop, @expr);
     expr_lit(@lit);
     expr_cast(@expr, @ty);
-    expr_if(@expr, blk, option::t[@expr]);
+    expr_if(@expr, blk, option::t<@expr>);
     expr_ternary(@expr, @expr, @expr);
     expr_while(@expr, blk);
     expr_for(@local, @expr, blk);
@@ -323,11 +323,11 @@ tag expr_ {
     expr_field(@expr, ident);
     expr_index(@expr, @expr);
     expr_path(path);
-    expr_fail(option::t[@expr]);
+    expr_fail(option::t<@expr>);
     expr_break;
     expr_cont;
-    expr_ret(option::t[@expr]);
-    expr_put(option::t[@expr]);
+    expr_ret(option::t<@expr>);
+    expr_put(option::t<@expr>);
     expr_be(@expr);
     expr_log(int, @expr);
     /* just an assert, no significance to typestate */
@@ -336,22 +336,22 @@ tag expr_ {
     expr_check(check_mode, @expr);
     /* FIXME Would be nice if expr_check desugared
        to expr_if_check. */
-    expr_if_check(@expr, blk, option::t[@expr]);
+    expr_if_check(@expr, blk, option::t<@expr>);
     expr_anon_obj(anon_obj);
     expr_mac(mac);
     expr_uniq(@expr);
 }
 
-type mac = spanned[mac_];
+type mac = spanned<mac_>;
 
 tag mac_ {
-    mac_invoc(path, @expr, option::t[str]);
+    mac_invoc(path, @expr, option::t<str>);
     mac_embed_type(@ty);
     mac_embed_block(blk);
     mac_ellipsis;
 }
 
-type lit = spanned[lit_];
+type lit = spanned<lit_>;
 
 tag lit_ {
     lit_str(str, seq_kind);
@@ -386,11 +386,11 @@ type ty_method_ =
      cf: controlflow,
      constrs: [@constr]};
 
-type ty_field = spanned[ty_field_];
+type ty_field = spanned<ty_field_>;
 
-type ty_arg = spanned[ty_arg_];
+type ty_arg = spanned<ty_arg_>;
 
-type ty_method = spanned[ty_method_];
+type ty_method = spanned<ty_method_>;
 
 tag ty_mach {
     ty_i8;
@@ -420,7 +420,7 @@ fn ty_mach_to_str(tm: ty_mach) -> str {
     }
 }
 
-type ty = spanned[ty_];
+type ty = spanned<ty_>;
 
 tag ty_ {
     ty_nil;
@@ -470,10 +470,10 @@ declarations, and ident for uses.
 */
 tag constr_arg_general_[T] { carg_base; carg_ident(T); carg_lit(@lit); }
 
-type fn_constr_arg = constr_arg_general_[uint];
-type sp_constr_arg[T] = spanned[constr_arg_general_[T]];
-type ty_constr_arg = sp_constr_arg[path];
-type constr_arg = spanned[fn_constr_arg];
+type fn_constr_arg = constr_arg_general_<uint>;
+type sp_constr_arg[T] = spanned<constr_arg_general_<T>>;
+type ty_constr_arg = sp_constr_arg<path>;
+type constr_arg = spanned<fn_constr_arg>;
 
 // Constrained types' args are parameterized by paths, since
 // we refer to paths directly and not by indices.
@@ -481,15 +481,15 @@ type constr_arg = spanned[fn_constr_arg];
 // constrained type, is * (referring to the base record)
 
 type constr_general_[ARG, ID] =
-    {path: path, args: [@spanned[constr_arg_general_[ARG]]], id: ID};
+    {path: path, args: [@spanned<constr_arg_general_<ARG>>], id: ID};
 
 // In the front end, constraints have a node ID attached.
 // Typeck turns this to a def_id, using the output of resolve.
-type constr_general[ARG] = spanned[constr_general_[ARG, node_id]];
-type constr_ = constr_general_[uint, node_id];
-type constr = spanned[constr_general_[uint, node_id]];
-type ty_constr_ = ast::constr_general_[ast::path, ast::node_id];
-type ty_constr = spanned[ty_constr_];
+type constr_general[ARG] = spanned<constr_general_<ARG, node_id>>;
+type constr_ = constr_general_<uint, node_id>;
+type constr = spanned<constr_general_<uint, node_id>>;
+type ty_constr_ = ast::constr_general_<ast::path, ast::node_id>;
+type ty_constr = spanned<ty_constr_>;
 
 /* The parser generates ast::constrs; resolve generates
  a mapping from each function to a list of ty::constr_defs,
@@ -521,7 +521,7 @@ type _fn = {decl: fn_decl, proto: proto, body: blk};
 
 type method_ = {ident: ident, meth: _fn, id: node_id};
 
-type method = spanned[method_];
+type method = spanned<method_>;
 
 type obj_field = {mut: mutability, ty: @ty, ident: ident, id: node_id};
 type anon_obj_field =
@@ -531,10 +531,10 @@ type _obj = {fields: [obj_field], methods: [@method]};
 
 type anon_obj =
     // New fields and methods, if they exist.
-    {fields: option::t[[anon_obj_field]],
+    {fields: option::t<[anon_obj_field]>,
      methods: [@method],
      // inner_obj: the original object being extended, if it exists.
-     inner_obj: option::t[@expr]};
+     inner_obj: option::t<@expr>};
 
 type _mod = {view_items: [@view_item], items: [@item]};
 
@@ -556,9 +556,9 @@ type variant_arg = {ty: @ty, id: node_id};
 
 type variant_ = {name: str, args: [variant_arg], id: node_id};
 
-type variant = spanned[variant_];
+type variant = spanned<variant_>;
 
-type view_item = spanned[view_item_];
+type view_item = spanned<view_item_>;
 
 tag view_item_ {
     view_item_use(ident, [@meta_item], node_id);
@@ -571,7 +571,7 @@ type obj_def_ids = {ty: node_id, ctor: node_id};
 
 
 // Meta-data associated with an item
-type attribute = spanned[attribute_];
+type attribute = spanned<attribute_>;
 
 
 // Distinguishes between attributes that decorate items and attributes that
@@ -607,7 +607,7 @@ type native_item =
 
 tag native_item_ {
     native_item_ty;
-    native_item_fn(option::t[str], fn_decl, [ty_param]);
+    native_item_fn(option::t<str>, fn_decl, [ty_param]);
 }
 
 fn is_exported(i: ident, m: _mod) -> bool {
diff --git a/src/comp/syntax/codemap.rs b/src/comp/syntax/codemap.rs
index 10bf7f478b7..a2542e5fddf 100644
--- a/src/comp/syntax/codemap.rs
+++ b/src/comp/syntax/codemap.rs
@@ -95,10 +95,10 @@ fn span_to_str(sp: &span, cm: &codemap) -> str {
     ret res;
 }
 
-fn emit_diagnostic(sp: &option::t[span], msg: &str, kind: &str, color: u8,
+fn emit_diagnostic(sp: &option::t<span>, msg: &str, kind: &str, color: u8,
                    cm: &codemap) {
     let ss = "<input>:0:0:0:0";
-    let maybe_lines: option::t[@file_lines] = none;
+    let maybe_lines: option::t<@file_lines> = none;
     alt sp {
       some(ssp) {
         ss = span_to_str(ssp, cm);
@@ -119,8 +119,8 @@ fn emit_diagnostic(sp: &option::t[span], msg: &str, kind: &str, color: u8,
     maybe_highlight_lines(sp, cm, maybe_lines);
 }
 
-fn maybe_highlight_lines(sp: &option::t[span], cm: &codemap,
-                         maybe_lines: option::t[@file_lines]) {
+fn maybe_highlight_lines(sp: &option::t<span>, cm: &codemap,
+                         maybe_lines: option::t<@file_lines>) {
 
     alt maybe_lines {
       some(lines) {
@@ -187,13 +187,13 @@ fn maybe_highlight_lines(sp: &option::t[span], cm: &codemap,
     }
 }
 
-fn emit_warning(sp: &option::t[span], msg: &str, cm: &codemap) {
+fn emit_warning(sp: &option::t<span>, msg: &str, cm: &codemap) {
     emit_diagnostic(sp, msg, "warning", 11u8, cm);
 }
-fn emit_error(sp: &option::t[span], msg: &str, cm: &codemap) {
+fn emit_error(sp: &option::t<span>, msg: &str, cm: &codemap) {
     emit_diagnostic(sp, msg, "error", 9u8, cm);
 }
-fn emit_note(sp: &option::t[span], msg: &str, cm: &codemap) {
+fn emit_note(sp: &option::t<span>, msg: &str, cm: &codemap) {
     emit_diagnostic(sp, msg, "note", 10u8, cm);
 }
 
diff --git a/src/comp/syntax/ext/base.rs b/src/comp/syntax/ext/base.rs
index 47048ed1951..5a9b3ac1d19 100644
--- a/src/comp/syntax/ext/base.rs
+++ b/src/comp/syntax/ext/base.rs
@@ -7,10 +7,10 @@ import std::map::new_str_hash;
 import codemap;
 
 type syntax_expander =
-    fn(&ext_ctxt, span, @ast::expr, option::t[str]) -> @ast::expr ;
+    fn(&ext_ctxt, span, @ast::expr, option::t<str>) -> @ast::expr ;
 type macro_def = {ident: str, ext: syntax_extension};
 type macro_definer =
-    fn(&ext_ctxt, span, @ast::expr, option::t[str]) -> macro_def ;
+    fn(&ext_ctxt, span, @ast::expr, option::t<str>) -> macro_def ;
 
 tag syntax_extension {
     normal(syntax_expander);
@@ -19,7 +19,7 @@ tag syntax_extension {
 
 // A temporary hard-coded map of methods for expanding syntax extension
 // AST nodes into full ASTs
-fn syntax_expander_table() -> hashmap[str, syntax_extension] {
+fn syntax_expander_table() -> hashmap<str, syntax_extension> {
     let syntax_expanders = new_str_hash[syntax_extension]();
     syntax_expanders.insert("fmt", normal(ext::fmt::expand_syntax_ext));
     syntax_expanders.insert("env", normal(ext::env::expand_syntax_ext));
diff --git a/src/comp/syntax/ext/concat_idents.rs b/src/comp/syntax/ext/concat_idents.rs
index f21af93668f..43ec2488816 100644
--- a/src/comp/syntax/ext/concat_idents.rs
+++ b/src/comp/syntax/ext/concat_idents.rs
@@ -3,7 +3,7 @@ import base::*;
 import syntax::ast;
 
 fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr,
-                     body: option::t[str]) -> @ast::expr {
+                     body: option::t<str>) -> @ast::expr {
     let args: [@ast::expr] = alt arg.node {
       ast::expr_vec(elts, _, _) { elts }
       _ { cx.span_fatal(sp, "#concat_idents requires a vector argument .") }
diff --git a/src/comp/syntax/ext/env.rs b/src/comp/syntax/ext/env.rs
index 5a53f26a007..498792b80b0 100644
--- a/src/comp/syntax/ext/env.rs
+++ b/src/comp/syntax/ext/env.rs
@@ -11,7 +11,7 @@ import base::*;
 export expand_syntax_ext;
 
 fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr,
-                     body: option::t[str]) -> @ast::expr {
+                     body: option::t<str>) -> @ast::expr {
     let args: [@ast::expr] = alt arg.node {
       ast::expr_vec(elts, _, _) { elts }
       _ { cx.span_fatal(sp, "#env requires arguments of the form `[...]`.") }
@@ -20,7 +20,7 @@ fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr,
         cx.span_fatal(sp, "malformed #env call");
     }
     // FIXME: if this was more thorough it would manufacture an
-    // option::t[str] rather than just an maybe-empty string.
+    // option::t<str> rather than just an maybe-empty string.
 
     let var = expr_to_str(cx, args.(0), "#env requires a string");
     alt generic_os::getenv(var) {
diff --git a/src/comp/syntax/ext/expand.rs b/src/comp/syntax/ext/expand.rs
index d5e9fda2c84..044bee4ba2b 100644
--- a/src/comp/syntax/ext/expand.rs
+++ b/src/comp/syntax/ext/expand.rs
@@ -14,7 +14,7 @@ import syntax::fold::*;
 import syntax::ext::base::*;
 
 
-fn expand_expr(exts: &hashmap[str, syntax_extension], cx: &ext_ctxt,
+fn expand_expr(exts: &hashmap<str, syntax_extension>, cx: &ext_ctxt,
                e: &expr_, fld: ast_fold,
                orig: &fn(&expr_, ast_fold) -> expr_ ) -> expr_ {
     ret alt e {
diff --git a/src/comp/syntax/ext/fmt.rs b/src/comp/syntax/ext/fmt.rs
index b8ab57303df..fd0ba7d4d01 100644
--- a/src/comp/syntax/ext/fmt.rs
+++ b/src/comp/syntax/ext/fmt.rs
@@ -16,7 +16,7 @@ import codemap::span;
 export expand_syntax_ext;
 
 fn expand_syntax_ext(cx: &ext_ctxt, sp: span, arg: @ast::expr,
-                     body: option::t[str]) -> @ast::expr {
+                     body: option::t<str>) -> @ast::expr {
     let args: [@ast::expr] = alt arg.node {
       ast::expr_vec(elts, _, _) { elts }
       _ { cx.span_fatal(sp, "#fmt requires arguments of the form `[...]`.") }
diff --git a/src/comp/syntax/ext/ident_to_str.rs b/src/comp/syntax/ext/ident_to_str.rs
index c32acaf05b3..841f8221e3e 100644
--- a/src/comp/syntax/ext/ident_to_str.rs
+++ b/src/comp/syntax/ext/ident_to_str.rs
@@ -4,7 +4,7 @@ import base::*;
 import syntax::ast;
 
 fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr,
-                     body: option::t[str]) -> @ast::expr {
+                     body: option::t<str>) -> @ast::expr {
     let args: [@ast::expr] = alt arg.node {
       ast::expr_vec(elts, _, _) { elts }
       _ { cx.span_fatal(sp, "#ident_to_str requires a vector argument .") }
diff --git a/src/comp/syntax/ext/log_syntax.rs b/src/comp/syntax/ext/log_syntax.rs
index 9cd745f07f7..34c240a985c 100644
--- a/src/comp/syntax/ext/log_syntax.rs
+++ b/src/comp/syntax/ext/log_syntax.rs
@@ -3,11 +3,11 @@ import base::*;
 import syntax::ast;
 
 fn expand_syntax_ext(cx: &ext_ctxt, sp: codemap::span, arg: @ast::expr,
-                     body: option::t[str]) -> @ast::expr {
+                     body: option::t<str>) -> @ast::expr {
 
     cx.print_backtrace();
     std::io::stdout().write_line(print::pprust::expr_to_str(arg));
 
     //trivial expression
     ret @{id: cx.next_id(), node: ast::expr_rec(~[], option::none), span: sp};
-}
\ No newline at end of file
+}
diff --git a/src/comp/syntax/ext/simplext.rs b/src/comp/syntax/ext/simplext.rs
index 29f474b7878..aae2404f57b 100644
--- a/src/comp/syntax/ext/simplext.rs
+++ b/src/comp/syntax/ext/simplext.rs
@@ -32,7 +32,7 @@ import ast::mac_invoc;
 
 export add_new_extension;
 
-fn path_to_ident(pth: &path) -> option::t[ident] {
+fn path_to_ident(pth: &path) -> option::t<ident> {
     if vec::len(pth.node.idents) == 1u && vec::len(pth.node.types) == 0u {
         ret some(pth.node.idents.(0u));
     }
@@ -43,13 +43,13 @@ fn path_to_ident(pth: &path) -> option::t[ident] {
 type clause = {params: binders, body: @expr};
 
 /* logically, an arb_depth should contain only one kind of matchable */
-tag arb_depth[T] { leaf(T); seq(@[arb_depth[T]], span); }
+tag arb_depth[T] { leaf(T); seq(@[arb_depth<T>], span); }
 
 
 tag matchable {
     match_expr(@expr);
     match_path(path);
-    match_ident(ast::spanned[ident]);
+    match_ident(ast::spanned<ident>);
     match_ty(@ty);
     match_block(ast::blk);
     match_exact; /* don't bind anything, just verify the AST traversal */
@@ -88,11 +88,11 @@ fn match_error(cx: &ext_ctxt, m: &matchable, expected: &str) -> ! {
 // If we want better match failure error messages (like in Fortifying Syntax),
 // we'll want to return something indicating amount of progress and location
 // of failure instead of `none`.
-type match_result = option::t[arb_depth[matchable]];
+type match_result = option::t<arb_depth<matchable>>;
 type selector = fn(&matchable) -> match_result ;
 
 fn elts_to_ell(cx: &ext_ctxt, elts: &[@expr])
-    -> {pre: [@expr], rep: option::t[@expr], post: [@expr]} {
+    -> {pre: [@expr], rep: option::t<@expr>, post: [@expr]} {
     let idx: uint = 0u;
     let res = none;
     for elt: @expr in elts {
@@ -121,8 +121,8 @@ fn elts_to_ell(cx: &ext_ctxt, elts: &[@expr])
     }
 }
 
-fn option_flatten_map[T, U](f: &fn(&T) -> option::t[U] , v: &[T]) ->
-   option::t[[U]] {
+fn option_flatten_map[T, U](f: &fn(&T) -> option::t<U>, v: &[T]) ->
+   option::t<[U]> {
     let res = ~[];
     for elem: T in v {
         alt f(elem) { none. { ret none; } some(fv) { res += ~[fv]; } }
@@ -130,7 +130,7 @@ fn option_flatten_map[T, U](f: &fn(&T) -> option::t[U] , v: &[T]) ->
     ret some(res);
 }
 
-fn a_d_map(ad: &arb_depth[matchable], f: &selector) -> match_result {
+fn a_d_map(ad: &arb_depth<matchable>, f: &selector) -> match_result {
     alt ad {
       leaf(x) { ret f(x); }
       seq(ads, span) {
@@ -155,9 +155,9 @@ fn compose_sels(s1: selector, s2: selector) -> selector {
 
 
 type binders =
-    {real_binders: hashmap[ident, selector],
+    {real_binders: hashmap<ident, selector>,
      mutable literal_ast_matchers: [selector]};
-type bindings = hashmap[ident, arb_depth[matchable]];
+type bindings = hashmap<ident, arb_depth<matchable>>;
 
 fn acumm_bindings(cx: &ext_ctxt, b_dest: &bindings, b_src: &bindings) { }
 
@@ -182,8 +182,8 @@ fn pattern_to_selectors(cx: &ext_ctxt, e: @expr) -> binders {
 bindings. Most of the work is done in p_t_s, which generates the
 selectors. */
 
-fn use_selectors_to_bind(b: &binders, e: @expr) -> option::t[bindings] {
-    let res = new_str_hash[arb_depth[matchable]]();
+fn use_selectors_to_bind(b: &binders, e: @expr) -> option::t<bindings> {
+    let res = new_str_hash[arb_depth<matchable>]();
     //need to do this first, to check vec lengths.
     for sel: selector in b.literal_ast_matchers {
         alt sel(match_expr(e)) { none. { ret none; } _ { } }
@@ -230,9 +230,9 @@ fn transcribe(cx: &ext_ctxt, b: &bindings, body: @expr) -> @expr {
 
 
 /* helper: descend into a matcher */
-fn follow(m: &arb_depth[matchable], idx_path: @mutable [uint]) ->
-   arb_depth[matchable] {
-    let res: arb_depth[matchable] = m;
+fn follow(m: &arb_depth<matchable>, idx_path: @mutable [uint]) ->
+   arb_depth<matchable> {
+    let res: arb_depth<matchable> = m;
     for idx: uint in *idx_path {
         alt res {
           leaf(_) { ret res;/* end of the line */ }
@@ -242,8 +242,8 @@ fn follow(m: &arb_depth[matchable], idx_path: @mutable [uint]) ->
     ret res;
 }
 
-fn follow_for_trans(cx: &ext_ctxt, mmaybe: &option::t[arb_depth[matchable]],
-                    idx_path: @mutable [uint]) -> option::t[matchable] {
+fn follow_for_trans(cx: &ext_ctxt, mmaybe: &option::t<arb_depth<matchable>>,
+                    idx_path: @mutable [uint]) -> option::t<matchable> {
     alt mmaybe {
       none. { ret none }
       some(m) {
@@ -262,9 +262,9 @@ fn follow_for_trans(cx: &ext_ctxt, mmaybe: &option::t[arb_depth[matchable]],
 
 /* helper for transcribe_exprs: what vars from `b` occur in `e`? */
 iter free_vars(b: &bindings, e: @expr) -> ident {
-    let idents: hashmap[ident, ()] = new_str_hash[()]();
+    let idents: hashmap<ident, ()> = new_str_hash[()]();
     fn mark_ident(i: &ident, fld: ast_fold, b: &bindings,
-                  idents: &hashmap[ident, ()]) -> ident {
+                  idents: &hashmap<ident, ()>) -> ident {
         if b.contains_key(i) { idents.insert(i, ()); }
         ret i;
     }
@@ -290,7 +290,7 @@ fn transcribe_exprs(cx: &ext_ctxt, b: &bindings, idx_path: @mutable [uint],
         alt repeat_me_maybe {
           none. {}
           some(repeat_me) {
-            let repeat: option::t[{rep_count: uint, name: ident}] = none;
+            let repeat: option::t<{rep_count: uint, name: ident}> = none;
             /* we need to walk over all the free vars in lockstep, except for
             the leaves, which are just duplicated */
             for each fv: ident in free_vars(b, repeat_me) {
@@ -533,7 +533,7 @@ fn p_t_s_r_path(cx: &ext_ctxt, p: &path, s: &selector, b: &binders) {
     }
 }
 
-fn block_to_ident(blk: &blk_) -> option::t[ident] {
+fn block_to_ident(blk: &blk_) -> option::t<ident> {
     if vec::len(blk.stmts) != 0u { ret none; }
     ret alt blk.expr {
           some(expr) {
@@ -676,7 +676,7 @@ fn p_t_s_r_actual_vector(cx: &ext_ctxt, elts: [@expr], repeat_after: bool,
 }
 
 fn add_new_extension(cx: &ext_ctxt, sp: span, arg: @expr,
-                     body: option::t[str]) -> base::macro_def {
+                     body: option::t<str>) -> base::macro_def {
     let args: [@ast::expr] = alt arg.node {
       ast::expr_vec(elts, _, _) { elts }
       _ {
@@ -684,7 +684,7 @@ fn add_new_extension(cx: &ext_ctxt, sp: span, arg: @expr,
       }
     };
 
-    let macro_name: option::t[str] = none;
+    let macro_name: option::t<str> = none;
     let clauses: [@clause] = ~[];
     for arg: @expr in args {
         alt arg.node {
@@ -753,7 +753,7 @@ fn add_new_extension(cx: &ext_ctxt, sp: span, arg: @expr,
          ext: normal(ext)};
 
     fn generic_extension(cx: &ext_ctxt, sp: span, arg: @expr,
-                         body: option::t[str], clauses: [@clause]) -> @expr {
+                         body: option::t<str>, clauses: [@clause]) -> @expr {
         for c: @clause in clauses {
             alt use_selectors_to_bind(c.params, arg) {
               some(bindings) {
diff --git a/src/comp/syntax/fold.rs b/src/comp/syntax/fold.rs
index 9cf9bf3e8b4..ca318f191d8 100644
--- a/src/comp/syntax/fold.rs
+++ b/src/comp/syntax/fold.rs
@@ -497,7 +497,7 @@ fn noop_fold_local(l: &local_, fld: ast_fold) -> local_ {
          id: l.id};
 }
 
-/* temporarily eta-expand because of a compiler bug with using `fn[T]` as a
+/* temporarily eta-expand because of a compiler bug with using `fn<T>` as a
    value */
 fn noop_map_exprs(f: fn(&@expr) -> @expr , es: [@expr]) -> [@expr] {
     ret vec::map(f, es);
diff --git a/src/comp/syntax/parse/lexer.rs b/src/comp/syntax/parse/lexer.rs
index 8b7eaee1534..2d92da32273 100644
--- a/src/comp/syntax/parse/lexer.rs
+++ b/src/comp/syntax/parse/lexer.rs
@@ -20,7 +20,7 @@ type reader =
         fn init() ;
         fn bump() ;
         fn get_str_from(uint) -> str ;
-        fn get_interner() -> @interner::interner[str] ;
+        fn get_interner() -> @interner::interner<str> ;
         fn get_chpos() -> uint ;
         fn get_byte_pos() -> uint ;
         fn get_col() -> uint ;
@@ -29,7 +29,7 @@ type reader =
     };
 
 fn new_reader(cm: &codemap::codemap, src: str, filemap: codemap::filemap,
-              itr: @interner::interner[str]) -> reader {
+              itr: @interner::interner<str>) -> reader {
     obj reader(cm: codemap::codemap,
                src: str,
                len: uint,
@@ -39,7 +39,7 @@ fn new_reader(cm: &codemap::codemap, src: str, filemap: codemap::filemap,
                mutable chpos: uint,
                mutable strs: [str],
                fm: codemap::filemap,
-               itr: @interner::interner[str]) {
+               itr: @interner::interner<str>) {
         fn is_eof() -> bool { ret ch == -1 as char; }
         fn get_str_from(start: uint) -> str {
             // I'm pretty skeptical about this subtraction. What if there's a
@@ -74,7 +74,7 @@ fn new_reader(cm: &codemap::codemap, src: str, filemap: codemap::filemap,
                 ch = next.ch;
             } else { ch = -1 as char; }
         }
-        fn get_interner() -> @interner::interner[str] { ret itr; }
+        fn get_interner() -> @interner::interner<str> { ret itr; }
         fn get_col() -> uint { ret col; }
         fn get_filemap() -> codemap::filemap { ret fm; }
         fn err(m: str) {
@@ -173,7 +173,7 @@ fn digits_to_string(s: str) -> int {
     ret accum_int;
 }
 
-fn scan_exponent(rdr: &reader) -> option::t[str] {
+fn scan_exponent(rdr: &reader) -> option::t<str> {
     let c = rdr.curr();
     let rslt = "";
     if c == 'e' || c == 'E' {
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 2bbebc3c56e..3bdeef0c011 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -52,7 +52,7 @@ type parser =
         fn get_str(token::str_num) -> str ;
         fn get_reader() -> lexer::reader ;
         fn get_filemap() -> codemap::filemap ;
-        fn get_bad_expr_words() -> hashmap[str, ()] ;
+        fn get_bad_expr_words() -> hashmap<str, ()> ;
         fn get_chpos() -> uint ;
         fn get_byte_pos() -> uint ;
         fn get_id() -> node_id ;
@@ -84,7 +84,7 @@ fn new_parser(sess: parse_sess, cfg: ast::crate_cfg, rdr: lexer::reader,
                      mutable restr: restriction,
                      rdr: lexer::reader,
                      precs: @[op_spec],
-                     bad_words: hashmap[str, ()]) {
+                     bad_words: hashmap<str, ()>) {
         fn peek() -> token::token { ret tok; }
         fn bump() {
             last_tok_span = tok_span;
@@ -132,7 +132,7 @@ fn new_parser(sess: parse_sess, cfg: ast::crate_cfg, rdr: lexer::reader,
         }
         fn get_reader() -> lexer::reader { ret rdr; }
         fn get_filemap() -> codemap::filemap { ret rdr.get_filemap(); }
-        fn get_bad_expr_words() -> hashmap[str, ()] { ret bad_words; }
+        fn get_bad_expr_words() -> hashmap<str, ()> { ret bad_words; }
         fn get_chpos() -> uint { ret rdr.get_chpos(); }
         fn get_byte_pos() -> uint { ret rdr.get_byte_pos(); }
         fn get_id() -> node_id { ret next_node_id(sess); }
@@ -148,7 +148,7 @@ fn new_parser(sess: parse_sess, cfg: ast::crate_cfg, rdr: lexer::reader,
 // These are the words that shouldn't be allowed as value identifiers,
 // because, if used at the start of a line, they will cause the line to be
 // interpreted as a specific kind of statement, which would be confusing.
-fn bad_expr_word_table() -> hashmap[str, ()] {
+fn bad_expr_word_table() -> hashmap<str, ()> {
     let words = new_str_hash();
     words.insert("mod", ());
     words.insert("if", ());
@@ -224,7 +224,7 @@ fn expect_gt(p: &parser) {
     }
 }
 
-fn spanned[T](lo: uint, hi: uint, node: &T) -> spanned[T] {
+fn spanned[T](lo: uint, hi: uint, node: &T) -> spanned<T> {
     ret {node: node, span: ast::mk_sp(lo, hi)};
 }
 
@@ -429,9 +429,9 @@ fn parse_constr_in_type(p: &parser) -> @ast::ty_constr {
 }
 
 
-fn parse_constrs[T](pser: fn(&parser) -> @ast::constr_general[T] , p: &parser)
-   -> [@ast::constr_general[T]] {
-    let constrs: [@ast::constr_general[T]] = ~[];
+fn parse_constrs[T](pser: fn(&parser) -> @ast::constr_general<T>, p: &parser)
+   -> [@ast::constr_general<T>] {
+    let constrs: [@ast::constr_general<T>] = ~[];
     while true {
         let constr = pser(p);
         constrs += ~[constr];
@@ -643,7 +643,7 @@ fn parse_fn_block_arg(p: &parser) -> ast::arg {
     ret {mode: m, ty: t, ident: i, id: p.get_id()};
 }
 
-fn parse_seq_to_before_gt[T](sep: option::t[token::token],
+fn parse_seq_to_before_gt[T](sep: option::t<token::token>,
                              f: fn(&parser) -> T, p: &parser) -> [T] {
     let first = true;
     let v = ~[];
@@ -660,7 +660,7 @@ fn parse_seq_to_before_gt[T](sep: option::t[token::token],
     ret v;
 }
 
-fn parse_seq_to_gt[T](sep: option::t[token::token], f: fn(&parser) -> T,
+fn parse_seq_to_gt[T](sep: option::t<token::token>, f: fn(&parser) -> T,
                       p: &parser) -> [T] {
     let v = parse_seq_to_before_gt(sep, f, p);
     expect_gt(p);
@@ -668,8 +668,8 @@ fn parse_seq_to_gt[T](sep: option::t[token::token], f: fn(&parser) -> T,
     ret v;
 }
 
-fn parse_seq_lt_gt[T](sep: option::t[token::token], f: fn(&parser) -> T,
-                      p: &parser) -> spanned[[T]] {
+fn parse_seq_lt_gt[T](sep: option::t<token::token>, f: fn(&parser) -> T,
+                      p: &parser) -> spanned<[T]> {
     let lo = p.get_lo_pos();
     expect(p, token::LT);
     let result = parse_seq_to_before_gt[T](sep, f, p);
@@ -678,14 +678,14 @@ fn parse_seq_lt_gt[T](sep: option::t[token::token], f: fn(&parser) -> T,
     ret spanned(lo, hi, result);
 }
 
-fn parse_seq_to_end[T](ket: token::token, sep: option::t[token::token],
+fn parse_seq_to_end[T](ket: token::token, sep: option::t<token::token>,
                        f: fn(&parser) -> T , p: &parser) -> [T] {
     let val = parse_seq_to_before_end(ket, sep, f, p);
     p.bump();
     ret val;
 }
 
-fn parse_seq_to_before_end[T](ket: token::token, sep: option::t[token::token],
+fn parse_seq_to_before_end[T](ket: token::token, sep: option::t<token::token>,
                               f: fn(&parser) -> T , p: &parser) -> [T] {
     let first: bool = true;
     let v: [T] = ~[];
@@ -701,8 +701,8 @@ fn parse_seq_to_before_end[T](ket: token::token, sep: option::t[token::token],
 
 
 fn parse_seq[T](bra: token::token, ket: token::token,
-                sep: option::t[token::token], f: fn(&parser) -> T ,
-                p: &parser) -> spanned[[T]] {
+                sep: option::t<token::token>, f: fn(&parser) -> T ,
+                p: &parser) -> spanned<[T]> {
     let lo = p.get_lo_pos();
     expect(p, bra);
     let result = parse_seq_to_before_end[T](ket, sep, f, p);
@@ -955,7 +955,7 @@ fn parse_bottom_expr(p: &parser) -> @ast::expr {
         // Anonymous object
 
         // Only make people type () if they're actually adding new fields
-        let fields: option::t[[ast::anon_obj_field]] = none;
+        let fields: option::t<[ast::anon_obj_field]> = none;
         if p.peek() == token::LPAREN {
             p.bump();
             fields =
@@ -963,7 +963,7 @@ fn parse_bottom_expr(p: &parser) -> @ast::expr {
                                       parse_anon_obj_field, p));
         }
         let meths: [@ast::method] = ~[];
-        let inner_obj: option::t[@ast::expr] = none;
+        let inner_obj: option::t<@ast::expr> = none;
         expect(p, token::LBRACE);
         while p.peek() != token::RBRACE {
             if eat_word(p, "with") {
@@ -982,7 +982,7 @@ fn parse_bottom_expr(p: &parser) -> @ast::expr {
         ex = ast::expr_anon_obj(ob);
     } else if (eat_word(p, "bind")) {
         let e = parse_expr_res(p, RESTRICT_NO_CALL_EXPRS);
-        fn parse_expr_opt(p: &parser) -> option::t[@ast::expr] {
+        fn parse_expr_opt(p: &parser) -> option::t<@ast::expr> {
             alt p.peek() {
               token::UNDERSCORE. { p.bump(); ret none; }
               _ { ret some(parse_expr(p)); }
@@ -1329,13 +1329,13 @@ fn parse_assign_expr(p: &parser) -> @ast::expr {
 fn parse_if_expr_1(p: &parser) ->
    {cond: @ast::expr,
     then: ast::blk,
-    els: option::t[@ast::expr],
+    els: option::t<@ast::expr>,
     lo: uint,
     hi: uint} {
     let lo = p.get_last_lo_pos();
     let cond = parse_expr(p);
     let thn = parse_block(p);
-    let els: option::t[@ast::expr] = none;
+    let els: option::t<@ast::expr> = none;
     let hi = thn.span.hi;
     if eat_word(p, "else") {
         let elexpr = parse_else_expr(p);
@@ -1437,7 +1437,7 @@ fn parse_expr_res(p: &parser, r: restriction) -> @ast::expr {
     ret e;
 }
 
-fn parse_initializer(p: &parser) -> option::t[ast::initializer] {
+fn parse_initializer(p: &parser) -> option::t<ast::initializer> {
     alt p.peek() {
       token::EQ. {
         p.bump();
@@ -1653,7 +1653,7 @@ fn parse_source_stmt(p: &parser) -> @ast::stmt {
     }
 }
 
-fn stmt_to_expr(stmt: @ast::stmt) -> option::t[@ast::expr] {
+fn stmt_to_expr(stmt: @ast::stmt) -> option::t<@ast::expr> {
     ret alt stmt.node { ast::stmt_expr(e, _) { some(e) } _ { none } };
 }
 
@@ -1724,7 +1724,7 @@ fn parse_block(p: &parser) -> ast::blk {
 // some blocks start with "#{"...
 fn parse_block_tail(p: &parser, lo: uint) -> ast::blk {
     let stmts: [@ast::stmt] = ~[];
-    let expr: option::t[@ast::expr] = none;
+    let expr: option::t<@ast::expr> = none;
     while p.peek() != token::RBRACE {
         alt p.peek() {
           token::SEMI. {
@@ -1796,7 +1796,7 @@ fn parse_ty_params(p: &parser) -> [ast::ty_param] {
 
 fn parse_fn_decl(p: &parser, purity: ast::purity, il: ast::inlineness)
         -> ast::fn_decl {
-    let inputs: ast::spanned[[ast::arg]] =
+    let inputs: ast::spanned<[ast::arg]> =
         parse_seq(token::LPAREN, token::RPAREN, some(token::COMMA), parse_arg,
                   p);
     let rslt: ty_or_bang;
@@ -1835,7 +1835,7 @@ fn parse_fn_decl(p: &parser, purity: ast::purity, il: ast::inlineness)
 }
 
 fn parse_fn_block_decl(p: &parser) -> ast::fn_decl {
-    let inputs: ast::spanned[[ast::arg]] =
+    let inputs: ast::spanned<[ast::arg]> =
         parse_seq(token::BINOP(token::OR), token::BINOP(token::OR),
                   some(token::COMMA), parse_fn_block_arg, p);
     ret {inputs: inputs.node,
@@ -1910,7 +1910,7 @@ fn parse_item_obj(p: &parser, attrs: &[ast::attribute]) ->
     let lo = p.get_last_lo_pos();
     let ident = parse_value_ident(p);
     let ty_params = parse_ty_params(p);
-    let fields: ast::spanned[[ast::obj_field]] =
+    let fields: ast::spanned<[ast::obj_field]> =
         parse_seq(token::LPAREN, token::RPAREN, some(token::COMMA),
                   parse_obj_field, p);
     let meths: [@ast::method] = ~[];
@@ -2171,7 +2171,7 @@ fn parse_auth(p: &parser) -> ast::_auth {
     } else { unexpected(p, p.peek()); }
 }
 
-fn parse_item(p: &parser, attrs: &[ast::attribute]) -> option::t[@ast::item] {
+fn parse_item(p: &parser, attrs: &[ast::attribute]) -> option::t<@ast::item> {
     if eat_word(p, "const") {
         ret some(parse_item_const(p, attrs));
     } else if (eat_word(p, "inline")) {
@@ -2207,7 +2207,7 @@ fn parse_item(p: &parser, attrs: &[ast::attribute]) -> option::t[@ast::item] {
 
 // A type to distingush between the parsing of item attributes or syntax
 // extensions, which both begin with token.POUND
-type attr_or_ext = option::t[either::t[[ast::attribute], @ast::expr]];
+type attr_or_ext = option::t<either::t<[ast::attribute], @ast::expr>>;
 
 fn parse_outer_attrs_or_ext(p: &parser) -> attr_or_ext {
     if p.peek() == token::POUND {
@@ -2311,7 +2311,7 @@ fn parse_use(p: &parser) -> ast::view_item_ {
 }
 
 fn parse_rest_import_name(p: &parser, first: ast::ident,
-                          def_ident: option::t[ast::ident]) ->
+                          def_ident: option::t<ast::ident>) ->
    ast::view_item_ {
     let identifiers: [ast::ident] = ~[first];
     let glob: bool = false;
diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs
index f7a967fd57c..330b859aa85 100644
--- a/src/comp/syntax/print/pprust.rs
+++ b/src/comp/syntax/print/pprust.rs
@@ -40,9 +40,9 @@ fn no_ann() -> pp_ann {
 
 type ps =
     @{s: pp::printer,
-      cm: option::t[codemap],
-      comments: option::t[[lexer::cmnt]],
-      literals: option::t[[lexer::lit]],
+      cm: option::t<codemap>,
+      comments: option::t<[lexer::cmnt]>,
+      literals: option::t<[lexer::lit]>,
       mutable cur_cmnt: uint,
       mutable cur_lit: uint,
       mutable boxes: [pp::breaks],
@@ -619,7 +619,7 @@ fn print_possibly_embedded_block(s: &ps, blk: &ast::blk, embedded: embed_type,
     // followed by a unary op statement. In those cases we have to add an
     // extra semi to make sure the unop is not parsed as a binop with the
     // if/alt/block expression.
-    fn maybe_protect_unop(s: &ps, last: &option::t[@ast::stmt],
+    fn maybe_protect_unop(s: &ps, last: &option::t<@ast::stmt>,
                           next: &expr_or_stmt) {
         let last_expr_is_block = alt last {
           option::some(@{node: ast::stmt_expr(e, _), _}) {
@@ -651,13 +651,13 @@ fn print_possibly_embedded_block(s: &ps, blk: &ast::blk, embedded: embed_type,
 }
 
 fn print_if(s: &ps, test: &@ast::expr, blk: &ast::blk,
-            elseopt: &option::t[@ast::expr], chk: bool) {
+            elseopt: &option::t<@ast::expr>, chk: bool) {
     head(s, "if");
     if chk { word_nbsp(s, "check"); }
     print_expr(s, test);
     space(s.s);
     print_block(s, blk);
-    fn do_else(s: &ps, els: option::t[@ast::expr]) {
+    fn do_else(s: &ps, els: option::t<@ast::expr>) {
         alt els {
           some(_else) {
             alt _else.node {
@@ -773,7 +773,7 @@ fn print_expr(s: &ps, expr: &@ast::expr) {
         print_ident(s, ident);
       }
       ast::expr_bind(func, args) {
-        fn print_opt(s: &ps, expr: &option::t[@ast::expr]) {
+        fn print_opt(s: &ps, expr: &option::t<@ast::expr>) {
             alt expr {
               some(expr) { print_expr(s, expr); }
               _ { word(s.s, "_"); }
@@ -1325,7 +1325,7 @@ fn print_mt(s: &ps, mt: &ast::mt) {
     print_type(s, mt.ty);
 }
 
-fn print_ty_fn(s: &ps, proto: &ast::proto, id: &option::t[str],
+fn print_ty_fn(s: &ps, proto: &ast::proto, id: &option::t<str>,
                inputs: &[ast::ty_arg], output: &@ast::ty,
                cf: &ast::controlflow, constrs: &[@ast::constr]) {
     ibox(s, indent_unit);
@@ -1355,7 +1355,7 @@ fn print_ty_fn(s: &ps, proto: &ast::proto, id: &option::t[str],
 }
 
 fn maybe_print_trailing_comment(s: &ps, span: codemap::span,
-                                next_pos: option::t[uint]) {
+                                next_pos: option::t<uint>) {
     let cm;
     alt s.cm { some(ccm) { cm = ccm; } _ { ret; } }
     alt next_comment(s) {
@@ -1431,7 +1431,7 @@ fn print_literal(s: &ps, lit: &@ast::lit) {
 
 fn lit_to_str(l: &@ast::lit) -> str { be to_str(l, print_literal); }
 
-fn next_lit(s: &ps) -> option::t[lexer::lit] {
+fn next_lit(s: &ps) -> option::t<lexer::lit> {
     alt s.literals {
       some(lits) {
         if s.cur_lit < vec::len(lits) {
@@ -1523,7 +1523,7 @@ fn to_str[T](t: &T, f: fn(&ps, &T) ) -> str {
     ret writer.get_str();
 }
 
-fn next_comment(s: &ps) -> option::t[lexer::cmnt] {
+fn next_comment(s: &ps) -> option::t<lexer::cmnt> {
     alt s.comments {
       some(cmnts) {
         if s.cur_cmnt < vec::len(cmnts) {
@@ -1537,10 +1537,10 @@ fn next_comment(s: &ps) -> option::t[lexer::cmnt] {
 // Removing the aliases from the type of f in the next two functions
 // triggers memory corruption, but I haven't isolated the bug yet. FIXME
 fn constr_args_to_str[T](f: &fn(&T) -> str ,
-                         args: &[@ast::sp_constr_arg[T]]) -> str {
+                         args: &[@ast::sp_constr_arg<T>]) -> str {
     let comma = false;
     let s = "(";
-    for a: @ast::sp_constr_arg[T] in args {
+    for a: @ast::sp_constr_arg<T> in args {
         if comma { s += ", "; } else { comma = true; }
         s += constr_arg_to_str[T](f, a.node);
     }
@@ -1548,7 +1548,7 @@ fn constr_args_to_str[T](f: &fn(&T) -> str ,
     ret s;
 }
 
-fn constr_arg_to_str[T](f: &fn(&T) -> str , c: &ast::constr_arg_general_[T])
+fn constr_arg_to_str[T](f: &fn(&T) -> str, c: &ast::constr_arg_general_<T>)
    -> str {
     alt c {
       ast::carg_base. { ret "*"; }
diff --git a/src/comp/syntax/untyped_ast.rs b/src/comp/syntax/untyped_ast.rs
index 39982ec4ca4..ad92513ede0 100644
--- a/src/comp/syntax/untyped_ast.rs
+++ b/src/comp/syntax/untyped_ast.rs
@@ -9,9 +9,9 @@ import codemap::span;
 import codemap::filename;
 
 tag ast_node {
-    branch(node_name, option::t[span], (@ast_node)[]);
+    branch(node_name, option::t<span>, (@ast_node)[]);
     i_seq((@ast_node)[]);
-    i_opt(option::t[@ast_node]);
+    i_opt(option::t<@ast_node>);
     l_bool(bool);
     l_ident(ident);
     l_fn_ident(fn_ident);
@@ -44,8 +44,8 @@ tag ast_node {
     l_attr_style;
 
     // these could be avoided, at the cost of making #br_* more convoluted
-    l_optional_filename(option::t[filename]);
-    l_optional_string(option::t[str]);
+    l_optional_filename(option::t<filename>);
+    l_optional_string(option::t<str>);
     l_seq_ident(ident[]);
     l_seq_ty_param(ty_param[]);
 
@@ -245,7 +245,7 @@ type ctx = {
 
 /** Type of failure function: to be invoked if typification fails.
     It's hopefully a bug for this to be invoked without a span. */
-type ff = fn(sp: option::t[span], msg: str) -> !;
+type ff = fn(sp: option::t<span>, msg: str) -> !;
 
 fn dummy() {
 
@@ -384,8 +384,8 @@ fn seq_cv[T](conversion: fn (&ctx, &@ast_node) -> T)
 }
 
 fn opt_cv[T](conversion: fn (&ctx, &@ast_node) -> T)
-    -> fn (&ctx, @ast_node) -> option::t[T] {
-    ret lambda(ctx: &ctx, ut: @ast_node) -> option::t[T] {
+    -> fn (&ctx, @ast_node) -> option::t<T> {
+    ret lambda(ctx: &ctx, ut: @ast_node) -> option::t<T> {
         ret alt *ut {
           i_opt(ut_maybe) { option::map(bind conversion(ctx, _), ut_maybe) }
           branch(_, sp, _) {
diff --git a/src/comp/syntax/util/interner.rs b/src/comp/syntax/util/interner.rs
index 3dbda76f5d9..b0838d5329d 100644
--- a/src/comp/syntax/util/interner.rs
+++ b/src/comp/syntax/util/interner.rs
@@ -11,17 +11,17 @@ import std::option::none;
 import std::option::some;
 
 type interner[T] =
-    {map: hashmap[T, uint],
+    {map: hashmap<T, uint>,
      mutable vect: [T],
-     hasher: hashfn[T],
-     eqer: eqfn[T]};
+     hasher: hashfn<T>,
+     eqer: eqfn<T>};
 
-fn mk[@T](hasher: hashfn[T], eqer: eqfn[T]) -> interner[T] {
+fn mk[@T](hasher: hashfn<T>, eqer: eqfn<T>) -> interner<T> {
     let m = map::mk_hashmap[T, uint](hasher, eqer);
     ret {map: m, mutable vect: ~[], hasher: hasher, eqer: eqer};
 }
 
-fn intern[@T](itr: &interner[T], val: &T) -> uint {
+fn intern[@T](itr: &interner<T>, val: &T) -> uint {
     alt itr.map.find(val) {
       some(idx) { ret idx; }
       none. {
@@ -33,7 +33,7 @@ fn intern[@T](itr: &interner[T], val: &T) -> uint {
     }
 }
 
-fn get[T](itr: &interner[T], idx: uint) -> T { ret itr.vect.(idx); }
+fn get[T](itr: &interner<T>, idx: uint) -> T { ret itr.vect.(idx); }
 
-fn len[T](itr : &interner[T]) -> uint { ret vec::len(itr.vect); }
+fn len[T](itr : &interner<T>) -> uint { ret vec::len(itr.vect); }
 
diff --git a/src/comp/syntax/visit.rs b/src/comp/syntax/visit.rs
index 2f259ddcc30..8f4323e5c17 100644
--- a/src/comp/syntax/visit.rs
+++ b/src/comp/syntax/visit.rs
@@ -14,28 +14,28 @@ import codemap::span;
 
 // Our typesystem doesn't do circular types, so the visitor record can not
 // hold functions that take visitors. A vt tag is used to break the cycle.
-tag vt[E] { mk_vt(visitor[E]); }
+tag vt[E] { mk_vt(visitor<E>); }
 
 type visitor[E] =
     // takes the components so that one function can be
     // generic over constr and ty_constr
-    @{visit_mod: fn(&_mod, &span, &E, &vt[E]) ,
-      visit_view_item: fn(&@view_item, &E, &vt[E]) ,
-      visit_native_item: fn(&@native_item, &E, &vt[E]) ,
-      visit_item: fn(&@item, &E, &vt[E]) ,
-      visit_local: fn(&@local, &E, &vt[E]) ,
-      visit_block: fn(&ast::blk, &E, &vt[E]) ,
-      visit_stmt: fn(&@stmt, &E, &vt[E]) ,
-      visit_arm: fn(&arm, &E, &vt[E]) ,
-      visit_pat: fn(&@pat, &E, &vt[E]) ,
-      visit_decl: fn(&@decl, &E, &vt[E]) ,
-      visit_expr: fn(&@expr, &E, &vt[E]) ,
-      visit_ty: fn(&@ty, &E, &vt[E]) ,
-      visit_constr: fn(&path, &span, node_id, &E, &vt[E]) ,
+    @{visit_mod: fn(&_mod, &span, &E, &vt<E>),
+      visit_view_item: fn(&@view_item, &E, &vt<E>),
+      visit_native_item: fn(&@native_item, &E, &vt<E>),
+      visit_item: fn(&@item, &E, &vt<E>),
+      visit_local: fn(&@local, &E, &vt<E>),
+      visit_block: fn(&ast::blk, &E, &vt<E>),
+      visit_stmt: fn(&@stmt, &E, &vt<E>),
+      visit_arm: fn(&arm, &E, &vt<E>),
+      visit_pat: fn(&@pat, &E, &vt<E>),
+      visit_decl: fn(&@decl, &E, &vt<E>),
+      visit_expr: fn(&@expr, &E, &vt<E>),
+      visit_ty: fn(&@ty, &E, &vt<E>),
+      visit_constr: fn(&path, &span, node_id, &E, &vt<E>),
       visit_fn:
-          fn(&_fn, &[ty_param], &span, &fn_ident, node_id, &E, &vt[E]) };
+          fn(&_fn, &[ty_param], &span, &fn_ident, node_id, &E, &vt<E>) };
 
-fn default_visitor[E]() -> visitor[E] {
+fn default_visitor[E]() -> visitor<E> {
     ret @{visit_mod: bind visit_mod[E](_, _, _, _),
           visit_view_item: bind visit_view_item[E](_, _, _),
           visit_native_item: bind visit_native_item[E](_, _, _),
@@ -52,11 +52,11 @@ fn default_visitor[E]() -> visitor[E] {
           visit_fn: bind visit_fn[E](_, _, _, _, _, _, _)};
 }
 
-fn visit_crate[E](c: &crate, e: &E, v: &vt[E]) {
+fn visit_crate[E](c: &crate, e: &E, v: &vt<E>) {
     v.visit_mod(c.node.module, c.span, e, v);
 }
 
-fn visit_crate_directive[E](cd: &@crate_directive, e: &E, v: &vt[E]) {
+fn visit_crate_directive[E](cd: &@crate_directive, e: &E, v: &vt<E>) {
     alt cd.node {
       cdir_src_mod(_, _, _) { }
       cdir_dir_mod(_, _, cdirs, _) {
@@ -70,20 +70,20 @@ fn visit_crate_directive[E](cd: &@crate_directive, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_mod[E](m: &_mod, sp: &span, e: &E, v: &vt[E]) {
+fn visit_mod[E](m: &_mod, sp: &span, e: &E, v: &vt<E>) {
     for vi: @view_item in m.view_items { v.visit_view_item(vi, e, v); }
     for i: @item in m.items { v.visit_item(i, e, v); }
 }
 
-fn visit_view_item[E](vi: &@view_item, e: &E, v: &vt[E]) { }
+fn visit_view_item[E](vi: &@view_item, e: &E, v: &vt<E>) { }
 
-fn visit_local[E](loc: &@local, e: &E, v: &vt[E]) {
+fn visit_local[E](loc: &@local, e: &E, v: &vt<E>) {
     v.visit_pat(loc.node.pat, e, v);
     v.visit_ty(loc.node.ty, e, v);
     alt loc.node.init { none. { } some(i) { v.visit_expr(i.expr, e, v); } }
 }
 
-fn visit_item[E](i: &@item, e: &E, v: &vt[E]) {
+fn visit_item[E](i: &@item, e: &E, v: &vt<E>) {
     alt i.node {
       item_const(t, ex) { v.visit_ty(t, e, v); v.visit_expr(ex, e, v); }
       item_fn(f, tp) { v.visit_fn(f, tp, i.span, some(i.ident), i.id, e, v); }
@@ -111,7 +111,7 @@ fn visit_item[E](i: &@item, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_ty[E](t: &@ty, e: &E, v: &vt[E]) {
+fn visit_ty[E](t: &@ty, e: &E, v: &vt<E>) {
     alt t.node {
       ty_nil. {/* no-op */ }
       ty_bot. {/* no-op */ }
@@ -153,7 +153,7 @@ fn visit_ty[E](t: &@ty, e: &E, v: &vt[E]) {
       ty_type. {/* no-op */ }
       ty_constr(t, cs) {
         v.visit_ty(t, e, v);
-        for tc: @spanned[constr_general_[path, node_id]] in cs {
+        for tc: @spanned<constr_general_<path, node_id>> in cs {
             v.visit_constr(tc.node.path, tc.span, tc.node.id, e, v);
         }
       }
@@ -162,11 +162,11 @@ fn visit_ty[E](t: &@ty, e: &E, v: &vt[E]) {
 }
 
 fn visit_constr[E](operator: &path, sp: &span, id: node_id, e: &E,
-                   v: &vt[E]) {
+                   v: &vt<E>) {
     // default
 }
 
-fn visit_pat[E](p: &@pat, e: &E, v: &vt[E]) {
+fn visit_pat[E](p: &@pat, e: &E, v: &vt<E>) {
     alt p.node {
       pat_tag(path, children) {
         for tp: @ty in path.node.types { v.visit_ty(tp, e, v); }
@@ -183,14 +183,14 @@ fn visit_pat[E](p: &@pat, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_native_item[E](ni: &@native_item, e: &E, v: &vt[E]) {
+fn visit_native_item[E](ni: &@native_item, e: &E, v: &vt<E>) {
     alt ni.node {
       native_item_fn(_, fd, _) { visit_fn_decl(fd, e, v); }
       native_item_ty. { }
     }
 }
 
-fn visit_fn_decl[E](fd: &fn_decl, e: &E, v: &vt[E]) {
+fn visit_fn_decl[E](fd: &fn_decl, e: &E, v: &vt<E>) {
     for a: arg in fd.inputs { v.visit_ty(a.ty, e, v); }
     for c: @constr in fd.constraints {
         v.visit_constr(c.node.path, c.span, c.node.id, e, v);
@@ -199,17 +199,17 @@ fn visit_fn_decl[E](fd: &fn_decl, e: &E, v: &vt[E]) {
 }
 
 fn visit_fn[E](f: &_fn, tp: &[ty_param], sp: &span, i: &fn_ident, id: node_id,
-               e: &E, v: &vt[E]) {
+               e: &E, v: &vt<E>) {
     visit_fn_decl(f.decl, e, v);
     v.visit_block(f.body, e, v);
 }
 
-fn visit_block[E](b: &ast::blk, e: &E, v: &vt[E]) {
+fn visit_block[E](b: &ast::blk, e: &E, v: &vt<E>) {
     for s: @stmt in b.node.stmts { v.visit_stmt(s, e, v); }
     visit_expr_opt(b.node.expr, e, v);
 }
 
-fn visit_stmt[E](s: &@stmt, e: &E, v: &vt[E]) {
+fn visit_stmt[E](s: &@stmt, e: &E, v: &vt<E>) {
     alt s.node {
       stmt_decl(d, _) { v.visit_decl(d, e, v); }
       stmt_expr(ex, _) { v.visit_expr(ex, e, v); }
@@ -217,7 +217,7 @@ fn visit_stmt[E](s: &@stmt, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_decl[E](d: &@decl, e: &E, v: &vt[E]) {
+fn visit_decl[E](d: &@decl, e: &E, v: &vt<E>) {
     alt d.node {
       decl_local(locs) {
         for loc: @ast::local in locs { v.visit_local(loc, e, v); }
@@ -226,15 +226,15 @@ fn visit_decl[E](d: &@decl, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_expr_opt[E](eo: option::t[@expr], e: &E, v: &vt[E]) {
+fn visit_expr_opt[E](eo: option::t<@expr>, e: &E, v: &vt<E>) {
     alt eo { none. { } some(ex) { v.visit_expr(ex, e, v); } }
 }
 
-fn visit_exprs[E](exprs: &[@expr], e: &E, v: &vt[E]) {
+fn visit_exprs[E](exprs: &[@expr], e: &E, v: &vt<E>) {
     for ex: @expr in exprs { v.visit_expr(ex, e, v); }
 }
 
-fn visit_mac[E](m: mac, e: &E, v: &vt[E]) {
+fn visit_mac[E](m: mac, e: &E, v: &vt<E>) {
     alt m.node {
       ast::mac_invoc(pth, arg, body) { visit_expr(arg, e, v); }
       ast::mac_embed_type(ty) { v.visit_ty(ty, e, v); }
@@ -243,7 +243,7 @@ fn visit_mac[E](m: mac, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_expr[E](ex: &@expr, e: &E, v: &vt[E]) {
+fn visit_expr[E](ex: &@expr, e: &E, v: &vt<E>) {
     alt ex.node {
       expr_vec(es, _, _) { visit_exprs(es, e, v); }
       expr_rec(flds, base) {
@@ -260,7 +260,7 @@ fn visit_expr[E](ex: &@expr, e: &E, v: &vt[E]) {
       expr_self_method(_) { }
       expr_bind(callee, args) {
         v.visit_expr(callee, e, v);
-        for eo: option::t[@expr] in args { visit_expr_opt(eo, e, v); }
+        for eo: option::t<@expr> in args { visit_expr_opt(eo, e, v); }
       }
       expr_binary(_, a, b) { v.visit_expr(a, e, v); v.visit_expr(b, e, v); }
       expr_unary(_, a) { v.visit_expr(a, e, v); }
@@ -338,7 +338,7 @@ fn visit_expr[E](ex: &@expr, e: &E, v: &vt[E]) {
     }
 }
 
-fn visit_arm[E](a: &arm, e: &E, v: &vt[E]) {
+fn visit_arm[E](a: &arm, e: &E, v: &vt<E>) {
     for p: @pat in a.pats { v.visit_pat(p, e, v); }
     v.visit_block(a.body, e, v);
 }
@@ -384,64 +384,64 @@ fn default_simple_visitor() -> simple_visitor {
               }};
 }
 
-fn mk_simple_visitor(v: &simple_visitor) -> vt[()] {
-    fn v_mod(f: fn(&_mod, &span) , m: &_mod, sp: &span, e: &(), v: &vt[()]) {
+fn mk_simple_visitor(v: &simple_visitor) -> vt<()> {
+    fn v_mod(f: fn(&_mod, &span) , m: &_mod, sp: &span, e: &(), v: &vt<()>) {
         f(m, sp);
         visit_mod(m, sp, e, v);
     }
-    fn v_view_item(f: fn(&@view_item) , vi: &@view_item, e: &(), v: &vt[()]) {
+    fn v_view_item(f: fn(&@view_item) , vi: &@view_item, e: &(), v: &vt<()>) {
         f(vi);
         visit_view_item(vi, e, v);
     }
     fn v_native_item(f: fn(&@native_item) , ni: &@native_item, e: &(),
-                     v: &vt[()]) {
+                     v: &vt<()>) {
         f(ni);
         visit_native_item(ni, e, v);
     }
-    fn v_item(f: fn(&@item) , i: &@item, e: &(), v: &vt[()]) {
+    fn v_item(f: fn(&@item) , i: &@item, e: &(), v: &vt<()>) {
         f(i);
         visit_item(i, e, v);
     }
-    fn v_local(f: fn(&@local) , l: &@local, e: &(), v: &vt[()]) {
+    fn v_local(f: fn(&@local) , l: &@local, e: &(), v: &vt<()>) {
         f(l);
         visit_local(l, e, v);
     }
-    fn v_block(f: fn(&ast::blk) , bl: &ast::blk, e: &(), v: &vt[()]) {
+    fn v_block(f: fn(&ast::blk) , bl: &ast::blk, e: &(), v: &vt<()>) {
         f(bl);
         visit_block(bl, e, v);
     }
-    fn v_stmt(f: fn(&@stmt) , st: &@stmt, e: &(), v: &vt[()]) {
+    fn v_stmt(f: fn(&@stmt) , st: &@stmt, e: &(), v: &vt<()>) {
         f(st);
         visit_stmt(st, e, v);
     }
-    fn v_arm(f: fn(&arm) , a: &arm, e: &(), v: &vt[()]) {
+    fn v_arm(f: fn(&arm) , a: &arm, e: &(), v: &vt<()>) {
         f(a);
         visit_arm(a, e, v);
     }
-    fn v_pat(f: fn(&@pat) , p: &@pat, e: &(), v: &vt[()]) {
+    fn v_pat(f: fn(&@pat) , p: &@pat, e: &(), v: &vt<()>) {
         f(p);
         visit_pat(p, e, v);
     }
-    fn v_decl(f: fn(&@decl) , d: &@decl, e: &(), v: &vt[()]) {
+    fn v_decl(f: fn(&@decl) , d: &@decl, e: &(), v: &vt<()>) {
         f(d);
         visit_decl(d, e, v);
     }
-    fn v_expr(f: fn(&@expr) , ex: &@expr, e: &(), v: &vt[()]) {
+    fn v_expr(f: fn(&@expr) , ex: &@expr, e: &(), v: &vt<()>) {
         f(ex);
         visit_expr(ex, e, v);
     }
-    fn v_ty(f: fn(&@ty) , ty: &@ty, e: &(), v: &vt[()]) {
+    fn v_ty(f: fn(&@ty) , ty: &@ty, e: &(), v: &vt<()>) {
         f(ty);
         visit_ty(ty, e, v);
     }
     fn v_constr(f: fn(&path, &span, node_id) , pt: &path, sp: &span,
-                id: node_id, e: &(), v: &vt[()]) {
+                id: node_id, e: &(), v: &vt<()>) {
         f(pt, sp, id);
         visit_constr(pt, sp, id, e, v);
     }
     fn v_fn(f: fn(&_fn, &[ty_param], &span, &fn_ident, node_id) , ff: &_fn,
             tps: &[ty_param], sp: &span, ident: &fn_ident, id: node_id,
-            e: &(), v: &vt[()]) {
+            e: &(), v: &vt<()>) {
         f(ff, tps, sp, ident, id);
         visit_fn(ff, tps, sp, ident, id, e, v);
     }
diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs
index b61dad50dad..d64d553c312 100644
--- a/src/comp/util/common.rs
+++ b/src/comp/util/common.rs
@@ -28,7 +28,7 @@ import print::pprust::print_type;
 import print::pprust::print_literal;
 import print::pp::mk_printer;
 
-type flag = hashmap[str, ()];
+type flag = hashmap<str, ()>;
 
 fn def_eq(a: &ast::def_id, b: &ast::def_id) -> bool {
     ret a.crate == b.crate && a.node == b.node;
@@ -41,9 +41,9 @@ fn hash_def(d: &ast::def_id) -> uint {
     ret h;
 }
 
-fn new_def_hash[@V]() -> std::map::hashmap[ast::def_id, V] {
-    let hasher: std::map::hashfn[ast::def_id] = hash_def;
-    let eqer: std::map::eqfn[ast::def_id] = def_eq;
+fn new_def_hash[@V]() -> std::map::hashmap<ast::def_id, V> {
+    let hasher: std::map::hashfn<ast::def_id> = hash_def;
+    let eqer: std::map::eqfn<ast::def_id> = def_eq;
     ret std::map::mk_hashmap[ast::def_id, V](hasher, eqer);
 }
 
diff --git a/src/comp/util/ppaux.rs b/src/comp/util/ppaux.rs
index 4b1c3a8ad76..e79eeb224b1 100644
--- a/src/comp/util/ppaux.rs
+++ b/src/comp/util/ppaux.rs
@@ -41,7 +41,7 @@ fn ty_to_str(cx: &ctxt, typ: &t) -> str {
         let s = mode_str(input.mode);
         ret s + ty_to_str(cx, input.ty);
     }
-    fn fn_to_str(cx: &ctxt, proto: ast::proto, ident: option::t[ast::ident],
+    fn fn_to_str(cx: &ctxt, proto: ast::proto, ident: option::t<ast::ident>,
                  inputs: &[arg], output: t, cf: ast::controlflow,
                  constrs: &[@constr]) -> str {
         let s = proto_to_str(proto);
@@ -92,7 +92,7 @@ fn ty_to_str(cx: &ctxt, typ: &t) -> str {
       ty_istr. { s += "istr"; }
       ty_box(tm) { s += "@" + mt_to_str(cx, tm); }
       ty_uniq(t) { s += "~" + ty_to_str(cx, t); }
-      ty_vec(tm) { s += "vec[" + mt_to_str(cx, tm) + "]"; }
+      ty_vec(tm) { s += "vec<" + mt_to_str(cx, tm) + ">"; }
       ty_ivec(tm) { s += "[" + mt_to_str(cx, tm) + "]"; }
       ty_type. { s += "type"; }
       ty_rec(elems) {
@@ -162,7 +162,7 @@ fn constrs_str(constrs: &[@constr]) -> str {
     ret s;
 }
 
-fn ty_constr_to_str[Q](c: &@ast::spanned[ast::constr_general_[ast::path, Q]])
+fn ty_constr_to_str[Q](c: &@ast::spanned<ast::constr_general_<ast::path, Q>>)
    -> str {
     ret path_to_str(c.node.path) +
             constr_args_to_str[ast::path](path_to_str, c.node.args);