about summary refs log tree commit diff
path: root/src/comp/middle/resolve.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-12-19 15:42:52 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2011-12-19 15:43:02 +0100
commite4e2d6d1a15ae350301bb94452f968ba99d2ec6e (patch)
tree25907a1f991b3b3c0ff8e131020bb9af0563c41b /src/comp/middle/resolve.rs
parent619d7c3f72a969c62789383af7d1a1446177adfc (diff)
Fix bug in type parameter handling for impl methods
The parameters of the impl weren't being combined in the right way
with the parameters of the methods. The test worked only by accident.

Issue #1227
Diffstat (limited to 'src/comp/middle/resolve.rs')
-rw-r--r--src/comp/middle/resolve.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs
index 90d560f1eb1..bdb723ebaf8 100644
--- a/src/comp/middle/resolve.rs
+++ b/src/comp/middle/resolve.rs
@@ -370,7 +370,17 @@ fn resolve_names(e: @env, c: @ast::crate) {
 
 // Visit helper functions
 fn visit_item_with_scope(i: @ast::item, sc: scopes, v: vt<scopes>) {
-    visit::visit_item(i, cons(scope_item(i), @sc), v);
+    let sc = cons(scope_item(i), @sc);
+    alt i.node {
+      ast::item_impl(tps, sty, methods) {
+        visit::visit_ty(sty, sc, v);
+        for m in methods {
+            v.visit_fn(m.node.meth, tps + m.node.tps, m.span,
+                       some(m.node.ident), m.node.id, sc, v);
+        }
+      }
+      _ { visit::visit_item(i, sc, v); }
+    }
 }
 
 fn visit_native_item_with_scope(ni: @ast::native_item, sc: scopes,