Skip to content

Commit e4f4e6d

Browse files
committed
---
yaml --- r: 6798 b: refs/heads/master c: b36ade1 h: refs/heads/master v: v3
1 parent 7510f4d commit e4f4e6d

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 3fa930f5986a47ee1fa1d25d96c3c17904d60b1f
2+
refs/heads/master: b36ade1367a2dbca69386b58d225ceafa6a90d57

trunk/src/comp/middle/resolve.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,22 +1717,27 @@ fn find_impls_in_mod(e: env, m: def, &impls: [@_impl],
17171717
name: option::t<ident>) {
17181718
alt m {
17191719
ast::def_mod(defid) {
1720+
let cached;
17201721
alt e.impl_cache.find(defid) {
1721-
some(v) { impls += *v; }
1722+
some(v) { cached = v; }
17221723
none. {
1723-
let found = [];
1724-
if defid.crate == ast::local_crate {
1725-
let md = option::get(e.mod_map.get(defid.node).m);
1726-
for i in md.items {
1727-
find_impls_in_item(i, found, name, some(md));
1724+
cached = if defid.crate == ast::local_crate {
1725+
let tmp = [];
1726+
for i in option::get(e.mod_map.get(defid.node).m).items {
1727+
find_impls_in_item(i, tmp, name, none);
17281728
}
1729+
@tmp
17291730
} else {
1730-
found = csearch::get_impls_for_mod(e.cstore, defid, name);
1731-
}
1732-
impls += found;
1733-
e.impl_cache.insert(defid, @found);
1731+
@csearch::get_impls_for_mod(e.cstore, defid, name)
1732+
};
1733+
e.impl_cache.insert(defid, cached);
17341734
}
17351735
}
1736+
for im in *cached {
1737+
if alt name { some(n) { n == im.ident } _ { true } } {
1738+
impls += [im];
1739+
}
1740+
}
17361741
}
17371742
_ {}
17381743
}

0 commit comments

Comments
 (0)