mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Include inner class members in dynamic lookup results.
Per discussion with Doug, there's no reason why this should not work:
class Outer {
class Inner {
func extract() { ... }
}
}
var obj : DynamicLookup = ...
obj.extract!()
Swift SVN r7763
This commit is contained in:
@@ -167,9 +167,18 @@ void TUModuleCache::populateMemberCache(const TranslationUnit &TU) {
|
||||
void TUModuleCache::addToMemberCache(ArrayRef<Decl*> decls) {
|
||||
for (Decl *D : decls) {
|
||||
auto VD = dyn_cast<ValueDecl>(D);
|
||||
if (!VD || !VD->canBeAccessedByDynamicLookup())
|
||||
if (!VD)
|
||||
continue;
|
||||
ClassMembers[VD->getName()].push_back(VD);
|
||||
|
||||
if (auto NTD = dyn_cast<NominalTypeDecl>(VD)) {
|
||||
assert(!VD->canBeAccessedByDynamicLookup() &&
|
||||
"inner types cannot be accessed by dynamic lookup");
|
||||
if (isa<ClassDecl>(NTD) || isa<ProtocolDecl>(NTD))
|
||||
addToMemberCache(NTD->getMembers());
|
||||
|
||||
} else if (VD->canBeAccessedByDynamicLookup()) {
|
||||
ClassMembers[VD->getName()].push_back(VD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user