[Lldb-commits] [lldb] 37339d1 - [lldb][NFC] Use ClangASTContext in AppleObjCRuntime interfaces

Raphael Isemann via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 26 07:37:37 PST 2019


Author: Raphael Isemann
Date: 2019-12-26T16:23:40+01:00
New Revision: 37339d1426d1092aeb6ba3a4939b9efd6c1e2987

URL: https://github.com/llvm/llvm-project/commit/37339d1426d1092aeb6ba3a4939b9efd6c1e2987
DIFF: https://github.com/llvm/llvm-project/commit/37339d1426d1092aeb6ba3a4939b9efd6c1e2987.diff

LOG: [lldb][NFC] Use ClangASTContext in AppleObjCRuntime interfaces

This code actually needs a ClangASTContext but instead takes a
clang::ASTContext and then retrieves the original ClangASTContext
via the global map of ClangASTContexts. Let's change it so
that it takes a ClangASTContext which is simpler and faster.

Added: 
    

Modified: 
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h
    lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp
    lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp
index 063b995ff79a..54f8397e1dad 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp
@@ -311,7 +311,8 @@ class ObjCRuntimeMethodType {
   }
 
   clang::ObjCMethodDecl *
-  BuildMethod(clang::ObjCInterfaceDecl *interface_decl, const char *name,
+  BuildMethod(ClangASTContext &clang_ast_ctxt,
+              clang::ObjCInterfaceDecl *interface_decl, const char *name,
               bool instance,
               ObjCLanguageRuntime::EncodingToTypeSP type_realizer_sp) {
     if (!m_is_valid || m_type_vector.size() < 3)
@@ -360,8 +361,7 @@ class ObjCRuntimeMethodType {
 
     clang::QualType ret_type =
         ClangUtil::GetQualType(type_realizer_sp->RealizeType(
-            interface_decl->getASTContext(), m_type_vector[0].c_str(),
-            for_expression));
+            clang_ast_ctxt, m_type_vector[0].c_str(), for_expression));
 
     if (ret_type.isNull())
       return nullptr;
@@ -378,7 +378,7 @@ class ObjCRuntimeMethodType {
       const bool for_expression = true;
       clang::QualType arg_type =
           ClangUtil::GetQualType(type_realizer_sp->RealizeType(
-              ast_ctx, m_type_vector[ai].c_str(), for_expression));
+              clang_ast_ctxt, m_type_vector[ai].c_str(), for_expression));
 
       if (arg_type.isNull())
         return nullptr; // well, we just wasted a bunch of time.  Wish we could
@@ -455,8 +455,8 @@ bool AppleObjCDeclVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) {
 
     ObjCRuntimeMethodType method_type(types);
 
-    clang::ObjCMethodDecl *method_decl =
-        method_type.BuildMethod(interface_decl, name, true, m_type_realizer_sp);
+    clang::ObjCMethodDecl *method_decl = method_type.BuildMethod(
+        m_ast_ctx, interface_decl, name, true, m_type_realizer_sp);
 
     LLDB_LOGF(log, "[  AOTV::FD] Instance method [%s] [%s]", name, types);
 
@@ -474,7 +474,7 @@ bool AppleObjCDeclVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) {
     ObjCRuntimeMethodType method_type(types);
 
     clang::ObjCMethodDecl *method_decl = method_type.BuildMethod(
-        interface_decl, name, false, m_type_realizer_sp);
+        m_ast_ctx, interface_decl, name, false, m_type_realizer_sp);
 
     LLDB_LOGF(log, "[  AOTV::FD] Class method [%s] [%s]", name, types);
 

diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
index 76375e22ad6a..5fa4073f40b1 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
@@ -63,7 +63,7 @@ AppleObjCTypeEncodingParser::StructElement::StructElement()
     : name(""), type(clang::QualType()), bitfield(0) {}
 
 AppleObjCTypeEncodingParser::StructElement
-AppleObjCTypeEncodingParser::ReadStructElement(clang::ASTContext &ast_ctx,
+AppleObjCTypeEncodingParser::ReadStructElement(ClangASTContext &ast_ctx,
                                                StringLexer &type,
                                                bool for_expression) {
   StructElement retval;
@@ -78,19 +78,19 @@ AppleObjCTypeEncodingParser::ReadStructElement(clang::ASTContext &ast_ctx,
 }
 
 clang::QualType AppleObjCTypeEncodingParser::BuildStruct(
-    clang::ASTContext &ast_ctx, StringLexer &type, bool for_expression) {
+    ClangASTContext &ast_ctx, StringLexer &type, bool for_expression) {
   return BuildAggregate(ast_ctx, type, for_expression, '{', '}',
                         clang::TTK_Struct);
 }
 
 clang::QualType AppleObjCTypeEncodingParser::BuildUnion(
-    clang::ASTContext &ast_ctx, StringLexer &type, bool for_expression) {
+    ClangASTContext &ast_ctx, StringLexer &type, bool for_expression) {
   return BuildAggregate(ast_ctx, type, for_expression, '(', ')',
                         clang::TTK_Union);
 }
 
 clang::QualType AppleObjCTypeEncodingParser::BuildAggregate(
-    clang::ASTContext &ast_ctx, StringLexer &type, bool for_expression,
+    ClangASTContext &ast_ctx, StringLexer &type, bool for_expression,
     char opener, char closer, uint32_t kind) {
   if (!type.NextIf(opener))
     return clang::QualType();
@@ -124,10 +124,7 @@ clang::QualType AppleObjCTypeEncodingParser::BuildAggregate(
   if (is_templated)
     return clang::QualType(); // This is where we bail out.  Sorry!
 
-  ClangASTContext *lldb_ctx = ClangASTContext::GetASTContext(&ast_ctx);
-  if (!lldb_ctx)
-    return clang::QualType();
-  CompilerType union_type(lldb_ctx->CreateRecordType(
+  CompilerType union_type(ast_ctx.CreateRecordType(
       nullptr, lldb::eAccessPublic, name, kind, lldb::eLanguageTypeC));
   if (union_type) {
     ClangASTContext::StartTagDeclarationDefinition(union_type);
@@ -141,8 +138,7 @@ clang::QualType AppleObjCTypeEncodingParser::BuildAggregate(
       }
       ClangASTContext::AddFieldToRecordType(
           union_type, element.name.c_str(),
-          CompilerType(ClangASTContext::GetASTContext(&ast_ctx),
-                       element.type.getAsOpaquePtr()),
+          CompilerType(&ast_ctx, element.type.getAsOpaquePtr()),
           lldb::eAccessPublic, element.bitfield);
       ++count;
     }
@@ -152,20 +148,15 @@ clang::QualType AppleObjCTypeEncodingParser::BuildAggregate(
 }
 
 clang::QualType AppleObjCTypeEncodingParser::BuildArray(
-    clang::ASTContext &ast_ctx, StringLexer &type, bool for_expression) {
+    ClangASTContext &ast_ctx, StringLexer &type, bool for_expression) {
   if (!type.NextIf('['))
     return clang::QualType();
   uint32_t size = ReadNumber(type);
   clang::QualType element_type(BuildType(ast_ctx, type, for_expression));
   if (!type.NextIf(']'))
     return clang::QualType();
-  ClangASTContext *lldb_ctx = ClangASTContext::GetASTContext(&ast_ctx);
-  if (!lldb_ctx)
-    return clang::QualType();
-  CompilerType array_type(lldb_ctx->CreateArrayType(
-      CompilerType(ClangASTContext::GetASTContext(&ast_ctx),
-                   element_type.getAsOpaquePtr()),
-      size, false));
+  CompilerType array_type(ast_ctx.CreateArrayType(
+      CompilerType(&ast_ctx, element_type.getAsOpaquePtr()), size, false));
   return ClangUtil::GetQualType(array_type);
 }
 
@@ -175,10 +166,12 @@ clang::QualType AppleObjCTypeEncodingParser::BuildArray(
 // consume but ignore the type info and always return an 'id'; if anything,
 // dynamic typing will resolve things for us anyway
 clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType(
-    clang::ASTContext &ast_ctx, StringLexer &type, bool for_expression) {
+    ClangASTContext &clang_ast_ctx, StringLexer &type, bool for_expression) {
   if (!type.NextIf('@'))
     return clang::QualType();
 
+  clang::ASTContext &ast_ctx = clang_ast_ctx.getASTContext();
+
   std::string name;
 
   if (type.NextIf('"')) {
@@ -257,23 +250,25 @@ clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType(
 }
 
 clang::QualType
-AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx,
+AppleObjCTypeEncodingParser::BuildType(ClangASTContext &clang_ast_ctx,
                                        StringLexer &type, bool for_expression,
                                        uint32_t *bitfield_bit_size) {
   if (!type.HasAtLeast(1))
     return clang::QualType();
 
+  clang::ASTContext &ast_ctx = clang_ast_ctx.getASTContext();
+
   switch (type.Peek()) {
   default:
     break;
   case '{':
-    return BuildStruct(ast_ctx, type, for_expression);
+    return BuildStruct(clang_ast_ctx, type, for_expression);
   case '[':
-    return BuildArray(ast_ctx, type, for_expression);
+    return BuildArray(clang_ast_ctx, type, for_expression);
   case '(':
-    return BuildUnion(ast_ctx, type, for_expression);
+    return BuildUnion(clang_ast_ctx, type, for_expression);
   case '@':
-    return BuildObjCObjectPointerType(ast_ctx, type, for_expression);
+    return BuildObjCObjectPointerType(clang_ast_ctx, type, for_expression);
   }
 
   switch (type.Next()) {
@@ -289,10 +284,7 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx,
   case 'l':
     return ast_ctx.getIntTypeForBitwidth(32, true);
   // this used to be done like this:
-  //   ClangASTContext *lldb_ctx = ClangASTContext::GetASTContext(&ast_ctx);
-  //   if (!lldb_ctx)
-  //      return clang::QualType();
-  //   return lldb_ctx->GetIntTypeFromBitSize(32, true).GetQualType();
+  //   return clang_ast_ctx->GetIntTypeFromBitSize(32, true).GetQualType();
   // which uses one of the constants if one is available, but we don't think
   // all this work is necessary.
   case 'q':
@@ -331,7 +323,8 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx,
       return clang::QualType();
   }
   case 'r': {
-    clang::QualType target_type = BuildType(ast_ctx, type, for_expression);
+    clang::QualType target_type =
+        BuildType(clang_ast_ctx, type, for_expression);
     if (target_type.isNull())
       return clang::QualType();
     else if (target_type == ast_ctx.UnknownAnyTy)
@@ -348,7 +341,8 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx,
       // practical cases
       return ast_ctx.VoidPtrTy;
     } else {
-      clang::QualType target_type = BuildType(ast_ctx, type, for_expression);
+      clang::QualType target_type =
+          BuildType(clang_ast_ctx, type, for_expression);
       if (target_type.isNull())
         return clang::QualType();
       else if (target_type == ast_ctx.UnknownAnyTy)
@@ -362,13 +356,13 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx,
   }
 }
 
-CompilerType AppleObjCTypeEncodingParser::RealizeType(
-    clang::ASTContext &ast_ctx, const char *name, bool for_expression) {
+CompilerType AppleObjCTypeEncodingParser::RealizeType(ClangASTContext &ast_ctx,
+                                                      const char *name,
+                                                      bool for_expression) {
   if (name && name[0]) {
     StringLexer lexer(name);
     clang::QualType qual_type = BuildType(ast_ctx, lexer, for_expression);
-    return CompilerType(ClangASTContext::GetASTContext(&ast_ctx),
-                        qual_type.getAsOpaquePtr());
+    return CompilerType(&ast_ctx, qual_type.getAsOpaquePtr());
   }
   return CompilerType();
 }

diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h
index 590bc4ba9eae..e43711bf4ee4 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.h
@@ -22,7 +22,7 @@ class AppleObjCTypeEncodingParser : public ObjCLanguageRuntime::EncodingToType {
   AppleObjCTypeEncodingParser(ObjCLanguageRuntime &runtime);
   ~AppleObjCTypeEncodingParser() override = default;
 
-  CompilerType RealizeType(clang::ASTContext &ast_ctx, const char *name,
+  CompilerType RealizeType(ClangASTContext &ast_ctx, const char *name,
                            bool for_expression) override;
 
 private:
@@ -35,29 +35,29 @@ class AppleObjCTypeEncodingParser : public ObjCLanguageRuntime::EncodingToType {
     ~StructElement() = default;
   };
 
-  clang::QualType BuildType(clang::ASTContext &ast_ctx, StringLexer &type,
+  clang::QualType BuildType(ClangASTContext &clang_ast_ctx, StringLexer &type,
                             bool for_expression,
                             uint32_t *bitfield_bit_size = nullptr);
 
-  clang::QualType BuildStruct(clang::ASTContext &ast_ctx, StringLexer &type,
+  clang::QualType BuildStruct(ClangASTContext &ast_ctx, StringLexer &type,
                               bool for_expression);
 
-  clang::QualType BuildAggregate(clang::ASTContext &ast_ctx, StringLexer &type,
-                                 bool for_expression, char opener, char closer,
-                                 uint32_t kind);
+  clang::QualType BuildAggregate(ClangASTContext &clang_ast_ctx,
+                                 StringLexer &type, bool for_expression,
+                                 char opener, char closer, uint32_t kind);
 
-  clang::QualType BuildUnion(clang::ASTContext &ast_ctx, StringLexer &type,
+  clang::QualType BuildUnion(ClangASTContext &ast_ctx, StringLexer &type,
                              bool for_expression);
 
-  clang::QualType BuildArray(clang::ASTContext &ast_ctx, StringLexer &type,
+  clang::QualType BuildArray(ClangASTContext &ast_ctx, StringLexer &type,
                              bool for_expression);
 
   std::string ReadStructName(StringLexer &type);
 
-  StructElement ReadStructElement(clang::ASTContext &ast_ctx, StringLexer &type,
+  StructElement ReadStructElement(ClangASTContext &ast_ctx, StringLexer &type,
                                   bool for_expression);
 
-  clang::QualType BuildObjCObjectPointerType(clang::ASTContext &ast_ctx,
+  clang::QualType BuildObjCObjectPointerType(ClangASTContext &clang_ast_ctx,
                                              StringLexer &type,
                                              bool for_expression);
 

diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp
index 399bb120d7a3..335ef996419c 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.cpp
@@ -313,12 +313,6 @@ ObjCLanguageRuntime::EncodingToType::RealizeType(const char *name,
   return CompilerType();
 }
 
-CompilerType ObjCLanguageRuntime::EncodingToType::RealizeType(
-    ClangASTContext &ast_ctx, const char *name, bool for_expression) {
-  clang::ASTContext &clang_ast = ast_ctx.getASTContext();
-  return RealizeType(clang_ast, name, for_expression);
-}
-
 ObjCLanguageRuntime::EncodingToType::~EncodingToType() {}
 
 ObjCLanguageRuntime::EncodingToTypeSP ObjCLanguageRuntime::GetEncodingToType() {

diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
index 39acd6e9f268..069ce7facf52 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h
@@ -145,12 +145,9 @@ class ObjCLanguageRuntime : public LanguageRuntime {
     virtual ~EncodingToType();
 
     virtual CompilerType RealizeType(ClangASTContext &ast_ctx, const char *name,
-                                     bool for_expression);
+                                     bool for_expression) = 0;
     virtual CompilerType RealizeType(const char *name, bool for_expression);
 
-    virtual CompilerType RealizeType(clang::ASTContext &ast_ctx,
-                                     const char *name, bool for_expression) = 0;
-
   protected:
     std::unique_ptr<ClangASTContext> m_scratch_ast_ctx_up;
   };


        


More information about the lldb-commits mailing list