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:
Jordan Rose
2013-08-29 23:09:33 +00:00
parent 202f65bb41
commit 7f20dfd304
2 changed files with 19 additions and 6 deletions

View File

@@ -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);
}
}
}