diff options
| author | Tim Chevalier <chevalier@alum.wellesley.edu> | 2011-07-11 18:11:16 -0700 |
|---|---|---|
| committer | Tim Chevalier <chevalier@alum.wellesley.edu> | 2011-07-11 18:12:00 -0700 |
| commit | 1870e975599e3687672db4656c60b494c2ce7232 (patch) | |
| tree | 3f75c2817e550ffed23a02cdfad1e6555d02037c | |
| parent | e45819ad70f338b942fda745ef7127bde7c3577a (diff) | |
Visit the type argument in a port expression
This closes #664.
| -rw-r--r-- | src/comp/syntax/visit.rs | 9 | ||||
| -rw-r--r-- | src/test/run-fail/port-type.rs | 16 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/comp/syntax/visit.rs b/src/comp/syntax/visit.rs index 470a8e4e38d..9ff8ccb0c11 100644 --- a/src/comp/syntax/visit.rs +++ b/src/comp/syntax/visit.rs @@ -179,6 +179,13 @@ fn visit_ty[E](&@ty t, &E e, &vt[E] v) { } } +fn visit_ty_opt[E](&option::t[@ty] ot, &E e, &vt[E] v) { + alt (ot) { + case (none) {} + case (some(?t)) { v.visit_ty(t, e, v); } + } +} + fn visit_constr[E](&@constr c, &E e, &vt[E] v) { // default @@ -369,7 +376,7 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) { case (expr_log(_, ?x)) { v.visit_expr(x, e, v); } case (expr_check(_, ?x)) { v.visit_expr(x, e, v); } case (expr_assert(?x)) { v.visit_expr(x, e, v); } - case (expr_port(_)) { } + case (expr_port(?t)) { visit_ty_opt(t, e, v); } case (expr_chan(?x)) { v.visit_expr(x, e, v); } case (expr_anon_obj(?anon_obj, _)) { alt (anon_obj.fields) { diff --git a/src/test/run-fail/port-type.rs b/src/test/run-fail/port-type.rs new file mode 100644 index 00000000000..6f962a7f0d7 --- /dev/null +++ b/src/test/run-fail/port-type.rs @@ -0,0 +1,16 @@ +// xfail-stage0 +// error-pattern:meep +fn echo[T](chan[T] c, chan[chan[T]] oc) { + // Tests that the type argument in port gets + // visited + auto p = port[T](); + oc <| chan(p); + + auto x; + p |> x; + c <| x; +} + +fn main() { + fail "meep"; +} \ No newline at end of file |
