aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front/parser.rs
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-03-02 22:29:53 -0500
committerGraydon Hoare <[email protected]>2011-03-14 16:41:46 -0700
commit80e0ebaa86869b6c7063dde8316f98aa5f365316 (patch)
treeada14e658f06d124d638f9a223fa8ef664adde0f /src/comp/front/parser.rs
parentPut out darwin fire. (diff)
downloadrust-80e0ebaa86869b6c7063dde8316f98aa5f365316.tar.xz
rust-80e0ebaa86869b6c7063dde8316f98aa5f365316.zip
Parse port and chan types, constructors, send statements
Diffstat (limited to 'src/comp/front/parser.rs')
-rw-r--r--src/comp/front/parser.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 832afe20..1f7d4686 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -429,6 +429,22 @@ impure fn parse_ty(parser p) -> @ast.ty {
t = parse_ty_obj(p, hi);
}
+ case (token.PORT) {
+ p.bump();
+ expect(p, token.LBRACKET);
+ t = ast.ty_port(parse_ty(p));
+ hi = p.get_span();
+ expect(p, token.RBRACKET);
+ }
+
+ case (token.CHAN) {
+ p.bump();
+ expect(p, token.LBRACKET);
+ t = ast.ty_chan(parse_ty(p));
+ hi = p.get_span();
+ expect(p, token.RBRACKET);
+ }
+
case (token.IDENT(_)) {
t = ast.ty_path(parse_path(p, GREEDY), none[ast.def]);
}
@@ -799,6 +815,23 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr {
}
}
+ case (token.PORT) {
+ p.bump();
+ expect(p, token.LPAREN);
+ expect(p, token.RPAREN);
+ hi = p.get_span();
+ ex = ast.expr_port(ast.ann_none);
+ }
+
+ case (token.CHAN) {
+ p.bump();
+ expect(p, token.LPAREN);
+ auto e = parse_expr(p);
+ hi = e.span;
+ expect(p, token.RPAREN);
+ ex = ast.expr_chan(e, ast.ann_none);
+ }
+
case (_) {
auto lit = parse_lit(p);
hi = lit.span;
@@ -1080,6 +1113,12 @@ impure fn parse_assign_expr(parser p) -> @ast.expr {
ret @spanned(lo, rhs.span,
ast.expr_assign_op(aop, lhs, rhs, ast.ann_none));
}
+ case (token.SEND) {
+ p.bump();
+ auto rhs = parse_expr(p);
+ ret @spanned(lo, rhs.span,
+ ast.expr_send(lhs, rhs, ast.ann_none));
+ }
case (_) { /* fall through */ }
}
ret lhs;