Skip to content

Commit b662d41

Browse files
cixtorgraydon
authored andcommitted
---
yaml --- r: 1143 b: refs/heads/master c: 8d2fdac h: refs/heads/master i: 1141: 58a0b34 1139: 4a0ee9d 1135: df2909b v: v3
1 parent 9e3d0a6 commit b662d41

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
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: d9482089789afbe0b5ad929f77ea3480fb9fcd62
2+
refs/heads/master: 8d2fdac93bd4acf41a150404e1f6579ad45b9172

trunk/src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ TEST_XFAILS_SELF := $(filter-out \
559559
u8-incr-decr.rs \
560560
uint.rs \
561561
unit.rs \
562+
use.rs \
562563
tag.rs \
563564
vec.rs \
564565
vec-drop.rs \

trunk/src/comp/front/parser.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,8 @@ impure fn parse_item_obj(parser p, ast.layer lyr) -> @ast.item {
13301330
}
13311331

13321332
impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
1333+
parse_use_and_imports(p);
1334+
13331335
let vec[@ast.item] items = vec();
13341336
auto index = new_str_hash[ast.mod_index_entry]();
13351337
let uint u = 0u;
@@ -1531,6 +1533,51 @@ impure fn parse_item(parser p) -> @ast.item {
15311533
fail;
15321534
}
15331535

1536+
impure fn parse_meta_item(parser p) {
1537+
auto ident = parse_ident(p);
1538+
expect(p, token.EQ);
1539+
alt (p.peek()) {
1540+
case (token.LIT_STR(?s)) {
1541+
p.bump();
1542+
}
1543+
case (_) {
1544+
p.err("Metadata items must be string literals");
1545+
}
1546+
}
1547+
}
1548+
1549+
impure fn parse_meta(parser p) {
1550+
auto pf = parse_meta_item;
1551+
parse_seq[()](token.LPAREN, token.RPAREN, some(token.COMMA), pf, p);
1552+
}
1553+
1554+
impure fn parse_optional_meta(parser p) {
1555+
alt (p.peek()) {
1556+
case (token.LPAREN) {
1557+
ret parse_meta(p);
1558+
}
1559+
case (_) {
1560+
ret;
1561+
}
1562+
}
1563+
}
1564+
1565+
impure fn parse_use_and_imports(parser p) {
1566+
while (true) {
1567+
alt (p.peek()) {
1568+
case (token.USE) {
1569+
p.bump();
1570+
auto ident = parse_ident(p);
1571+
parse_optional_meta(p);
1572+
expect(p, token.SEMI);
1573+
}
1574+
case (_) {
1575+
ret;
1576+
}
1577+
}
1578+
}
1579+
}
1580+
15341581
impure fn parse_crate(parser p) -> @ast.crate {
15351582
auto lo = p.get_span();
15361583
auto hi = lo;

trunk/src/test/run-pass/use.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use std;
2+
use libc();
3+
use zed(name = "std");
4+
use bar(name = "std", ver = "0.0.1");
5+
6+
mod baz {
7+
use std;
8+
use libc();
9+
use zed(name = "std");
10+
use bar(name = "std", ver = "0.0.1");
11+
}
12+
13+
fn main() {
14+
}

0 commit comments

Comments
 (0)