Teach the parser and typechecker to understand port[int](). Closes #588
This commit is contained in:
parent
1c6ae8cadf
commit
64596e6583
11 changed files with 85 additions and 11 deletions
|
|
@ -290,7 +290,7 @@ tag expr_ {
|
|||
/* FIXME Would be nice if expr_check desugared
|
||||
to expr_if_check. */
|
||||
expr_if_check(@expr, block, option::t[@expr]);
|
||||
expr_port;
|
||||
expr_port(option::t[@ty]);
|
||||
expr_chan(@expr);
|
||||
expr_anon_obj(anon_obj, vec[ty_param], obj_def_ids);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -405,7 +405,12 @@ fn noop_fold_expr(&expr_ e, ast_fold fld) -> expr_ {
|
|||
case (expr_log(?lv, ?e)) { expr_log(lv, fld.fold_expr(e)) }
|
||||
case (expr_assert(?e)) { expr_assert(fld.fold_expr(e)) }
|
||||
case (expr_check(?e)) { expr_check(fld.fold_expr(e)) }
|
||||
case (expr_port()) { e }
|
||||
case (expr_port(?ot)) {
|
||||
expr_port(alt(ot) {
|
||||
case (option::some(?t)) { option::some(fld.fold_ty(t)) }
|
||||
case (option::none) { option::none }
|
||||
})
|
||||
}
|
||||
case (expr_chan(?e)) { expr_chan(fld.fold_expr(e)) }
|
||||
case (expr_anon_obj(?ao, ?typms, ?odis)) {
|
||||
expr_anon_obj(fold_anon_obj(ao), typms, odis)
|
||||
|
|
|
|||
|
|
@ -899,10 +899,16 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
|
|||
ex = ast::expr_be(e);
|
||||
} else { p.fatal("Non-call expression in tail call"); }
|
||||
} else if (eat_word(p, "port")) {
|
||||
auto ty = none;
|
||||
if(token::LBRACKET == p.peek()) {
|
||||
expect(p, token::LBRACKET);
|
||||
ty = some(parse_ty(p));
|
||||
expect(p, token::RBRACKET);
|
||||
}
|
||||
expect(p, token::LPAREN);
|
||||
expect(p, token::RPAREN);
|
||||
hi = p.get_hi_pos();
|
||||
ex = ast::expr_port;
|
||||
ex = ast::expr_port(ty);
|
||||
} else if (eat_word(p, "chan")) {
|
||||
expect(p, token::LPAREN);
|
||||
auto e = parse_expr(p);
|
||||
|
|
@ -1592,7 +1598,7 @@ fn stmt_ends_with_semi(&ast::stmt stmt) -> bool {
|
|||
case (ast::expr_log(_, _)) { true }
|
||||
case (ast::expr_check(_)) { true }
|
||||
case (ast::expr_if_check(_, _, _)) { false }
|
||||
case (ast::expr_port) { true }
|
||||
case (ast::expr_port(_)) { true }
|
||||
case (ast::expr_chan(_)) { true }
|
||||
case (ast::expr_anon_obj(_,_,_)) { false }
|
||||
case (ast::expr_assert(_)) { true }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue