aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/front/parser.rs')
-rw-r--r--src/comp/front/parser.rs49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 653e45a1..df57bc19 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -115,7 +115,7 @@ impure fn new_parser(session.session sess,
if (_str.ends_with(path, ".rc")) {
ftype = CRATE_FILE;
}
- auto srdr = io.new_stdio_reader(path);
+ auto srdr = io.file_reader(path);
auto rdr = lexer.new_reader(srdr, path);
auto npos = rdr.get_curr_pos();
ret stdio_parser(sess, env, ftype, lexer.next_token(rdr),
@@ -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,18 @@ 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 (token.LARROW) {
+ p.bump();
+ auto rhs = parse_expr(p);
+ ret @spanned(lo, rhs.span,
+ ast.expr_recv(lhs, rhs, ast.ann_none));
+ }
case (_) { /* fall through */ }
}
ret lhs;
@@ -2365,7 +2410,7 @@ impure fn parse_crate_directives(parser p, token.token term)
impure fn parse_crate_from_crate_file(parser p) -> @ast.crate {
auto lo = p.get_span();
auto hi = lo;
- auto prefix = std.path.dirname(lo.filename);
+ auto prefix = std.fs.dirname(lo.filename);
auto cdirs = parse_crate_directives(p, token.EOF);
auto m = eval.eval_crate_directives_to_mod(p, p.get_env(),
cdirs, prefix);