diff options
author | Sean Callanan <scallanan@apple.com> | 2017-07-25 19:54:22 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2017-07-25 19:54:22 +0000 |
commit | 1eac879d85c418650c639baa4fcceeef19e7356a (patch) | |
tree | e1b3c5cc9a8b2fdbc7257ff3dd99a0d96951a72a /clang/lib/AST/ExternalASTMerger.cpp | |
parent | 525a7f6b17138e01958130e4700c01d349c30aef (diff) | |
download | bcm5719-llvm-1eac879d85c418650c639baa4fcceeef19e7356a.tar.gz bcm5719-llvm-1eac879d85c418650c639baa4fcceeef19e7356a.zip |
[ExternalASTMerger] Import Objective-C classes
This patch adds functionality and a test for importing Objective-C classes
and their methods.
It also adds a flag to clang-import-test to set the language used for
parsing. This takes the same argument format as the -x option to the
driver.
Differential Revision: https://reviews.llvm.org/D35274
llvm-svn: 309014
Diffstat (limited to 'clang/lib/AST/ExternalASTMerger.cpp')
-rw-r--r-- | clang/lib/AST/ExternalASTMerger.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/AST/ExternalASTMerger.cpp b/clang/lib/AST/ExternalASTMerger.cpp index 4f4a99794c5..f69b5d62840 100644 --- a/clang/lib/AST/ExternalASTMerger.cpp +++ b/clang/lib/AST/ExternalASTMerger.cpp @@ -44,6 +44,9 @@ public: ToTag->setMustBuildLookupTable(); } else if (auto ToNamespace = dyn_cast<NamespaceDecl>(To)) { ToNamespace->setHasExternalVisibleStorage(); + } else if (auto ToContainer = dyn_cast<ObjCContainerDecl>(To)) { + ToContainer->setHasExternalLexicalStorage(); + ToContainer->setMustBuildLookupTable(); } return ASTImporter::Imported(From, To); } @@ -80,11 +83,12 @@ LookupSameContext(Source<TranslationUnitDecl *> SourceTU, const DeclContext *DC, } bool IsForwardDeclaration(Decl *D) { - assert(!isa<ObjCInterfaceDecl>(D)); // TODO handle this case if (auto TD = dyn_cast<TagDecl>(D)) { return !TD->isThisDeclarationADefinition(); } else if (auto FD = dyn_cast<FunctionDecl>(D)) { return !FD->isThisDeclarationADefinition(); + } else if (auto OID = dyn_cast<ObjCInterfaceDecl>(D)) { + return OID->isThisDeclarationADefinition(); } else { return false; } |