[Lldb-commits] [lldb] r247953 - TypeSystem is now a plugin interface and removed any "ClangASTContext &Class::GetClangASTContext()" functions.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 23 11:21:49 PDT 2015


Thanks Greg.  I'm OOO this week but I will check on Monday.

On Wed, Sep 23, 2015 at 10:01 AM Greg Clayton <gclayton at apple.com> wrote:

> % ./dotest.py lang/cpp/dynamic-value
> LLDB library dir: /Volumes/work/gclayton/Documents/src/lldb/tot/build/Debug
> LLDB import library dir:
> /Volumes/work/gclayton/Documents/src/lldb/tot/build/Debug
> lldb-350.99.0
> lldb.pre_flight: None
> lldb.post_flight: None
>
> Session logs for test failures/errors/unexpected successes will go into
> directory '2015-09-23-09_48_14'
> Command invoked: ./dotest.py lang/cpp/dynamic-value
> compilers=['clang']
>
> Configuration: arch=x86_64 compiler=clang
> ----------------------------------------------------------------------
> Collected 6 tests
>
> .=success F=fail E=error s=skipped x=expected-fail u=unexpected-success
>
> .x.x..
> ----------------------------------------------------------------------
> Ran 6 tests in 5.136s
>
> RESULT: PASSED (4 passes, 0 failures, 0 errors, 0 skipped, 2 expected
> failures, 0 unexpected successes)
> Session logs for test failures/errors/unexpected successes can be found in
> directory '2015-09-23-09_48_14'
>
> This passes on MacOSX. You will need to help me figure out what it going
> wrong. You should be able to repro this by looking at what the test case
> did, which is what I did since I didn't write this test. But it looks like
> the steps to repro should be:
>
> Compile "sbvalue-cast.cpp" into an executable:
>
> % make CXX_SOURCES=sbvalue-cast.cpp
>
> Then run LLDB on the a.out binary that is produced:
>
> % ll a.out
> (lldb) target create "a.out"
> (lldb) b /Set breakpoint here/
> (lldb) r
> (lldb) frame variable --dynamic-type no-dynamic-values *teller
> (Base) *teller = (m_base_val = 20)
>
> Can you let me know what your output for the above command looks like?
>
> > On Sep 21, 2015, at 7:57 AM, Zachary Turner <zturner at google.com> wrote:
> >
> > Hi Greg, will you have some time to look at this today?  It's definitely
> this patch that started causing the failure, so I suspect there is
> something wrong on all platforms
> >
> > On Fri, Sep 18, 2015 at 12:41 PM Zachary Turner <zturner at google.com>
> wrote:
> > Hi Greg,
> >
> > This has broken TestCppValueCast on Windows.  Ironically, it has also
> *fixed* TestCxxWcharT on Windows.  In any case, here is the important line
> from the log file of TestCppValueCast.
> >
> > Traceback (most recent call last):
> >   File "D:\src\llvm\tools\lldb\test\lldbtest.py", line 483, in wrapper
> >     return func(self, *args, **kwargs)
> >   File "D:\src\llvm\tools\lldb\test\lldbtest.py", line 551, in wrapper
> >     return func(self, *args, **kwargs)
> >   File
> "D:\src\llvm\tools\lldb\test\lang\cpp\dynamic-value\TestCppValueCast.py",
> line 49, in test_value_cast_with_dwarf_and_regular_inheritance
> >     self.do_sbvalue_cast(self.exe_name)
> >   File
> "D:\src\llvm\tools\lldb\test\lang\cpp\dynamic-value\TestCppValueCast.py",
> line 99, in do_sbvalue_cast
> >
>  self.assertTrue(tellerA.GetChildMemberWithName('m_base_val').GetValueAsUnsigned(error,
> 0) == 20)
> > AssertionError: False is not True
> >
> > Is it possible your patch has an error?
> >
> > On Thu, Sep 17, 2015 at 3:25 PM Greg Clayton via lldb-commits <
> lldb-commits at lists.llvm.org> wrote:
> > Author: gclayton
> > Date: Thu Sep 17 17:23:34 2015
> > New Revision: 247953
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=247953&view=rev
> > Log:
> > TypeSystem is now a plugin interface and removed any "ClangASTContext
> &Class::GetClangASTContext()" functions.
> >
> > This cleans up type systems to be more pluggable. Prior to this we had
> issues:
> > - Module, SymbolFile, and many others has "ClangASTContext
> &GetClangASTContext()" functions. All have been switched over to use
> "TypeSystem *GetTypeSystemForLanguage()"
> > - Cleaned up any places that were using the GetClangASTContext()
> functions to use TypeSystem
> > - Cleaned up Module so that it no longer has dedicated type system
> member variables:
> >     lldb::ClangASTContextUP     m_ast;          ///< The Clang AST
> context for this module.
> >     lldb::GoASTContextUP        m_go_ast;       ///< The Go AST context
> for this module.
> >
> >     Now we have a type system map:
> >
> >     typedef std::map<lldb::LanguageType, lldb::TypeSystemSP>
> TypeSystemMap;
> >     TypeSystemMap               m_type_system_map;    ///< A map of any
> type systems associated with this module
> > - Many places in code were using ClangASTContext static functions to
> place with CompilerType objects and add modifiers (const, volatile,
> restrict) and to make typedefs, L and R value references and more. These
> have been made into CompilerType functions that are abstract:
> >
> >     class CompilerType
> >     {
> >     ...
> >
> >
>  //----------------------------------------------------------------------
> >     // Return a new CompilerType that is a L value reference to this
> type if
> >     // this type is valid and the type system supports L value
> references,
> >     // else return an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     GetLValueReferenceType () const;
> >
> >
>  //----------------------------------------------------------------------
> >     // Return a new CompilerType that is a R value reference to this
> type if
> >     // this type is valid and the type system supports R value
> references,
> >     // else return an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     GetRValueReferenceType () const;
> >
> >
>  //----------------------------------------------------------------------
> >     // Return a new CompilerType adds a const modifier to this type if
> >     // this type is valid and the type system supports const modifiers,
> >     // else return an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     AddConstModifier () const;
> >
> >
>  //----------------------------------------------------------------------
> >     // Return a new CompilerType adds a volatile modifier to this type if
> >     // this type is valid and the type system supports volatile
> modifiers,
> >     // else return an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     AddVolatileModifier () const;
> >
> >
>  //----------------------------------------------------------------------
> >     // Return a new CompilerType adds a restrict modifier to this type if
> >     // this type is valid and the type system supports restrict
> modifiers,
> >     // else return an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     AddRestrictModifier () const;
> >
> >
>  //----------------------------------------------------------------------
> >     // Create a typedef to this type using "name" as the name of the
> typedef
> >     // this type is valid and the type system supports typedefs, else
> return
> >     // an invalid type.
> >
>  //----------------------------------------------------------------------
> >     CompilerType
> >     CreateTypedef (const char *name, const CompilerDeclContext
> &decl_ctx) const;
> >
> >     };
> >
> > Other changes include:
> > - Removed "CompilerType TypeSystem::GetIntTypeFromBitSize(...)" and
> CompilerType TypeSystem::GetFloatTypeFromBitSize(...) and replaced it with
> "CompilerType
> TypeSystem::GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
> size_t bit_size);"
> > - Fixed code in Type.h to not request the full type for a type for no
> good reason, just request the forward type and let the type expand as needed
> >
> >
> >
> > Modified:
> >     lldb/trunk/include/lldb/Core/Module.h
> >     lldb/trunk/include/lldb/Core/PluginManager.h
> >     lldb/trunk/include/lldb/Symbol/ClangASTContext.h
> >     lldb/trunk/include/lldb/Symbol/CompilerType.h
> >     lldb/trunk/include/lldb/Symbol/GoASTContext.h
> >     lldb/trunk/include/lldb/Symbol/SymbolFile.h
> >     lldb/trunk/include/lldb/Symbol/Type.h
> >     lldb/trunk/include/lldb/Symbol/TypeSystem.h
> >     lldb/trunk/include/lldb/lldb-forward.h
> >     lldb/trunk/include/lldb/lldb-private-interfaces.h
> >     lldb/trunk/source/API/SBModule.cpp
> >     lldb/trunk/source/API/SBType.cpp
> >     lldb/trunk/source/API/SystemInitializerFull.cpp
> >     lldb/trunk/source/Commands/CommandObjectArgs.cpp
> >     lldb/trunk/source/Core/Module.cpp
> >     lldb/trunk/source/Core/PluginManager.cpp
> >     lldb/trunk/source/Core/ValueObjectDynamicValue.cpp
> >     lldb/trunk/source/Core/ValueObjectRegister.cpp
> >     lldb/trunk/source/DataFormatters/FormatManager.cpp
> >     lldb/trunk/source/DataFormatters/VectorType.cpp
> >     lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
> >     lldb/trunk/source/Expression/ClangExpressionParser.cpp
> >     lldb/trunk/source/Initialization/SystemInitializerCommon.cpp
> >     lldb/trunk/source/Plugins/Language/ObjC/Cocoa.cpp
> >     lldb/trunk/source/Plugins/Language/ObjC/CoreMedia.cpp
> >     lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserGo.cpp
> >     lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
> >     lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
> >
>  lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
> >     lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
> >     lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
> >
>  lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
> >     lldb/trunk/source/Symbol/ClangASTContext.cpp
> >     lldb/trunk/source/Symbol/CompilerType.cpp
> >     lldb/trunk/source/Symbol/GoASTContext.cpp
> >     lldb/trunk/source/Symbol/SymbolFile.cpp
> >     lldb/trunk/source/Symbol/Type.cpp
> >     lldb/trunk/source/Symbol/TypeSystem.cpp
> >     lldb/trunk/source/Symbol/Variable.cpp
> >     lldb/trunk/source/Target/ThreadPlanTracer.cpp
> >
> > Modified: lldb/trunk/include/lldb/Core/Module.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Module.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Core/Module.h (original)
> > +++ lldb/trunk/include/lldb/Core/Module.h Thu Sep 17 17:23:34 2015
> > @@ -944,9 +944,6 @@ public:
> >      bool
> >      GetIsDynamicLinkEditor ();
> >
> > -    ClangASTContext &
> > -    GetClangASTContext ();
> > -
> >      TypeSystem *
> >      GetTypeSystemForLanguage (lldb::LanguageType language);
> >
> > @@ -1101,6 +1098,7 @@ public:
> >                                    bool &match_name_after_lookup);
> >
> >  protected:
> > +    typedef std::map<lldb::LanguageType, lldb::TypeSystemSP>
> TypeSystemMap;
> >      //------------------------------------------------------------------
> >      // Member Variables
> >      //------------------------------------------------------------------
> > @@ -1119,15 +1117,13 @@ protected:
> >      lldb::SymbolVendorUP        m_symfile_ap;   ///< A pointer to the
> symbol vendor for this module.
> >      std::vector<lldb::SymbolVendorUP> m_old_symfiles; ///< If anyone
> calls Module::SetSymbolFileFileSpec() and changes the symbol file,
> >                                                        ///< we need to
> keep all old symbol files around in case anyone has type references to them
> > -    lldb::ClangASTContextUP     m_ast;          ///< The Clang AST
> context for this module.
> > -    lldb::GoASTContextUP        m_go_ast;       ///< The Go AST context
> for this module.
> > +    TypeSystemMap               m_type_system_map;    ///< A map of any
> type systems associated with this module
> >      PathMappingList             m_source_mappings; ///< Module specific
> source remappings for when you have debug info for a module that doesn't
> match where the sources currently are
> >      lldb::SectionListUP         m_sections_ap; ///< Unified section
> list for module that is used by the ObjectFile and and ObjectFile instances
> for the debug info
> >
> >      std::atomic<bool>           m_did_load_objfile;
> >      std::atomic<bool>           m_did_load_symbol_vendor;
> >      std::atomic<bool>           m_did_parse_uuid;
> > -    std::atomic<bool>           m_did_init_ast;
> >      mutable bool                m_file_has_changed:1,
> >                                  m_first_file_changed_log:1;   /// See
> if the module was modified after it was initially opened.
> >
> >
> > Modified: lldb/trunk/include/lldb/Core/PluginManager.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/PluginManager.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Core/PluginManager.h (original)
> > +++ lldb/trunk/include/lldb/Core/PluginManager.h Thu Sep 17 17:23:34 2015
> > @@ -419,6 +419,22 @@ public:
> >      static InstrumentationRuntimeCreateInstance
> >      GetInstrumentationRuntimeCreateCallbackForPluginName (const
> ConstString &name);
> >
> > +    //------------------------------------------------------------------
> > +    // TypeSystem
> > +    //------------------------------------------------------------------
> > +    static bool
> > +    RegisterPlugin (const ConstString &name,
> > +                    const char *description,
> > +                    TypeSystemCreateInstance create_callback);
> > +
> > +    static bool
> > +    UnregisterPlugin (TypeSystemCreateInstance create_callback);
> > +
> > +    static TypeSystemCreateInstance
> > +    GetTypeSystemCreateCallbackAtIndex (uint32_t idx);
> > +
> > +    static TypeSystemCreateInstance
> > +    GetTypeSystemCreateCallbackForPluginName (const ConstString &name);
> >
> >      //------------------------------------------------------------------
> >      // Some plug-ins might register a DebuggerInitializeCallback
> >
> > Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Thu Sep 17 17:23:34
> 2015
> > @@ -55,7 +55,28 @@ public:
> >      ClangASTContext (const char *triple = NULL);
> >
> >      ~ClangASTContext() override;
> > -
> > +
> > +    //------------------------------------------------------------------
> > +    // PluginInterface functions
> > +    //------------------------------------------------------------------
> > +    ConstString
> > +    GetPluginName() override;
> > +
> > +    uint32_t
> > +    GetPluginVersion() override;
> > +
> > +    static ConstString
> > +    GetPluginNameStatic ();
> > +
> > +    static lldb::TypeSystemSP
> > +    CreateInstance (lldb::LanguageType language, const
> lldb_private::ArchSpec &arch);
> > +
> > +    static void
> > +    Initialize ();
> > +
> > +    static void
> > +    Terminate ();
> > +
> >      static ClangASTContext*
> >      GetASTContext (clang::ASTContext* ast_ctx);
> >
> > @@ -153,7 +174,7 @@ public:
> >      //------------------------------------------------------------------
> >      CompilerType
> >      GetBuiltinTypeForEncodingAndBitSize (lldb::Encoding encoding,
> > -                                          uint32_t bit_size);
> > +                                         size_t bit_size) override;
> >
> >      static CompilerType
> >      GetBuiltinTypeForEncodingAndBitSize (clang::ASTContext *ast,
> > @@ -448,13 +469,7 @@ public:
> >      //------------------------------------------------------------------
> >      // Integer type functions
> >      //------------------------------------------------------------------
> > -
> > -    CompilerType
> > -    GetIntTypeFromBitSize (size_t bit_size, bool is_signed) override
> > -    {
> > -        return GetIntTypeFromBitSize (getASTContext(), bit_size,
> is_signed);
> > -    }
> > -
> > +
> >      static CompilerType
> >      GetIntTypeFromBitSize (clang::ASTContext *ast,
> >                             size_t bit_size, bool is_signed);
> > @@ -471,12 +486,6 @@ public:
> >      //------------------------------------------------------------------
> >      // Floating point functions
> >      //------------------------------------------------------------------
> > -
> > -    CompilerType
> > -    GetFloatTypeFromBitSize (size_t bit_size) override
> > -    {
> > -        return GetFloatTypeFromBitSize (getASTContext(), bit_size);
> > -    }
> >
> >      static CompilerType
> >      GetFloatTypeFromBitSize (clang::ASTContext *ast,
> > @@ -673,7 +682,10 @@ public:
> >
> >      bool
> >      IsVoidType (void *type) override;
> > -
> > +
> > +    bool
> > +    SupportsLanguage (lldb::LanguageType language) override;
> > +
> >      static bool
> >      GetCXXClassName (const CompilerType& type, std::string &class_name);
> >
> > @@ -710,15 +722,6 @@ public:
> >      // Creating related types
> >
> //----------------------------------------------------------------------
> >
> > -    static CompilerType
> > -    AddConstModifier (const CompilerType& type);
> > -
> > -    static CompilerType
> > -    AddRestrictModifier (const CompilerType& type);
> > -
> > -    static CompilerType
> > -    AddVolatileModifier (const CompilerType& type);
> > -
> >      // Using the current type, create a new typedef to that type using
> "typedef_name"
> >      // as the name and "decl_ctx" as the decl context.
> >      static CompilerType
> > @@ -752,9 +755,6 @@ public:
> >      TypeMemberFunctionImpl
> >      GetMemberFunctionAtIndex (void *type, size_t idx) override;
> >
> > -    static CompilerType
> > -    GetLValueReferenceType (const CompilerType& type);
> > -
> >      CompilerType
> >      GetNonReferenceType (void *type) override;
> >
> > @@ -763,10 +763,25 @@ public:
> >
> >      CompilerType
> >      GetPointerType (void *type) override;
> > -
> > -    static CompilerType
> > -    GetRValueReferenceType (const CompilerType& type);
> > -
> > +
> > +    CompilerType
> > +    GetLValueReferenceType (void *type) override;
> > +
> > +    CompilerType
> > +    GetRValueReferenceType (void *type) override;
> > +
> > +    CompilerType
> > +    AddConstModifier (void *type) override;
> > +
> > +    CompilerType
> > +    AddVolatileModifier (void *type) override;
> > +
> > +    CompilerType
> > +    AddRestrictModifier (void *type) override;
> > +
> > +    CompilerType
> > +    CreateTypedef (void *type, const char *name, const
> CompilerDeclContext &decl_ctx) override;
> > +
> >      // If the current object represents a typedef type, get the
> underlying type
> >      CompilerType
> >      GetTypedefedType (void *type) override;
> > @@ -804,7 +819,10 @@ public:
> >
> >      uint32_t
> >      GetNumChildren (void *type, bool omit_empty_base_classes) override;
> > -
> > +
> > +    CompilerType
> > +    GetBuiltinTypeByName (const ConstString &name) override;
> > +
> >      lldb::BasicType
> >      GetBasicTypeEnumeration (void *type) override;
> >
> >
> > Modified: lldb/trunk/include/lldb/Symbol/CompilerType.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/CompilerType.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/CompilerType.h Thu Sep 17 17:23:34
> 2015
> > @@ -272,15 +272,75 @@ public:
> >      TypeMemberFunctionImpl
> >      GetMemberFunctionAtIndex (size_t idx);
> >
> > +
> //----------------------------------------------------------------------
> > +    // If this type is a reference to a type (L value or R value
> reference),
> > +    // return a new type with the reference removed, else return the
> current
> > +    // type itself.
> > +
> //----------------------------------------------------------------------
> >      CompilerType
> >      GetNonReferenceType () const;
> >
> > +
> //----------------------------------------------------------------------
> > +    // If this type is a pointer type, return the type that the pointer
> > +    // points to, else return an invalid type.
> > +
> //----------------------------------------------------------------------
> >      CompilerType
> >      GetPointeeType () const;
> >
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType that is a pointer to this type
> > +
> //----------------------------------------------------------------------
> >      CompilerType
> >      GetPointerType () const;
> >
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType that is a L value reference to this
> type if
> > +    // this type is valid and the type system supports L value
> references,
> > +    // else return an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    GetLValueReferenceType () const;
> > +
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType that is a R value reference to this
> type if
> > +    // this type is valid and the type system supports R value
> references,
> > +    // else return an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    GetRValueReferenceType () const;
> > +
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType adds a const modifier to this type if
> > +    // this type is valid and the type system supports const modifiers,
> > +    // else return an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    AddConstModifier () const;
> > +
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType adds a volatile modifier to this type
> if
> > +    // this type is valid and the type system supports volatile
> modifiers,
> > +    // else return an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    AddVolatileModifier () const;
> > +
> > +
> //----------------------------------------------------------------------
> > +    // Return a new CompilerType adds a restrict modifier to this type
> if
> > +    // this type is valid and the type system supports restrict
> modifiers,
> > +    // else return an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    AddRestrictModifier () const;
> > +
> > +
> //----------------------------------------------------------------------
> > +    // Create a typedef to this type using "name" as the name of the
> typedef
> > +    // this type is valid and the type system supports typedefs, else
> return
> > +    // an invalid type.
> > +
> //----------------------------------------------------------------------
> > +    CompilerType
> > +    CreateTypedef (const char *name, const CompilerDeclContext
> &decl_ctx) const;
> > +
> >      // If the current object represents a typedef type, get the
> underlying type
> >      CompilerType
> >      GetTypedefedType () const;
> >
> > Modified: lldb/trunk/include/lldb/Symbol/GoASTContext.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/GoASTContext.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/GoASTContext.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/GoASTContext.h Thu Sep 17 17:23:34
> 2015
> > @@ -27,6 +27,28 @@ class GoASTContext : public TypeSystem
> >      GoASTContext();
> >      ~GoASTContext();
> >
> > +    //------------------------------------------------------------------
> > +    // PluginInterface functions
> > +    //------------------------------------------------------------------
> > +    ConstString
> > +    GetPluginName() override;
> > +
> > +    uint32_t
> > +    GetPluginVersion() override;
> > +
> > +    static ConstString
> > +    GetPluginNameStatic ();
> > +
> > +    static lldb::TypeSystemSP
> > +    CreateInstance (lldb::LanguageType language, const
> lldb_private::ArchSpec &arch);
> > +
> > +    static void
> > +    Initialize ();
> > +
> > +    static void
> > +    Terminate ();
> > +
> > +
> >      DWARFASTParser *GetDWARFParser() override;
> >
> >      void
> > @@ -101,7 +123,7 @@ class GoASTContext : public TypeSystem
> >      CompilerType CreateBaseType(int go_kind, const ConstString
> &type_name_const_str, uint64_t byte_size);
> >
> >      // For interface, map, chan.
> > -    CompilerType CreateTypedef(int kind, const ConstString &name,
> CompilerType impl);
> > +    CompilerType CreateTypedefType(int kind, const ConstString &name,
> CompilerType impl);
> >
> >      CompilerType CreateVoidType(const ConstString &name);
> >      CompilerType CreateFunctionType(const lldb_private::ConstString
> &name, CompilerType *params, size_t params_count,
> > @@ -124,37 +146,39 @@ class GoASTContext : public TypeSystem
> >      static bool IsDirectIface(uint8_t kind);
> >      static bool IsPointerKind(uint8_t kind);
> >
> > -    virtual bool IsArrayType(void *type, CompilerType *element_type,
> uint64_t *size, bool *is_incomplete) override;
> > +    bool IsArrayType(void *type, CompilerType *element_type, uint64_t
> *size, bool *is_incomplete) override;
> >
> > -    virtual bool IsAggregateType(void *type) override;
> > +    bool IsAggregateType(void *type) override;
> >
> > -    virtual bool IsCharType(void *type) override;
> > +    bool IsCharType(void *type) override;
> >
> > -    virtual bool IsCompleteType(void *type) override;
> > +    bool IsCompleteType(void *type) override;
> >
> > -    virtual bool IsDefined(void *type) override;
> > +    bool IsDefined(void *type) override;
> >
> > -    virtual bool IsFloatingPointType(void *type, uint32_t &count, bool
> &is_complex) override;
> > +    bool IsFloatingPointType(void *type, uint32_t &count, bool
> &is_complex) override;
> >
> > -    virtual bool IsFunctionType(void *type, bool *is_variadic_ptr =
> NULL) override;
> > +    bool IsFunctionType(void *type, bool *is_variadic_ptr = NULL)
> override;
> >
> > -    virtual size_t GetNumberOfFunctionArguments(void *type) override;
> > +    size_t GetNumberOfFunctionArguments(void *type) override;
> >
> > -    virtual CompilerType GetFunctionArgumentAtIndex(void *type, const
> size_t index) override;
> > +    CompilerType GetFunctionArgumentAtIndex(void *type, const size_t
> index) override;
> >
> > -    virtual bool IsFunctionPointerType(void *type) override;
> > +    bool IsFunctionPointerType(void *type) override;
> >
> > -    virtual bool IsIntegerType(void *type, bool &is_signed) override;
> > +    bool IsIntegerType(void *type, bool &is_signed) override;
> >
> > -    virtual bool IsPossibleDynamicType(void *type,
> > +    bool IsPossibleDynamicType(void *type,
> >                                         CompilerType *target_type, //
> Can pass NULL
> >                                         bool check_cplusplus, bool
> check_objc) override;
> >
> > -    virtual bool IsPointerType(void *type, CompilerType *pointee_type =
> NULL) override;
> > +    bool IsPointerType(void *type, CompilerType *pointee_type = NULL)
> override;
> > +
> > +    bool IsScalarType(void *type) override;
> >
> > -    virtual bool IsScalarType(void *type) override;
> > +    bool IsVoidType(void *type) override;
> >
> > -    virtual bool IsVoidType(void *type) override;
> > +    bool SupportsLanguage (lldb::LanguageType language) override;
> >
> >
> //----------------------------------------------------------------------
> >      // Type Completion
> > @@ -217,9 +241,9 @@ class GoASTContext : public TypeSystem
> >      virtual uint32_t GetNumChildren(void *type, bool
> omit_empty_base_classes) override;
> >
> >      virtual lldb::BasicType GetBasicTypeEnumeration(void *type)
> override;
> > -    virtual CompilerType GetIntTypeFromBitSize (size_t bit_size, bool
> is_signed) override;
> > -    virtual CompilerType GetFloatTypeFromBitSize (size_t bit_size)
> override;
> >
> > +    virtual CompilerType GetBuiltinTypeForEncodingAndBitSize
> (lldb::Encoding encoding,
> > +                                                              size_t
> bit_size) override;
> >
> >      virtual uint32_t GetNumFields(void *type) override;
> >
> >
> > Modified: lldb/trunk/include/lldb/Symbol/SymbolFile.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/SymbolFile.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/SymbolFile.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/SymbolFile.h Thu Sep 17 17:23:34 2015
> > @@ -147,8 +147,6 @@ public:
> >      virtual size_t          GetTypes (lldb_private::SymbolContextScope
> *sc_scope,
> >                                        uint32_t type_mask,
> >                                        lldb_private::TypeList
> &type_list) = 0;
> > -    virtual ClangASTContext &
> > -                            GetClangASTContext ();
> >
> >      virtual lldb_private::TypeSystem *
> >                              GetTypeSystemForLanguage
> (lldb::LanguageType language);
> >
> > Modified: lldb/trunk/include/lldb/Symbol/Type.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Type.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/Type.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/Type.h Thu Sep 17 17:23:34 2015
> > @@ -14,7 +14,6 @@
> >  #include "lldb/Core/ClangForward.h"
> >  #include "lldb/Core/ConstString.h"
> >  #include "lldb/Core/UserID.h"
> > -#include "lldb/Symbol/ClangASTContext.h"
> >  #include "lldb/Symbol/CompilerType.h"
> >  #include "lldb/Symbol/Declaration.h"
> >
> > @@ -254,9 +253,6 @@ public:
> >      CompilerType
> >      GetForwardCompilerType ();
> >
> > -    ClangASTContext &
> > -    GetClangASTContext ();
> > -
> >      static int
> >      Compare(const Type &a, const Type &b);
> >
> > @@ -422,7 +418,7 @@ public:
> >      GetPointerType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetLayoutCompilerType ().GetPointerType();
> > +            return type_sp->GetForwardCompilerType().GetPointerType();
> >          return clang_type.GetPointerType();
> >      }
> >
> > @@ -430,7 +426,7 @@ public:
> >      GetPointeeType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetFullCompilerType ().GetPointeeType();
> > +            return type_sp->GetForwardCompilerType ().GetPointeeType();
> >          return clang_type.GetPointeeType();
> >      }
> >
> > @@ -438,39 +434,43 @@ public:
> >      GetReferenceType () const
> >      {
> >          if (type_sp)
> > -            return
> ClangASTContext::GetLValueReferenceType(type_sp->GetLayoutCompilerType ());
> > -        return ClangASTContext::GetLValueReferenceType(clang_type);
> > +            return type_sp->GetForwardCompilerType
> ().GetLValueReferenceType();
> > +        else
> > +            return clang_type.GetLValueReferenceType();
> >      }
> >
> >      CompilerType
> >      GetTypedefedType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetFullCompilerType ().GetTypedefedType();
> > -        return clang_type.GetTypedefedType();
> > +            return type_sp->GetForwardCompilerType
> ().GetTypedefedType();
> > +        else
> > +            return clang_type.GetTypedefedType();
> >      }
> >
> >      CompilerType
> >      GetDereferencedType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetFullCompilerType
> ().GetNonReferenceType();
> > -        return clang_type.GetNonReferenceType();
> > +            return type_sp->GetForwardCompilerType
> ().GetNonReferenceType();
> > +        else
> > +            return clang_type.GetNonReferenceType();
> >      }
> >
> >      CompilerType
> >      GetUnqualifiedType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetLayoutCompilerType
> ().GetFullyUnqualifiedType();
> > -        return clang_type.GetFullyUnqualifiedType();
> > +            return type_sp->GetForwardCompilerType
> ().GetFullyUnqualifiedType();
> > +        else
> > +            return clang_type.GetFullyUnqualifiedType();
> >      }
> >
> >      CompilerType
> >      GetCanonicalType () const
> >      {
> >          if (type_sp)
> > -            return type_sp->GetFullCompilerType ().GetCanonicalType();
> > +            return type_sp->GetForwardCompilerType
> ().GetCanonicalType();
> >          return clang_type.GetCanonicalType();
> >      }
> >
> >
> > Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original)
> > +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Thu Sep 17 17:23:34 2015
> > @@ -14,6 +14,7 @@
> >  #include <string>
> >  #include "lldb/lldb-private.h"
> >  #include "lldb/Core/ClangForward.h"
> > +#include "lldb/Core/PluginInterface.h"
> >  #include "lldb/Expression/Expression.h"
> >  #include "lldb/Symbol/CompilerDeclContext.h"
> >  #include "clang/AST/CharUnits.h"
> > @@ -28,7 +29,7 @@ namespace lldb_private {
> >  //----------------------------------------------------------------------
> >  // Interface for representing the Type Systems in different languages.
> >  //----------------------------------------------------------------------
> > -class TypeSystem
> > +class TypeSystem : public PluginInterface
> >  {
> >  public:
> >
> //----------------------------------------------------------------------
> > @@ -71,6 +72,9 @@ public:
> >
> >      LLVMCastKind getKind() const { return m_kind; }
> >
> > +    static lldb::TypeSystemSP
> > +    CreateInstance (lldb::LanguageType language, const
> lldb_private::ArchSpec &arch);
> > +
> >
> //----------------------------------------------------------------------
> >      // Constructors and Destructors
> >
> //----------------------------------------------------------------------
> > @@ -182,7 +186,11 @@ public:
> >
> >      virtual bool
> >      IsVoidType (void *type) = 0;
> > -
> > +
> > +    // TypeSystems can support more than one language
> > +    virtual bool
> > +    SupportsLanguage (lldb::LanguageType language) = 0;
> > +
> >
> //----------------------------------------------------------------------
> >      // Type Completion
> >
> //----------------------------------------------------------------------
> > @@ -245,7 +253,25 @@ public:
> >
> >      virtual CompilerType
> >      GetPointerType (void *type) = 0;
> > -
> > +
> > +    virtual CompilerType
> > +    GetLValueReferenceType (void *type);
> > +
> > +    virtual CompilerType
> > +    GetRValueReferenceType (void *type);
> > +
> > +    virtual CompilerType
> > +    AddConstModifier (void *type);
> > +
> > +    virtual CompilerType
> > +    AddVolatileModifier (void *type);
> > +
> > +    virtual CompilerType
> > +    AddRestrictModifier (void *type);
> > +
> > +    virtual CompilerType
> > +    CreateTypedef (void *type, const char *name, const
> CompilerDeclContext &decl_ctx);
> > +
> >
> //----------------------------------------------------------------------
> >      // Exploring the type
> >
> //----------------------------------------------------------------------
> > @@ -261,7 +287,10 @@ public:
> >
> >      virtual uint32_t
> >      GetNumChildren (void *type, bool omit_empty_base_classes) = 0;
> > -
> > +
> > +    virtual CompilerType
> > +    GetBuiltinTypeByName (const ConstString &name);
> > +
> >      virtual lldb::BasicType
> >      GetBasicTypeEnumeration (void *type) = 0;
> >
> > @@ -417,10 +446,8 @@ public:
> >      GetBasicTypeFromAST (lldb::BasicType basic_type) = 0;
> >
> >      virtual CompilerType
> > -    GetIntTypeFromBitSize (size_t bit_size, bool is_signed) = 0;
> > -
> > -    virtual CompilerType
> > -    GetFloatTypeFromBitSize (size_t bit_size) = 0;
> > +    GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
> > +                                        size_t bit_size) = 0;
> >
> >      virtual bool
> >      IsBeingDefined (void *type) = 0;
> >
> > Modified: lldb/trunk/include/lldb/lldb-forward.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-forward.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/lldb-forward.h (original)
> > +++ lldb/trunk/include/lldb/lldb-forward.h Thu Sep 17 17:23:34 2015
> > @@ -426,6 +426,7 @@ namespace lldb {
> >      typedef std::shared_ptr<lldb_private::TypeMemberFunctionImpl>
> TypeMemberFunctionImplSP;
> >      typedef std::shared_ptr<lldb_private::TypeEnumMemberImpl>
> TypeEnumMemberImplSP;
> >      typedef std::shared_ptr<lldb_private::TypeFilterImpl>
> TypeFilterImplSP;
> > +    typedef std::shared_ptr<lldb_private::TypeSystem> TypeSystemSP;
> >      typedef std::shared_ptr<lldb_private::TypeFormatImpl>
> TypeFormatImplSP;
> >      typedef std::shared_ptr<lldb_private::TypeNameSpecifierImpl>
> TypeNameSpecifierImplSP;
> >      typedef std::shared_ptr<lldb_private::TypeSummaryImpl>
> TypeSummaryImplSP;
> >
> > Modified: lldb/trunk/include/lldb/lldb-private-interfaces.h
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-interfaces.h?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/include/lldb/lldb-private-interfaces.h (original)
> > +++ lldb/trunk/include/lldb/lldb-private-interfaces.h Thu Sep 17
> 17:23:34 2015
> > @@ -46,6 +46,7 @@ namespace lldb_private
> >      typedef lldb::MemoryHistorySP (*MemoryHistoryCreateInstance) (const
> lldb::ProcessSP &process_sp);
> >      typedef lldb::InstrumentationRuntimeType
> (*InstrumentationRuntimeGetType) ();
> >      typedef lldb::InstrumentationRuntimeSP
> (*InstrumentationRuntimeCreateInstance) (const lldb::ProcessSP &process_sp);
> > +    typedef lldb::TypeSystemSP (*TypeSystemCreateInstance)
> (lldb::LanguageType language, const lldb_private::ArchSpec &arch);
> >      typedef int (*ComparisonFunction)(const void *, const void *);
> >      typedef void (*DebuggerInitializeCallback)(Debugger &debugger);
> >
> >
> > Modified: lldb/trunk/source/API/SBModule.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBModule.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/API/SBModule.cpp (original)
> > +++ lldb/trunk/source/API/SBModule.cpp Thu Sep 17 17:23:34 2015
> > @@ -20,10 +20,10 @@
> >  #include "lldb/Core/StreamString.h"
> >  #include "lldb/Core/ValueObjectList.h"
> >  #include "lldb/Core/ValueObjectVariable.h"
> > -#include "lldb/Symbol/ClangASTContext.h"
> >  #include "lldb/Symbol/ObjectFile.h"
> >  #include "lldb/Symbol/SymbolVendor.h"
> >  #include "lldb/Symbol/Symtab.h"
> > +#include "lldb/Symbol/TypeSystem.h"
> >  #include "lldb/Symbol/VariableList.h"
> >  #include "lldb/Target/Target.h"
> >
> > @@ -521,7 +521,11 @@ SBModule::FindFirstType (const char *nam
> >          sb_type = SBType (module_sp->FindFirstType(sc, name,
> exact_match));
> >
> >          if (!sb_type.IsValid())
> > -            sb_type = SBType (ClangASTContext::GetBasicType
> (module_sp->GetClangASTContext().getASTContext(), name));
> > +        {
> > +            TypeSystem *type_system =
> module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
> > +            if (type_system)
> > +                sb_type = SBType
> (type_system->GetBuiltinTypeByName(name));
> > +        }
> >      }
> >      return sb_type;
> >  }
> > @@ -531,7 +535,11 @@ SBModule::GetBasicType(lldb::BasicType t
> >  {
> >      ModuleSP module_sp (GetSP ());
> >      if (module_sp)
> > -        return SBType (ClangASTContext::GetBasicType
> (module_sp->GetClangASTContext().getASTContext(), type));
> > +    {
> > +        TypeSystem *type_system =
> module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
> > +        if (type_system)
> > +            return SBType (type_system->GetBasicTypeFromAST(type));
> > +    }
> >      return SBType();
> >  }
> >
> > @@ -564,9 +572,13 @@ SBModule::FindTypes (const char *type)
> >          }
> >          else
> >          {
> > -            SBType sb_type(ClangASTContext::GetBasicType
> (module_sp->GetClangASTContext().getASTContext(), name));
> > -            if (sb_type.IsValid())
> > -                retval.Append(sb_type);
> > +            TypeSystem *type_system =
> module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
> > +            if (type_system)
> > +            {
> > +                CompilerType compiler_type =
> type_system->GetBuiltinTypeByName(name);
> > +                if (compiler_type)
> > +                    retval.Append(SBType(compiler_type));
> > +            }
> >          }
> >      }
> >
> >
> > Modified: lldb/trunk/source/API/SBType.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/API/SBType.cpp (original)
> > +++ lldb/trunk/source/API/SBType.cpp Thu Sep 17 17:23:34 2015
> > @@ -16,6 +16,7 @@
> >  #include "lldb/Core/Stream.h"
> >  #include "lldb/Symbol/CompilerType.h"
> >  #include "lldb/Symbol/Type.h"
> > +#include "lldb/Symbol/TypeSystem.h"
> >
> >  #include "llvm/ADT/APSInt.h"
> >  #include "clang/AST/Decl.h"
> >
> > Modified: lldb/trunk/source/API/SystemInitializerFull.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SystemInitializerFull.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/API/SystemInitializerFull.cpp (original)
> > +++ lldb/trunk/source/API/SystemInitializerFull.cpp Thu Sep 17 17:23:34
> 2015
> > @@ -24,6 +24,8 @@
> >  #include "lldb/Host/Host.h"
> >  #include "lldb/Initialization/SystemInitializerCommon.h"
> >  #include "lldb/Interpreter/CommandInterpreter.h"
> > +#include "lldb/Symbol/ClangASTContext.h"
> > +#include "lldb/Symbol/GoASTContext.h"
> >
> >  #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
> >  #include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
> > @@ -251,6 +253,9 @@ SystemInitializerFull::Initialize()
> >      llvm::InitializeAllTargetMCs();
> >      llvm::InitializeAllDisassemblers();
> >
> > +    ClangASTContext::Initialize();
> > +    GoASTContext::Initialize();
> > +
> >      ABIMacOSX_i386::Initialize();
> >      ABIMacOSX_arm::Initialize();
> >      ABIMacOSX_arm64::Initialize();
> > @@ -359,6 +364,10 @@ SystemInitializerFull::Terminate()
> >
> >      // Terminate and unload and loaded system or user LLDB plug-ins
> >      PluginManager::Terminate();
> > +
> > +    ClangASTContext::Terminate();
> > +    GoASTContext::Terminate();
> > +
> >      ABIMacOSX_i386::Terminate();
> >      ABIMacOSX_arm::Terminate();
> >      ABIMacOSX_arm64::Terminate();
> >
> > Modified: lldb/trunk/source/Commands/CommandObjectArgs.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectArgs.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Commands/CommandObjectArgs.cpp (original)
> > +++ lldb/trunk/source/Commands/CommandObjectArgs.cpp Thu Sep 17 17:23:34
> 2015
> > @@ -146,8 +146,14 @@ CommandObjectArgs::DoExecute (Args& args
> >          result.SetStatus (eReturnStatusFailed);
> >          return false;
> >      }
> > -
> > -    ClangASTContext &ast_context =
> thread_module_sp->GetClangASTContext();
> > +
> > +    TypeSystem *type_system =
> thread_module_sp->GetTypeSystemForLanguage(eLanguageTypeC);
> > +    if (type_system == nullptr)
> > +    {
> > +        result.AppendError ("Unable to create C type system.");
> > +        result.SetStatus (eReturnStatusFailed);
> > +        return false;
> > +    }
> >
> >      ValueList value_list;
> >
> > @@ -156,7 +162,7 @@ CommandObjectArgs::DoExecute (Args& args
> >          const char *arg_type_cstr = args.GetArgumentAtIndex(arg_index);
> >          Value value;
> >          value.SetValueType(Value::eValueTypeScalar);
> > -        CompilerType clang_type;
> > +        CompilerType compiler_type;
> >
> >          char *int_pos;
> >          if ((int_pos = strstr (const_cast<char*>(arg_type_cstr),
> "int")))
> > @@ -198,10 +204,9 @@ CommandObjectArgs::DoExecute (Args& args
> >                  result.SetStatus (eReturnStatusFailed);
> >                  return false;
> >              }
> > +            compiler_type =
> type_system->GetBuiltinTypeForEncodingAndBitSize(encoding, width);
> >
> > -            clang_type =
> ast_context.GetBuiltinTypeForEncodingAndBitSize(encoding, width);
> > -
> > -            if (!clang_type.IsValid())
> > +            if (!compiler_type.IsValid())
> >              {
> >                  result.AppendErrorWithFormat ("Couldn't get Clang type
> for format %s (%s integer, width %d).\n",
> >                                               arg_type_cstr,
> > @@ -215,9 +220,9 @@ CommandObjectArgs::DoExecute (Args& args
> >          else if (strchr (arg_type_cstr, '*'))
> >          {
> >              if (!strcmp (arg_type_cstr, "void*"))
> > -                clang_type =
> ast_context.GetBasicType(eBasicTypeVoid).GetPointerType();
> > +                compiler_type =
> type_system->GetBasicTypeFromAST(eBasicTypeVoid).GetPointerType();
> >              else if (!strcmp (arg_type_cstr, "char*"))
> > -                clang_type = ast_context.GetCStringType (false);
> > +                compiler_type =
> type_system->GetBasicTypeFromAST(eBasicTypeChar).GetPointerType();
> >              else
> >              {
> >                  result.AppendErrorWithFormat ("Invalid format: %s.\n",
> arg_type_cstr);
> > @@ -232,7 +237,7 @@ CommandObjectArgs::DoExecute (Args& args
> >              return false;
> >          }
> >
> > -        value.SetCompilerType (clang_type);
> > +        value.SetCompilerType (compiler_type);
> >          value_list.PushValue(value);
> >      }
> >
> >
> > Modified: lldb/trunk/source/Core/Module.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Module.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Core/Module.cpp (original)
> > +++ lldb/trunk/source/Core/Module.cpp Thu Sep 17 17:23:34 2015
> > @@ -15,6 +15,7 @@
> >  #include "lldb/Core/Log.h"
> >  #include "lldb/Core/ModuleList.h"
> >  #include "lldb/Core/ModuleSpec.h"
> > +#include "lldb/Core/PluginManager.h"
> >  #include "lldb/Core/RegularExpression.h"
> >  #include "lldb/Core/Section.h"
> >  #include "lldb/Core/StreamString.h"
> > @@ -23,17 +24,16 @@
> >  #include "lldb/Host/Symbols.h"
> >  #include "lldb/Interpreter/CommandInterpreter.h"
> >  #include "lldb/Interpreter/ScriptInterpreter.h"
> > -#include "lldb/Symbol/ClangASTContext.h"
> >  #include "lldb/Symbol/CompileUnit.h"
> > -#include "lldb/Symbol/GoASTContext.h"
> >  #include "lldb/Symbol/ObjectFile.h"
> >  #include "lldb/Symbol/SymbolContext.h"
> > +#include "lldb/Symbol/SymbolFile.h"
> >  #include "lldb/Symbol/SymbolVendor.h"
> > +#include "lldb/Symbol/TypeSystem.h"
> >  #include "lldb/Target/Language.h"
> >  #include "lldb/Target/Process.h"
> >  #include "lldb/Target/SectionLoadList.h"
> >  #include "lldb/Target/Target.h"
> > -#include "lldb/Symbol/SymbolFile.h"
> >  #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
> >  #include "Plugins/Language/ObjC/ObjCLanguage.h"
> >
> > @@ -148,14 +148,12 @@ Module::Module (const ModuleSpec &module
> >      m_object_mod_time (),
> >      m_objfile_sp (),
> >      m_symfile_ap (),
> > -    m_ast (new ClangASTContext),
> > -    m_go_ast(),
> > +    m_type_system_map(),
> >      m_source_mappings (),
> >      m_sections_ap(),
> >      m_did_load_objfile (false),
> >      m_did_load_symbol_vendor (false),
> >      m_did_parse_uuid (false),
> > -    m_did_init_ast (false),
> >      m_file_has_changed (false),
> >      m_first_file_changed_log (false)
> >  {
> > @@ -253,14 +251,12 @@ Module::Module(const FileSpec& file_spec
> >      m_object_mod_time (),
> >      m_objfile_sp (),
> >      m_symfile_ap (),
> > -    m_ast (new ClangASTContext),
> > -    m_go_ast(),
> > +    m_type_system_map(),
> >      m_source_mappings (),
> >      m_sections_ap(),
> >      m_did_load_objfile (false),
> >      m_did_load_symbol_vendor (false),
> >      m_did_parse_uuid (false),
> > -    m_did_init_ast (false),
> >      m_file_has_changed (false),
> >      m_first_file_changed_log (false)
> >  {
> > @@ -300,14 +296,12 @@ Module::Module () :
> >      m_object_mod_time (),
> >      m_objfile_sp (),
> >      m_symfile_ap (),
> > -    m_ast (new ClangASTContext),
> > -    m_go_ast(),
> > +    m_type_system_map(),
> >      m_source_mappings (),
> >      m_sections_ap(),
> >      m_did_load_objfile (false),
> >      m_did_load_symbol_vendor (false),
> >      m_did_parse_uuid (false),
> > -    m_did_init_ast (false),
> >      m_file_has_changed (false),
> >      m_first_file_changed_log (false)
> >  {
> > @@ -424,64 +418,26 @@ Module::GetUUID()
> >  TypeSystem *
> >  Module::GetTypeSystemForLanguage (LanguageType language)
> >  {
> > -    if (language == eLanguageTypeGo)
> > -    {
> > -        Mutex::Locker locker (m_mutex);
> > -        if (!m_go_ast)
> > -        {
> > -            ObjectFile * objfile = GetObjectFile();
> > -            ArchSpec object_arch;
> > -            if (objfile && objfile->GetArchitecture(object_arch))
> > -            {
> > -                m_go_ast.reset(new GoASTContext);
> > -
> m_go_ast->SetAddressByteSize(object_arch.GetAddressByteSize());
> > -            }
> > -        }
> > -        return m_go_ast.get();
> > -    }
> > -    else if (language != eLanguageTypeSwift)
> > -    {
> > -        // For now assume all languages except swift use the
> ClangASTContext for types
> > -        return &GetClangASTContext();
> > -    }
> > -    return nullptr;
> > -}
> > +    Mutex::Locker locker (m_mutex);
> > +    TypeSystemMap::iterator pos = m_type_system_map.find(language);
> > +    if (pos != m_type_system_map.end())
> > +        return pos->second.get();
> >
> > -ClangASTContext &
> > -Module::GetClangASTContext ()
> > -{
> > -    if (m_did_init_ast.load() == false)
> > +    for (const auto &pair : m_type_system_map)
> >      {
> > -        Mutex::Locker locker (m_mutex);
> > -        if (m_did_init_ast.load() == false)
> > +        if (pair.second && pair.second->SupportsLanguage(language))
> >          {
> > -            ObjectFile * objfile = GetObjectFile();
> > -            ArchSpec object_arch;
> > -            if (objfile && objfile->GetArchitecture(object_arch))
> > -            {
> > -                m_did_init_ast = true;
> > -
> > -                // LLVM wants this to be set to iOS or MacOSX; if we're
> working on
> > -                // a bare-boards type image, change the triple for
> llvm's benefit.
> > -                if (object_arch.GetTriple().getVendor() ==
> llvm::Triple::Apple
> > -                    && object_arch.GetTriple().getOS() ==
> llvm::Triple::UnknownOS)
> > -                {
> > -                    if (object_arch.GetTriple().getArch() ==
> llvm::Triple::arm ||
> > -                        object_arch.GetTriple().getArch() ==
> llvm::Triple::aarch64 ||
> > -                        object_arch.GetTriple().getArch() ==
> llvm::Triple::thumb)
> > -                    {
> > -
> object_arch.GetTriple().setOS(llvm::Triple::IOS);
> > -                    }
> > -                    else
> > -                    {
> > -
> object_arch.GetTriple().setOS(llvm::Triple::MacOSX);
> > -                    }
> > -                }
> > -                m_ast->SetArchitecture (object_arch);
> > -            }
> > +            // Add a new mapping for "language" to point to an already
> existing
> > +            // TypeSystem that supports this language
> > +            m_type_system_map[language] = pair.second;
> > +            return pair.second.get();
> >          }
> >      }
> > -    return *m_ast;
> > +
> > +    // Cache even if we get a shared pointer that contains null type
> system back
> > +    lldb::TypeSystemSP type_system_sp = TypeSystem::CreateInstance
> (language, GetArchitecture());
> > +    m_type_system_map[language] = type_system_sp;
> > +    return type_system_sp.get();
> >  }
> >
> >  void
> >
> > Modified: lldb/trunk/source/Core/PluginManager.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/PluginManager.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Core/PluginManager.cpp (original)
> > +++ lldb/trunk/source/Core/PluginManager.cpp Thu Sep 17 17:23:34 2015
> > @@ -2516,6 +2516,108 @@ PluginManager::GetInstrumentationRuntime
> >      return NULL;
> >  }
> >
> > +#pragma mark TypeSystem
> > +
> > +
> > +struct TypeSystemInstance
> > +{
> > +    TypeSystemInstance() :
> > +    name(),
> > +    description(),
> > +    create_callback(NULL)
> > +    {
> > +    }
> > +
> > +    ConstString name;
> > +    std::string description;
> > +    TypeSystemCreateInstance create_callback;
> > +};
> > +
> > +typedef std::vector<TypeSystemInstance> TypeSystemInstances;
> > +
> > +static Mutex &
> > +GetTypeSystemMutex ()
> > +{
> > +    static Mutex g_instances_mutex (Mutex::eMutexTypeRecursive);
> > +    return g_instances_mutex;
> > +}
> > +
> > +static TypeSystemInstances &
> > +GetTypeSystemInstances ()
> > +{
> > +    static TypeSystemInstances g_instances;
> > +    return g_instances;
> > +}
> > +
> > +bool
> > +PluginManager::RegisterPlugin (const ConstString &name,
> > +                               const char *description,
> > +                               TypeSystemCreateInstance create_callback)
> > +{
> > +    if (create_callback)
> > +    {
> > +        TypeSystemInstance instance;
> > +        assert ((bool)name);
> > +        instance.name = name;
> > +        if (description && description[0])
> > +            instance.description = description;
> > +        instance.create_callback = create_callback;
> > +        Mutex::Locker locker (GetTypeSystemMutex ());
> > +        GetTypeSystemInstances ().push_back (instance);
> > +    }
> > +    return false;
> > +}
> > +
> > +bool
> > +PluginManager::UnregisterPlugin (TypeSystemCreateInstance
> create_callback)
> > +{
> > +    if (create_callback)
> > +    {
> > +        Mutex::Locker locker (GetTypeSystemMutex ());
> > +        TypeSystemInstances &instances = GetTypeSystemInstances ();
> > +
> > +        TypeSystemInstances::iterator pos, end = instances.end();
> > +        for (pos = instances.begin(); pos != end; ++ pos)
> > +        {
> > +            if (pos->create_callback == create_callback)
> > +            {
> > +                instances.erase(pos);
> > +                return true;
> > +            }
> > +        }
> > +    }
> > +    return false;
> > +}
> > +
> > +TypeSystemCreateInstance
> > +PluginManager::GetTypeSystemCreateCallbackAtIndex (uint32_t idx)
> > +{
> > +    Mutex::Locker locker (GetTypeSystemMutex ());
> > +    TypeSystemInstances &instances = GetTypeSystemInstances ();
> > +    if (idx < instances.size())
> > +        return instances[idx].create_callback;
> > +    return NULL;
> > +}
> > +
> > +TypeSystemCreateInstance
> > +PluginManager::GetTypeSystemCreateCallbackForPluginName (const
> ConstString &name)
> > +{
> > +    if (name)
> > +    {
> > +        Mutex::Locker locker (GetTypeSystemMutex ());
> > +        TypeSystemInstances &instances = GetTypeSystemInstances ();
> > +
> > +        TypeSystemInstances::iterator pos, end = instances.end();
> > +        for (pos = instances.begin(); pos != end; ++ pos)
> > +        {
> > +            if (name == pos->name)
> > +                return pos->create_callback;
> > +        }
> > +    }
> > +    return NULL;
> > +}
> > +
> > +
> >  #pragma mark PluginManager
> >
> >  void
> >
> > Modified: lldb/trunk/source/Core/ValueObjectDynamicValue.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectDynamicValue.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Core/ValueObjectDynamicValue.cpp (original)
> > +++ lldb/trunk/source/Core/ValueObjectDynamicValue.cpp Thu Sep 17
> 17:23:34 2015
> > @@ -154,7 +154,7 @@ FixupTypeAndOrName (const TypeAndOrName&
> >          if (parent.IsPointerType())
> >              corrected_type = orig_type.GetPointerType ();
> >          else if (parent.IsPointerOrReferenceType())
> > -            corrected_type =
> ClangASTContext::GetLValueReferenceType(orig_type);
> > +            corrected_type = orig_type.GetLValueReferenceType();
> >          ret.SetCompilerType(corrected_type);
> >      }
> >      else /*if (m_dynamic_type_info.HasName())*/
> >
> > Modified: lldb/trunk/source/Core/ValueObjectRegister.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectRegister.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Core/ValueObjectRegister.cpp (original)
> > +++ lldb/trunk/source/Core/ValueObjectRegister.cpp Thu Sep 17 17:23:34
> 2015
> > @@ -319,8 +319,10 @@ ValueObjectRegister::GetCompilerTypeImpl
> >              Module *exe_module = target->GetExecutableModulePointer();
> >              if (exe_module)
> >              {
> > -                m_clang_type =
> exe_module->GetClangASTContext().GetBuiltinTypeForEncodingAndBitSize
> (m_reg_info.encoding,
> > -
>                              m_reg_info.byte_size * 8);
> > +                TypeSystem *type_system =
> exe_module->GetTypeSystemForLanguage (eLanguageTypeC);
> > +                if (type_system)
> > +                    m_clang_type =
> type_system->GetBuiltinTypeForEncodingAndBitSize (m_reg_info.encoding,
> > +
>              m_reg_info.byte_size * 8);
> >              }
> >          }
> >      }
> >
> > Modified: lldb/trunk/source/DataFormatters/FormatManager.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/DataFormatters/FormatManager.cpp (original)
> > +++ lldb/trunk/source/DataFormatters/FormatManager.cpp Thu Sep 17
> 17:23:34 2015
> > @@ -229,7 +229,7 @@ FormatManager::GetPossibleMatches (Value
> >          if (non_ref_type.IsTypedefType())
> >          {
> >              CompilerType deffed_referenced_type =
> non_ref_type.GetTypedefedType();
> > -            deffed_referenced_type = is_rvalue_ref ?
> ClangASTContext::GetRValueReferenceType(deffed_referenced_type) :
> ClangASTContext::GetLValueReferenceType(deffed_referenced_type);
> > +            deffed_referenced_type = is_rvalue_ref ?
> deffed_referenced_type.GetRValueReferenceType() :
> deffed_referenced_type.GetLValueReferenceType();
> >              GetPossibleMatches(valobj,
> >                                 deffed_referenced_type,
> >                                 reason |
> lldb_private::eFormatterChoiceCriterionNavigatedTypedefs,
> >
> > Modified: lldb/trunk/source/DataFormatters/VectorType.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/VectorType.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/DataFormatters/VectorType.cpp (original)
> > +++ lldb/trunk/source/DataFormatters/VectorType.cpp Thu Sep 17 17:23:34
> 2015
> > @@ -31,7 +31,7 @@ GetCompilerTypeForFormat (lldb::Format f
> >      {
> >          case lldb::eFormatAddressInfo:
> >          case lldb::eFormatPointer:
> > -            return
> type_system->GetIntTypeFromBitSize(8*type_system->GetPointerByteSize(),
> false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 8*type_system->GetPointerByteSize());
> >
> >          case lldb::eFormatBoolean:
> >              return
> type_system->GetBasicTypeFromAST(lldb::eBasicTypeBool);
> > @@ -70,37 +70,37 @@ GetCompilerTypeForFormat (lldb::Format f
> >              return
> type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar);
> >
> >          case lldb::eFormatVectorOfFloat32:
> > -            return type_system->GetFloatTypeFromBitSize(32);
> > +            return
> type_system->GetBuiltinTypeForEncodingAndBitSize(eEncodingIEEE754, 32);
> >
> >          case lldb::eFormatVectorOfFloat64:
> > -            return type_system->GetFloatTypeFromBitSize(64);
> > +            return
> type_system->GetBuiltinTypeForEncodingAndBitSize(eEncodingIEEE754, 64);
> >
> >          case lldb::eFormatVectorOfSInt16:
> > -            return type_system->GetIntTypeFromBitSize(16, true);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingSint, 16);
> >
> >          case lldb::eFormatVectorOfSInt32:
> > -            return type_system->GetIntTypeFromBitSize(32, true);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingSint, 32);
> >
> >          case lldb::eFormatVectorOfSInt64:
> > -            return type_system->GetIntTypeFromBitSize(64, true);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingSint, 64);
> >
> >          case lldb::eFormatVectorOfSInt8:
> > -            return type_system->GetIntTypeFromBitSize(8, true);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingSint, 8);
> >
> >          case lldb::eFormatVectorOfUInt128:
> > -            return type_system->GetIntTypeFromBitSize(128, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 128);
> >
> >          case lldb::eFormatVectorOfUInt16:
> > -            return type_system->GetIntTypeFromBitSize(16, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 16);
> >
> >          case lldb::eFormatVectorOfUInt32:
> > -            return type_system->GetIntTypeFromBitSize(32, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 32);
> >
> >          case lldb::eFormatVectorOfUInt64:
> > -            return type_system->GetIntTypeFromBitSize(64, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 64);
> >
> >          case lldb::eFormatVectorOfUInt8:
> > -            return type_system->GetIntTypeFromBitSize(8, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 8);
> >
> >          case lldb::eFormatDefault:
> >              return element_type;
> > @@ -113,7 +113,7 @@ GetCompilerTypeForFormat (lldb::Format f
> >          case lldb::eFormatOSType:
> >          case lldb::eFormatVoid:
> >          default:
> > -            return type_system->GetIntTypeFromBitSize(8, false);
> > +            return type_system->GetBuiltinTypeForEncodingAndBitSize
> (eEncodingUint, 8);
> >      }
> >  }
> >
> >
> > Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=247953&r1=247952&r2=247953&view=diff
> >
> ==============================================================================
> > --- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
> > +++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Thu Sep 17
> 17:23:34 2015
> > @@ -1678,7 +1678,17 @@ ClangExpressionDeclMap::GetVariableValue
> >          return false;
> >      }
> >
> > -    ASTC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150923/8058d5bf/attachment-0001.html>


More information about the lldb-commits mailing list