diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-12-06 20:50:05 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-12-06 20:50:05 +0000 |
commit | 71a26d8f82e0fed809441852ba13ff630e438dff (patch) | |
tree | 5951a2e6a22591bb34dc7790d8c567355a8cc346 /clang/lib/AST/DeclCXX.cpp | |
parent | 05e7ca3659157d4b81ed172ea2df123044de41ed (diff) | |
download | bcm5719-llvm-71a26d8f82e0fed809441852ba13ff630e438dff.tar.gz bcm5719-llvm-71a26d8f82e0fed809441852ba13ff630e438dff.zip |
Move helper onto CXXMethodDecl.
llvm-svn: 90716
Diffstat (limited to 'clang/lib/AST/DeclCXX.cpp')
-rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 5064ec5c737..766cb018145 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -644,6 +644,25 @@ QualType CXXMethodDecl::getThisType(ASTContext &C) const { return C.getPointerType(ClassTy); } +static bool MethodHasBody(const CXXMethodDecl *MD, const FunctionDecl *&fn) { + // Simple case: function has a body + if (MD->getBody(fn)) + return true; + + // Complex case: function is an instantiation of a function which has a + // body, but the definition hasn't been instantiated. + const FunctionDecl *PatternDecl = MD->getTemplateInstantiationPattern(); + if (PatternDecl && PatternDecl->getBody(fn)) + return true; + + return false; +} + +bool CXXMethodDecl::hasInlineBody() const { + const FunctionDecl *fn; + return MethodHasBody(this, fn) && !fn->isOutOfLine(); +} + CXXBaseOrMemberInitializer:: CXXBaseOrMemberInitializer(ASTContext &Context, DeclaratorInfo *DInfo, CXXConstructorDecl *C, |