88
99#include " TypeSystemClang.h"
1010
11+ #include " clang/AST/DeclBase.h"
12+ #include " llvm/Support/Casting.h"
1113#include " llvm/Support/FormatAdapters.h"
1214#include " llvm/Support/FormatVariadic.h"
1315
@@ -9721,43 +9723,21 @@ TypeSystemClang::DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) {
97219723 return ConstString ();
97229724}
97239725
9724- bool TypeSystemClang::DeclContextIsClassMethod (
9725- void *opaque_decl_ctx, lldb::LanguageType *language_ptr,
9726- bool *is_instance_method_ptr, ConstString *language_object_name_ptr) {
9727- if (opaque_decl_ctx) {
9728- clang::DeclContext *decl_ctx = (clang::DeclContext *)opaque_decl_ctx;
9729- if (ObjCMethodDecl *objc_method =
9730- llvm::dyn_cast<clang::ObjCMethodDecl>(decl_ctx)) {
9731- if (is_instance_method_ptr)
9732- *is_instance_method_ptr = objc_method->isInstanceMethod ();
9733- if (language_ptr)
9734- *language_ptr = eLanguageTypeObjC;
9735- if (language_object_name_ptr)
9736- language_object_name_ptr->SetCString (" self" );
9737- return true ;
9738- } else if (CXXMethodDecl *cxx_method =
9739- llvm::dyn_cast<clang::CXXMethodDecl>(decl_ctx)) {
9740- if (is_instance_method_ptr)
9741- *is_instance_method_ptr = cxx_method->isInstance ();
9742- if (language_ptr)
9743- *language_ptr = eLanguageTypeC_plus_plus;
9744- if (language_object_name_ptr)
9745- language_object_name_ptr->SetCString (" this" );
9746- return true ;
9747- } else if (clang::FunctionDecl *function_decl =
9748- llvm::dyn_cast<clang::FunctionDecl>(decl_ctx)) {
9749- ClangASTMetadata *metadata = GetMetadata (function_decl);
9750- if (metadata && metadata->HasObjectPtr ()) {
9751- if (is_instance_method_ptr)
9752- *is_instance_method_ptr = true ;
9753- if (language_ptr)
9754- *language_ptr = eLanguageTypeObjC;
9755- if (language_object_name_ptr)
9756- language_object_name_ptr->SetCString (metadata->GetObjectPtrName ());
9757- return true ;
9758- }
9759- }
9726+ bool TypeSystemClang::DeclContextIsClassMethod (void *opaque_decl_ctx) {
9727+ if (!opaque_decl_ctx)
9728+ return false ;
9729+
9730+ clang::DeclContext *decl_ctx = (clang::DeclContext *)opaque_decl_ctx;
9731+ if (llvm::isa<clang::ObjCMethodDecl>(decl_ctx)) {
9732+ return true ;
9733+ } else if (llvm::isa<clang::CXXMethodDecl>(decl_ctx)) {
9734+ return true ;
9735+ } else if (clang::FunctionDecl *fun_decl =
9736+ llvm::dyn_cast<clang::FunctionDecl>(decl_ctx)) {
9737+ if (ClangASTMetadata *metadata = GetMetadata (fun_decl))
9738+ return metadata->HasObjectPtr ();
97609739 }
9740+
97619741 return false ;
97629742}
97639743
@@ -9778,6 +9758,24 @@ bool TypeSystemClang::DeclContextIsContainedInLookup(
97789758 return false ;
97799759}
97809760
9761+ lldb::LanguageType
9762+ TypeSystemClang::DeclContextGetLanguage (void *opaque_decl_ctx) {
9763+ if (!opaque_decl_ctx)
9764+ return eLanguageTypeUnknown;
9765+
9766+ auto *decl_ctx = (clang::DeclContext *)opaque_decl_ctx;
9767+ if (llvm::isa<clang::ObjCMethodDecl>(decl_ctx)) {
9768+ return eLanguageTypeObjC;
9769+ } else if (llvm::isa<clang::CXXMethodDecl>(decl_ctx)) {
9770+ return eLanguageTypeC_plus_plus;
9771+ } else if (auto *fun_decl = llvm::dyn_cast<clang::FunctionDecl>(decl_ctx)) {
9772+ if (ClangASTMetadata *metadata = GetMetadata (fun_decl))
9773+ return metadata->GetObjectPtrLanguage ();
9774+ }
9775+
9776+ return eLanguageTypeUnknown;
9777+ }
9778+
97819779static bool IsClangDeclContext (const CompilerDeclContext &dc) {
97829780 return dc.IsValid () && isa<TypeSystemClang>(dc.GetTypeSystem ());
97839781}
0 commit comments