aboutsummaryrefslogtreecommitdiff
path: root/src/comp/fe/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/fe/parser.rs')
-rw-r--r--src/comp/fe/parser.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/comp/fe/parser.rs b/src/comp/fe/parser.rs
index 248d60f4..ab2e15e3 100644
--- a/src/comp/fe/parser.rs
+++ b/src/comp/fe/parser.rs
@@ -218,11 +218,27 @@ state fn parse_fn(parser p) -> tup(ast.ident, ast.item) {
ret tup(id, ast.item_fn(@f));
}
+state fn parse_mod(parser p) -> tup(ast.ident, ast.item) {
+ expect(p, token.MOD);
+ auto id = parse_ident(p);
+ expect(p, token.LBRACE);
+ let ast._mod m = new_str_hash[ast.item]();
+ while (p.peek() != token.RBRACE) {
+ auto i = parse_item(p);
+ m.insert(i._0, i._1);
+ }
+ expect(p, token.RBRACE);
+ ret tup(id, ast.item_mod(@m));
+}
+
state fn parse_item(parser p) -> tup(ast.ident, ast.item) {
alt (p.peek()) {
case (token.FN) {
ret parse_fn(p);
}
+ case (token.MOD) {
+ ret parse_mod(p);
+ }
}
p.err("expectied item");
fail;