about summary refs log tree commit diff
path: root/src/comp/syntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-07-05 17:57:34 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-07-06 11:09:08 -0700
commitec890fff23d80da97086e89f29ef7f8d14dbaab8 (patch)
tree6375d90036e494fd2644d020df7f56fab36cd12e /src/comp/syntax
parent3f6c9f8d8495bb83ee9afd3894f7dd16065419d2 (diff)
downloadrust-ec890fff23d80da97086e89f29ef7f8d14dbaab8.tar.gz
rust-ec890fff23d80da97086e89f29ef7f8d14dbaab8.zip
Temp commit on the way to making meta_item into an interior vector
Diffstat (limited to 'src/comp/syntax')
-rw-r--r--src/comp/syntax/ast.rs6
-rw-r--r--src/comp/syntax/fold.rs4
-rw-r--r--src/comp/syntax/parse/parser.rs42
-rw-r--r--src/comp/syntax/print/pprust.rs6
4 files changed, 43 insertions, 15 deletions
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs
index 7bb2619429a..6b0a2f998bc 100644
--- a/src/comp/syntax/ast.rs
+++ b/src/comp/syntax/ast.rs
@@ -81,7 +81,7 @@ fn def_id_of_def(def d) -> def_id {
 
 // The set of meta_items that define the compilation environment of the crate,
 // used to drive conditional compilation
-type crate_cfg = vec[@meta_item];
+type crate_cfg = (@meta_item)[];
 
 type crate = spanned[crate_];
 
@@ -105,7 +105,7 @@ type meta_item = spanned[meta_item_];
 
 tag meta_item_ {
     meta_word(ident);
-    meta_list(ident, vec[@meta_item]);
+    meta_list(ident, (@meta_item)[]);
     meta_name_value(ident, lit);
 }
 
@@ -505,7 +505,7 @@ type variant = spanned[variant_];
 type view_item = spanned[view_item_];
 
 tag view_item_ {
-    view_item_use(ident, vec[@meta_item], node_id);
+    view_item_use(ident, (@meta_item)[], node_id);
     view_item_import(ident, vec[ident], node_id);
     view_item_import_glob(vec[ident], node_id);
     view_item_export(ident, node_id);
diff --git a/src/comp/syntax/fold.rs b/src/comp/syntax/fold.rs
index 027535396e8..ce512d00655 100644
--- a/src/comp/syntax/fold.rs
+++ b/src/comp/syntax/fold.rs
@@ -103,7 +103,7 @@ fn fold_meta_item_(&@meta_item mi, ast_fold fld) -> @meta_item {
                  case (meta_word(?id)) { meta_word(fld.fold_ident(id)) }
                  case (meta_list(?id, ?mis)) {
                      auto fold_meta_item = bind fold_meta_item_(_,fld);
-                     meta_list(id, map(fold_meta_item, mis))
+                     meta_list(id, ivec::map(fold_meta_item, mis))
                  }
                  case (meta_name_value(?id,?s)) {
                      meta_name_value(fld.fold_ident(id),s)
@@ -134,7 +134,7 @@ fn noop_fold_crate(&crate_ c, ast_fold fld) -> crate_ {
     ret rec(directives=ivec::map(fld.fold_crate_directive, c.directives),
             module=fld.fold_mod(c.module),
             attrs=ivec::map(fold_attribute, c.attrs),
-            config=vec::map(fold_meta_item, c.config));
+            config=ivec::map(fold_meta_item, c.config));
 }
 
 fn noop_fold_crate_directive(&crate_directive_ cd, ast_fold fld) 
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 78e9ec160ed..8db9a068bbe 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -591,6 +591,24 @@ fn parse_seq_to_end[T](token::token ket, option::t[token::token] sep,
     ret v;
 }
 
+fn parse_seq_to_end_ivec[T](token::token ket, option::t[token::token] sep,
+                            fn(&parser)->T  f, &parser p) -> T[] {
+    let bool first = true;
+    let T[] v = ~[];
+    while (p.peek() != ket) {
+        alt (sep) {
+            case (some(?t)) {
+                if (first) { first = false; } else { expect(p, t); }
+            }
+            case (_) { }
+        }
+        v += ~[f(p)];
+    }
+    expect(p, ket);
+    ret v;
+}
+
+
 fn parse_seq[T](token::token bra, token::token ket,
                 option::t[token::token] sep, fn(&parser) -> T  f, &parser p)
    -> ast::spanned[vec[T]] {
@@ -601,6 +619,17 @@ fn parse_seq[T](token::token bra, token::token ket,
     ret spanned(lo, hi, result);
 }
 
+fn parse_seq_ivec[T](token::token bra, token::token ket,
+                     option::t[token::token] sep,
+                     fn(&parser)->T  f, &parser p) -> ast::spanned[T[]] {
+    auto lo = p.get_lo_pos();
+    expect(p, bra);
+    auto result = parse_seq_to_end_ivec[T](ket, sep, f, p);
+    auto hi = p.get_hi_pos();
+    ret spanned(lo, hi, result);
+}
+
+
 fn parse_lit(&parser p) -> ast::lit {
     auto sp = p.get_span();
     let ast::lit_ lit = ast::lit_nil;
@@ -2186,15 +2215,15 @@ fn parse_meta_item(&parser p) -> @ast::meta_item {
     }
 }
 
-fn parse_meta_seq(&parser p) -> vec[@ast::meta_item] {
-    ret parse_seq(token::LPAREN, token::RPAREN, some(token::COMMA),
-                  parse_meta_item, p).node;
+fn parse_meta_seq(&parser p) -> (@ast::meta_item)[] {
+    ret parse_seq_ivec(token::LPAREN, token::RPAREN, some(token::COMMA),
+                       parse_meta_item, p).node;
 }
 
-fn parse_optional_meta(&parser p) -> vec[@ast::meta_item] {
+fn parse_optional_meta(&parser p) -> (@ast::meta_item)[] {
     alt (p.peek()) {
         case (token::LPAREN) { ret parse_meta_seq(p); }
-        case (_) { let vec[@ast::meta_item] v = []; ret v; }
+        case (_) { ret ~[]; }
     }
 }
 
@@ -2204,8 +2233,7 @@ fn parse_use(&parser p) -> @ast::view_item {
     auto metadata = parse_optional_meta(p);
     auto hi = p.get_hi_pos();
     expect(p, token::SEMI);
-    auto use_decl =
-        ast::view_item_use(ident, metadata, p.get_id());
+    auto use_decl = ast::view_item_use(ident, metadata, p.get_id());
     ret @spanned(lo, hi, use_decl);
 }
 
diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs
index a928976c4a8..b03262f58e8 100644
--- a/src/comp/syntax/print/pprust.rs
+++ b/src/comp/syntax/print/pprust.rs
@@ -1118,7 +1118,7 @@ fn print_meta_item(&ps s, &@ast::meta_item item) {
         case (ast::meta_list(?name, ?items)) {
             word(s.s, name);
             popen(s);
-            commasep(s, consistent, items, print_meta_item);
+            commasep_ivec(s, consistent, items, print_meta_item);
             pclose(s);
         }
     }
@@ -1132,9 +1132,9 @@ fn print_view_item(&ps s, &@ast::view_item item) {
         case (ast::view_item_use(?id, ?mta, _)) {
             head(s, "use");
             word(s.s, id);
-            if (vec::len(mta) > 0u) {
+            if (ivec::len(mta) > 0u) {
                 popen(s);
-                commasep(s, consistent, mta, print_meta_item);
+                commasep_ivec(s, consistent, mta, print_meta_item);
                 pclose(s);
             }
         }