about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2011-07-11 18:11:16 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2011-07-11 18:12:00 -0700
commit1870e975599e3687672db4656c60b494c2ce7232 (patch)
tree3f75c2817e550ffed23a02cdfad1e6555d02037c
parente45819ad70f338b942fda745ef7127bde7c3577a (diff)
Visit the type argument in a port expression
This closes #664.
-rw-r--r--src/comp/syntax/visit.rs9
-rw-r--r--src/test/run-fail/port-type.rs16
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