diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-07-05 17:57:34 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-07-06 11:09:08 -0700 |
| commit | ec890fff23d80da97086e89f29ef7f8d14dbaab8 (patch) | |
| tree | 6375d90036e494fd2644d020df7f56fab36cd12e /src/comp/syntax | |
| parent | 3f6c9f8d8495bb83ee9afd3894f7dd16065419d2 (diff) | |
| download | rust-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.rs | 6 | ||||
| -rw-r--r-- | src/comp/syntax/fold.rs | 4 | ||||
| -rw-r--r-- | src/comp/syntax/parse/parser.rs | 42 | ||||
| -rw-r--r-- | src/comp/syntax/print/pprust.rs | 6 |
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); } } |
