Skip to content

Commit f17b7de

Browse files
committed
---
yaml --- r: 1188 b: refs/heads/master c: 5fd3d2c h: refs/heads/master v: v3
1 parent dfe5859 commit f17b7de

File tree

3 files changed

+41
-31
lines changed

3 files changed

+41
-31
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 35c745da03078c9bc58e6f6f2cf57c84e354f09d
2+
refs/heads/master: 5fd3d2ca5516cfe5087d802c1b207943a64653da

trunk/src/comp/front/ast.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,6 @@ tag def {
4040
type crate = spanned[crate_];
4141
type crate_ = rec(_mod module);
4242

43-
type use_node = spanned[use_node_];
44-
type use_node_ = rec(ident name, vec[@meta_item] metadata);
45-
46-
type import_node = spanned[import_node_];
47-
type import_node_ = rec(vec[ident] identifiers);
48-
49-
tag view_item {
50-
view_item_use(@use_node);
51-
view_item_import(@import_node);
52-
}
53-
5443
type meta_item = spanned[meta_item_];
5544
type meta_item_ = rec(ident name, str value);
5645

@@ -233,6 +222,12 @@ type _mod = rec(vec[@item] items,
233222
type variant_arg = rec(@ty ty, def_id id);
234223
type variant = rec(str name, vec[variant_arg] args, def_id id, ann ann);
235224

225+
type view_item = spanned[view_item_];
226+
tag view_item_ {
227+
view_item_use(ident, vec[@meta_item]);
228+
view_item_import(vec[ident]);
229+
}
230+
236231
type item = spanned[item_];
237232
tag item_ {
238233
item_const(ident, @ty, @expr, def_id, ann);

trunk/src/comp/front/parser.rs

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,17 +1662,18 @@ impure fn parse_optional_meta(parser p) -> vec[@ast.meta_item] {
16621662
}
16631663
}
16641664

1665-
impure fn parse_use(parser p) -> @ast.use_node {
1665+
impure fn parse_use(parser p) -> @ast.view_item {
16661666
auto lo = p.get_span();
16671667
auto hi = lo;
16681668
expect(p, token.USE);
16691669
auto ident = parse_ident(p);
16701670
auto metadata = parse_optional_meta(p);
16711671
expect(p, token.SEMI);
1672-
ret @spanned(lo, hi, rec(name = ident, metadata = metadata));
1672+
auto use_decl = ast.view_item_use(ident, metadata);
1673+
ret @spanned(lo, hi, use_decl);
16731674
}
16741675

1675-
impure fn parse_rest_import_name(parser p, ast.ident id) -> @ast.import_node {
1676+
impure fn parse_rest_import_name(parser p, ast.ident id) -> @ast.view_item {
16761677
auto lo = p.get_span();
16771678
auto hi = lo;
16781679
let vec[ast.ident] identifiers = vec();
@@ -1683,10 +1684,11 @@ impure fn parse_rest_import_name(parser p, ast.ident id) -> @ast.import_node {
16831684
identifiers += i;
16841685
}
16851686
p.bump();
1686-
ret @spanned(lo, hi, rec(identifiers = identifiers));
1687+
auto import_decl = ast.view_item_import(identifiers);
1688+
ret @spanned(lo, hi, import_decl);
16871689
}
16881690

1689-
impure fn parse_full_import_name(parser p) -> @ast.import_node {
1691+
impure fn parse_full_import_name(parser p) -> @ast.view_item {
16901692
alt (p.peek()) {
16911693
case (token.IDENT(?ident)) {
16921694
p.bump();
@@ -1699,7 +1701,7 @@ impure fn parse_full_import_name(parser p) -> @ast.import_node {
16991701
fail;
17001702
}
17011703

1702-
impure fn parse_import(parser p) -> @ast.import_node {
1704+
impure fn parse_import(parser p) -> @ast.view_item {
17031705
expect(p, token.IMPORT);
17041706
alt (p.peek()) {
17051707
case (token.IDENT(?ident)) {
@@ -1721,21 +1723,34 @@ impure fn parse_import(parser p) -> @ast.import_node {
17211723
fail;
17221724
}
17231725

1724-
impure fn parse_view(parser p) -> vec[ast.view_item] {
1725-
let vec[ast.view_item] items = vec();
1726-
while (true) {
1727-
alt (p.peek()) {
1728-
case (token.USE) {
1729-
items += vec(ast.view_item_use(parse_use(p)));
1730-
}
1731-
case (token.IMPORT) {
1732-
items += vec(ast.view_item_import(parse_import(p)));
1733-
}
1734-
case (_) {
1735-
ret items;
1736-
}
1726+
impure fn parse_use_or_import(parser p) -> @ast.view_item {
1727+
alt (p.peek()) {
1728+
case (token.USE) {
1729+
ret parse_use(p);
17371730
}
1731+
case (token.IMPORT) {
1732+
ret parse_import(p);
1733+
}
1734+
}
1735+
}
1736+
1737+
fn is_use_or_import(token.token t) -> bool {
1738+
if (t == token.USE) {
1739+
ret true;
1740+
}
1741+
if (t == token.IMPORT) {
1742+
ret true;
1743+
}
1744+
ret false;
1745+
}
1746+
1747+
impure fn parse_view(parser p) -> vec[@ast.view_item] {
1748+
let vec[@ast.view_item] items = vec();
1749+
while (is_use_or_import(p.peek())) {
1750+
auto item = parse_use_or_import(p);
1751+
items += vec(item);
17381752
}
1753+
ret items;
17391754
}
17401755

17411756
impure fn parse_crate_from_crate_file(parser p) -> @ast.crate {

0 commit comments

Comments
 (0)