Skip to content

Commit 02dff96

Browse files
committed
Parse meta directives in crates.
1 parent 652cb48 commit 02dff96

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

src/comp/front/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ tag crate_directive_ {
5353
cdir_src_mod(ident, option.t[filename]);
5454
cdir_dir_mod(ident, option.t[filename], vec[@crate_directive]);
5555
cdir_view_item(@view_item);
56-
cdir_meta(@meta_item);
56+
cdir_meta(vec[@meta_item]);
5757
cdir_syntax(path);
5858
cdir_auth(path, effect);
5959
}

src/comp/front/parser.rs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,14 +1564,14 @@ fn stmt_ends_with_semi(@ast.stmt stmt) -> bool {
15641564
case (ast.expr_if(_,_,_,_,_)) { ret false; }
15651565
case (ast.expr_for(_,_,_,_)) { ret false; }
15661566
case (ast.expr_for_each(_,_,_,_))
1567-
{ ret false; }
1567+
{ ret false; }
15681568
case (ast.expr_while(_,_,_)) { ret false; }
15691569
case (ast.expr_do_while(_,_,_)) { ret false; }
15701570
case (ast.expr_alt(_,_,_)) { ret false; }
15711571
case (ast.expr_block(_,_)) { ret false; }
15721572
case (ast.expr_assign(_,_,_)) { ret true; }
15731573
case (ast.expr_assign_op(_,_,_,_))
1574-
{ ret true; }
1574+
{ ret true; }
15751575
case (ast.expr_field(_,_,_)) { ret true; }
15761576
case (ast.expr_index(_,_,_)) { ret true; }
15771577
case (ast.expr_path(_,_,_)) { ret true; }
@@ -1583,16 +1583,8 @@ fn stmt_ends_with_semi(@ast.stmt stmt) -> bool {
15831583
case (ast.expr_check_expr(_)) { ret true; }
15841584
}
15851585
}
1586-
case (ast.stmt_crate_directive(?cdir)) {
1587-
alt (cdir.node) {
1588-
case (ast.cdir_src_mod(_, _)) { ret true; }
1589-
case (ast.cdir_view_item(_)) { ret true; }
1590-
case (ast.cdir_meta(_)) { ret true; }
1591-
case (ast.cdir_syntax(_)) { ret true; }
1592-
case (ast.cdir_auth(_, _)) { ret true; }
1593-
case (_) { ret false; }
1594-
}
1595-
}
1586+
// We should not be calling this on a cdir.
1587+
case (ast.stmt_crate_directive(?cdir)) { fail; }
15961588
}
15971589
}
15981590

@@ -1636,8 +1628,13 @@ impure fn parse_block(parser p) -> ast.block {
16361628
case (none[@ast.expr]) {
16371629
// Not an expression statement.
16381630
stmts += vec(stmt);
1639-
if (stmt_ends_with_semi(stmt)) {
1640-
expect(p, token.SEMI);
1631+
// FIXME: crazy differentiation between conditions
1632+
// used in branches and binary expressions in rustboot
1633+
// means we cannot use && here. I know, right?
1634+
if (p.get_file_type() == SOURCE_FILE) {
1635+
if (stmt_ends_with_semi(stmt)) {
1636+
expect(p, token.SEMI);
1637+
}
16411638
}
16421639
}
16431640
}
@@ -2261,6 +2258,16 @@ impure fn parse_crate_directive(parser p) -> ast.crate_directive
22612258
ret spanned(lo, hi, ast.cdir_auth(n, e));
22622259
}
22632260

2261+
case (token.META) {
2262+
// FIXME: currently dropping meta clauses on the floor,
2263+
// as there is no crate metadata system
2264+
p.bump();
2265+
auto mis = parse_meta(p);
2266+
hi = p.get_span();
2267+
expect(p, token.SEMI);
2268+
ret spanned(lo, hi, ast.cdir_meta(mis));
2269+
}
2270+
22642271
case (token.MOD) {
22652272
p.bump();
22662273
auto id = parse_ident(p);

0 commit comments

Comments
 (0)