diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-06-28 15:54:16 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-06-28 16:11:04 -0700 |
| commit | 64596e6583068bd2ee7ac5bad13dbf0668eb345f (patch) | |
| tree | 33228286be240df4ab6e504bdf0be3439c01ccb8 /src/comp/middle | |
| parent | 1c6ae8cadf12d58f9c6fe3a315b4c39c3ec6712c (diff) | |
Teach the parser and typechecker to understand port[int](). Closes #588
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/trans.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/tstate/pre_post_conditions.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/tstate/states.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/typeck.rs | 10 | ||||
| -rw-r--r-- | src/comp/middle/visit.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/walk.rs | 2 |
6 files changed, 14 insertions, 6 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index aed4d3b753e..428076e46ba 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -5996,7 +5996,7 @@ fn trans_expr_out(&@block_ctxt cx, &@ast::expr e, out_method output) -> case (ast::expr_ret(?ex)) { ret trans_ret(cx, ex); } case (ast::expr_put(?ex)) { ret trans_put(cx, ex); } case (ast::expr_be(?ex)) { ret trans_be(cx, ex); } - case (ast::expr_port) { ret trans_port(cx, e.id); } + case (ast::expr_port(_)) { ret trans_port(cx, e.id); } case (ast::expr_chan(?ex)) { ret trans_chan(cx, ex, e.id); } case (ast::expr_send(?lhs, ?rhs)) { ret trans_send(cx, lhs, rhs, e.id); diff --git a/src/comp/middle/tstate/pre_post_conditions.rs b/src/comp/middle/tstate/pre_post_conditions.rs index 7e97a11d166..3e27e665054 100644 --- a/src/comp/middle/tstate/pre_post_conditions.rs +++ b/src/comp/middle/tstate/pre_post_conditions.rs @@ -556,7 +556,7 @@ fn find_pre_post_expr(&fn_ctxt fcx, @expr e) { } case (expr_break) { clear_pp(expr_pp(fcx.ccx, e)); } case (expr_cont) { clear_pp(expr_pp(fcx.ccx, e)); } - case (expr_port) { clear_pp(expr_pp(fcx.ccx, e)); } + case (expr_port(_)) { clear_pp(expr_pp(fcx.ccx, e)); } case (expr_ext(_, _, _, ?expanded)) { find_pre_post_expr(fcx, expanded); copy_pre_post(fcx.ccx, e.id, expanded); diff --git a/src/comp/middle/tstate/states.rs b/src/comp/middle/tstate/states.rs index 91ea1a2c01f..82274937c8d 100644 --- a/src/comp/middle/tstate/states.rs +++ b/src/comp/middle/tstate/states.rs @@ -565,7 +565,7 @@ fn find_pre_post_state_expr(&fn_ctxt fcx, &prestate pres, @expr e) -> bool { } case (expr_break) { ret pure_exp(fcx.ccx, e.id, pres); } case (expr_cont) { ret pure_exp(fcx.ccx, e.id, pres); } - case (expr_port) { ret pure_exp(fcx.ccx, e.id, pres); } + case (expr_port(_)) { ret pure_exp(fcx.ccx, e.id, pres); } case (expr_self_method(_)) { ret pure_exp(fcx.ccx, e.id, pres); } case (expr_anon_obj(?anon_obj, _, _)) { alt (anon_obj.with_obj) { diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index faed0b04022..a47ef47ed80 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -2075,8 +2075,16 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) { } } } - case (ast::expr_port) { + case (ast::expr_port(?typ)) { auto t = next_ty_var(fcx); + alt(typ) { + case (some(?_t)) { + demand::simple(fcx, expr.span, + ast_ty_to_ty_crate(fcx.ccx, _t), + t); + } + case (none) {} + } auto pt = ty::mk_port(fcx.ccx.tcx, t); write::ty_only_fixup(fcx, id, pt); } diff --git a/src/comp/middle/visit.rs b/src/comp/middle/visit.rs index 53efe81c4a2..98db56e96c3 100644 --- a/src/comp/middle/visit.rs +++ b/src/comp/middle/visit.rs @@ -374,7 +374,7 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) { case (expr_log(_, ?x)) { vt(v).visit_expr(x, e, v); } case (expr_check(?x)) { vt(v).visit_expr(x, e, v); } case (expr_assert(?x)) { vt(v).visit_expr(x, e, v); } - case (expr_port) { } + case (expr_port(_)) { } case (expr_chan(?x)) { vt(v).visit_expr(x, e, v); } case (expr_anon_obj(?anon_obj, _, _)) { alt (anon_obj.fields) { diff --git a/src/comp/middle/walk.rs b/src/comp/middle/walk.rs index 821a00ad450..f4c954298fd 100644 --- a/src/comp/middle/walk.rs +++ b/src/comp/middle/walk.rs @@ -380,7 +380,7 @@ fn walk_expr(&ast_visitor v, @ast::expr e) { case (ast::expr_log(_, ?x)) { walk_expr(v, x); } case (ast::expr_check(?x)) { walk_expr(v, x); } case (ast::expr_assert(?x)) { walk_expr(v, x); } - case (ast::expr_port) { } + case (ast::expr_port(_)) { } case (ast::expr_chan(?x)) { walk_expr(v, x); } case (ast::expr_anon_obj(?anon_obj, _, _)) { // Fields |
