[Lldb-commits] [lldb] r109046 - in /lldb/trunk: include/lldb/Core/ include/lldb/Expression/ include/lldb/Symbol/ lldb.xcodeproj/ source/Commands/ source/Core/ source/Expression/ source/Host/macosx/ source/Plugins/DynamicLoader/MacOSX-DYLD/ source/Plugins/ObjectContainer/Universal-Mach-O/ source/Plugins/ObjectFile/Mach-O/ source/Plugins/Process/gdb-remote/ source/Plugins/SymbolVendor/MacOSX/ source/Symbol/

Greg Clayton gclayton at apple.com
Wed Jul 21 15:12:05 PDT 2010


Author: gclayton
Date: Wed Jul 21 17:12:05 2010
New Revision: 109046

URL: http://llvm.org/viewvc/llvm-project?rev=109046&view=rev
Log:
Change over to using the definitions for mach-o types and defines to the
defines that are in "llvm/Support/MachO.h". This should allow ObjectFileMachO
and ObjectContainerUniversalMachO to be able to be cross compiled in Linux.

Also did some cleanup on the ASTType by renaming it to ClangASTType and
renaming the header file. Moved a lot of "AST * + opaque clang type *"
functionality from lldb_private::Type over into ClangASTType.


Added:
    lldb/trunk/include/lldb/Symbol/ClangASTType.h
      - copied, changed from r109016, lldb/trunk/include/lldb/Symbol/ASTType.h
    lldb/trunk/source/Symbol/ClangASTType.cpp
      - copied, changed from r109016, lldb/trunk/source/Symbol/ASTType.cpp
Removed:
    lldb/trunk/include/lldb/Symbol/ASTType.h
    lldb/trunk/source/Symbol/ASTType.cpp
Modified:
    lldb/trunk/include/lldb/Core/ClangForward.h
    lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h
    lldb/trunk/include/lldb/Expression/ClangFunction.h
    lldb/trunk/include/lldb/Expression/ClangResultSynthesizer.h
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h
    lldb/trunk/include/lldb/Symbol/Type.h
    lldb/trunk/lldb.xcodeproj/project.pbxproj
    lldb/trunk/source/Commands/CommandObjectExpression.cpp
    lldb/trunk/source/Commands/CommandObjectVariable.cpp
    lldb/trunk/source/Core/Value.cpp
    lldb/trunk/source/Core/ValueObject.cpp
    lldb/trunk/source/Core/ValueObjectChild.cpp
    lldb/trunk/source/Core/ValueObjectRegister.cpp
    lldb/trunk/source/Expression/ClangExpression.cpp
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
    lldb/trunk/source/Expression/DWARFExpression.cpp
    lldb/trunk/source/Host/macosx/Symbols.cpp
    lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
    lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h
    lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
    lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h
    lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
    lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
    lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
    lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
    lldb/trunk/source/Symbol/ClangASTContext.cpp
    lldb/trunk/source/Symbol/Function.cpp
    lldb/trunk/source/Symbol/Type.cpp

Modified: lldb/trunk/include/lldb/Core/ClangForward.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ClangForward.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ClangForward.h (original)
+++ lldb/trunk/include/lldb/Core/ClangForward.h Wed Jul 21 17:12:05 2010
@@ -24,9 +24,13 @@
         class Context;
     }
 
+    class Action;
     class ASTContext;
+    class ASTRecordLayout;
     class AddrLabelExpr;
+    class AnalyzerOptions;
     class BinaryOperator;
+    class CodeGenOptions;
     class CodeGenerator;
     class CompilerInstance;
     class CXXBaseSpecifier;
@@ -38,18 +42,23 @@
     class CharacterLiteral;
     class CompoundAssignOperator;
     class Decl;
+    class DeclarationName;
     class DeclaratorDecl;
     class DeclContext;
     class DeclRefExpr;
     class DeclStmt;
+    class DependencyOutputOptions;
     class Diagnostic;
+    class DiagnosticOptions;
     class EnumDecl;
     class Expr;
     class ExtVectorElementExpr;
     class FieldDecl;
     class FloatingLiteral;
+    class FrontendOptions;
     class FunctionDecl;
     class GotoStmt;
+    class HeaderSearchOptions;
     class IdentifierTable;
     class IntegerLiteral;
     class LabelStmt;
@@ -72,6 +81,8 @@
     class ParenExpr;
     class ParmVarDecl;
     class PredefinedExpr;
+    class PreprocessorOptions;
+    class PreprocessorOutputOptions;
     class QualType;
     class QualifiedNameType;
     class RecordDecl;

Modified: lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h (original)
+++ lldb/trunk/include/lldb/Expression/ClangExpressionDeclMap.h Wed Jul 21 17:12:05 2010
@@ -21,13 +21,7 @@
 // Project includes
 #include "lldb/Core/ClangForward.h"
 #include "lldb/Core/Value.h"
-#include "lldb/Symbol/ASTType.h"
-
-namespace clang {
-    class DeclarationName;
-    class DeclContext;
-    class QualType;
-}
+#include "lldb/Symbol/ClangASTType.h"
 
 namespace llvm {
     class Value;
@@ -35,6 +29,33 @@
 
 namespace lldb_private {
 
+//----------------------------------------------------------------------
+// For cases in which there are multiple classes of types that are not
+// interchangeable, to allow static type checking.
+//----------------------------------------------------------------------
+template <unsigned int C> class TaggedClangASTType : public ClangASTType
+{
+public:
+    TaggedClangASTType (void *type, clang::ASTContext *ast_context) :
+        ClangASTType(type, ast_context) { }
+    
+    TaggedClangASTType (const TaggedClangASTType<C> &tw) :
+        ClangASTType(tw) { }
+    
+    TaggedClangASTType () :
+        ClangASTType() { }
+    
+    ~TaggedClangASTType() { }
+    
+    const TaggedClangASTType<C> &
+    operator= (const TaggedClangASTType<C> &tw)
+    {
+        ClangASTType::operator= (tw);
+        return *this;
+    }
+};
+
+
 class Error;
 class Function;
 class NameSearchContext;
@@ -83,8 +104,8 @@
     void GetDecls (NameSearchContext &context,
                    const char *name);
 private:
-    typedef TaggedASTType<0> TypeFromParser;
-    typedef TaggedASTType<1> TypeFromUser;
+    typedef TaggedClangASTType<0> TypeFromParser;
+    typedef TaggedClangASTType<1> TypeFromUser;
     
     struct Tuple
     {

Modified: lldb/trunk/include/lldb/Expression/ClangFunction.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ClangFunction.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ClangFunction.h (original)
+++ lldb/trunk/include/lldb/Expression/ClangFunction.h Wed Jul 21 17:12:05 2010
@@ -26,11 +26,6 @@
 // Right now, this is just a toy.  It calls a set function, with fixed
 // values.
 
-namespace clang
-{
-    class ASTRecordLayout;
-}
-
 namespace lldb_private
 {
 

Modified: lldb/trunk/include/lldb/Expression/ClangResultSynthesizer.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ClangResultSynthesizer.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ClangResultSynthesizer.h (original)
+++ lldb/trunk/include/lldb/Expression/ClangResultSynthesizer.h Wed Jul 21 17:12:05 2010
@@ -11,10 +11,7 @@
 #define liblldb_ClangResultSynthesizer_h_
 
 #include "clang/Sema/SemaConsumer.h"
-
-namespace clang {
-    class Action;
-}
+#include "lldb/Core/ClangForward.h"
 
 namespace lldb_private {
 

Removed: lldb/trunk/include/lldb/Symbol/ASTType.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ASTType.h?rev=109045&view=auto
==============================================================================
--- lldb/trunk/include/lldb/Symbol/ASTType.h (original)
+++ lldb/trunk/include/lldb/Symbol/ASTType.h (removed)
@@ -1,113 +0,0 @@
-//===-- ASTType.h -----------------------------------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef liblldb_ASTType_h_
-#define liblldb_ASTType_h_
-
-namespace clang
-{
-    class ASTContext;
-}
-
-namespace lldb_private
-{
-    
-class ASTTypeBase
-{
-protected:
-    ASTTypeBase (void *type, clang::ASTContext *ast_context) :
-        m_type(type),
-        m_ast_context(ast_context) 
-    {
-    }
-    
-    ASTTypeBase (const ASTTypeBase &tw) :
-        m_type(tw.m_type),
-        m_ast_context(tw.m_ast_context)
-    {
-    }
-    
-    ASTTypeBase () :
-        m_type(0),
-        m_ast_context(0)
-    {
-    }
-    
-    ~ASTTypeBase();
-    
-    ASTTypeBase &operator= (const ASTTypeBase &atb)
-    {
-        m_type = atb.m_type;
-        m_ast_context = atb.m_ast_context;
-        return *this;
-    }
-    
-public:
-    void *GetType() const
-    { 
-        return m_type; 
-    }
-    
-    clang::ASTContext *GetASTContext() const
-    { 
-        return m_ast_context; 
-    }
-    
-private:
-    void               *m_type;
-    clang::ASTContext  *m_ast_context;
-};
-    
-class ASTType : public ASTTypeBase
-{
-public:
-    ASTType (void *type, clang::ASTContext *ast_context) :
-        ASTTypeBase(type, ast_context) { }
-    
-    ASTType (const ASTType &at) :
-        ASTTypeBase(at) { }
-    
-    ASTType () :
-        ASTTypeBase() { }
-    
-    ~ASTType();
-    
-    ASTType &operator= (const ASTType &at)
-    {
-        ASTTypeBase::operator= (at);
-        return *this;
-    }
-};
-
-// For cases in which there are multiple classes of types that are not
-// interchangeable, to allow static type checking.
-template <unsigned int C> class TaggedASTType : public ASTTypeBase
-{
-public:
-    TaggedASTType (void *type, clang::ASTContext *ast_context) :
-        ASTTypeBase(type, ast_context) { }
-    
-    TaggedASTType (const TaggedASTType<C> &tw) :
-        ASTTypeBase(tw) { }
-    
-    TaggedASTType () :
-        ASTTypeBase() { }
-    
-    ~TaggedASTType() { }
-    
-    TaggedASTType<C> &operator= (const TaggedASTType<C> &tw)
-    {
-        ASTTypeBase::operator= (tw);
-        return *this;
-    }
-};
-    
-}
-
-#endif

Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Wed Jul 21 17:12:05 2010
@@ -21,7 +21,7 @@
 // Project includes
 #include "lldb/lldb-enumerations.h"
 #include "lldb/Core/ClangForward.h"
-#include "lldb/Symbol/ASTType.h"
+#include "lldb/Symbol/ClangASTType.h"
 
 namespace lldb_private {
 

Copied: lldb/trunk/include/lldb/Symbol/ClangASTType.h (from r109016, lldb/trunk/include/lldb/Symbol/ASTType.h)
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTType.h?p2=lldb/trunk/include/lldb/Symbol/ClangASTType.h&p1=lldb/trunk/include/lldb/Symbol/ASTType.h&r1=109016&r2=109046&rev=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/ASTType.h (original)
+++ lldb/trunk/include/lldb/Symbol/ClangASTType.h Wed Jul 21 17:12:05 2010
@@ -1,4 +1,4 @@
-//===-- ASTType.h -----------------------------------------------*- C++ -*-===//
+//===-- ClangASTType.h ------------------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -7,107 +7,213 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef liblldb_ASTType_h_
-#define liblldb_ASTType_h_
+#ifndef liblldb_ClangASTType_h_
+#define liblldb_ClangASTType_h_
 
-namespace clang
-{
-    class ASTContext;
-}
+#include "lldb/lldb-include.h"
+#include "lldb/Core/ClangForward.h"
 
-namespace lldb_private
-{
-    
-class ASTTypeBase
+namespace lldb_private {
+
+//----------------------------------------------------------------------
+// A class that can carry around a clang ASTContext and a opaque clang 
+// QualType. A clang::QualType can be easily reconstructed from an
+// opaque clang type and often the ASTContext is needed when doing 
+// various type related tasks, so this class allows both items to travel
+// in a single very lightweight class that can be used. There are many
+// static equivalents of the member functions that allow the ASTContext
+// and the opaque clang QualType to be specified for ease of use and
+// to avoid code duplication.
+//----------------------------------------------------------------------
+class ClangASTType
 {
 protected:
-    ASTTypeBase (void *type, clang::ASTContext *ast_context) :
-        m_type(type),
-        m_ast_context(ast_context) 
+    ClangASTType (void *type, clang::ASTContext *ast_context) :
+        m_type (type),
+        m_ast  (ast_context) 
     {
     }
     
-    ASTTypeBase (const ASTTypeBase &tw) :
-        m_type(tw.m_type),
-        m_ast_context(tw.m_ast_context)
+    ClangASTType (const ClangASTType &tw) :
+        m_type (tw.m_type),
+        m_ast  (tw.m_ast)
     {
     }
     
-    ASTTypeBase () :
-        m_type(0),
-        m_ast_context(0)
+    ClangASTType () :
+        m_type (0),
+        m_ast  (0)
     {
     }
     
-    ~ASTTypeBase();
+    ~ClangASTType();
     
-    ASTTypeBase &operator= (const ASTTypeBase &atb)
+    const ClangASTType &
+    operator= (const ClangASTType &atb)
     {
         m_type = atb.m_type;
-        m_ast_context = atb.m_ast_context;
+        m_ast = atb.m_ast;
         return *this;
     }
     
 public:
-    void *GetType() const
+    void *
+    GetOpaqueQualType() const
     { 
         return m_type; 
     }
     
-    clang::ASTContext *GetASTContext() const
+    clang::ASTContext *
+    GetASTContext() const
     { 
-        return m_ast_context; 
+        return m_ast; 
     }
-    
+
+    ConstString
+    GetClangTypeName ();
+
+    static ConstString
+    GetClangTypeName (void *clang_type);
+
+    void
+    DumpValue (ExecutionContext *exe_ctx,
+               Stream *s,
+               lldb::Format format,
+               const DataExtractor &data,
+               uint32_t data_offset,
+               size_t data_byte_size,
+               uint32_t bitfield_bit_size,
+               uint32_t bitfield_bit_offset,
+               bool show_types,
+               bool show_summary,
+               bool verbose,
+               uint32_t depth);
+
+    static void
+    DumpValue (clang::ASTContext *ast_context,
+               void *opaque_clang_qual_type,
+               ExecutionContext *exe_ctx,
+               Stream *s,
+               lldb::Format format,
+               const DataExtractor &data,
+               uint32_t data_offset,
+               size_t data_byte_size,
+               uint32_t bitfield_bit_size,
+               uint32_t bitfield_bit_offset,
+               bool show_types,
+               bool show_summary,
+               bool verbose,
+               uint32_t depth);
+
+    bool
+    DumpTypeValue (Stream *s,
+                   lldb::Format format,
+                   const DataExtractor &data,
+                   uint32_t data_offset,
+                   size_t data_byte_size,
+                   uint32_t bitfield_bit_size,
+                   uint32_t bitfield_bit_offset);
+    
+    
+    static bool
+    DumpTypeValue (clang::ASTContext *ast_context,
+                   void *opaque_clang_qual_type,
+                   Stream *s,
+                   lldb::Format format,
+                   const DataExtractor &data,
+                   uint32_t data_offset,
+                   size_t data_byte_size,
+                   uint32_t bitfield_bit_size,
+                   uint32_t bitfield_bit_offset);
+
+    void
+    DumpSummary (ExecutionContext *exe_ctx,
+                 Stream *s,
+                 const DataExtractor &data,
+                 uint32_t data_offset,
+                 size_t data_byte_size);
+                 
+    
+    static void
+    DumpSummary (clang::ASTContext *ast_context,
+                 void *opaque_clang_qual_type,
+                 ExecutionContext *exe_ctx,
+                 Stream *s,
+                 const DataExtractor &data,
+                 uint32_t data_offset,
+                 size_t data_byte_size);
+                 
+
+    lldb::Encoding
+    GetEncoding (uint32_t &count);                 
+
+    static lldb::Encoding
+    GetEncoding (void *opaque_clang_qual_type, uint32_t &count);
+
+    lldb::Format
+    GetFormat ();
+                 
+    static lldb::Format
+    GetFormat (void *opaque_clang_qual_type);
+
+    bool
+    GetValueAsScalar (const DataExtractor &data,
+                      uint32_t data_offset,
+                      size_t data_byte_size,
+                      Scalar &value);
+
+    static bool
+    GetValueAsScalar (clang::ASTContext *ast_context,
+                      void *opaque_clang_qual_type,
+                      const DataExtractor &data,
+                      uint32_t data_offset,
+                      size_t data_byte_size,
+                      Scalar &value);
+
+    bool
+    SetValueFromScalar (const Scalar &value,
+                        Stream &strm);
+
+    static bool
+    SetValueFromScalar (clang::ASTContext *ast_context,
+                        void *opaque_clang_qual_type,
+                        const Scalar &value,
+                        Stream &strm);
+
+    bool
+    ReadFromMemory (ExecutionContext *exe_ctx,
+                    lldb::addr_t addr,
+                    lldb::AddressType address_type,
+                    DataExtractor &data);
+
+    static bool
+    ReadFromMemory (clang::ASTContext *ast_context,
+                    void *opaque_clang_qual_type,
+                    ExecutionContext *exe_ctx,
+                    lldb::addr_t addr,
+                    lldb::AddressType address_type,
+                    DataExtractor &data);
+
+    bool
+    WriteToMemory (ExecutionContext *exe_ctx,
+                   lldb::addr_t addr,
+                   lldb::AddressType address_type,
+                   StreamString &new_value);
+
+    static bool
+    WriteToMemory (clang::ASTContext *ast_context,
+                   void *opaque_clang_qual_type,
+                   ExecutionContext *exe_ctx,
+                   lldb::addr_t addr,
+                   lldb::AddressType address_type,
+                   StreamString &new_value);
+
 private:
     void               *m_type;
-    clang::ASTContext  *m_ast_context;
-};
-    
-class ASTType : public ASTTypeBase
-{
-public:
-    ASTType (void *type, clang::ASTContext *ast_context) :
-        ASTTypeBase(type, ast_context) { }
-    
-    ASTType (const ASTType &at) :
-        ASTTypeBase(at) { }
-    
-    ASTType () :
-        ASTTypeBase() { }
-    
-    ~ASTType();
-    
-    ASTType &operator= (const ASTType &at)
-    {
-        ASTTypeBase::operator= (at);
-        return *this;
-    }
+    clang::ASTContext  *m_ast;
 };
-
-// For cases in which there are multiple classes of types that are not
-// interchangeable, to allow static type checking.
-template <unsigned int C> class TaggedASTType : public ASTTypeBase
-{
-public:
-    TaggedASTType (void *type, clang::ASTContext *ast_context) :
-        ASTTypeBase(type, ast_context) { }
-    
-    TaggedASTType (const TaggedASTType<C> &tw) :
-        ASTTypeBase(tw) { }
-    
-    TaggedASTType () :
-        ASTTypeBase() { }
     
-    ~TaggedASTType() { }
-    
-    TaggedASTType<C> &operator= (const TaggedASTType<C> &tw)
-    {
-        ASTTypeBase::operator= (tw);
-        return *this;
-    }
-};
     
-}
+} // namespace lldb_private
 
-#endif
+#endif // #ifndef liblldb_ClangASTType_h_

Modified: lldb/trunk/include/lldb/Symbol/Type.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Type.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/Type.h (original)
+++ lldb/trunk/include/lldb/Symbol/Type.h Wed Jul 21 17:12:05 2010
@@ -103,35 +103,6 @@
         return m_name;
     }
 
-    static ConstString
-    GetClangTypeName (void *clang_qual_type);
-
-    static void
-    DumpValue(ExecutionContext *exe_ctx,
-              clang::ASTContext *ast_context,
-              void *clang_qual_type,
-              Stream *s,
-              lldb::Format format,
-              const DataExtractor &data,
-              uint32_t data_offset,
-              size_t data_byte_size,
-              uint32_t bitfield_bit_size,
-              uint32_t bitfield_bit_offset,
-              bool show_types,
-              bool show_summary,
-              bool verbose,
-              uint32_t depth);
-
-    static void
-    DumpSummary (ExecutionContext *exe_ctx,
-                 clang::ASTContext *ast_context,
-                 void *clang_qual_type,
-                 Stream *s,
-                 const DataExtractor &data,
-                 uint32_t data_offset,
-                 size_t data_byte_size);
-
-
     void
     DumpValue(ExecutionContext *exe_ctx,
               Stream *s,
@@ -151,31 +122,6 @@
                       bool show_summary,
                       bool verbose);
 
-    static bool
-    DumpTypeValue ( Stream *s,
-                    clang::ASTContext *ast_context,
-                    void *clang_qual_type,
-                    lldb::Format format,
-                    const DataExtractor &data,
-                    uint32_t data_offset,
-                    size_t data_byte_size,
-                    uint32_t bitfield_bit_size,
-                    uint32_t bitfield_bit_offset);
-
-    static bool
-    GetValueAsScalar (clang::ASTContext *ast_context,
-                      void *clang_qual_type,
-                      const DataExtractor &data,
-                      uint32_t data_offset,
-                      size_t data_byte_size,
-                      Scalar &value);
-
-    static bool
-    SetValueFromScalar (clang::ASTContext *ast_context,
-                        void *clang_qual_type,
-                        const Scalar &value,
-                        Stream &strm);
-
     bool
     ReadFromMemory (ExecutionContext *exe_ctx,
                     lldb::addr_t address,
@@ -188,23 +134,6 @@
                    lldb::AddressType address_type,
                    DataExtractor &data);
 
-
-    static bool
-    ReadFromMemory (ExecutionContext *exe_ctx,
-                    clang::ASTContext *ast_context,
-                    void *clang_qual_type,
-                    lldb::addr_t addr,
-                    lldb::AddressType address_type,
-                    DataExtractor &data);
-
-    static bool
-    WriteToMemory (ExecutionContext *exe_ctx,
-                   clang::ASTContext *ast_context,
-                   void *clang_qual_type,
-                   lldb::addr_t addr,
-                   lldb::AddressType address_type,
-                   StreamString &new_value);
-
     bool
     GetIsDeclaration() const;
 
@@ -223,9 +152,6 @@
     lldb::Encoding
     GetEncoding (uint32_t &count);
 
-    static lldb::Encoding
-    GetEncoding (void *clang_qual_type, uint32_t &count);
-
     SymbolContextScope *
     GetSymbolContextScope()
     {
@@ -265,12 +191,6 @@
     static int
     Compare(const Type &a, const Type &b);
 
-    static lldb::Format
-    GetFormat (void *clang_qual_type);
-
-    static int
-    DumpClangTypeName(Stream *s, void *clang_qual_type);
-
 protected:
     ConstString m_name;
     uint64_t m_byte_size;

Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Wed Jul 21 17:12:05 2010
@@ -335,8 +335,8 @@
 		49D7072911B5AD11001AD875 /* ClangASTSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49D7072811B5AD11001AD875 /* ClangASTSource.cpp */; settings = {COMPILER_FLAGS = "-fno-rtti"; }; };
 		49DA743011DE6A5A006AEF7E /* IRToDWARF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49DA742F11DE6A5A006AEF7E /* IRToDWARF.cpp */; };
 		49DA743511DE6BB2006AEF7E /* IRToDWARF.h in Headers */ = {isa = PBXBuildFile; fileRef = 49DA743411DE6BB2006AEF7E /* IRToDWARF.h */; };
-		49E45FAA11F660DC008F7B28 /* ASTType.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E45FA911F660DC008F7B28 /* ASTType.h */; };
-		49E45FAF11F660FE008F7B28 /* ASTType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E45FAD11F660FE008F7B28 /* ASTType.cpp */; };
+		49E45FAA11F660DC008F7B28 /* ClangASTType.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E45FA911F660DC008F7B28 /* ClangASTType.h */; };
+		49E45FAF11F660FE008F7B28 /* ClangASTType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E45FAD11F660FE008F7B28 /* ClangASTType.cpp */; };
 		49F1A74611B3388F003ED505 /* ClangExpressionDeclMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49F1A74511B3388F003ED505 /* ClangExpressionDeclMap.cpp */; };
 		49F1A74A11B338AE003ED505 /* ClangExpressionDeclMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F1A74911B338AE003ED505 /* ClangExpressionDeclMap.h */; };
 		4C08CDE811C81EF8001610A8 /* ThreadSpec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C08CDE711C81EF8001610A8 /* ThreadSpec.cpp */; };
@@ -912,8 +912,8 @@
 		49D7072811B5AD11001AD875 /* ClangASTSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClangASTSource.cpp; path = source/Expression/ClangASTSource.cpp; sourceTree = "<group>"; };
 		49DA742F11DE6A5A006AEF7E /* IRToDWARF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IRToDWARF.cpp; path = source/Expression/IRToDWARF.cpp; sourceTree = "<group>"; };
 		49DA743411DE6BB2006AEF7E /* IRToDWARF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IRToDWARF.h; path = include/lldb/Expression/IRToDWARF.h; sourceTree = "<group>"; };
-		49E45FA911F660DC008F7B28 /* ASTType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASTType.h; path = include/lldb/Symbol/ASTType.h; sourceTree = "<group>"; };
-		49E45FAD11F660FE008F7B28 /* ASTType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ASTType.cpp; path = source/Symbol/ASTType.cpp; sourceTree = "<group>"; };
+		49E45FA911F660DC008F7B28 /* ClangASTType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClangASTType.h; path = include/lldb/Symbol/ClangASTType.h; sourceTree = "<group>"; };
+		49E45FAD11F660FE008F7B28 /* ClangASTType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClangASTType.cpp; path = source/Symbol/ClangASTType.cpp; sourceTree = "<group>"; };
 		49EC3E98118F90AC00B1265E /* ThreadPlanCallFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadPlanCallFunction.cpp; path = source/Target/ThreadPlanCallFunction.cpp; sourceTree = "<group>"; };
 		49EC3E9C118F90D400B1265E /* ThreadPlanCallFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanCallFunction.h; path = include/lldb/Target/ThreadPlanCallFunction.h; sourceTree = "<group>"; };
 		49F1A74511B3388F003ED505 /* ClangExpressionDeclMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClangExpressionDeclMap.cpp; path = source/Expression/ClangExpressionDeclMap.cpp; sourceTree = "<group>"; };
@@ -1669,12 +1669,12 @@
 			isa = PBXGroup;
 			children = (
 				AF94005711C03F6500085DB9 /* SymbolVendor.cpp */,
-				49E45FA911F660DC008F7B28 /* ASTType.h */,
-				49E45FAD11F660FE008F7B28 /* ASTType.cpp */,
 				26BC7C5510F1B6E900F91463 /* Block.h */,
 				26BC7F1310F1B8EC00F91463 /* Block.cpp */,
 				26BC7C5610F1B6E900F91463 /* ClangASTContext.h */,
 				26BC7F1410F1B8EC00F91463 /* ClangASTContext.cpp */,
+				49E45FA911F660DC008F7B28 /* ClangASTType.h */,
+				49E45FAD11F660FE008F7B28 /* ClangASTType.cpp */,
 				26BC7C5710F1B6E900F91463 /* CompileUnit.h */,
 				26BC7F1510F1B8EC00F91463 /* CompileUnit.cpp */,
 				26BC7C5810F1B6E900F91463 /* Declaration.h */,
@@ -2201,7 +2201,7 @@
 				49307AB211DEA4F20081F992 /* IRForTarget.h in Headers */,
 				4C5DBBC911E3FEC60035160F /* CommandObjectCommands.h in Headers */,
 				26D27CA011ED3A4E0024D721 /* ELFHeader.h in Headers */,
-				49E45FAA11F660DC008F7B28 /* ASTType.h in Headers */,
+				49E45FAA11F660DC008F7B28 /* ClangASTType.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2655,7 +2655,7 @@
 				49307AAE11DEA4D90081F992 /* IRForTarget.cpp in Sources */,
 				4C5DBBC811E3FEC60035160F /* CommandObjectCommands.cpp in Sources */,
 				26D27C9F11ED3A4E0024D721 /* ELFHeader.cpp in Sources */,
-				49E45FAF11F660FE008F7B28 /* ASTType.cpp in Sources */,
+				49E45FAF11F660FE008F7B28 /* ClangASTType.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Wed Jul 21 17:12:05 2010
@@ -12,8 +12,10 @@
 // C Includes
 // C++ Includes
 // Other libraries and framework includes
+#include "llvm/ADT/StringRef.h"
+
 // Project includes
-#include "lldb/Interpreter/Args.h"
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/Value.h"
 #include "lldb/Core/InputReader.h"
 #include "lldb/Expression/ClangExpression.h"
@@ -21,15 +23,15 @@
 #include "lldb/Expression/ClangExpressionVariable.h"
 #include "lldb/Expression/DWARFExpression.h"
 #include "lldb/Host/Host.h"
-#include "lldb/Core/Debugger.h"
+#include "lldb/Interpreter/Args.h"
 #include "lldb/Interpreter/CommandInterpreter.h"
 #include "lldb/Interpreter/CommandReturnObject.h"
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/Variable.h"
 #include "lldb/Target/Process.h"
 #include "lldb/Target/StackFrame.h"
 #include "lldb/Target/Target.h"
-#include "llvm/ADT/StringRef.h"
 
 using namespace lldb;
 using namespace lldb_private;
@@ -402,22 +404,26 @@
         if (clang_type)
         {
             if (m_options.show_types)
-                Type::DumpClangTypeName (&output_stream, clang_type);
+            {
+                ConstString type_name(ClangASTType::GetClangTypeName (clang_type));
+                if (type_name)
+                    output_stream.Printf("(%s) ", type_name.AsCString("<invalid>"));
+            }
             
-            Type::DumpValue (&m_exe_ctx,                // The execution context for memory and variable access
-                             ast_context,               // The ASTContext that the clang type belongs to
-                             clang_type,                // The opaque clang type we want to dump that value of
-                             &output_stream,            // Stream to dump to
-                             format,                    // Format to use when dumping
-                             data,                      // A buffer containing the bytes for the clang type
-                             0,                         // Byte offset within "data" where value is
-                             data.GetByteSize (),       // Size in bytes of the value we are dumping
-                             0,                         // Bitfield bit size
-                             0,                         // Bitfield bit offset
-                             m_options.show_types,      // Show types?
-                             m_options.show_summary,    // Show summary?
-                             m_options.debug,           // Debug logging output?
-                             UINT32_MAX);               // Depth to dump in case this is an aggregate type
+            ClangASTType::DumpValue (ast_context,               // The ASTContext that the clang type belongs to
+                                         clang_type,                // The opaque clang type we want to dump that value of
+                                         &m_exe_ctx,                // The execution context for memory and variable access
+                                         &output_stream,            // Stream to dump to
+                                         format,                    // Format to use when dumping
+                                         data,                      // A buffer containing the bytes for the clang type
+                                         0,                         // Byte offset within "data" where value is
+                                         data.GetByteSize (),       // Size in bytes of the value we are dumping
+                                         0,                         // Bitfield bit size
+                                         0,                         // Bitfield bit offset
+                                         m_options.show_types,      // Show types?
+                                         m_options.show_summary,    // Show summary?
+                                         m_options.debug,           // Debug logging output?
+                                         UINT32_MAX);               // Depth to dump in case this is an aggregate type
         }
         else
         {

Modified: lldb/trunk/source/Commands/CommandObjectVariable.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectVariable.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectVariable.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectVariable.cpp Wed Jul 21 17:12:05 2010
@@ -23,6 +23,7 @@
 #include "lldb/Interpreter/CommandInterpreter.h"
 #include "lldb/Interpreter/CommandReturnObject.h"
 
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/SymbolContext.h"
@@ -386,12 +387,12 @@
                     
                     Scalar scalar;
                     
-                    if (!Type::GetValueAsScalar (valobj->GetClangAST(),
-                                                 valobj->GetOpaqueClangQualType(),
-                                                 valobj->GetDataExtractor(),
-                                                 0,
-                                                 valobj->GetByteSize(),
-                                                 scalar))
+                    if (!ClangASTType::GetValueAsScalar (valobj->GetClangAST(),
+                                                        valobj->GetOpaqueClangQualType(),
+                                                        valobj->GetDataExtractor(),
+                                                        0,
+                                                        valobj->GetByteSize(),
+                                                        scalar))
                         return;
                                         
                     ConstString po_output;

Modified: lldb/trunk/source/Core/Value.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Value.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Core/Value.cpp (original)
+++ lldb/trunk/source/Core/Value.cpp Wed Jul 21 17:12:05 2010
@@ -17,6 +17,7 @@
 #include "lldb/Core/DataBufferHeap.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/Stream.h"
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/SymbolContext.h"
@@ -472,7 +473,7 @@
         break;
 
     case eContextTypeOpaqueClangQualType:
-        return Type::GetFormat (m_context);
+        return ClangASTType::GetFormat (m_context);
 
     case eContextTypeDCRegisterInfo:
         if (GetRegisterInfo())
@@ -692,9 +693,9 @@
                 lldb::AddressType address_type = m_value_type == eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost;
                 lldb::addr_t addr = m_value.ULongLong(LLDB_INVALID_ADDRESS);
                 DataExtractor data;
-                if (Type::ReadFromMemory (exe_ctx, ast_context, opaque_clang_qual_type, addr, address_type, data))
+                if (ClangASTType::ReadFromMemory (ast_context, opaque_clang_qual_type, exe_ctx, addr, address_type, data))
                 {
-                    if (Type::GetValueAsScalar (ast_context, opaque_clang_qual_type, data, 0, data.GetByteSize(), scalar))
+                    if (ClangASTType::GetValueAsScalar (ast_context, opaque_clang_qual_type, data, 0, data.GetByteSize(), scalar))
                     {
                         m_value = scalar;
                         m_value_type = eValueTypeScalar;

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Wed Jul 21 17:12:05 2010
@@ -20,6 +20,7 @@
 #include "lldb/Core/ValueObjectChild.h"
 #include "lldb/Core/ValueObjectList.h"
 
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/Type.h"
 
@@ -488,16 +489,16 @@
                         if (clang_type)
                         {
                             StreamString sstr;
-                            lldb::Format format = Type::GetFormat(clang_type);
-                            if (Type::DumpTypeValue(&sstr,
-                                                    GetClangAST(),            // The clang AST
-                                                    clang_type,               // The clang type to display
-                                                    format,                   // Format to display this type with
-                                                    m_data,                   // Data to extract from
-                                                    0,                        // Byte offset into "m_data"
-                                                    GetByteSize(),            // Byte size of item in "m_data"
-                                                    GetBitfieldBitSize(),     // Bitfield bit size
-                                                    GetBitfieldBitOffset()))  // Bitfield bit offset
+                            lldb::Format format = ClangASTType::GetFormat(clang_type);
+                            if (ClangASTType::DumpTypeValue(GetClangAST(),            // The clang AST
+                                                                clang_type,               // The clang type to display
+                                                                &sstr,
+                                                                format,                   // Format to display this type with
+                                                                m_data,                   // Data to extract from
+                                                                0,                        // Byte offset into "m_data"
+                                                                GetByteSize(),            // Byte size of item in "m_data"
+                                                                GetBitfieldBitSize(),     // Bitfield bit size
+                                                                GetBitfieldBitOffset()))  // Bitfield bit offset
                                 m_value_str.swap(sstr.GetString());
                             else
                                 m_value_str.clear();
@@ -537,7 +538,7 @@
         return false;
 
     uint32_t count = 0;
-    lldb::Encoding encoding = Type::GetEncoding (GetOpaqueClangQualType(), count);
+    lldb::Encoding encoding = ClangASTType::GetEncoding (GetOpaqueClangQualType(), count);
 
     char *end = NULL;
     const size_t byte_size = GetByteSize();

Modified: lldb/trunk/source/Core/ValueObjectChild.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectChild.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObjectChild.cpp (original)
+++ lldb/trunk/source/Core/ValueObjectChild.cpp Wed Jul 21 17:12:05 2010
@@ -12,6 +12,7 @@
 #include "lldb/Core/Module.h"
 #include "lldb/Core/ValueObjectList.h"
 
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/SymbolContext.h"
 #include "lldb/Symbol/Type.h"
@@ -103,7 +104,7 @@
 {
     if (m_type_name.IsEmpty())
     {
-        m_type_name = Type::GetClangTypeName (GetOpaqueClangQualType());
+        m_type_name = ClangASTType::GetClangTypeName (GetOpaqueClangQualType());
         if (m_type_name)
         {
             if (m_bitfield_bit_size > 0)

Modified: lldb/trunk/source/Core/ValueObjectRegister.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectRegister.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObjectRegister.cpp (original)
+++ lldb/trunk/source/Core/ValueObjectRegister.cpp Wed Jul 21 17:12:05 2010
@@ -15,6 +15,7 @@
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Core/Module.h"
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/TypeList.h"
 #include "lldb/Target/ExecutionContext.h"
@@ -250,7 +251,7 @@
 ValueObjectRegister::GetTypeName()
 {
     if (m_type_name.IsEmpty())
-        m_type_name = Type::GetClangTypeName (GetOpaqueClangQualType());
+        m_type_name = ClangASTType::GetClangTypeName (GetOpaqueClangQualType());
     return m_type_name;
 }
 

Modified: lldb/trunk/source/Expression/ClangExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpression.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpression.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpression.cpp Wed Jul 21 17:12:05 2010
@@ -55,6 +55,7 @@
 
 // Project includes
 #include "lldb/Core/Log.h"
+#include "lldb/Core/ClangForward.h"
 #include "lldb/Expression/ClangExpression.h"
 #include "lldb/Expression/ClangASTSource.h"
 #include "lldb/Expression/ClangResultSynthesizer.h"
@@ -74,23 +75,6 @@
 using namespace clang;
 using namespace llvm;
 
-namespace clang {
-
-class AnalyzerOptions;
-class CodeGenOptions;
-class DependencyOutputOptions;
-class DiagnosticOptions;
-class FrontendOptions;
-class HeaderSearchOptions;
-class LangOptions;
-class PreprocessorOptions;
-class PreprocessorOutputOptions;
-class TargetInfo;
-class TargetOptions;
-
-} // end namespace clang
-
-
 
 //===----------------------------------------------------------------------===//
 // Utility Methods

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Wed Jul 21 17:12:05 2010
@@ -292,10 +292,11 @@
                 
                 TypeFromUser copied_type(ClangASTContext::CopyType(context, 
                                                                    iter->m_parser_type.GetASTContext(),
-                                                                   iter->m_parser_type.GetType()),
+                                                                   iter->m_parser_type.GetOpaqueQualType()),
                                          context);
                 
-                result_value->SetContext(Value::eContextTypeOpaqueClangQualType, copied_type.GetType());
+                result_value->SetContext(Value::eContextTypeOpaqueClangQualType, 
+                                         copied_type.GetOpaqueQualType());
             }
             
             continue;
@@ -329,7 +330,10 @@
         return false;
     }
     
-    log->Printf("%s %s with type %p", (dematerialize ? "Dematerializing" : "Materializing"), name, type.GetType());
+    log->Printf("%s %s with type %p", 
+                (dematerialize ? "Dematerializing" : "Materializing"), 
+                name, 
+                type.GetOpaqueQualType());
     
     std::auto_ptr<lldb_private::Value> location_value(GetVariableValue(exe_ctx,
                                                                        var,
@@ -345,7 +349,8 @@
     {
         lldb::addr_t value_addr = location_value->GetScalar().ULongLong();
         
-        size_t bit_size = ClangASTContext::GetTypeBitSize(type.GetASTContext(), type.GetType());
+        size_t bit_size = ClangASTContext::GetTypeBitSize (type.GetASTContext(), 
+                                                           type.GetOpaqueQualType());
         size_t byte_size = bit_size % 8 ? ((bit_size + 8) / 8) : (bit_size / 8);
         
         DataBufferHeap data;
@@ -488,7 +493,9 @@
         
         if (type->GetASTContext() == var->GetType()->GetClangAST())
         {
-            if (!ClangASTContext::AreTypesSame(type->GetASTContext(), type->GetType(), var->GetType()->GetOpaqueClangQualType()))
+            if (!ClangASTContext::AreTypesSame(type->GetASTContext(), 
+                                               type->GetOpaqueQualType(), 
+                                               var->GetType()->GetOpaqueClangQualType()))
                 return NULL;
         }
         else
@@ -657,7 +664,7 @@
                                            &ut,
                                            &pt);
     
-    NamedDecl *var_decl = context.AddVarDecl(pt.GetType());
+    NamedDecl *var_decl = context.AddVarDecl(pt.GetOpaqueQualType());
     
     Tuple tuple;
     

Modified: lldb/trunk/source/Expression/DWARFExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/DWARFExpression.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Expression/DWARFExpression.cpp (original)
+++ lldb/trunk/source/Expression/DWARFExpression.cpp Wed Jul 21 17:12:05 2010
@@ -24,6 +24,7 @@
 
 #include "lldb/lldb-private-log.h"
 
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/Type.h"
 
@@ -2273,10 +2274,10 @@
                         }
                         else
                         {
-                            if (!Type::SetValueFromScalar(ast_context,
-                                                          clang_type,
-                                                          tmp.ResolveValue(exe_ctx, ast_context),
-                                                          new_value))
+                            if (!ClangASTType::SetValueFromScalar (ast_context,
+                                                                  clang_type,
+                                                                  tmp.ResolveValue(exe_ctx, ast_context),
+                                                                  new_value))
                             {
                                 if (error_ptr)
                                     error_ptr->SetErrorStringWithFormat ("Couldn't extract a value from an integral type.\n");
@@ -2292,12 +2293,12 @@
                                 {
                                     lldb::AddressType address_type = (value_type == Value::eValueTypeLoadAddress ? eAddressTypeLoad : eAddressTypeHost);
                                     lldb::addr_t addr = stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
-                                    if (!Type::WriteToMemory (exe_ctx,
-                                                                ast_context,
-                                                                clang_type,
-                                                                addr,
-                                                                address_type,
-                                                                new_value))
+                                    if (!ClangASTType::WriteToMemory (ast_context,
+                                                                          clang_type,
+                                                                          exe_ctx,
+                                                                          addr,
+                                                                          address_type,
+                                                                          new_value))
                                     {
                                         if (error_ptr)
                                             error_ptr->SetErrorStringWithFormat ("Failed to write value to memory at 0x%llx.\n", addr);

Modified: lldb/trunk/source/Host/macosx/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Host/macosx/Symbols.cpp (original)
+++ lldb/trunk/source/Host/macosx/Symbols.cpp Wed Jul 21 17:12:05 2010
@@ -11,8 +11,7 @@
 
 // C Includes
 #include <dirent.h>
-#include <mach-o/loader.h>
-#include <mach-o/fat.h>
+#include "llvm/Support/MachO.h"
 
 // C++ Includes
 // Other libraries and framework includes
@@ -29,6 +28,7 @@
 
 using namespace lldb;
 using namespace lldb_private;
+using namespace llvm::MachO;
 
 extern "C" {
 
@@ -49,8 +49,8 @@
     const uint32_t magic
 )
 {
-    assert(magic == MH_CIGAM || magic == MH_MAGIC || magic == MH_CIGAM_64 || magic == MH_MAGIC_64);
-    if (magic == MH_MAGIC || magic == MH_MAGIC_64)
+    assert(magic == HeaderMagic32 || magic == HeaderMagic32Swapped || magic == HeaderMagic64 || magic == HeaderMagic64Swapped);
+    if (magic == HeaderMagic32 || magic == HeaderMagic64)
         data.SetByteOrder (eByteOrderHost);
     else if (eByteOrderHost == eByteOrderBig)
         data.SetByteOrder (eByteOrderLittle);
@@ -80,11 +80,11 @@
     if (uuid == NULL)
         return true;
 
-    if (magic == MH_CIGAM_64 || magic == MH_MAGIC_64)
+    if (magic == HeaderMagic64Swapped || magic == HeaderMagic64)
         data_offset += 4;   // Skip reserved field for in mach_header_64
 
     // Make sure we have enough data for all the load commands
-    if (magic == MH_CIGAM_64 || magic == MH_MAGIC_64)
+    if (magic == HeaderMagic64Swapped || magic == HeaderMagic64)
     {
         if (data.GetByteSize() < sizeof(struct mach_header_64) + sizeofcmds)
         {
@@ -106,7 +106,7 @@
         const uint32_t cmd_offset = data_offset;    // Save this data_offset in case parsing of the segment goes awry!
         uint32_t cmd        = data.GetU32(&data_offset);
         uint32_t cmd_size   = data.GetU32(&data_offset);
-        if (cmd == LC_UUID)
+        if (cmd == LoadCommandUUID)
         {
             UUID file_uuid (data.GetData(&data_offset, 16), 16);
             return file_uuid == *uuid;
@@ -128,7 +128,7 @@
     const uint32_t magic
 )
 {
-    assert(magic == FAT_CIGAM || magic == FAT_MAGIC);
+    assert(magic == UniversalMagic || magic == UniversalMagicSwapped);
 
     // Universal mach-o files always have their headers encoded as BIG endian
     data.SetByteOrder(eByteOrderBig);
@@ -167,10 +167,10 @@
 
         switch (arch_magic)
         {
-        case MH_CIGAM:          // 32 bit mach-o file
-        case MH_MAGIC:          // 32 bit mach-o file
-        case MH_CIGAM_64:       // 64 bit mach-o file
-        case MH_MAGIC_64:       // 64 bit mach-o file
+        case HeaderMagic32:
+        case HeaderMagic32Swapped:
+        case HeaderMagic64:
+        case HeaderMagic64Swapped:
             if (SkinnyMachOFileContainsArchAndUUID (file_spec, arch, uuid, file_offset + arch_offset, arch_data, arch_data_offset, arch_magic))
                 return true;
             break;
@@ -201,15 +201,15 @@
         switch (magic)
         {
         // 32 bit mach-o file
-        case MH_CIGAM:
-        case MH_MAGIC:
-        case MH_CIGAM_64:
-        case MH_MAGIC_64:
+        case HeaderMagic32:
+        case HeaderMagic32Swapped:
+        case HeaderMagic64:
+        case HeaderMagic64Swapped:
             return SkinnyMachOFileContainsArchAndUUID (file_spec, arch, uuid, file_offset, data, data_offset, magic);
 
         // fat mach-o file
-        case FAT_CIGAM:
-        case FAT_MAGIC:
+        case UniversalMagic:
+        case UniversalMagicSwapped:
             return UniversalMachOFileContainsArchAndUUID (file_spec, arch, uuid, file_offset, data, data_offset, magic);
 
         default:

Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp (original)
+++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp Wed Jul 21 17:12:05 2010
@@ -34,7 +34,7 @@
 
 using namespace lldb;
 using namespace lldb_private;
-
+using namespace llvm::MachO;
 
 /// FIXME - The ObjC Runtime trampoline handler doesn't really belong here.
 /// I am putting it here so I can invoke it in the Trampoline code here, but
@@ -191,7 +191,7 @@
     DataExtractor data; // Load command data
     if (ReadMachHeader (addr, &m_dyld.header, &data))
     {
-        if (m_dyld.header.filetype == MH_DYLINKER)
+        if (m_dyld.header.filetype == HeaderFileTypeDynamicLinkEditor)
         {
             m_dyld.address = addr;
             ModuleSP dyld_module_sp;
@@ -670,15 +670,15 @@
 // Returns true if we succeed, false if we fail for any reason.
 //----------------------------------------------------------------------
 bool
-DynamicLoaderMacOSXDYLD::ReadMachHeader (lldb::addr_t addr, struct mach_header *header, DataExtractor *load_command_data)
+DynamicLoaderMacOSXDYLD::ReadMachHeader (lldb::addr_t addr, mach_header *header, DataExtractor *load_command_data)
 {
-    DataBufferHeap header_bytes(sizeof(struct mach_header), 0);
+    DataBufferHeap header_bytes(sizeof(mach_header), 0);
     Error error;
     size_t bytes_read = m_process->ReadMemory (addr, 
                                                header_bytes.GetBytes(), 
                                                header_bytes.GetByteSize(), 
                                                error);
-    if (bytes_read == sizeof(struct mach_header))
+    if (bytes_read == sizeof(mach_header))
     {
         uint32_t offset = 0;
         ::memset (header, 0, sizeof(header));
@@ -690,16 +690,16 @@
         data.SetByteOrder(DynamicLoaderMacOSXDYLD::GetByteOrderFromMagic(header->magic));
         switch (header->magic)
         {
-        case MH_MAGIC:
-        case MH_CIGAM:
+        case llvm::MachO::HeaderMagic32:
+        case llvm::MachO::HeaderMagic32Swapped:
             data.SetAddressByteSize(4);
-            load_cmd_addr += sizeof(struct mach_header);
+            load_cmd_addr += sizeof(mach_header);
             break;
 
-        case MH_MAGIC_64:
-        case MH_CIGAM_64:
+        case llvm::MachO::HeaderMagic64:
+        case llvm::MachO::HeaderMagic64Swapped:
             data.SetAddressByteSize(8);
-            load_cmd_addr += sizeof(struct mach_header_64);
+            load_cmd_addr += sizeof(mach_header_64);
             break;
 
         default:
@@ -707,7 +707,7 @@
         }
 
         // Read the rest of dyld's mach header
-        if (data.GetU32(&offset, &header->cputype, (sizeof(struct mach_header)/sizeof(uint32_t)) - 1))
+        if (data.GetU32(&offset, &header->cputype, (sizeof(mach_header)/sizeof(uint32_t)) - 1))
         {
             if (load_command_data == NULL)
                 return true; // We were able to read the mach_header and weren't asked to read the load command bytes
@@ -752,15 +752,15 @@
         // Clear out any load command specific data from DYLIB_INFO since
         // we are about to read it.
 
-        if (data.ValidOffsetForDataOfSize (offset, sizeof(struct load_command)))
+        if (data.ValidOffsetForDataOfSize (offset, sizeof(load_command)))
         {
-            struct load_command load_cmd;
+            load_command load_cmd;
             uint32_t load_cmd_offset = offset;
             load_cmd.cmd = data.GetU32 (&offset);
             load_cmd.cmdsize = data.GetU32 (&offset);
             switch (load_cmd.cmd)
             {
-            case LC_SEGMENT:
+            case LoadCommandSegment32:
                 {
                     segment.name.SetTrimmedCStringWithLength ((const char *)data.GetData(&offset, 16), 16);
                     segment.addr = data.GetU32 (&offset);
@@ -769,7 +769,7 @@
                 }
                 break;
 
-            case LC_SEGMENT_64:
+            case LoadCommandSegment64:
                 {
                     segment.name.SetTrimmedCStringWithLength ((const char *)data.GetData(&offset, 16), 16);
                     segment.addr = data.GetU64 (&offset);
@@ -778,7 +778,7 @@
                 }
                 break;
 
-            case LC_ID_DYLINKER:
+            case LoadCommandDynamicLinkerIdent:
                 if (lc_id_dylinker)
                 {
                     uint32_t name_offset = load_cmd_offset + data.GetU32 (&offset);
@@ -787,7 +787,7 @@
                 }
                 break;
 
-            case LC_UUID:
+            case LoadCommandUUID:
                 dylib_info.uuid.SetBytes(data.GetData (&offset, 16));
                 break;
 
@@ -820,7 +820,7 @@
 
             ParseLoadCommands (data, m_dyld_image_infos[i], NULL);
 
-            if (m_dyld_image_infos[i].header.filetype == MH_EXECUTE)
+            if (m_dyld_image_infos[i].header.filetype == HeaderFileTypeExecutable)
                 exe_idx = i;
         }
     }

Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h (original)
+++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h Wed Jul 21 17:12:05 2010
@@ -11,19 +11,20 @@
 #define liblldb_DynamicLoaderMacOSXDYLD_h_
 
 // C Includes
-#include <mach-o/loader.h>
-
 // C++ Includes
 #include <map>
 #include <vector>
 #include <string>
 
 // Other libraries and framework includes
+#include "llvm/Support/MachO.h"
+
 #include "lldb/Target/DynamicLoader.h"
 #include "lldb/Core/FileSpec.h"
 #include "lldb/Core/UUID.h"
 #include "lldb/Host/Mutex.h"
 #include "lldb/Target/Process.h"
+
 #include "ObjCTrampolineHandler.h"
 
 class DynamicLoaderMacOSXDYLD : public lldb_private::DynamicLoader
@@ -144,12 +145,12 @@
     {
         switch (m_dyld.header.magic)
         {
-            case MH_MAGIC:
-            case MH_CIGAM:
+            case llvm::MachO::HeaderMagic32:
+            case llvm::MachO::HeaderMagic32Swapped:
                 return 4;
 
-            case MH_MAGIC_64:
-            case MH_CIGAM_64:
+            case llvm::MachO::HeaderMagic64:
+            case llvm::MachO::HeaderMagic64Swapped:
                 return 8;
 
             default:
@@ -163,12 +164,12 @@
     {
         switch (magic)
         {
-            case MH_MAGIC:
-            case MH_MAGIC_64:
+            case llvm::MachO::HeaderMagic32:
+            case llvm::MachO::HeaderMagic64:
                 return lldb::eByteOrderHost;
 
-            case MH_CIGAM:
-            case MH_CIGAM_64:
+            case llvm::MachO::HeaderMagic32Swapped:
+            case llvm::MachO::HeaderMagic64Swapped:
                 if (lldb::eByteOrderHost == lldb::eByteOrderBig)
                     return lldb::eByteOrderLittle;
                 else
@@ -182,7 +183,7 @@
 
     bool
     ReadMachHeader (lldb::addr_t addr,
-                    struct mach_header *header,
+                    llvm::MachO::mach_header *header,
                     lldb_private::DataExtractor *load_command_data);
     class Segment
     {
@@ -218,7 +219,7 @@
         lldb::addr_t mod_date;          // Modification date for this dylib
         lldb_private::FileSpec file_spec;       // Resolved path for this dylib
         lldb_private::UUID uuid;                // UUID for this dylib if it has one, else all zeros
-        struct mach_header header;      // The mach header for this image
+        llvm::MachO::mach_header header;      // The mach header for this image
         std::vector<Segment> segments;  // All segment vmaddr and vmsize pairs for this executable (from memory of inferior)
 
         DYLDImageInfo() :

Modified: lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp Wed Jul 21 17:12:05 2010
@@ -16,7 +16,7 @@
 
 using namespace lldb;
 using namespace lldb_private;
-
+using namespace llvm::MachO;
 
 void
 ObjectContainerUniversalMachO::Initialize()
@@ -75,7 +75,7 @@
     DataExtractor data(dataSP, eByteOrderHost, 4);
     uint32_t offset = 0;
     uint32_t magic = data.GetU32(&offset);
-    return magic == FAT_MAGIC || magic == FAT_CIGAM;
+    return magic == UniversalMagic || magic == UniversalMagicSwapped;
 }
 
 ObjectContainerUniversalMachO::ObjectContainerUniversalMachO
@@ -108,20 +108,20 @@
     m_data.SetByteOrder (eByteOrderBig);
     m_header.magic = m_data.GetU32(&offset);
 
-    if (m_header.magic == FAT_MAGIC)
+    if (m_header.magic == UniversalMagic)
     {
         m_data.SetAddressByteSize(4);
 
         m_header.nfat_arch = m_data.GetU32(&offset);
 
-        const size_t nfat_arch_size = sizeof(fat_arch_t) * m_header.nfat_arch;
+        const size_t nfat_arch_size = sizeof(fat_arch) * m_header.nfat_arch;
         // See if the current data we have is enough for all of the fat headers?
         if (!m_data.ValidOffsetForDataOfSize(offset, nfat_arch_size))
         {
             // The fat headers are larger than the number of bytes we have been
             // given when this class was constructed. We will read the exact number
             // of bytes that we need.
-            DataBufferSP data_sp(m_file.ReadFileContents(m_offset, nfat_arch_size + sizeof(fat_header_t)));
+            DataBufferSP data_sp(m_file.ReadFileContents(m_offset, nfat_arch_size + sizeof(fat_header)));
             m_data.SetData (data_sp);
         }
 
@@ -130,10 +130,10 @@
         uint32_t arch_idx = 0;
         for (arch_idx = 0; arch_idx < m_header.nfat_arch; ++arch_idx)
         {
-            if (m_data.ValidOffsetForDataOfSize(offset, sizeof(fat_arch_t)))
+            if (m_data.ValidOffsetForDataOfSize(offset, sizeof(fat_arch)))
             {
-                fat_arch_t arch;
-                if (m_data.GetU32(&offset, &arch, sizeof(fat_arch_t)/sizeof(uint32_t)))
+                fat_arch arch;
+                if (m_data.GetU32(&offset, &arch, sizeof(fat_arch)/sizeof(uint32_t)))
                 {
                     m_fat_archs.push_back(arch);
                 }

Modified: lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h (original)
+++ lldb/trunk/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h Wed Jul 21 17:12:05 2010
@@ -10,11 +10,11 @@
 #ifndef liblldb_ObjectContainerUniversalMachO_h_
 #define liblldb_ObjectContainerUniversalMachO_h_
 
-#include <mach-o/fat.h>
-
 #include "lldb/Symbol/ObjectContainer.h"
 #include "lldb/Core/FileSpec.h"
 
+#include "llvm/Support/MachO.h"
+
 class ObjectContainerUniversalMachO :
     public lldb_private::ObjectContainer
 {
@@ -94,10 +94,8 @@
 
 
 protected:
-    typedef struct fat_header fat_header_t;
-    typedef struct fat_arch fat_arch_t;
-    fat_header_t m_header;
-    std::vector<fat_arch_t> m_fat_archs;
+    llvm::MachO::fat_header m_header;
+    std::vector<llvm::MachO::fat_arch> m_fat_archs;
 };
 
 #endif  // liblldb_ObjectContainerUniversalMachO_h_

Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Wed Jul 21 17:12:05 2010
@@ -9,9 +9,6 @@
 
 #include "ObjectFileMachO.h"
 
-#include <mach-o/nlist.h>
-#include <mach-o/stab.h>
-
 #include "lldb/Core/ArchSpec.h"
 #include "lldb/Core/DataBuffer.h"
 #include "lldb/Core/FileSpec.h"
@@ -25,18 +22,10 @@
 #include "lldb/Core/UUID.h"
 #include "lldb/Symbol/ObjectFile.h"
 
-#ifndef S_DTRACE_DOF
-// section contains DTrace Object Format
-#define S_DTRACE_DOF 0xf
-#endif
-
-#ifndef S_LAZY_DYLIB_SYMBOL_POINTERS
-// section with only lazy symbol pointers to lazy loaded dylibs
-#define S_LAZY_DYLIB_SYMBOL_POINTERS 0x10
-#endif
 
 using namespace lldb;
 using namespace lldb_private;
+using namespace llvm::MachO;
 
 
 void
@@ -85,12 +74,12 @@
 {
     switch (magic)
     {
-    case MH_MAGIC:
-    case MH_CIGAM:
+    case HeaderMagic32:
+    case HeaderMagic32Swapped:
         return sizeof(struct mach_header);
 
-    case MH_MAGIC_64:
-    case MH_CIGAM_64:
+    case HeaderMagic64:
+    case HeaderMagic64Swapped:
         return sizeof(struct mach_header_64);
         break;
 
@@ -139,25 +128,25 @@
     m_header.magic = m_data.GetU32(&offset);
     switch (m_header.magic)
     {
-    case MH_MAGIC:
+    case HeaderMagic32:
         m_data.SetByteOrder (eByteOrderHost);
         m_data.SetAddressByteSize(4);
         can_parse = true;
         break;
 
-    case MH_MAGIC_64:
+    case HeaderMagic64:
         m_data.SetByteOrder (eByteOrderHost);
         m_data.SetAddressByteSize(8);
         can_parse = true;
         break;
 
-    case MH_CIGAM:
+    case HeaderMagic32Swapped:
         m_data.SetByteOrder(eByteOrderHost == eByteOrderBig ? eByteOrderLittle : eByteOrderBig);
         m_data.SetAddressByteSize(4);
         can_parse = true;
         break;
 
-    case MH_CIGAM_64:
+    case HeaderMagic64Swapped:
         m_data.SetByteOrder(eByteOrderHost == eByteOrderBig ? eByteOrderLittle : eByteOrderBig);
         m_data.SetAddressByteSize(8);
         can_parse = true;
@@ -245,7 +234,7 @@
         if (m_data.GetU32(&offset, &load_cmd, 2) == NULL)
             break;
 
-        if (load_cmd.cmd == LC_SEGMENT || load_cmd.cmd == LC_SEGMENT_64)
+        if (load_cmd.cmd == LoadCommandSegment32 || load_cmd.cmd == LoadCommandSegment64)
         {
             if (m_data.GetU8(&offset, (uint8_t*)load_cmd.segname, 16))
             {
@@ -282,13 +271,13 @@
                     struct section_64 sect64;
                     ::bzero (&sect64, sizeof(sect64));
                     // Push a section into our mach sections for the section at
-                    // index zero (NO_SECT)
+                    // index zero (NListSectionNoSection)
                     m_mach_sections.push_back(sect64);
                     uint32_t segment_sect_idx;
                     const lldb::user_id_t first_segment_sectID = sectID + 1;
 
 
-                    const uint32_t num_u32s = load_cmd.cmd == LC_SEGMENT ? 7 : 8;
+                    const uint32_t num_u32s = load_cmd.cmd == LoadCommandSegment32 ? 7 : 8;
                     for (segment_sect_idx=0; segment_sect_idx<load_cmd.nsects; ++segment_sect_idx)
                     {
                         if (m_data.GetU8(&offset, (uint8_t*)sect64.sectname, sizeof(sect64.sectname)) == NULL)
@@ -375,7 +364,7 @@
                         }
                         assert (segment_sp.get());
 
-                        uint32_t mach_sect_type = sect64.flags & SECTION_TYPE;
+                        uint32_t mach_sect_type = sect64.flags & SectionFlagMaskSectionType;
                         static ConstString g_sect_name_objc_data ("__objc_data");
                         static ConstString g_sect_name_objc_msgrefs ("__objc_msgrefs");
                         static ConstString g_sect_name_objc_selrefs ("__objc_selrefs");
@@ -412,26 +401,23 @@
                             switch (mach_sect_type)
                             {
                             // TODO: categorize sections by other flags for regular sections
-                            case S_REGULAR:
-
-                                sect_type = eSectionTypeOther;
-                                break;
-                            case S_ZEROFILL:                    sect_type = eSectionTypeZeroFill; break;
-                            case S_CSTRING_LITERALS:            sect_type = eSectionTypeDataCString;    break; // section with only literal C strings
-                            case S_4BYTE_LITERALS:              sect_type = eSectionTypeData4;    break; // section with only 4 byte literals
-                            case S_8BYTE_LITERALS:              sect_type = eSectionTypeData8;    break; // section with only 8 byte literals
-                            case S_LITERAL_POINTERS:            sect_type = eSectionTypeDataPointers;  break; // section with only pointers to literals
-                            case S_NON_LAZY_SYMBOL_POINTERS:    sect_type = eSectionTypeDataPointers;  break; // section with only non-lazy symbol pointers
-                            case S_LAZY_SYMBOL_POINTERS:        sect_type = eSectionTypeDataPointers;  break; // section with only lazy symbol pointers
-                            case S_SYMBOL_STUBS:                sect_type = eSectionTypeCode;  break; // section with only symbol stubs, byte size of stub in the reserved2 field
-                            case S_MOD_INIT_FUNC_POINTERS:      sect_type = eSectionTypeDataPointers;    break; // section with only function pointers for initialization
-                            case S_MOD_TERM_FUNC_POINTERS:      sect_type = eSectionTypeDataPointers; break; // section with only function pointers for termination
-                            case S_COALESCED:                   sect_type = eSectionTypeOther; break;
-                            case S_GB_ZEROFILL:                 sect_type = eSectionTypeZeroFill; break;
-                            case S_INTERPOSING:                 sect_type = eSectionTypeCode;  break; // section with only pairs of function pointers for interposing
-                            case S_16BYTE_LITERALS:             sect_type = eSectionTypeData16; break; // section with only 16 byte literals
-                            case S_DTRACE_DOF:                  sect_type = eSectionTypeDebug; break;
-                            case S_LAZY_DYLIB_SYMBOL_POINTERS:  sect_type = eSectionTypeDataPointers;  break;
+                            case SectionTypeRegular:                    sect_type = eSectionTypeOther; break;
+                            case SectionTypeZeroFill:                   sect_type = eSectionTypeZeroFill; break;
+                            case SectionTypeCStringLiterals:            sect_type = eSectionTypeDataCString;    break; // section with only literal C strings
+                            case SectionType4ByteLiterals:              sect_type = eSectionTypeData4;    break; // section with only 4 byte literals
+                            case SectionType8ByteLiterals:              sect_type = eSectionTypeData8;    break; // section with only 8 byte literals
+                            case SectionTypeLiteralPointers:            sect_type = eSectionTypeDataPointers;  break; // section with only pointers to literals
+                            case SectionTypeNonLazySymbolPointers:      sect_type = eSectionTypeDataPointers;  break; // section with only non-lazy symbol pointers
+                            case SectionTypeLazySymbolPointers:         sect_type = eSectionTypeDataPointers;  break; // section with only lazy symbol pointers
+                            case SectionTypeSymbolStubs:                sect_type = eSectionTypeCode;  break; // section with only symbol stubs, byte size of stub in the reserved2 field
+                            case SectionTypeModuleInitFunctionPointers: sect_type = eSectionTypeDataPointers;    break; // section with only function pointers for initialization
+                            case SectionTypeModuleTermFunctionPointers: sect_type = eSectionTypeDataPointers; break; // section with only function pointers for termination
+                            case SectionTypeCoalesced:                  sect_type = eSectionTypeOther; break;
+                            case SectionTypeZeroFillLarge:              sect_type = eSectionTypeZeroFill; break;
+                            case SectionTypeInterposing:                sect_type = eSectionTypeCode;  break; // section with only pairs of function pointers for interposing
+                            case SectionType16ByteLiterals:             sect_type = eSectionTypeData16; break; // section with only 16 byte literals
+                            case SectionTypeDTraceObjectFormat:         sect_type = eSectionTypeDebug; break;
+                            case SectionTypeLazyDylibSymbolPointers:    sect_type = eSectionTypeDataPointers;  break;
                             default: break;
                             }
                         }
@@ -454,7 +440,7 @@
                             segment_name.Clear();
                         }
                     }
-                    if (m_header.filetype == MH_DSYM)
+                    if (m_header.filetype == HeaderFileTypeDSYM)
                     {
                         if (first_segment_sectID <= sectID)
                         {
@@ -482,7 +468,7 @@
                 }
             }
         }
-        else if (load_cmd.cmd == LC_DYSYMTAB)
+        else if (load_cmd.cmd == LoadCommandDynamicSymtabInfo)
         {
             m_dysymtab.cmd = load_cmd.cmd;
             m_dysymtab.cmdsize = load_cmd.cmdsize;
@@ -569,7 +555,7 @@
         if (m_data.GetU32(&offset, &symtab_load_command, 2) == NULL)
             break;
         // Watch for the symbol table load command
-        if (symtab_load_command.cmd == LC_SYMTAB)
+        if (symtab_load_command.cmd == LoadCommandSymtab)
         {
             // Read in the rest of the symtab load command
             if (m_data.GetU32(&offset, &symtab_load_command.symoff, 4)) // fill in symoff, nsyms, stroff, strsize fields
@@ -602,7 +588,7 @@
                 else
                     eh_frame_section_sp = section_list->FindSectionByName (g_section_name_eh_frame);
 
-                uint8_t TEXT_eh_frame_sectID = eh_frame_section_sp.get() ? eh_frame_section_sp->GetID() : NO_SECT;
+                uint8_t TEXT_eh_frame_sectID = eh_frame_section_sp.get() ? eh_frame_section_sp->GetID() : NListSectionNoSection;
                 //uint32_t symtab_offset = 0;
                 const uint8_t* nlist_data = symtab_data_sp->GetBytes();
                 assert (symtab_data_sp->GetByteSize()/nlist_size >= symtab_load_command.nsyms);
@@ -635,7 +621,7 @@
                     if (bit_width_32)
                     {
                         struct nlist* nlist32_ptr = (struct nlist*)(nlist_data + (nlist_idx * nlist_size));
-                        nlist.n_un.n_strx = nlist32_ptr->n_un.n_strx;
+                        nlist.n_strx = nlist32_ptr->n_strx;
                         nlist.n_type = nlist32_ptr->n_type;
                         nlist.n_sect = nlist32_ptr->n_sect;
                         nlist.n_desc = nlist32_ptr->n_desc;
@@ -647,12 +633,12 @@
                     }
 
                     SymbolType type = eSymbolTypeInvalid;
-                    const char* symbol_name = &strtab_data[nlist.n_un.n_strx];
+                    const char* symbol_name = &strtab_data[nlist.n_strx];
                     if (symbol_name[0] == '\0')
                         symbol_name = NULL;
                     Section* symbol_section = NULL;
                     bool add_nlist = true;
-                    bool is_debug = ((nlist.n_type & N_STAB) != 0);
+                    bool is_debug = ((nlist.n_type & NlistMaskStab) != 0);
 
                     assert (sym_idx < num_syms);
 
@@ -662,18 +648,21 @@
                     {
                         switch (nlist.n_type)
                         {
-                        case N_GSYM:    // global symbol: name,,NO_SECT,type,0
+                        case StabGlobalSymbol:    
+                            // N_GSYM -- global symbol: name,,NO_SECT,type,0
                             // Sometimes the N_GSYM value contains the address.
                             if (nlist.n_value != 0)
                                 symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             type = eSymbolTypeGlobal;
                             break;
 
-                        case N_FNAME:   // procedure name (f77 kludge): name,,NO_SECT,0,0
+                        case StabFunctionName:
+                            // N_FNAME -- procedure name (f77 kludge): name,,NO_SECT,0,0
                             type = eSymbolTypeFunction;
                             break;
 
-                        case N_FUN:                                       // procedure: name,,n_sect,linenumber,address
+                        case StabFunction:       
+                            // N_FUN -- procedure: name,,n_sect,linenumber,address
                             if (symbol_name)
                             {
                                 type = eSymbolTypeFunction;
@@ -701,17 +690,20 @@
                             }
                             break;
 
-                        case N_STSYM:   // static symbol: name,,n_sect,type,address
+                        case StabStaticSymbol:   
+                            // N_STSYM -- static symbol: name,,n_sect,type,address
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             type = eSymbolTypeStatic;
                             break;
 
-                        case N_LCSYM:   // .lcomm symbol: name,,n_sect,type,address
+                        case StabLocalCommon:
+                            // N_LCSYM -- .lcomm symbol: name,,n_sect,type,address
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             type = eSymbolTypeCommonBlock;
                             break;
 
-                        case N_BNSYM:
+                        case StabBeginSymbol:
+                            // N_BNSYM
                             // We use the current number of symbols in the symbol table in lieu of
                             // using nlist_idx in case we ever start trimming entries out
                             if (minimize)
@@ -727,7 +719,8 @@
                             }
                             break;
 
-                        case N_ENSYM:
+                        case StabEndSymbol:
+                            // N_ENSYM
                             // Set the size of the N_BNSYM to the terminating index of this N_ENSYM
                             // so that we can always skip the entire symbol if we need to navigate
                             // more quickly at the source level when parsing STABS
@@ -750,24 +743,29 @@
                             break;
 
 
-                        case N_OPT:     // emitted with gcc2_compiled and in gcc source
+                        case StabSourceFileOptions:
+                            // N_OPT - emitted with gcc2_compiled and in gcc source
                             type = eSymbolTypeCompiler;
                             break;
 
-                        case N_RSYM:    // register sym: name,,NO_SECT,type,register
+                        case StabRegisterSymbol:
+                            // N_RSYM - register sym: name,,NO_SECT,type,register
                             type = eSymbolTypeVariable;
                             break;
 
-                        case N_SLINE:   // src line: 0,,n_sect,linenumber,address
+                        case StabSourceLine:
+                            // N_SLINE - src line: 0,,n_sect,linenumber,address
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             type = eSymbolTypeLineEntry;
                             break;
 
-                        case N_SSYM:    // structure elt: name,,NO_SECT,type,struct_offset
+                        case StabStructureType:
+                            // N_SSYM - structure elt: name,,NO_SECT,type,struct_offset
                             type = eSymbolTypeVariableType;
                             break;
 
-                        case N_SO:
+                        case StabSourceFileName:
+                            // N_SO - source file name
                             type = eSymbolTypeSourceFile;
                             if (symbol_name == NULL)
                             {
@@ -802,25 +800,29 @@
                             }
                             break;
 
-                        case N_OSO:     // object file name: name,,0,0,st_mtime
+                        case StabObjectFileName:
+                            // N_OSO - object file name: name,,0,0,st_mtime
                             type = eSymbolTypeObjectFile;
                             break;
 
-                        case N_LSYM:    // local sym: name,,NO_SECT,type,offset
+                        case StabLocalSymbol:
+                            // N_LSYM - local sym: name,,NO_SECT,type,offset
                             type = eSymbolTypeLocal;
                             break;
 
                         //----------------------------------------------------------------------
                         // INCL scopes
                         //----------------------------------------------------------------------
-                        case N_BINCL:   // include file beginning: name,,NO_SECT,0,sum
+                        case StabBeginIncludeFileName:
+                            // N_BINCL - include file beginning: name,,NO_SECT,0,sum
                             // We use the current number of symbols in the symbol table in lieu of
                             // using nlist_idx in case we ever start trimming entries out
                             N_INCL_indexes.push_back(sym_idx);
                             type = eSymbolTypeScopeBegin;
                             break;
-                        case N_EINCL:   // include file end: name,,NO_SECT,0,0
 
+                        case StabEndIncludeFile:
+                            // N_EINCL - include file end: name,,NO_SECT,0,0
                             // Set the size of the N_BINCL to the terminating index of this N_EINCL
                             // so that we can always skip the entire symbol if we need to navigate
                             // more quickly at the source level when parsing STABS
@@ -834,27 +836,33 @@
                             type = eSymbolTypeScopeEnd;
                             break;
 
-                        case N_SOL:     // #included file name: name,,n_sect,0,address
+                        case StabIncludeFileName:
+                            // N_SOL - #included file name: name,,n_sect,0,address
                             type = eSymbolTypeHeaderFile;
                             break;
 
-                        case N_PARAMS:  // compiler parameters: name,,NO_SECT,0,0
+                        case StabCompilerParameters:  
+                            // N_PARAMS - compiler parameters: name,,NO_SECT,0,0
                             type = eSymbolTypeCompiler;
                             break;
 
-                        case N_VERSION: // compiler version: name,,NO_SECT,0,0
+                        case StabCompilerVersion:
+                            // N_VERSION - compiler version: name,,NO_SECT,0,0
                             type = eSymbolTypeCompiler;
                             break;
 
-                        case N_OLEVEL:  // compiler -O level: name,,NO_SECT,0,0
+                        case StabCompilerOptLevel:
+                            // N_OLEVEL - compiler -O level: name,,NO_SECT,0,0
                             type = eSymbolTypeCompiler;
                             break;
 
-                        case N_PSYM:    // parameter: name,,NO_SECT,type,offset
+                        case StabParameter:
+                            // N_PSYM - parameter: name,,NO_SECT,type,offset
                             type = eSymbolTypeVariable;
                             break;
 
-                        case N_ENTRY:   // alternate entry: name,,n_sect,linenumber,address
+                        case StabAlternateEntry:
+                            // N_ENTRY - alternate entry: name,,n_sect,linenumber,address
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             type = eSymbolTypeLineEntry;
                             break;
@@ -862,7 +870,8 @@
                         //----------------------------------------------------------------------
                         // Left and Right Braces
                         //----------------------------------------------------------------------
-                        case N_LBRAC:   // left bracket: 0,,NO_SECT,nesting level,address
+                        case StabLeftBracket:
+                            // N_LBRAC - left bracket: 0,,NO_SECT,nesting level,address
                             // We use the current number of symbols in the symbol table in lieu of
                             // using nlist_idx in case we ever start trimming entries out
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
@@ -870,7 +879,8 @@
                             type = eSymbolTypeScopeBegin;
                             break;
 
-                        case N_RBRAC:   // right bracket: 0,,NO_SECT,nesting level,address
+                        case StabRightBracket:
+                            // N_RBRAC - right bracket: 0,,NO_SECT,nesting level,address
                             // Set the size of the N_LBRAC to the terminating index of this N_RBRAC
                             // so that we can always skip the entire symbol if we need to navigate
                             // more quickly at the source level when parsing STABS
@@ -885,25 +895,29 @@
                             type = eSymbolTypeScopeEnd;
                             break;
 
-                        case N_EXCL:    // deleted include file: name,,NO_SECT,0,sum
+                        case StabDeletedIncludeFile:
+                            // N_EXCL - deleted include file: name,,NO_SECT,0,sum
                             type = eSymbolTypeHeaderFile;
                             break;
 
                         //----------------------------------------------------------------------
                         // COMM scopes
                         //----------------------------------------------------------------------
-                        case N_BCOMM:   // begin common: name,,NO_SECT,0,0
+                        case StabBeginCommon:
+                            // N_BCOMM - begin common: name,,NO_SECT,0,0
                             // We use the current number of symbols in the symbol table in lieu of
                             // using nlist_idx in case we ever start trimming entries out
                             type = eSymbolTypeScopeBegin;
                             N_COMM_indexes.push_back(sym_idx);
                             break;
 
-                        case N_ECOML:   // end common (local name): 0,,n_sect,0,address
+                        case StabEndCommonLocal:
+                            // N_ECOML - end common (local name): 0,,n_sect,0,address
                             symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
                             // Fall through
 
-                        case N_ECOMM:   // end common: name,,n_sect,0,0
+                        case StabEndCommon:
+                            // N_ECOMM - end common: name,,n_sect,0,0
                             // Set the size of the N_BCOMM to the terminating index of this N_ECOMM/N_ECOML
                             // so that we can always skip the entire symbol if we need to navigate
                             // more quickly at the source level when parsing STABS
@@ -917,7 +931,8 @@
                             type = eSymbolTypeScopeEnd;
                             break;
 
-                        case N_LENG:    // second stab entry with length information
+                        case StabLength:
+                            // N_LENG - second stab entry with length information
                             type = eSymbolTypeAdditional;
                             break;
 
@@ -926,9 +941,9 @@
                     }
                     else
                     {
-                        //uint8_t n_pext    = N_PEXT & nlist.n_type;
-                        uint8_t n_type  = N_TYPE & nlist.n_type;
-                        sym[sym_idx].SetExternal((N_EXT & nlist.n_type) != 0);
+                        //uint8_t n_pext    = NlistMaskPrivateExternal & nlist.n_type;
+                        uint8_t n_type  = NlistMaskType & nlist.n_type;
+                        sym[sym_idx].SetExternal((NlistMaskExternal & nlist.n_type) != 0);
 
                         if (symbol_name && ::strstr (symbol_name, ".objc") == symbol_name)
                         {
@@ -938,17 +953,17 @@
                         {
                             switch (n_type)
                             {
-                            case N_INDR:    // Fall through
-                            case N_PBUD:    // Fall through
-                            case N_UNDF:
+                            case NListTypeIndirect:         // N_INDR - Fall through
+                            case NListTypePreboundUndefined:// N_PBUD - Fall through
+                            case NListTypeUndefined:        // N_UNDF
                                 type = eSymbolTypeExtern;
                                 break;
 
-                            case N_ABS:
+                            case NListTypeAbsolute:         // N_ABS
                                 type = eSymbolTypeAbsolute;
                                 break;
 
-                            case N_SECT:
+                            case NListTypeSection:          // N_SECT
                                 symbol_section = section_info.GetSection (nlist.n_sect, nlist.n_value);
 
                                 assert(symbol_section != NULL);
@@ -958,27 +973,27 @@
                                 }
                                 else
                                 {
-                                    uint32_t section_type = symbol_section->GetAllFlagBits() & SECTION_TYPE;
+                                    uint32_t section_type = symbol_section->GetAllFlagBits() & SectionFlagMaskSectionType;
 
                                     switch (section_type)
                                     {
-                                    case S_REGULAR:                     break; // regular section
-                                    //case S_ZEROFILL:                  type = eSymbolTypeData;    break; // zero fill on demand section
-                                    case S_CSTRING_LITERALS:            type = eSymbolTypeData;    break; // section with only literal C strings
-                                    case S_4BYTE_LITERALS:              type = eSymbolTypeData;    break; // section with only 4 byte literals
-                                    case S_8BYTE_LITERALS:              type = eSymbolTypeData;    break; // section with only 8 byte literals
-                                    case S_LITERAL_POINTERS:            type = eSymbolTypeTrampoline; break; // section with only pointers to literals
-                                    case S_NON_LAZY_SYMBOL_POINTERS:    type = eSymbolTypeTrampoline; break; // section with only non-lazy symbol pointers
-                                    case S_LAZY_SYMBOL_POINTERS:        type = eSymbolTypeTrampoline; break; // section with only lazy symbol pointers
-                                    case S_SYMBOL_STUBS:                type = eSymbolTypeTrampoline; break; // section with only symbol stubs, byte size of stub in the reserved2 field
-                                    case S_MOD_INIT_FUNC_POINTERS:      type = eSymbolTypeCode;    break; // section with only function pointers for initialization
-                                    case S_MOD_TERM_FUNC_POINTERS:      type = eSymbolTypeCode;    break; // section with only function pointers for termination
-                                    //case S_COALESCED:                 type = eSymbolType;    break; // section contains symbols that are to be coalesced
-                                    //case S_GB_ZEROFILL:               type = eSymbolTypeData;    break; // zero fill on demand section (that can be larger than 4 gigabytes)
-                                    case S_INTERPOSING:                 type = eSymbolTypeTrampoline;  break; // section with only pairs of function pointers for interposing
-                                    case S_16BYTE_LITERALS:             type = eSymbolTypeData;    break; // section with only 16 byte literals
-                                    case S_DTRACE_DOF:                  type = eSymbolTypeInstrumentation; break;
-                                    case S_LAZY_DYLIB_SYMBOL_POINTERS:  type = eSymbolTypeTrampoline; break;
+                                    case SectionTypeRegular:                     break; // regular section
+                                    //case SectionTypeZeroFill:                 type = eSymbolTypeData;    break; // zero fill on demand section
+                                    case SectionTypeCStringLiterals:            type = eSymbolTypeData;    break; // section with only literal C strings
+                                    case SectionType4ByteLiterals:              type = eSymbolTypeData;    break; // section with only 4 byte literals
+                                    case SectionType8ByteLiterals:              type = eSymbolTypeData;    break; // section with only 8 byte literals
+                                    case SectionTypeLiteralPointers:            type = eSymbolTypeTrampoline; break; // section with only pointers to literals
+                                    case SectionTypeNonLazySymbolPointers:      type = eSymbolTypeTrampoline; break; // section with only non-lazy symbol pointers
+                                    case SectionTypeLazySymbolPointers:         type = eSymbolTypeTrampoline; break; // section with only lazy symbol pointers
+                                    case SectionTypeSymbolStubs:                type = eSymbolTypeTrampoline; break; // section with only symbol stubs, byte size of stub in the reserved2 field
+                                    case SectionTypeModuleInitFunctionPointers: type = eSymbolTypeCode;    break; // section with only function pointers for initialization
+                                    case SectionTypeModuleTermFunctionPointers: type = eSymbolTypeCode;    break; // section with only function pointers for termination
+                                    //case SectionTypeCoalesced:                type = eSymbolType;    break; // section contains symbols that are to be coalesced
+                                    //case SectionTypeZeroFillLarge:            type = eSymbolTypeData;    break; // zero fill on demand section (that can be larger than 4 gigabytes)
+                                    case SectionTypeInterposing:                type = eSymbolTypeTrampoline;  break; // section with only pairs of function pointers for interposing
+                                    case SectionType16ByteLiterals:             type = eSymbolTypeData;    break; // section with only 16 byte literals
+                                    case SectionTypeDTraceObjectFormat:         type = eSymbolTypeInstrumentation; break;
+                                    case SectionTypeLazyDylibSymbolPointers:    type = eSymbolTypeTrampoline; break;
                                     default: break;
                                     }
 
@@ -987,7 +1002,9 @@
                                         const char *symbol_sect_name = symbol_section->GetName().AsCString();
                                         if (symbol_section->IsDescendant (text_section_sp.get()))
                                         {
-                                            if (symbol_section->IsClear(S_ATTR_PURE_INSTRUCTIONS | S_ATTR_SELF_MODIFYING_CODE | S_ATTR_SOME_INSTRUCTIONS))
+                                            if (symbol_section->IsClear(SectionAttrUserPureInstructions | 
+                                                                        SectionAttrUserSelfModifyingCode | 
+                                                                        SectionAttrSytemSomeInstructions))
                                                 type = eSymbolTypeData;
                                             else
                                                 type = eSymbolTypeCode;
@@ -1097,7 +1114,7 @@
 
                         for (uint32_t sect_idx = 1; sect_idx < m_mach_sections.size(); ++sect_idx)
                         {
-                            if ((m_mach_sections[sect_idx].flags & SECTION_TYPE) == S_SYMBOL_STUBS)
+                            if ((m_mach_sections[sect_idx].flags & SectionFlagMaskSectionType) == SectionTypeSymbolStubs)
                             {
                                 uint32_t symbol_stub_byte_size = m_mach_sections[sect_idx].reserved2;
                                 if (symbol_stub_byte_size == 0)
@@ -1177,7 +1194,7 @@
     lldb_private::Mutex::Locker locker(m_mutex);
     s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
     s->Indent();
-    if (m_header.magic == MH_MAGIC_64 || m_header.magic == MH_CIGAM_64)
+    if (m_header.magic == HeaderMagic64 || m_header.magic == HeaderMagic64Swapped)
         s->PutCString("ObjectFileMachO64");
     else
         s->PutCString("ObjectFileMachO32");
@@ -1207,7 +1224,7 @@
         if (m_data.GetU32(&offset, &load_cmd, 2) == NULL)
             break;
 
-        if (load_cmd.cmd == LC_UUID)
+        if (load_cmd.cmd == LoadCommandUUID)
         {
             const uint8_t *uuid_bytes = m_data.PeekData(offset, 16);
             if (uuid_bytes)
@@ -1239,11 +1256,11 @@
 
         switch (load_cmd.cmd)
         {
-        case LC_LOAD_DYLIB:
-        case LC_LOAD_WEAK_DYLIB:
-        case LC_REEXPORT_DYLIB:
-        case LC_LOAD_DYLINKER:
-        case LC_LOADFVMLIB:
+        case LoadCommandDylibLoad:
+        case LoadCommandDylibLoadWeak:
+        case LoadCommandDylibReexport:
+        case LoadCommandDynamicLinkerLoad:
+        case LoadCommandFixedVMShlibLoad:
             {
                 uint32_t name_offset = cmd_offset + m_data.GetU32(&offset);
                 const char *path = m_data.PeekCStr(name_offset);

Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.h Wed Jul 21 17:12:05 2010
@@ -10,7 +10,8 @@
 #ifndef liblldb_ObjectFileMachO_h_
 #define liblldb_ObjectFileMachO_h_
 
-#include <mach-o/loader.h>
+#include "llvm/Support/MachO.h"
+
 #include "lldb/Core/FileSpec.h"
 #include "lldb/Host/Mutex.h"
 #include "lldb/Symbol/ObjectFile.h"
@@ -112,13 +113,13 @@
 
 protected:
     mutable lldb_private::Mutex m_mutex;
-    struct  mach_header m_header;
+    llvm::MachO::mach_header m_header;
     mutable std::auto_ptr<lldb_private::SectionList> m_sections_ap;
     mutable std::auto_ptr<lldb_private::Symtab> m_symtab_ap;
 
-    struct dysymtab_command m_dysymtab;
-    std::vector<struct segment_command_64> m_mach_segments;
-    std::vector<struct section_64> m_mach_sections;
+    llvm::MachO::dysymtab_command m_dysymtab;
+    std::vector<llvm::MachO::segment_command_64> m_mach_segments;
+    std::vector<llvm::MachO::section_64> m_mach_sections;
 
     size_t
     ParseSections ();

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Wed Jul 21 17:12:05 2010
@@ -9,15 +9,9 @@
 
 // C Includes
 #include <errno.h>
-#include <mach/mach.h>
-#include <mach-o/dyld.h>
 #include <spawn.h>
-#include <sys/fcntl.h>
 #include <sys/types.h>
-#include <sys/ptrace.h>
 #include <sys/stat.h>
-#include <sys/sysctl.h>
-#include <unistd.h>
 
 // C++ Includes
 #include <algorithm>

Modified: lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp Wed Jul 21 17:12:05 2010
@@ -9,8 +9,6 @@
 
 #include "SymbolVendorMacOSX.h"
 
-#include <mach/machine.h>   // DebugSymbols needs this on Leopard...
-
 #include <AvailabilityMacros.h>
 
 #include "lldb/Core/Module.h"

Removed: lldb/trunk/source/Symbol/ASTType.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ASTType.cpp?rev=109045&view=auto
==============================================================================
--- lldb/trunk/source/Symbol/ASTType.cpp (original)
+++ lldb/trunk/source/Symbol/ASTType.cpp (removed)
@@ -1,20 +0,0 @@
-//===-- ASTType.cpp ---------------------------------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "lldb/Symbol/ASTType.h"
-
-using namespace lldb_private;
-
-ASTTypeBase::~ASTTypeBase()
-{
-}
-
-ASTType::~ASTType()
-{
-}
\ No newline at end of file

Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Wed Jul 21 17:12:05 2010
@@ -316,11 +316,11 @@
     return m_selector_table_ap.get();
 }
 
-SourceManager *
+clang::SourceManager *
 ClangASTContext::getSourceManager()
 {
     if (m_source_manager_ap.get() == NULL)
-        m_source_manager_ap.reset(new SourceManager(*getDiagnostic()));
+        m_source_manager_ap.reset(new clang::SourceManager(*getDiagnostic()));
     return m_source_manager_ap.get();
 }
 
@@ -758,7 +758,7 @@
 
     QualType record_qual_type(QualType::getFromOpaquePtr(record_clang_type));
 
-    Type *clang_type = record_qual_type.getTypePtr();
+    clang::Type *clang_type = record_qual_type.getTypePtr();
     if (clang_type)
     {
         const RecordType *record_type = dyn_cast<RecordType>(clang_type);
@@ -863,7 +863,7 @@
     if (clang_qual_type)
     {
         QualType qual_type(QualType::getFromOpaquePtr(clang_qual_type));
-        Type *clang_type = qual_type.getTypePtr();
+        clang::Type *clang_type = qual_type.getTypePtr();
         if (clang_type)
         {
             RecordType *record_type = dyn_cast<RecordType>(clang_type);
@@ -913,7 +913,7 @@
 {
     if (class_clang_type)
     {
-        Type *clang_type = QualType::getFromOpaquePtr(class_clang_type).getTypePtr();
+        clang::Type *clang_type = QualType::getFromOpaquePtr(class_clang_type).getTypePtr();
         if (clang_type)
         {
             RecordType *record_type = dyn_cast<RecordType>(clang_type);
@@ -948,15 +948,15 @@
 
     switch (qual_type->getTypeClass())
     {
-    case Type::IncompleteArray:
-    case Type::VariableArray:
-    case Type::ConstantArray:
-    case Type::ExtVector:
-    case Type::Vector:
-    case Type::Record:
+    case clang::Type::IncompleteArray:
+    case clang::Type::VariableArray:
+    case clang::Type::ConstantArray:
+    case clang::Type::ExtVector:
+    case clang::Type::Vector:
+    case clang::Type::Record:
         return true;
 
-    case Type::Typedef:
+    case clang::Type::Typedef:
         return ClangASTContext::IsAggregateType (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr());
 
     default:
@@ -976,7 +976,7 @@
     QualType qual_type(QualType::getFromOpaquePtr(clang_qual_type));
     switch (qual_type->getTypeClass())
     {
-    case Type::Record:
+    case clang::Type::Record:
         {
             const RecordType *record_type = cast<RecordType>(qual_type.getTypePtr());
             const RecordDecl *record_decl = record_type->getDecl();
@@ -1017,11 +1017,11 @@
         }
         break;
 
-    case Type::ConstantArray:
+    case clang::Type::ConstantArray:
         num_children = cast<ConstantArrayType>(qual_type.getTypePtr())->getSize().getLimitedValue();
         break;
 
-    case Type::Pointer:
+    case clang::Type::Pointer:
         {
             PointerType *pointer_type = cast<PointerType>(qual_type.getTypePtr());
             QualType pointee_type = pointer_type->getPointeeType();
@@ -1034,7 +1034,7 @@
         }
         break;
 
-    case Type::Typedef:
+    case clang::Type::Typedef:
         num_children = ClangASTContext::GetNumChildren (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(), omit_empty_base_classes);
         break;
 
@@ -1103,7 +1103,7 @@
         QualType parent_qual_type(QualType::getFromOpaquePtr(parent_clang_type));
         switch (parent_qual_type->getTypeClass())
         {
-        case Type::Record:
+        case clang::Type::Record:
             {
                 const RecordType *record_type = cast<RecordType>(parent_qual_type.getTypePtr());
                 const RecordDecl *record_decl = record_type->getDecl();
@@ -1190,7 +1190,7 @@
             }
             break;
 
-        case Type::ConstantArray:
+        case clang::Type::ConstantArray:
             {
                 const ConstantArrayType *array = cast<ConstantArrayType>(parent_qual_type.getTypePtr());
                 const uint64_t element_count = array->getSize().getLimitedValue();
@@ -1211,7 +1211,7 @@
             }
             break;
 
-        case Type::Pointer:
+        case clang::Type::Pointer:
             {
                 PointerType *pointer_type = cast<PointerType>(parent_qual_type.getTypePtr());
                 QualType pointee_type = pointer_type->getPointeeType();
@@ -1251,7 +1251,7 @@
             }
             break;
 
-        case Type::Typedef:
+        case clang::Type::Typedef:
             return GetChildClangTypeAtIndex (ast_context,
                                              parent_name,
                                              cast<TypedefType>(parent_qual_type)->LookThroughTypedefs().getAsOpaquePtr(),
@@ -1461,7 +1461,7 @@
         QualType qual_type(QualType::getFromOpaquePtr(clang_type));
         switch (qual_type->getTypeClass())
         {
-        case Type::Record:
+        case clang::Type::Record:
             {
                 const RecordType *record_type = cast<RecordType>(qual_type.getTypePtr());
                 const RecordDecl *record_decl = record_type->getDecl();
@@ -1548,7 +1548,7 @@
             }
             break;
 
-        case Type::ConstantArray:
+        case clang::Type::ConstantArray:
             {
 //                const ConstantArrayType *array = cast<ConstantArrayType>(parent_qual_type.getTypePtr());
 //                const uint64_t element_count = array->getSize().getLimitedValue();
@@ -1569,7 +1569,7 @@
             }
             break;
 
-//        case Type::MemberPointerType:
+//        case clang::Type::MemberPointerType:
 //            {
 //                MemberPointerType *mem_ptr_type = cast<MemberPointerType>(qual_type.getTypePtr());
 //                QualType pointee_type = mem_ptr_type->getPointeeType();
@@ -1583,8 +1583,8 @@
 //            }
 //            break;
 //
-        case Type::LValueReference:
-        case Type::RValueReference:
+        case clang::Type::LValueReference:
+        case clang::Type::RValueReference:
             {
                 ReferenceType *reference_type = cast<ReferenceType>(qual_type.getTypePtr());
                 QualType pointee_type = reference_type->getPointeeType();
@@ -1600,7 +1600,7 @@
             }
             break;
 
-        case Type::Pointer:
+        case clang::Type::Pointer:
             {
                 PointerType *pointer_type = cast<PointerType>(qual_type.getTypePtr());
                 QualType pointee_type = pointer_type->getPointeeType();
@@ -1634,7 +1634,7 @@
             }
             break;
 
-        case Type::Typedef:
+        case clang::Type::Typedef:
             return GetIndexOfChildMemberWithName (ast_context,
                                                   cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(),
                                                   name,
@@ -1667,7 +1667,7 @@
         QualType qual_type(QualType::getFromOpaquePtr(clang_type));
         switch (qual_type->getTypeClass())
         {
-        case Type::Record:
+        case clang::Type::Record:
             {
                 const RecordType *record_type = cast<RecordType>(qual_type.getTypePtr());
                 const RecordDecl *record_decl = record_type->getDecl();
@@ -1709,7 +1709,7 @@
             }
             break;
 
-        case Type::ConstantArray:
+        case clang::Type::ConstantArray:
             {
 //                const ConstantArrayType *array = cast<ConstantArrayType>(parent_qual_type.getTypePtr());
 //                const uint64_t element_count = array->getSize().getLimitedValue();
@@ -1730,7 +1730,7 @@
             }
             break;
 
-//        case Type::MemberPointerType:
+//        case clang::Type::MemberPointerType:
 //            {
 //                MemberPointerType *mem_ptr_type = cast<MemberPointerType>(qual_type.getTypePtr());
 //                QualType pointee_type = mem_ptr_type->getPointeeType();
@@ -1744,8 +1744,8 @@
 //            }
 //            break;
 //
-        case Type::LValueReference:
-        case Type::RValueReference:
+        case clang::Type::LValueReference:
+        case clang::Type::RValueReference:
             {
                 ReferenceType *reference_type = cast<ReferenceType>(qual_type.getTypePtr());
                 QualType pointee_type = reference_type->getPointeeType();
@@ -1760,7 +1760,7 @@
             }
             break;
 
-        case Type::Pointer:
+        case clang::Type::Pointer:
             {
                 PointerType *pointer_type = cast<PointerType>(qual_type.getTypePtr());
                 QualType pointee_type = pointer_type->getPointeeType();
@@ -1793,7 +1793,7 @@
             }
             break;
 
-        case Type::Typedef:
+        case clang::Type::Typedef:
             return GetIndexOfChildWithName (ast_context,
                                             cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(),
                                             name,
@@ -1814,7 +1814,7 @@
     if (tag_clang_type)
     {
         QualType tag_qual_type(QualType::getFromOpaquePtr(tag_clang_type));
-        Type *clang_type = tag_qual_type.getTypePtr();
+        clang::Type *clang_type = tag_qual_type.getTypePtr();
         if (clang_type)
         {
             TagType *tag_type = dyn_cast<TagType>(clang_type);
@@ -1844,34 +1844,34 @@
     QualType qual_type(QualType::getFromOpaquePtr(clang_type));
     switch (qual_type->getTypeClass())
     {
-    case Type::FunctionNoProto:         break;
-    case Type::FunctionProto:           break;
-    case Type::IncompleteArray:         break;
-    case Type::VariableArray:           break;
-    case Type::ConstantArray:           break;
-    case Type::ExtVector:               break;
-    case Type::Vector:                  break;
-    case Type::Builtin:                 break;
-    case Type::ObjCObjectPointer:       break;
-    case Type::BlockPointer:            break;
-    case Type::Pointer:                 break;
-    case Type::LValueReference:         break;
-    case Type::RValueReference:         break;
-    case Type::MemberPointer:           break;
-    case Type::Complex:                 break;
-    case Type::ObjCInterface:           break;
-    case Type::Record:
+    case clang::Type::FunctionNoProto:         break;
+    case clang::Type::FunctionProto:           break;
+    case clang::Type::IncompleteArray:         break;
+    case clang::Type::VariableArray:           break;
+    case clang::Type::ConstantArray:           break;
+    case clang::Type::ExtVector:               break;
+    case clang::Type::Vector:                  break;
+    case clang::Type::Builtin:                 break;
+    case clang::Type::ObjCObjectPointer:       break;
+    case clang::Type::BlockPointer:            break;
+    case clang::Type::Pointer:                 break;
+    case clang::Type::LValueReference:         break;
+    case clang::Type::RValueReference:         break;
+    case clang::Type::MemberPointer:           break;
+    case clang::Type::Complex:                 break;
+    case clang::Type::ObjCInterface:           break;
+    case clang::Type::Record:
         return cast<RecordType>(qual_type)->getDecl();
-    case Type::Enum:
+    case clang::Type::Enum:
         return cast<EnumType>(qual_type)->getDecl();
-    case Type::Typedef:
+    case clang::Type::Typedef:
         return ClangASTContext::GetDeclContextForType (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr());
 
-    case Type::TypeOfExpr:              break;
-    case Type::TypeOf:                  break;
-    case Type::Decltype:                break;
-    //case Type::QualifiedName:           break;
-    case Type::TemplateSpecialization:  break;
+    case clang::Type::TypeOfExpr:              break;
+    case clang::Type::TypeOf:                  break;
+    case clang::Type::Decltype:                break;
+    //case clang::Type::QualifiedName:           break;
+    case clang::Type::TemplateSpecialization:  break;
     }
     // No DeclContext in this type...
     return NULL;
@@ -2006,7 +2006,7 @@
     if (clang_type)
     {
         QualType qual_type (QualType::getFromOpaquePtr(clang_type));
-        Type *t = qual_type.getTypePtr();
+        clang::Type *t = qual_type.getTypePtr();
         if (t)
         {
             TagType *tag_type = dyn_cast<TagType>(t);
@@ -2030,7 +2030,7 @@
     if (clang_type)
     {
         QualType qual_type (QualType::getFromOpaquePtr(clang_type));
-        Type *t = qual_type.getTypePtr();
+        clang::Type *t = qual_type.getTypePtr();
         if (t)
         {
             TagType *tag_type = dyn_cast<TagType>(t);
@@ -2091,7 +2091,7 @@
         assert (identifier_table != NULL);
         QualType enum_qual_type (QualType::getFromOpaquePtr(enum_clang_type));
 
-        Type *clang_type = enum_qual_type.getTypePtr();
+        clang::Type *clang_type = enum_qual_type.getTypePtr();
         if (clang_type)
         {
             const EnumType *enum_type = dyn_cast<EnumType>(clang_type);
@@ -2171,31 +2171,31 @@
     QualType qual_type (QualType::getFromOpaquePtr(clang_type));
     switch (qual_type->getTypeClass())
     {
-    case Type::ObjCObjectPointer:
+    case clang::Type::ObjCObjectPointer:
         if (target_type)
             *target_type = cast<ObjCObjectPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
         return true;
-    case Type::BlockPointer:
+    case clang::Type::BlockPointer:
         if (target_type)
             *target_type = cast<BlockPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
         return true;
-    case Type::Pointer:
+    case clang::Type::Pointer:
         if (target_type)
             *target_type = cast<PointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
         return true;
-    case Type::MemberPointer:
+    case clang::Type::MemberPointer:
         if (target_type)
             *target_type = cast<MemberPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
         return true;
-    case Type::LValueReference:
+    case clang::Type::LValueReference:
         if (target_type)
             *target_type = cast<LValueReferenceType>(qual_type)->desugar().getAsOpaquePtr();
         return true;
-    case Type::RValueReference:
+    case clang::Type::RValueReference:
         if (target_type)
             *target_type = cast<LValueReferenceType>(qual_type)->desugar().getAsOpaquePtr();
         return true;
-    case Type::Typedef:
+    case clang::Type::Typedef:
         return ClangASTContext::IsPointerOrReferenceType (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr());
     default:
         break;
@@ -2247,23 +2247,23 @@
         QualType qual_type (QualType::getFromOpaquePtr(clang_type));
         switch (qual_type->getTypeClass())
         {
-        case Type::ObjCObjectPointer:
+        case clang::Type::ObjCObjectPointer:
             if (target_type)
                 *target_type = cast<ObjCObjectPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
             return true;
-        case Type::BlockPointer:
+        case clang::Type::BlockPointer:
             if (target_type)
                 *target_type = cast<BlockPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
             return true;
-        case Type::Pointer:
+        case clang::Type::Pointer:
             if (target_type)
                 *target_type = cast<PointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
             return true;
-        case Type::MemberPointer:
+        case clang::Type::MemberPointer:
             if (target_type)
                 *target_type = cast<MemberPointerType>(qual_type)->getPointeeType().getAsOpaquePtr();
             return true;
-        case Type::Typedef:
+        case clang::Type::Typedef:
             return ClangASTContext::IsPointerOrReferenceType (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(), target_type);
         default:
             break;
@@ -2320,11 +2320,11 @@
         QualType qual_type (QualType::getFromOpaquePtr(clang_type));
         switch (qual_type->getTypeClass())
         {
-        case Type::ConstantArray:
+        case clang::Type::ConstantArray:
             {
                 ConstantArrayType *array = cast<ConstantArrayType>(qual_type.getTypePtr());
                 QualType element_qual_type = array->getElementType();
-                Type *canonical_type = element_qual_type->getCanonicalTypeInternal().getTypePtr();
+                clang::Type *canonical_type = element_qual_type->getCanonicalTypeInternal().getTypePtr();
                 if (canonical_type && canonical_type->isCharType())
                 {
                     // We know the size of the array and it could be a C string
@@ -2335,13 +2335,13 @@
             }
             break;
 
-        case Type::Pointer:
+        case clang::Type::Pointer:
             {
                 PointerType *pointer_type = cast<PointerType>(qual_type.getTypePtr());
-                Type *pointee_type_ptr = pointer_type->getPointeeType().getTypePtr();
+                clang::Type *pointee_type_ptr = pointer_type->getPointeeType().getTypePtr();
                 if (pointee_type_ptr)
                 {
-                    Type *canonical_type_ptr = pointee_type_ptr->getCanonicalTypeInternal().getTypePtr();
+                    clang::Type *canonical_type_ptr = pointee_type_ptr->getCanonicalTypeInternal().getTypePtr();
                     length = 0; // No length info, read until a NULL terminator is received
                     if (canonical_type_ptr)
                         return canonical_type_ptr->isCharType();
@@ -2351,17 +2351,17 @@
             }
             break;
 
-        case Type::Typedef:
+        case clang::Type::Typedef:
             return ClangASTContext::IsCStringType (cast<TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(), length);
 
-        case Type::LValueReference:
-        case Type::RValueReference:
+        case clang::Type::LValueReference:
+        case clang::Type::RValueReference:
             {
                 ReferenceType *reference_type = cast<ReferenceType>(qual_type.getTypePtr());
-                Type *pointee_type_ptr = reference_type->getPointeeType().getTypePtr();
+                clang::Type *pointee_type_ptr = reference_type->getPointeeType().getTypePtr();
                 if (pointee_type_ptr)
                 {
-                    Type *canonical_type_ptr = pointee_type_ptr->getCanonicalTypeInternal().getTypePtr();
+                    clang::Type *canonical_type_ptr = pointee_type_ptr->getCanonicalTypeInternal().getTypePtr();
                     length = 0; // No length info, read until a NULL terminator is received
                     if (canonical_type_ptr)
                         return canonical_type_ptr->isCharType();
@@ -2385,24 +2385,24 @@
     
     switch (qual_type->getTypeClass())
     {
-    case Type::ConstantArray:
+    case clang::Type::ConstantArray:
         if (member_type)
             *member_type = cast<ConstantArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = cast<ConstantArrayType>(qual_type)->getSize().getLimitedValue(ULONG_LONG_MAX);
         return true;
-    case Type::IncompleteArray:
+    case clang::Type::IncompleteArray:
         if (member_type)
             *member_type = cast<IncompleteArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = 0;
         return true;
-    case Type::VariableArray:
+    case clang::Type::VariableArray:
         if (member_type)
             *member_type = cast<VariableArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)
             *size = 0;
-    case Type::DependentSizedArray:
+    case clang::Type::DependentSizedArray:
         if (member_type)
             *member_type = cast<DependentSizedArrayType>(qual_type)->getElementType().getAsOpaquePtr();
         if (size)

Copied: lldb/trunk/source/Symbol/ClangASTType.cpp (from r109016, lldb/trunk/source/Symbol/ASTType.cpp)
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTType.cpp?p2=lldb/trunk/source/Symbol/ClangASTType.cpp&p1=lldb/trunk/source/Symbol/ASTType.cpp&r1=109016&r2=109046&rev=109046&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ASTType.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTType.cpp Wed Jul 21 17:12:05 2010
@@ -1,4 +1,4 @@
-//===-- ASTType.cpp ---------------------------------------------*- C++ -*-===//
+//===-- ClangASTType.cpp ---------------------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -7,14 +7,1108 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "lldb/Symbol/ASTType.h"
+#include "lldb/Symbol/ClangASTType.h"
+
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Decl.h"
+#include "clang/AST/DeclCXX.h"
+#include "clang/AST/DeclGroup.h"
+#include "clang/AST/RecordLayout.h"
+
+#include "clang/Basic/Builtins.h"
+#include "clang/Basic/IdentifierTable.h"
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Basic/TargetInfo.h"
+
+#include "llvm/Support/FormattedStream.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include "lldb/Core/ConstString.h"
+#include "lldb/Core/DataBufferHeap.h"
+#include "lldb/Core/DataExtractor.h"
+#include "lldb/Core/Scalar.h"
+#include "lldb/Core/Stream.h"
+#include "lldb/Core/StreamString.h"
+#include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Target/ExecutionContext.h"
+#include "lldb/Target/Process.h"
 
 using namespace lldb_private;
 
-ASTTypeBase::~ASTTypeBase()
+ClangASTType::~ClangASTType()
+{
+}
+
+ConstString
+ClangASTType::GetClangTypeName ()
+{
+    return GetClangTypeName (m_type);
+}
+
+ConstString
+ClangASTType::GetClangTypeName (void *opaque_clang_qual_type)
+{
+    ConstString clang_type_name;
+    if (opaque_clang_qual_type)
+    {
+        clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+        const clang::TypedefType *typedef_type = qual_type->getAs<clang::TypedefType>();
+        if (typedef_type)
+        {
+            const clang::TypedefDecl *typedef_decl = typedef_type->getDecl();
+            std::string clang_typedef_name (typedef_decl->getQualifiedNameAsString());
+            if (!clang_typedef_name.empty())
+                clang_type_name.SetCString (clang_typedef_name.c_str());
+        }
+        else
+        {
+            std::string type_name(qual_type.getAsString());
+            if (!type_name.empty())
+                clang_type_name.SetCString (type_name.c_str());
+        }
+    }
+    else
+    {
+        clang_type_name.SetCString ("<invalid>");
+    }
+
+    return clang_type_name;
+}
+
+lldb::Encoding
+ClangASTType::GetEncoding (uint32_t &count)
+{
+    return GetEncoding(m_type, count);
+}
+
+
+lldb::Encoding
+ClangASTType::GetEncoding (void *opaque_clang_qual_type, uint32_t &count)
+{
+    count = 1;
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+    switch (qual_type->getTypeClass())
+    {
+    case clang::Type::FunctionNoProto:
+    case clang::Type::FunctionProto:
+        break;
+
+    case clang::Type::IncompleteArray:
+    case clang::Type::VariableArray:
+        break;
+
+    case clang::Type::ConstantArray:
+        break;
+
+    case clang::Type::ExtVector:
+    case clang::Type::Vector:
+        // TODO: Set this to more than one???
+        break;
+
+    case clang::Type::Builtin:
+        switch (cast<clang::BuiltinType>(qual_type)->getKind())
+        {
+        default: assert(0 && "Unknown builtin type!");
+        case clang::BuiltinType::Void:
+            break;
+
+        case clang::BuiltinType::Bool:
+        case clang::BuiltinType::Char_S:
+        case clang::BuiltinType::SChar:
+        case clang::BuiltinType::WChar:
+        case clang::BuiltinType::Char16:
+        case clang::BuiltinType::Char32:
+        case clang::BuiltinType::Short:
+        case clang::BuiltinType::Int:
+        case clang::BuiltinType::Long:
+        case clang::BuiltinType::LongLong:
+        case clang::BuiltinType::Int128:        return lldb::eEncodingSint;
+
+        case clang::BuiltinType::Char_U:
+        case clang::BuiltinType::UChar:
+        case clang::BuiltinType::UShort:
+        case clang::BuiltinType::UInt:
+        case clang::BuiltinType::ULong:
+        case clang::BuiltinType::ULongLong:
+        case clang::BuiltinType::UInt128:       return lldb::eEncodingUint;
+
+        case clang::BuiltinType::Float:
+        case clang::BuiltinType::Double:
+        case clang::BuiltinType::LongDouble:    return lldb::eEncodingIEEE754;
+
+        case clang::BuiltinType::NullPtr:       return lldb::eEncodingUint;
+        }
+        break;
+    // All pointer types are represented as unsigned integer encodings.
+    // We may nee to add a eEncodingPointer if we ever need to know the
+    // difference
+    case clang::Type::ObjCObjectPointer:
+    case clang::Type::BlockPointer:
+    case clang::Type::Pointer:
+    case clang::Type::LValueReference:
+    case clang::Type::RValueReference:
+    case clang::Type::MemberPointer:            return lldb::eEncodingUint;
+    // Complex numbers are made up of floats
+    case clang::Type::Complex:
+        count = 2;
+        return lldb::eEncodingIEEE754;
+
+    case clang::Type::ObjCInterface:            break;
+    case clang::Type::Record:                   break;
+    case clang::Type::Enum:                     return lldb::eEncodingSint;
+    case clang::Type::Typedef:
+        return GetEncoding(cast<clang::TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(), count);
+        break;
+
+    case clang::Type::TypeOfExpr:
+    case clang::Type::TypeOf:
+    case clang::Type::Decltype:
+//    case clang::Type::QualifiedName:
+    case clang::Type::TemplateSpecialization:   break;
+    }
+    count = 0;
+    return lldb::eEncodingInvalid;
+}
+
+lldb::Format
+ClangASTType::GetFormat ()
 {
+    return GetFormat (m_type);
 }
 
-ASTType::~ASTType()
+lldb::Format
+ClangASTType::GetFormat (void *opaque_clang_qual_type)
 {
-}
\ No newline at end of file
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+    switch (qual_type->getTypeClass())
+    {
+    case clang::Type::FunctionNoProto:
+    case clang::Type::FunctionProto:
+        break;
+
+    case clang::Type::IncompleteArray:
+    case clang::Type::VariableArray:
+        break;
+
+    case clang::Type::ConstantArray:
+        break;
+
+    case clang::Type::ExtVector:
+    case clang::Type::Vector:
+        break;
+
+    case clang::Type::Builtin:
+        switch (cast<clang::BuiltinType>(qual_type)->getKind())
+        {
+        default: assert(0 && "Unknown builtin type!");
+        case clang::BuiltinType::Void:
+            break;
+
+        case clang::BuiltinType::Bool:          return lldb::eFormatBoolean;
+        case clang::BuiltinType::Char_S:
+        case clang::BuiltinType::SChar:
+        case clang::BuiltinType::Char_U:
+        case clang::BuiltinType::UChar:
+        case clang::BuiltinType::WChar:         return lldb::eFormatChar;
+        case clang::BuiltinType::Char16:        return lldb::eFormatUnicode16;
+        case clang::BuiltinType::Char32:        return lldb::eFormatUnicode32;
+        case clang::BuiltinType::UShort:        return lldb::eFormatHex;
+        case clang::BuiltinType::Short:         return lldb::eFormatDecimal;
+        case clang::BuiltinType::UInt:          return lldb::eFormatHex;
+        case clang::BuiltinType::Int:           return lldb::eFormatDecimal;
+        case clang::BuiltinType::ULong:         return lldb::eFormatHex;
+        case clang::BuiltinType::Long:          return lldb::eFormatDecimal;
+        case clang::BuiltinType::ULongLong:     return lldb::eFormatHex;
+        case clang::BuiltinType::LongLong:      return lldb::eFormatDecimal;
+        case clang::BuiltinType::UInt128:       return lldb::eFormatHex;
+        case clang::BuiltinType::Int128:        return lldb::eFormatDecimal;
+        case clang::BuiltinType::Float:         return lldb::eFormatFloat;
+        case clang::BuiltinType::Double:        return lldb::eFormatFloat;
+        case clang::BuiltinType::LongDouble:    return lldb::eFormatFloat;
+        case clang::BuiltinType::NullPtr:       return lldb::eFormatHex;
+        }
+        break;
+    case clang::Type::ObjCObjectPointer:        return lldb::eFormatHex;
+    case clang::Type::BlockPointer:             return lldb::eFormatHex;
+    case clang::Type::Pointer:                  return lldb::eFormatHex;
+    case clang::Type::LValueReference:
+    case clang::Type::RValueReference:          return lldb::eFormatHex;
+    case clang::Type::MemberPointer:            break;
+    case clang::Type::Complex:                  return lldb::eFormatComplex;
+    case clang::Type::ObjCInterface:            break;
+    case clang::Type::Record:                   break;
+    case clang::Type::Enum:                     return lldb::eFormatEnum;
+    case clang::Type::Typedef:
+        return ClangASTType::GetFormat(cast<clang::TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr());
+
+    case clang::Type::TypeOfExpr:
+    case clang::Type::TypeOf:
+    case clang::Type::Decltype:
+//    case clang::Type::QualifiedName:
+    case clang::Type::TemplateSpecialization:   break;
+    }
+    // We don't know hot to display this type...
+    return lldb::eFormatBytes;
+}
+
+
+void
+ClangASTType::DumpValue
+(
+    ExecutionContext *exe_ctx,
+    Stream *s,
+    lldb::Format format,
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size,
+    uint32_t bitfield_bit_size,
+    uint32_t bitfield_bit_offset,
+    bool show_types,
+    bool show_summary,
+    bool verbose,
+    uint32_t depth
+)
+{
+    return DumpValue (m_ast, 
+                      m_type,
+                      exe_ctx,
+                      s,
+                      format,
+                      data,
+                      data_byte_offset,
+                      data_byte_size,
+                      bitfield_bit_size,
+                      bitfield_bit_offset,
+                      show_types,
+                      show_summary,
+                      verbose,
+                      depth);
+}
+                      
+#define DEPTH_INCREMENT 2
+void
+ClangASTType::DumpValue
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    ExecutionContext *exe_ctx,
+    Stream *s,
+    lldb::Format format,
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size,
+    uint32_t bitfield_bit_size,
+    uint32_t bitfield_bit_offset,
+    bool show_types,
+    bool show_summary,
+    bool verbose,
+    uint32_t depth
+)
+{
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+    switch (qual_type->getTypeClass())
+    {
+    case clang::Type::Record:
+        {
+            const clang::RecordType *record_type = cast<clang::RecordType>(qual_type.getTypePtr());
+            const clang::RecordDecl *record_decl = record_type->getDecl();
+            assert(record_decl);
+            uint32_t field_bit_offset = 0;
+            uint32_t field_byte_offset = 0;
+            const clang::ASTRecordLayout &record_layout = ast_context->getASTRecordLayout(record_decl);
+            uint32_t child_idx = 0;
+
+
+            const clang::CXXRecordDecl *cxx_record_decl = dyn_cast<clang::CXXRecordDecl>(record_decl);
+            if (cxx_record_decl)
+            {
+                // We might have base classes to print out first
+                clang::CXXRecordDecl::base_class_const_iterator base_class, base_class_end;
+                for (base_class = cxx_record_decl->bases_begin(), base_class_end = cxx_record_decl->bases_end();
+                     base_class != base_class_end;
+                     ++base_class)
+                {
+                    const clang::CXXRecordDecl *base_class_decl = cast<clang::CXXRecordDecl>(base_class->getType()->getAs<clang::RecordType>()->getDecl());
+
+                    // Skip empty base classes
+                    if (verbose == false && ClangASTContext::RecordHasFields(base_class_decl) == false)
+                        continue;
+
+                    if (base_class->isVirtual())
+                        field_bit_offset = record_layout.getVBaseClassOffset(base_class_decl);
+                    else
+                        field_bit_offset = record_layout.getBaseClassOffset(base_class_decl);
+                    field_byte_offset = field_bit_offset / 8;
+                    assert (field_bit_offset % 8 == 0);
+                    if (child_idx == 0)
+                        s->PutChar('{');
+                    else
+                        s->PutChar(',');
+
+                    clang::QualType base_class_qual_type = base_class->getType();
+                    std::string base_class_type_name(base_class_qual_type.getAsString());
+
+                    // Indent and print the base class type name
+                    s->Printf("\n%*s%s ", depth + DEPTH_INCREMENT, "", base_class_type_name.c_str());
+
+                    std::pair<uint64_t, unsigned> base_class_type_info = ast_context->getTypeInfo(base_class_qual_type);
+
+                    // Dump the value of the member
+                    DumpValue (ast_context,                        // The clang AST context for this type
+                               base_class_qual_type.getAsOpaquePtr(),// The clang type we want to dump
+                               exe_ctx,
+                               s,                                  // Stream to dump to
+                               ClangASTType::GetFormat(base_class_qual_type.getAsOpaquePtr()), // The format with which to display the member
+                               data,                               // Data buffer containing all bytes for this type
+                               data_byte_offset + field_byte_offset,// Offset into "data" where to grab value from
+                               base_class_type_info.first / 8,     // Size of this type in bytes
+                               0,                                  // Bitfield bit size
+                               0,                                  // Bitfield bit offset
+                               show_types,                         // Boolean indicating if we should show the variable types
+                               show_summary,                       // Boolean indicating if we should show a summary for the current type
+                               verbose,                            // Verbose output?
+                               depth + DEPTH_INCREMENT);           // Scope depth for any types that have children
+                    
+                    ++child_idx;
+                }
+            }
+            uint32_t field_idx = 0;
+            clang::RecordDecl::field_iterator field, field_end;
+            for (field = record_decl->field_begin(), field_end = record_decl->field_end(); field != field_end; ++field, ++field_idx, ++child_idx)
+            {
+                // Print the starting squiggly bracket (if this is the
+                // first member) or comman (for member 2 and beyong) for
+                // the struct/union/class member.
+                if (child_idx == 0)
+                    s->PutChar('{');
+                else
+                    s->PutChar(',');
+
+                // Indent
+                s->Printf("\n%*s", depth + DEPTH_INCREMENT, "");
+
+                clang::QualType field_type = field->getType();
+                // Print the member type if requested
+                // Figure out the type byte size (field_type_info.first) and
+                // alignment (field_type_info.second) from the AST context.
+                std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(field_type);
+                assert(field_idx < record_layout.getFieldCount());
+                // Figure out the field offset within the current struct/union/class type
+                field_bit_offset = record_layout.getFieldOffset (field_idx);
+                field_byte_offset = field_bit_offset / 8;
+                uint32_t field_bitfield_bit_size = 0;
+                uint32_t field_bitfield_bit_offset = 0;
+                if (ClangASTContext::FieldIsBitfield (ast_context, *field, field_bitfield_bit_size))
+                    field_bitfield_bit_offset = field_bit_offset % 8;
+
+                if (show_types)
+                {
+                    std::string field_type_name(field_type.getAsString());
+                    if (field_bitfield_bit_size > 0)
+                        s->Printf("(%s:%u) ", field_type_name.c_str(), field_bitfield_bit_size);
+                    else
+                        s->Printf("(%s) ", field_type_name.c_str());
+                }
+                // Print the member name and equal sign
+                s->Printf("%s = ", field->getNameAsString().c_str());
+
+
+                // Dump the value of the member
+                DumpValue (ast_context,                    // The clang AST context for this type
+                           field_type.getAsOpaquePtr(),    // The clang type we want to dump
+                           exe_ctx,
+                           s,                              // Stream to dump to
+                           ClangASTType::GetFormat(field_type.getAsOpaquePtr()),   // The format with which to display the member
+                           data,                           // Data buffer containing all bytes for this type
+                           data_byte_offset + field_byte_offset,// Offset into "data" where to grab value from
+                           field_type_info.first / 8,      // Size of this type in bytes
+                           field_bitfield_bit_size,        // Bitfield bit size
+                           field_bitfield_bit_offset,      // Bitfield bit offset
+                           show_types,                     // Boolean indicating if we should show the variable types
+                           show_summary,                   // Boolean indicating if we should show a summary for the current type
+                           verbose,                        // Verbose output?
+                           depth + DEPTH_INCREMENT);       // Scope depth for any types that have children
+            }
+
+            // Indent the trailing squiggly bracket
+            if (child_idx > 0)
+                s->Printf("\n%*s}", depth, "");
+        }
+        return;
+
+    case clang::Type::Enum:
+        {
+            const clang::EnumType *enum_type = cast<clang::EnumType>(qual_type.getTypePtr());
+            const clang::EnumDecl *enum_decl = enum_type->getDecl();
+            assert(enum_decl);
+            clang::EnumDecl::enumerator_iterator enum_pos, enum_end_pos;
+            uint32_t offset = data_byte_offset;
+            const int64_t enum_value = data.GetMaxU64Bitfield(&offset, data_byte_size, bitfield_bit_size, bitfield_bit_offset);
+            for (enum_pos = enum_decl->enumerator_begin(), enum_end_pos = enum_decl->enumerator_end(); enum_pos != enum_end_pos; ++enum_pos)
+            {
+                if (enum_pos->getInitVal() == enum_value)
+                {
+                    s->Printf("%s", enum_pos->getNameAsCString());
+                    return;
+                }
+            }
+            // If we have gotten here we didn't get find the enumerator in the
+            // enum decl, so just print the integer.
+            s->Printf("%lli", enum_value);
+        }
+        return;
+
+    case clang::Type::ConstantArray:
+        {
+            const clang::ConstantArrayType *array = cast<clang::ConstantArrayType>(qual_type.getTypePtr());
+            bool is_array_of_characters = false;
+            clang::QualType element_qual_type = array->getElementType();
+
+            clang::Type *canonical_type = element_qual_type->getCanonicalTypeInternal().getTypePtr();
+            if (canonical_type)
+                is_array_of_characters = canonical_type->isCharType();
+
+            const uint64_t element_count = array->getSize().getLimitedValue();
+
+            std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(element_qual_type);
+
+            uint32_t element_idx = 0;
+            uint32_t element_offset = 0;
+            uint64_t element_byte_size = field_type_info.first / 8;
+            uint32_t element_stride = element_byte_size;
+
+            if (is_array_of_characters)
+            {
+                s->PutChar('"');
+                data.Dump(s, data_byte_offset, lldb::eFormatChar, element_byte_size, element_count, UINT32_MAX, LLDB_INVALID_ADDRESS, 0, 0);
+                s->PutChar('"');
+                return;
+            }
+            else
+            {
+                lldb::Format element_format = ClangASTType::GetFormat(element_qual_type.getAsOpaquePtr());
+
+                for (element_idx = 0; element_idx < element_count; ++element_idx)
+                {
+                    // Print the starting squiggly bracket (if this is the
+                    // first member) or comman (for member 2 and beyong) for
+                    // the struct/union/class member.
+                    if (element_idx == 0)
+                        s->PutChar('{');
+                    else
+                        s->PutChar(',');
+
+                    // Indent and print the index
+                    s->Printf("\n%*s[%u] ", depth + DEPTH_INCREMENT, "", element_idx);
+
+                    // Figure out the field offset within the current struct/union/class type
+                    element_offset = element_idx * element_stride;
+
+                    // Dump the value of the member
+                    DumpValue (ast_context,                    // The clang AST context for this type
+                               element_qual_type.getAsOpaquePtr(), // The clang type we want to dump
+                               exe_ctx,
+                               s,                              // Stream to dump to
+                               element_format,                 // The format with which to display the element
+                               data,                           // Data buffer containing all bytes for this type
+                               data_byte_offset + element_offset,// Offset into "data" where to grab value from
+                               element_byte_size,              // Size of this type in bytes
+                               0,                              // Bitfield bit size
+                               0,                              // Bitfield bit offset
+                               show_types,                     // Boolean indicating if we should show the variable types
+                               show_summary,                   // Boolean indicating if we should show a summary for the current type
+                               verbose,                        // Verbose output?
+                               depth + DEPTH_INCREMENT);       // Scope depth for any types that have children
+                }
+
+                // Indent the trailing squiggly bracket
+                if (element_idx > 0)
+                    s->Printf("\n%*s}", depth, "");
+            }
+        }
+        return;
+
+    case clang::Type::Typedef:
+        {
+            clang::QualType typedef_qual_type = cast<clang::TypedefType>(qual_type)->LookThroughTypedefs();
+            lldb::Format typedef_format = ClangASTType::GetFormat(typedef_qual_type.getAsOpaquePtr());
+            std::pair<uint64_t, unsigned> typedef_type_info = ast_context->getTypeInfo(typedef_qual_type);
+            uint64_t typedef_byte_size = typedef_type_info.first / 8;
+
+            return DumpValue (ast_context,        // The clang AST context for this type
+                              typedef_qual_type.getAsOpaquePtr(), // The clang type we want to dump
+                              exe_ctx,
+                              s,                  // Stream to dump to
+                              typedef_format,     // The format with which to display the element
+                              data,               // Data buffer containing all bytes for this type
+                              data_byte_offset,   // Offset into "data" where to grab value from
+                              typedef_byte_size,  // Size of this type in bytes
+                              bitfield_bit_size,  // Bitfield bit size
+                              bitfield_bit_offset,// Bitfield bit offset
+                              show_types,         // Boolean indicating if we should show the variable types
+                              show_summary,       // Boolean indicating if we should show a summary for the current type
+                              verbose,            // Verbose output?
+                              depth);             // Scope depth for any types that have children
+        }
+        break;
+
+    default:
+        // We are down the a scalar type that we just need to display.
+        data.Dump(s, data_byte_offset, format, data_byte_size, 1, UINT32_MAX, LLDB_INVALID_ADDRESS, bitfield_bit_size, bitfield_bit_offset);
+
+        if (show_summary)
+            DumpSummary (ast_context, opaque_clang_qual_type, exe_ctx, s, data, data_byte_offset, data_byte_size);
+        break;
+    }
+}
+
+
+
+bool
+ClangASTType::DumpTypeValue
+(
+    Stream *s,
+    lldb::Format format,
+    const lldb_private::DataExtractor &data,
+    uint32_t byte_offset,
+    size_t byte_size,
+    uint32_t bitfield_bit_size,
+    uint32_t bitfield_bit_offset
+)
+{
+    return DumpTypeValue (m_ast,
+                          m_type,
+                          s,
+                          format,
+                          data,
+                          byte_offset,
+                          byte_size,
+                          bitfield_bit_size,
+                          bitfield_bit_offset);
+}
+
+
+bool
+ClangASTType::DumpTypeValue
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    Stream *s,
+    lldb::Format format,
+    const lldb_private::DataExtractor &data,
+    uint32_t byte_offset,
+    size_t byte_size,
+    uint32_t bitfield_bit_size,
+    uint32_t bitfield_bit_offset
+)
+{
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+    if (ClangASTContext::IsAggregateType (opaque_clang_qual_type))
+    {
+        return 0;
+    }
+    else
+    {
+        switch (qual_type->getTypeClass())
+        {
+        case clang::Type::Enum:
+            {
+                const clang::EnumType *enum_type = cast<clang::EnumType>(qual_type.getTypePtr());
+                const clang::EnumDecl *enum_decl = enum_type->getDecl();
+                assert(enum_decl);
+                clang::EnumDecl::enumerator_iterator enum_pos, enum_end_pos;
+                uint32_t offset = byte_offset;
+                const int64_t enum_value = data.GetMaxU64Bitfield (&offset, byte_size, bitfield_bit_size, bitfield_bit_offset);
+                for (enum_pos = enum_decl->enumerator_begin(), enum_end_pos = enum_decl->enumerator_end(); enum_pos != enum_end_pos; ++enum_pos)
+                {
+                    if (enum_pos->getInitVal() == enum_value)
+                    {
+                        s->PutCString (enum_pos->getNameAsCString());
+                        return true;
+                    }
+                }
+                // If we have gotten here we didn't get find the enumerator in the
+                // enum decl, so just print the integer.
+
+                s->Printf("%lli", enum_value);
+                return true;
+            }
+            break;
+
+        case clang::Type::Typedef:
+            {
+                clang::QualType typedef_qual_type = cast<clang::TypedefType>(qual_type)->LookThroughTypedefs();
+                lldb::Format typedef_format = ClangASTType::GetFormat(typedef_qual_type.getAsOpaquePtr());
+                std::pair<uint64_t, unsigned> typedef_type_info = ast_context->getTypeInfo(typedef_qual_type);
+                uint64_t typedef_byte_size = typedef_type_info.first / 8;
+
+                return ClangASTType::DumpTypeValue(
+                            ast_context,            // The clang AST context for this type
+                            typedef_qual_type.getAsOpaquePtr(),     // The clang type we want to dump
+                            s,
+                            typedef_format,         // The format with which to display the element
+                            data,                   // Data buffer containing all bytes for this type
+                            byte_offset,            // Offset into "data" where to grab value from
+                            typedef_byte_size,      // Size of this type in bytes
+                            bitfield_bit_size,      // Size in bits of a bitfield value, if zero don't treat as a bitfield
+                            bitfield_bit_offset);   // Offset in bits of a bitfield value if bitfield_bit_size != 0
+            }
+            break;
+
+        default:
+            // We are down the a scalar type that we just need to display.
+            return data.Dump(s,
+                             byte_offset,
+                             format,
+                             byte_size,
+                             1,
+                             UINT32_MAX,
+                             LLDB_INVALID_ADDRESS,
+                             bitfield_bit_size,
+                             bitfield_bit_offset);
+            break;
+        }
+    }
+    return 0;
+}
+
+
+
+void
+ClangASTType::DumpSummary
+(
+    ExecutionContext *exe_ctx,
+    Stream *s,
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size
+)
+{
+    return DumpSummary (m_ast,
+                        m_type,
+                        exe_ctx, 
+                        s, 
+                        data, 
+                        data_byte_offset, 
+                        data_byte_size);
+}
+
+void
+ClangASTType::DumpSummary
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    ExecutionContext *exe_ctx,
+    Stream *s,
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size
+)
+{
+    uint32_t length = 0;
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+    if (ClangASTContext::IsCStringType (opaque_clang_qual_type, length))
+    {
+
+        if (exe_ctx && exe_ctx->process)
+        {
+            uint32_t offset = data_byte_offset;
+            lldb::addr_t pointer_addresss = data.GetMaxU64(&offset, data_byte_size);
+            std::vector<uint8_t> buf;
+            if (length > 0)
+                buf.resize (length);
+            else
+                buf.resize (256);
+
+            lldb_private::DataExtractor cstr_data(&buf.front(), buf.size(), exe_ctx->process->GetByteOrder(), 4);
+            buf.back() = '\0';
+            size_t bytes_read;
+            size_t total_cstr_len = 0;
+            Error error;
+            while ((bytes_read = exe_ctx->process->ReadMemory (pointer_addresss, &buf.front(), buf.size(), error)) > 0)
+            {
+                const size_t len = strlen((const char *)&buf.front());
+                if (len == 0)
+                    break;
+                if (total_cstr_len == 0)
+                    s->PutCString (" \"");
+                cstr_data.Dump(s, 0, lldb::eFormatChar, 1, len, UINT32_MAX, LLDB_INVALID_ADDRESS, 0, 0);
+                total_cstr_len += len;
+                if (len < buf.size())
+                    break;
+                pointer_addresss += total_cstr_len;
+            }
+            if (total_cstr_len > 0)
+                s->PutChar ('"');
+        }
+    }
+}
+
+bool
+ClangASTType::GetValueAsScalar
+(
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size,
+    Scalar &value
+)
+{
+    return GetValueAsScalar (m_ast, 
+                             m_type, 
+                             data, 
+                             data_byte_offset, 
+                             data_byte_size, 
+                             value);
+}
+
+bool
+ClangASTType::GetValueAsScalar
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    const lldb_private::DataExtractor &data,
+    uint32_t data_byte_offset,
+    size_t data_byte_size,
+    Scalar &value
+)
+{
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+    if (ClangASTContext::IsAggregateType (opaque_clang_qual_type))
+    {
+        return false;   // Aggregate types don't have scalar values
+    }
+    else
+    {
+        uint32_t count = 0;
+        lldb::Encoding encoding = GetEncoding (opaque_clang_qual_type, count);
+
+        if (encoding == lldb::eEncodingInvalid || count != 1)
+            return false;
+
+        uint64_t bit_width = ast_context->getTypeSize(qual_type);
+        uint32_t byte_size = (bit_width + 7 ) / 8;
+        uint32_t offset = data_byte_offset;
+        switch (encoding)
+        {
+        case lldb::eEncodingUint:
+            if (byte_size <= sizeof(unsigned long long))
+            {
+                uint64_t uval64 = data.GetMaxU64 (&offset, byte_size);
+                if (byte_size <= sizeof(unsigned int))
+                {
+                    value = (unsigned int)uval64;
+                    return true;
+                }
+                else if (byte_size <= sizeof(unsigned long))
+                {
+                    value = (unsigned long)uval64;
+                    return true;
+                }
+                else if (byte_size <= sizeof(unsigned long long))
+                {
+                    value = (unsigned long long )uval64;
+                    return true;
+                }
+                else
+                    value.Clear();
+            }
+            break;
+
+        case lldb::eEncodingSint:
+            if (byte_size <= sizeof(long long))
+            {
+                int64_t sval64 = (int64_t)data.GetMaxU64 (&offset, byte_size);
+                if (byte_size <= sizeof(int))
+                {
+                    value = (int)sval64;
+                    return true;
+                }
+                else if (byte_size <= sizeof(long))
+                {
+                    value = (long)sval64;
+                    return true;
+                }
+                else if (byte_size <= sizeof(long long))
+                {
+                    value = (long long )sval64;
+                    return true;
+                }
+                else
+                    value.Clear();
+            }
+            break;
+
+        case lldb::eEncodingIEEE754:
+            if (byte_size <= sizeof(long double))
+            {
+                uint32_t u32;
+                uint64_t u64;
+                if (byte_size == sizeof(float))
+                {
+                    if (sizeof(float) == sizeof(uint32_t))
+                    {
+                        u32 = data.GetU32(&offset);
+                        value = *((float *)&u32);
+                        return true;
+                    }
+                    else if (sizeof(float) == sizeof(uint64_t))
+                    {
+                        u64 = data.GetU64(&offset);
+                        value = *((float *)&u64);
+                        return true;
+                    }
+                }
+                else
+                if (byte_size == sizeof(double))
+                {
+                    if (sizeof(double) == sizeof(uint32_t))
+                    {
+                        u32 = data.GetU32(&offset);
+                        value = *((double *)&u32);
+                        return true;
+                    }
+                    else if (sizeof(double) == sizeof(uint64_t))
+                    {
+                        u64 = data.GetU64(&offset);
+                        value = *((double *)&u64);
+                        return true;
+                    }
+                }
+                else
+                if (byte_size == sizeof(long double))
+                {
+                    if (sizeof(long double) == sizeof(uint32_t))
+                    {
+                        u32 = data.GetU32(&offset);
+                        value = *((long double *)&u32);
+                        return true;
+                    }
+                    else if (sizeof(long double) == sizeof(uint64_t))
+                    {
+                        u64 = data.GetU64(&offset);
+                        value = *((long double *)&u64);
+                        return true;
+                    }
+                }
+            }
+            break;
+        }
+    }
+    return false;
+}
+
+bool
+ClangASTType::SetValueFromScalar (const Scalar &value, Stream &strm)
+{
+    return SetValueFromScalar (m_ast, m_type, value, strm);
+}
+
+bool
+ClangASTType::SetValueFromScalar
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    const Scalar &value,
+    Stream &strm
+)
+{
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+    // Aggregate types don't have scalar values
+    if (!ClangASTContext::IsAggregateType (opaque_clang_qual_type))
+    {
+        strm.GetFlags().Set(Stream::eBinary);
+        uint32_t count = 0;
+        lldb::Encoding encoding = GetEncoding (opaque_clang_qual_type, count);
+
+        if (encoding == lldb::eEncodingInvalid || count != 1)
+            return false;
+
+        uint64_t bit_width = ast_context->getTypeSize(qual_type);
+        // This function doesn't currently handle non-byte aligned assignments
+        if ((bit_width % 8) != 0)
+            return false;
+
+        uint32_t byte_size = (bit_width + 7 ) / 8;
+        switch (encoding)
+        {
+        case lldb::eEncodingUint:
+            switch (byte_size)
+            {
+            case 1: strm.PutHex8(value.UInt()); return true;
+            case 2: strm.PutHex16(value.UInt()); return true;
+            case 4: strm.PutHex32(value.UInt()); return true;
+            case 8: strm.PutHex64(value.ULongLong()); return true;
+            default:
+                break;
+            }
+            break;
+
+        case lldb::eEncodingSint:
+            switch (byte_size)
+            {
+            case 1: strm.PutHex8(value.SInt()); return true;
+            case 2: strm.PutHex16(value.SInt()); return true;
+            case 4: strm.PutHex32(value.SInt()); return true;
+            case 8: strm.PutHex64(value.SLongLong()); return true;
+            default:
+                break;
+            }
+            break;
+
+        case lldb::eEncodingIEEE754:
+            if (byte_size <= sizeof(long double))
+            {
+                if (byte_size == sizeof(float))
+                {
+                    strm.PutFloat(value.Float());
+                    return true;
+                }
+                else
+                if (byte_size == sizeof(double))
+                {
+                    strm.PutDouble(value.Double());
+                    return true;
+                }
+                else
+                if (byte_size == sizeof(long double))
+                {
+                    strm.PutDouble(value.LongDouble());
+                    return true;
+                }
+            }
+            break;
+        }
+    }
+    return false;
+}
+
+bool
+ClangASTType::ReadFromMemory
+(
+    lldb_private::ExecutionContext *exe_ctx,
+    lldb::addr_t addr,
+    lldb::AddressType address_type,
+    lldb_private::DataExtractor &data
+)
+{
+    return ReadFromMemory (m_ast,
+                           m_type,
+                           exe_ctx, 
+                           addr,
+                           address_type,
+                           data);
+}
+
+
+bool
+ClangASTType::ReadFromMemory
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    lldb_private::ExecutionContext *exe_ctx,
+    lldb::addr_t addr,
+    lldb::AddressType address_type,
+    lldb_private::DataExtractor &data
+)
+{
+    if (address_type == lldb::eAddressTypeFile)
+    {
+        // Can't convert a file address to anything valid without more
+        // context (which Module it came from)
+        return false;
+    }
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+
+    const uint32_t byte_size = (ast_context->getTypeSize (qual_type) + 7) / 8;
+    if (data.GetByteSize() < byte_size)
+    {
+        lldb::DataBufferSP data_sp(new DataBufferHeap (byte_size, '\0'));
+        data.SetData(data_sp);
+    }
+
+    uint8_t* dst = (uint8_t*)data.PeekData(0, byte_size);
+    if (dst != NULL)
+    {
+        if (address_type == lldb::eAddressTypeHost)
+        {
+            // The address is an address in this process, so just copy it
+            memcpy (dst, (uint8_t*)NULL + addr, byte_size);
+            return true;
+        }
+        else
+        {
+            if (exe_ctx && exe_ctx->process)
+            {
+                Error error;
+                return exe_ctx->process->ReadMemory(addr, dst, byte_size, error) == byte_size;
+            }
+        }
+    }
+    return false;
+}
+
+bool
+ClangASTType::WriteToMemory
+(
+    lldb_private::ExecutionContext *exe_ctx,
+    lldb::addr_t addr,
+    lldb::AddressType address_type,
+    StreamString &new_value
+)
+{
+    return WriteToMemory (m_ast,
+                          m_type,
+                          exe_ctx,
+                          addr,
+                          address_type,
+                          new_value);
+}
+
+bool
+ClangASTType::WriteToMemory
+(
+    clang::ASTContext *ast_context,
+    void *opaque_clang_qual_type,
+    lldb_private::ExecutionContext *exe_ctx,
+    lldb::addr_t addr,
+    lldb::AddressType address_type,
+    StreamString &new_value
+)
+{
+    if (address_type == lldb::eAddressTypeFile)
+    {
+        // Can't convert a file address to anything valid without more
+        // context (which Module it came from)
+        return false;
+    }
+    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(opaque_clang_qual_type));
+    const uint32_t byte_size = (ast_context->getTypeSize (qual_type) + 7) / 8;
+
+    if (byte_size > 0)
+    {
+        if (address_type == lldb::eAddressTypeHost)
+        {
+            // The address is an address in this process, so just copy it
+            memcpy ((void *)addr, new_value.GetData(), byte_size);
+            return true;
+        }
+        else
+        {
+            if (exe_ctx && exe_ctx->process)
+            {
+                Error error;
+                return exe_ctx->process->WriteMemory(addr, new_value.GetData(), byte_size, error) == byte_size;
+            }
+        }
+    }
+    return false;
+}
+
+

Modified: lldb/trunk/source/Symbol/Function.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Function.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/Function.cpp (original)
+++ lldb/trunk/source/Symbol/Function.cpp Wed Jul 21 17:12:05 2010
@@ -10,10 +10,11 @@
 #include "lldb/Symbol/Function.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/Section.h"
+#include "lldb/Symbol/ClangASTType.h"
+#include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/CompileUnit.h"
 #include "lldb/Symbol/LineTable.h"
 #include "lldb/Symbol/SymbolVendor.h"
-#include "lldb/Symbol/ClangASTContext.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/CanonicalType.h"
 
@@ -339,7 +340,7 @@
     clang::FunctionType *function_type = dyn_cast<clang::FunctionType> (clang_type);
     clang::QualType fun_return_qualtype = function_type->getResultType();
 
-    const ConstString fun_return_name(Type::GetClangTypeName(fun_return_qualtype.getAsOpaquePtr()));
+    const ConstString fun_return_name(ClangASTType::GetClangTypeName(fun_return_qualtype.getAsOpaquePtr()));
 
     SymbolContext sc;
     CalculateSymbolContext (&sc);
@@ -381,7 +382,7 @@
             return Type();
         clang::QualType arg_qualtype = (function_proto_type->arg_type_begin())[idx];
 
-        const ConstString arg_return_name(Type::GetClangTypeName(arg_qualtype.getAsOpaquePtr()));
+        const ConstString arg_return_name(ClangASTType::GetClangTypeName(arg_qualtype.getAsOpaquePtr()));
         SymbolContext sc;
         CalculateSymbolContext (&sc);
         // Null out everything below the CompUnit 'cause we don't actually know these.

Modified: lldb/trunk/source/Symbol/Type.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Type.cpp?rev=109046&r1=109045&r2=109046&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/Type.cpp (original)
+++ lldb/trunk/source/Symbol/Type.cpp Wed Jul 21 17:12:05 2010
@@ -30,6 +30,7 @@
 #include "lldb/Core/Scalar.h"
 #include "lldb/Core/StreamString.h"
 
+#include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/ObjectFile.h"
 #include "lldb/Symbol/SymbolContextScope.h"
@@ -270,59 +271,6 @@
     return m_name;
 }
 
-int
-lldb_private::Type::DumpClangTypeName(Stream *s, void *clang_type)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-    std::string type_name;
-    const clang::TypedefType *typedef_type = qual_type->getAs<clang::TypedefType>();
-    if (typedef_type)
-    {
-        const clang::TypedefDecl *typedef_decl = typedef_type->getDecl();
-        type_name = typedef_decl->getQualifiedNameAsString();
-    }
-    else
-    {
-        type_name = qual_type.getAsString();
-    }
-    if (!type_name.empty())
-        return s->Printf("(%s) ", type_name.c_str());
-    return 0;
-}
-
-lldb_private::ConstString
-lldb_private::Type::GetClangTypeName (void *clang_type)
-{
-    ConstString clang_type_name;
-    if (clang_type)
-    {
-        clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-        const clang::TypedefType *typedef_type = qual_type->getAs<clang::TypedefType>();
-        if (typedef_type)
-        {
-            const clang::TypedefDecl *typedef_decl = typedef_type->getDecl();
-            std::string clang_typedef_name (typedef_decl->getQualifiedNameAsString());
-            if (!clang_typedef_name.empty())
-                clang_type_name.SetCString (clang_typedef_name.c_str());
-        }
-        else
-        {
-            std::string type_name(qual_type.getAsString());
-            if (!type_name.empty())
-                clang_type_name.SetCString (type_name.c_str());
-        }
-    }
-    else
-    {
-        clang_type_name.SetCString ("<invalid>");
-    }
-
-    return clang_type_name;
-}
-
-
-
 void
 lldb_private::Type::DumpTypeName(Stream *s)
 {
@@ -354,658 +302,23 @@
             s->PutCString(") ");
         }
 
-        lldb_private::Type::DumpValue (exe_ctx,
-                                       GetClangAST (),
-                                       m_clang_qual_type,
-                                       s,
-                                       format == lldb::eFormatDefault ? GetFormat() : format,
-                                       data,
-                                       data_byte_offset,
-                                       GetByteSize(),
-                                       0, // Bitfield bit size
-                                       0, // Bitfield bit offset
-                                       show_types,
-                                       show_summary,
-                                       verbose,
-                                       0);
-    }
-}
-
-
-void
-lldb_private::Type::DumpSummary
-(
-    ExecutionContext *exe_ctx,
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    Stream *s,
-    const lldb_private::DataExtractor &data,
-    uint32_t data_byte_offset,
-    size_t data_byte_size
-)
-{
-    uint32_t length = 0;
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-    if (ClangASTContext::IsCStringType (clang_type, length))
-    {
-
-        if (exe_ctx && exe_ctx->process)
-        {
-            uint32_t offset = data_byte_offset;
-            lldb::addr_t pointer_addresss = data.GetMaxU64(&offset, data_byte_size);
-            std::vector<uint8_t> buf;
-            if (length > 0)
-                buf.resize (length);
-            else
-                buf.resize (256);
-
-            lldb_private::DataExtractor cstr_data(&buf.front(), buf.size(), exe_ctx->process->GetByteOrder(), 4);
-            buf.back() = '\0';
-            size_t bytes_read;
-            size_t total_cstr_len = 0;
-            Error error;
-            while ((bytes_read = exe_ctx->process->ReadMemory (pointer_addresss, &buf.front(), buf.size(), error)) > 0)
-            {
-                const size_t len = strlen((const char *)&buf.front());
-                if (len == 0)
-                    break;
-                if (total_cstr_len == 0)
-                    s->PutCString (" \"");
-                cstr_data.Dump(s, 0, lldb::eFormatChar, 1, len, UINT32_MAX, LLDB_INVALID_ADDRESS, 0, 0);
-                total_cstr_len += len;
-                if (len < buf.size())
-                    break;
-                pointer_addresss += total_cstr_len;
-            }
-            if (total_cstr_len > 0)
-                s->PutChar ('"');
-        }
-    }
-}
-
-#define DEPTH_INCREMENT 2
-void
-lldb_private::Type::DumpValue
-(
-    ExecutionContext *exe_ctx,
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    Stream *s,
-    lldb::Format format,
-    const lldb_private::DataExtractor &data,
-    uint32_t data_byte_offset,
-    size_t data_byte_size,
-    uint32_t bitfield_bit_size,
-    uint32_t bitfield_bit_offset,
-    bool show_types,
-    bool show_summary,
-    bool verbose,
-    uint32_t depth
-)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-    switch (qual_type->getTypeClass())
-    {
-    case clang::Type::Record:
-        {
-            const clang::RecordType *record_type = cast<clang::RecordType>(qual_type.getTypePtr());
-            const clang::RecordDecl *record_decl = record_type->getDecl();
-            assert(record_decl);
-            uint32_t field_bit_offset = 0;
-            uint32_t field_byte_offset = 0;
-            const clang::ASTRecordLayout &record_layout = ast_context->getASTRecordLayout(record_decl);
-            uint32_t child_idx = 0;
-
-
-            const clang::CXXRecordDecl *cxx_record_decl = dyn_cast<clang::CXXRecordDecl>(record_decl);
-            if (cxx_record_decl)
-            {
-                // We might have base classes to print out first
-                clang::CXXRecordDecl::base_class_const_iterator base_class, base_class_end;
-                for (base_class = cxx_record_decl->bases_begin(), base_class_end = cxx_record_decl->bases_end();
-                     base_class != base_class_end;
-                     ++base_class)
-                {
-                    const clang::CXXRecordDecl *base_class_decl = cast<clang::CXXRecordDecl>(base_class->getType()->getAs<clang::RecordType>()->getDecl());
-
-                    // Skip empty base classes
-                    if (verbose == false && ClangASTContext::RecordHasFields(base_class_decl) == false)
-                        continue;
-
-                    if (base_class->isVirtual())
-                        field_bit_offset = record_layout.getVBaseClassOffset(base_class_decl);
-                    else
-                        field_bit_offset = record_layout.getBaseClassOffset(base_class_decl);
-                    field_byte_offset = field_bit_offset / 8;
-                    assert (field_bit_offset % 8 == 0);
-                    if (child_idx == 0)
-                        s->PutChar('{');
-                    else
-                        s->PutChar(',');
-
-                    clang::QualType base_class_qual_type = base_class->getType();
-                    std::string base_class_type_name(base_class_qual_type.getAsString());
-
-                    // Indent and print the base class type name
-                    s->Printf("\n%*s%s ", depth + DEPTH_INCREMENT, "", base_class_type_name.c_str());
-
-                    std::pair<uint64_t, unsigned> base_class_type_info = ast_context->getTypeInfo(base_class_qual_type);
-
-                    // Dump the value of the member
-                    Type::DumpValue (
-                        exe_ctx,
-                        ast_context,                        // The clang AST context for this type
-                        base_class_qual_type.getAsOpaquePtr(),// The clang type we want to dump
-                        s,                                  // Stream to dump to
-                        Type::GetFormat(base_class_qual_type.getAsOpaquePtr()), // The format with which to display the member
-                        data,                               // Data buffer containing all bytes for this type
-                        data_byte_offset + field_byte_offset,// Offset into "data" where to grab value from
-                        base_class_type_info.first / 8,     // Size of this type in bytes
-                        0,                                  // Bitfield bit size
-                        0,                                  // Bitfield bit offset
-                        show_types,                         // Boolean indicating if we should show the variable types
-                        show_summary,                       // Boolean indicating if we should show a summary for the current type
-                        verbose,                            // Verbose output?
-                        depth + DEPTH_INCREMENT);           // Scope depth for any types that have children
-
-                    ++child_idx;
-                }
-            }
-            uint32_t field_idx = 0;
-            clang::RecordDecl::field_iterator field, field_end;
-            for (field = record_decl->field_begin(), field_end = record_decl->field_end(); field != field_end; ++field, ++field_idx, ++child_idx)
-            {
-                // Print the starting squiggly bracket (if this is the
-                // first member) or comman (for member 2 and beyong) for
-                // the struct/union/class member.
-                if (child_idx == 0)
-                    s->PutChar('{');
-                else
-                    s->PutChar(',');
-
-                // Indent
-                s->Printf("\n%*s", depth + DEPTH_INCREMENT, "");
-
-                clang::QualType field_type = field->getType();
-                // Print the member type if requested
-                // Figure out the type byte size (field_type_info.first) and
-                // alignment (field_type_info.second) from the AST context.
-                std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(field_type);
-                assert(field_idx < record_layout.getFieldCount());
-                // Figure out the field offset within the current struct/union/class type
-                field_bit_offset = record_layout.getFieldOffset (field_idx);
-                field_byte_offset = field_bit_offset / 8;
-                uint32_t field_bitfield_bit_size = 0;
-                uint32_t field_bitfield_bit_offset = 0;
-                if (ClangASTContext::FieldIsBitfield (ast_context, *field, field_bitfield_bit_size))
-                    field_bitfield_bit_offset = field_bit_offset % 8;
-
-                if (show_types)
-                {
-                    std::string field_type_name(field_type.getAsString());
-                    if (field_bitfield_bit_size > 0)
-                        s->Printf("(%s:%u) ", field_type_name.c_str(), field_bitfield_bit_size);
-                    else
-                        s->Printf("(%s) ", field_type_name.c_str());
-                }
-                // Print the member name and equal sign
-                s->Printf("%s = ", field->getNameAsString().c_str());
-
-
-                // Dump the value of the member
-                Type::DumpValue (
-                    exe_ctx,
-                    ast_context,                    // The clang AST context for this type
-                    field_type.getAsOpaquePtr(),    // The clang type we want to dump
-                    s,                              // Stream to dump to
-                    Type::GetFormat(field_type.getAsOpaquePtr()),   // The format with which to display the member
-                    data,                           // Data buffer containing all bytes for this type
-                    data_byte_offset + field_byte_offset,// Offset into "data" where to grab value from
-                    field_type_info.first / 8,      // Size of this type in bytes
-                    field_bitfield_bit_size,        // Bitfield bit size
-                    field_bitfield_bit_offset,      // Bitfield bit offset
-                    show_types,                     // Boolean indicating if we should show the variable types
-                    show_summary,                   // Boolean indicating if we should show a summary for the current type
-                    verbose,                        // Verbose output?
-                    depth + DEPTH_INCREMENT);       // Scope depth for any types that have children
-            }
-
-            // Indent the trailing squiggly bracket
-            if (child_idx > 0)
-                s->Printf("\n%*s}", depth, "");
-        }
-        return;
-
-    case clang::Type::Enum:
-        {
-            const clang::EnumType *enum_type = cast<clang::EnumType>(qual_type.getTypePtr());
-            const clang::EnumDecl *enum_decl = enum_type->getDecl();
-            assert(enum_decl);
-            clang::EnumDecl::enumerator_iterator enum_pos, enum_end_pos;
-            uint32_t offset = data_byte_offset;
-            const int64_t enum_value = data.GetMaxU64Bitfield(&offset, data_byte_size, bitfield_bit_size, bitfield_bit_offset);
-            for (enum_pos = enum_decl->enumerator_begin(), enum_end_pos = enum_decl->enumerator_end(); enum_pos != enum_end_pos; ++enum_pos)
-            {
-                if (enum_pos->getInitVal() == enum_value)
-                {
-                    s->Printf("%s", enum_pos->getNameAsCString());
-                    return;
-                }
-            }
-            // If we have gotten here we didn't get find the enumerator in the
-            // enum decl, so just print the integer.
-            s->Printf("%lli", enum_value);
-        }
-        return;
-
-    case clang::Type::ConstantArray:
-        {
-            const clang::ConstantArrayType *array = cast<clang::ConstantArrayType>(qual_type.getTypePtr());
-            bool is_array_of_characters = false;
-            clang::QualType element_qual_type = array->getElementType();
-
-            clang::Type *canonical_type = element_qual_type->getCanonicalTypeInternal().getTypePtr();
-            if (canonical_type)
-                is_array_of_characters = canonical_type->isCharType();
-
-            const uint64_t element_count = array->getSize().getLimitedValue();
-
-            std::pair<uint64_t, unsigned> field_type_info = ast_context->getTypeInfo(element_qual_type);
-
-            uint32_t element_idx = 0;
-            uint32_t element_offset = 0;
-            uint64_t element_byte_size = field_type_info.first / 8;
-            uint32_t element_stride = element_byte_size;
-
-            if (is_array_of_characters)
-            {
-                s->PutChar('"');
-                data.Dump(s, data_byte_offset, lldb::eFormatChar, element_byte_size, element_count, UINT32_MAX, LLDB_INVALID_ADDRESS, 0, 0);
-                s->PutChar('"');
-                return;
-            }
-            else
-            {
-                lldb::Format element_format = Type::GetFormat(element_qual_type.getAsOpaquePtr());
-
-                for (element_idx = 0; element_idx < element_count; ++element_idx)
-                {
-                    // Print the starting squiggly bracket (if this is the
-                    // first member) or comman (for member 2 and beyong) for
-                    // the struct/union/class member.
-                    if (element_idx == 0)
-                        s->PutChar('{');
-                    else
-                        s->PutChar(',');
-
-                    // Indent and print the index
-                    s->Printf("\n%*s[%u] ", depth + DEPTH_INCREMENT, "", element_idx);
-
-                    // Figure out the field offset within the current struct/union/class type
-                    element_offset = element_idx * element_stride;
-
-                    // Dump the value of the member
-                    Type::DumpValue (
-                        exe_ctx,
-                        ast_context,                    // The clang AST context for this type
-                        element_qual_type.getAsOpaquePtr(), // The clang type we want to dump
-                        s,                              // Stream to dump to
-                        element_format,                 // The format with which to display the element
-                        data,                           // Data buffer containing all bytes for this type
-                        data_byte_offset + element_offset,// Offset into "data" where to grab value from
-                        element_byte_size,              // Size of this type in bytes
-                        0,                              // Bitfield bit size
-                        0,                              // Bitfield bit offset
-                        show_types,                     // Boolean indicating if we should show the variable types
-                        show_summary,                   // Boolean indicating if we should show a summary for the current type
-                        verbose,                        // Verbose output?
-                        depth + DEPTH_INCREMENT);       // Scope depth for any types that have children
-                }
-
-                // Indent the trailing squiggly bracket
-                if (element_idx > 0)
-                    s->Printf("\n%*s}", depth, "");
-            }
-        }
-        return;
-
-    case clang::Type::Typedef:
-        {
-            clang::QualType typedef_qual_type = cast<clang::TypedefType>(qual_type)->LookThroughTypedefs();
-            lldb::Format typedef_format = lldb_private::Type::GetFormat(typedef_qual_type.getAsOpaquePtr());
-            std::pair<uint64_t, unsigned> typedef_type_info = ast_context->getTypeInfo(typedef_qual_type);
-            uint64_t typedef_byte_size = typedef_type_info.first / 8;
-
-            return Type::DumpValue(
-                        exe_ctx,
-                        ast_context,        // The clang AST context for this type
-                        typedef_qual_type.getAsOpaquePtr(), // The clang type we want to dump
-                        s,                  // Stream to dump to
-                        typedef_format,     // The format with which to display the element
-                        data,               // Data buffer containing all bytes for this type
-                        data_byte_offset,   // Offset into "data" where to grab value from
-                        typedef_byte_size,  // Size of this type in bytes
-                        bitfield_bit_size,  // Bitfield bit size
-                        bitfield_bit_offset,// Bitfield bit offset
-                        show_types,         // Boolean indicating if we should show the variable types
-                        show_summary,       // Boolean indicating if we should show a summary for the current type
-                        verbose,            // Verbose output?
-                        depth);             // Scope depth for any types that have children
-        }
-        break;
-
-    default:
-        // We are down the a scalar type that we just need to display.
-        data.Dump(s, data_byte_offset, format, data_byte_size, 1, UINT32_MAX, LLDB_INVALID_ADDRESS, bitfield_bit_size, bitfield_bit_offset);
-
-        if (show_summary)
-            Type::DumpSummary (exe_ctx, ast_context, clang_type, s, data, data_byte_offset, data_byte_size);
-        break;
-    }
-}
-
-bool
-lldb_private::Type::DumpTypeValue
-(
-    Stream *s,
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    lldb::Format format,
-    const lldb_private::DataExtractor &data,
-    uint32_t byte_offset,
-    size_t byte_size,
-    uint32_t bitfield_bit_size,
-    uint32_t bitfield_bit_offset
-)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-    if (ClangASTContext::IsAggregateType (clang_type))
-    {
-        return 0;
-    }
-    else
-    {
-        switch (qual_type->getTypeClass())
-        {
-        case clang::Type::Enum:
-            {
-                const clang::EnumType *enum_type = cast<clang::EnumType>(qual_type.getTypePtr());
-                const clang::EnumDecl *enum_decl = enum_type->getDecl();
-                assert(enum_decl);
-                clang::EnumDecl::enumerator_iterator enum_pos, enum_end_pos;
-                uint32_t offset = byte_offset;
-                const int64_t enum_value = data.GetMaxU64Bitfield (&offset, byte_size, bitfield_bit_size, bitfield_bit_offset);
-                for (enum_pos = enum_decl->enumerator_begin(), enum_end_pos = enum_decl->enumerator_end(); enum_pos != enum_end_pos; ++enum_pos)
-                {
-                    if (enum_pos->getInitVal() == enum_value)
-                    {
-                        s->PutCString (enum_pos->getNameAsCString());
-                        return true;
-                    }
-                }
-                // If we have gotten here we didn't get find the enumerator in the
-                // enum decl, so just print the integer.
-
-                s->Printf("%lli", enum_value);
-                return true;
-            }
-            break;
-
-        case clang::Type::Typedef:
-            {
-                clang::QualType typedef_qual_type = cast<clang::TypedefType>(qual_type)->LookThroughTypedefs();
-                lldb::Format typedef_format = Type::GetFormat(typedef_qual_type.getAsOpaquePtr());
-                std::pair<uint64_t, unsigned> typedef_type_info = ast_context->getTypeInfo(typedef_qual_type);
-                uint64_t typedef_byte_size = typedef_type_info.first / 8;
-
-                return Type::DumpTypeValue(
-                            s,
-                            ast_context,            // The clang AST context for this type
-                            typedef_qual_type.getAsOpaquePtr(),     // The clang type we want to dump
-                            typedef_format,         // The format with which to display the element
-                            data,                   // Data buffer containing all bytes for this type
-                            byte_offset,            // Offset into "data" where to grab value from
-                            typedef_byte_size,      // Size of this type in bytes
-                            bitfield_bit_size,      // Size in bits of a bitfield value, if zero don't treat as a bitfield
-                            bitfield_bit_offset);   // Offset in bits of a bitfield value if bitfield_bit_size != 0
-            }
-            break;
-
-        default:
-            // We are down the a scalar type that we just need to display.
-            return data.Dump(s,
-                             byte_offset,
-                             format,
-                             byte_size,
-                             1,
-                             UINT32_MAX,
-                             LLDB_INVALID_ADDRESS,
-                             bitfield_bit_size,
-                             bitfield_bit_offset);
-            break;
-        }
-    }
-    return 0;
-}
-
-bool
-lldb_private::Type::GetValueAsScalar
-(
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    const lldb_private::DataExtractor &data,
-    uint32_t data_byte_offset,
-    size_t data_byte_size,
-    Scalar &value
-)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-    if (ClangASTContext::IsAggregateType (clang_type))
-    {
-        return false;   // Aggregate types don't have scalar values
-    }
-    else
-    {
-        uint32_t count = 0;
-        lldb::Encoding encoding = Type::GetEncoding (clang_type, count);
-
-        if (encoding == lldb::eEncodingInvalid || count != 1)
-            return false;
-
-        uint64_t bit_width = ast_context->getTypeSize(qual_type);
-        uint32_t byte_size = (bit_width + 7 ) / 8;
-        uint32_t offset = data_byte_offset;
-        switch (encoding)
-        {
-        case lldb::eEncodingUint:
-            if (byte_size <= sizeof(unsigned long long))
-            {
-                uint64_t uval64 = data.GetMaxU64 (&offset, byte_size);
-                if (byte_size <= sizeof(unsigned int))
-                {
-                    value = (unsigned int)uval64;
-                    return true;
-                }
-                else if (byte_size <= sizeof(unsigned long))
-                {
-                    value = (unsigned long)uval64;
-                    return true;
-                }
-                else if (byte_size <= sizeof(unsigned long long))
-                {
-                    value = (unsigned long long )uval64;
-                    return true;
-                }
-                else
-                    value.Clear();
-            }
-            break;
-
-        case lldb::eEncodingSint:
-            if (byte_size <= sizeof(long long))
-            {
-                int64_t sval64 = (int64_t)data.GetMaxU64 (&offset, byte_size);
-                if (byte_size <= sizeof(int))
-                {
-                    value = (int)sval64;
-                    return true;
-                }
-                else if (byte_size <= sizeof(long))
-                {
-                    value = (long)sval64;
-                    return true;
-                }
-                else if (byte_size <= sizeof(long long))
-                {
-                    value = (long long )sval64;
-                    return true;
-                }
-                else
-                    value.Clear();
-            }
-            break;
-
-        case lldb::eEncodingIEEE754:
-            if (byte_size <= sizeof(long double))
-            {
-                uint32_t u32;
-                uint64_t u64;
-                if (byte_size == sizeof(float))
-                {
-                    if (sizeof(float) == sizeof(uint32_t))
-                    {
-                        u32 = data.GetU32(&offset);
-                        value = *((float *)&u32);
-                        return true;
-                    }
-                    else if (sizeof(float) == sizeof(uint64_t))
-                    {
-                        u64 = data.GetU64(&offset);
-                        value = *((float *)&u64);
-                        return true;
-                    }
-                }
-                else
-                if (byte_size == sizeof(double))
-                {
-                    if (sizeof(double) == sizeof(uint32_t))
-                    {
-                        u32 = data.GetU32(&offset);
-                        value = *((double *)&u32);
-                        return true;
-                    }
-                    else if (sizeof(double) == sizeof(uint64_t))
-                    {
-                        u64 = data.GetU64(&offset);
-                        value = *((double *)&u64);
-                        return true;
-                    }
-                }
-                else
-                if (byte_size == sizeof(long double))
-                {
-                    if (sizeof(long double) == sizeof(uint32_t))
-                    {
-                        u32 = data.GetU32(&offset);
-                        value = *((long double *)&u32);
-                        return true;
-                    }
-                    else if (sizeof(long double) == sizeof(uint64_t))
-                    {
-                        u64 = data.GetU64(&offset);
-                        value = *((long double *)&u64);
-                        return true;
-                    }
-                }
-            }
-            break;
-        }
-    }
-    return false;
-}
-
-bool
-lldb_private::Type::SetValueFromScalar
-(
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    const Scalar &value,
-    Stream &strm
-)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-    // Aggregate types don't have scalar values
-    if (!ClangASTContext::IsAggregateType (clang_type))
-    {
-        strm.GetFlags().Set(Stream::eBinary);
-        uint32_t count = 0;
-        lldb::Encoding encoding = Type::GetEncoding (clang_type, count);
-
-        if (encoding == lldb::eEncodingInvalid || count != 1)
-            return false;
-
-        uint64_t bit_width = ast_context->getTypeSize(qual_type);
-        // This function doesn't currently handle non-byte aligned assignments
-        if ((bit_width % 8) != 0)
-            return false;
-
-        uint32_t byte_size = (bit_width + 7 ) / 8;
-        switch (encoding)
-        {
-        case lldb::eEncodingUint:
-            switch (byte_size)
-            {
-            case 1: strm.PutHex8(value.UInt()); return true;
-            case 2: strm.PutHex16(value.UInt()); return true;
-            case 4: strm.PutHex32(value.UInt()); return true;
-            case 8: strm.PutHex64(value.ULongLong()); return true;
-            default:
-                break;
-            }
-            break;
-
-        case lldb::eEncodingSint:
-            switch (byte_size)
-            {
-            case 1: strm.PutHex8(value.SInt()); return true;
-            case 2: strm.PutHex16(value.SInt()); return true;
-            case 4: strm.PutHex32(value.SInt()); return true;
-            case 8: strm.PutHex64(value.SLongLong()); return true;
-            default:
-                break;
-            }
-            break;
-
-        case lldb::eEncodingIEEE754:
-            if (byte_size <= sizeof(long double))
-            {
-                if (byte_size == sizeof(float))
-                {
-                    strm.PutFloat(value.Float());
-                    return true;
-                }
-                else
-                if (byte_size == sizeof(double))
-                {
-                    strm.PutDouble(value.Double());
-                    return true;
-                }
-                else
-                if (byte_size == sizeof(long double))
-                {
-                    strm.PutDouble(value.LongDouble());
-                    return true;
-                }
-            }
-            break;
-        }
+        lldb_private::ClangASTType::DumpValue (GetClangAST (),
+                                                   m_clang_qual_type,
+                                                   exe_ctx,
+                                                   s,
+                                                   format == lldb::eFormatDefault ? GetFormat() : format,
+                                                   data,
+                                                   data_byte_offset,
+                                                   GetByteSize(),
+                                                   0, // Bitfield bit size
+                                                   0, // Bitfield bit offset
+                                                   show_types,
+                                                   show_summary,
+                                                   verbose,
+                                                   0);
     }
-    return false;
 }
 
-
 uint64_t
 lldb_private::Type::GetByteSize()
 {
@@ -1066,86 +379,10 @@
     // Make sure we resolve our type if it already hasn't been.
     if (!ResolveClangType())
         return lldb::eFormatInvalid;
-    return lldb_private::Type::GetFormat (m_clang_qual_type);
+    return lldb_private::ClangASTType::GetFormat (m_clang_qual_type);
 }
 
 
-lldb::Format
-lldb_private::Type::GetFormat (void *clang_type)
-{
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-    switch (qual_type->getTypeClass())
-    {
-    case clang::Type::FunctionNoProto:
-    case clang::Type::FunctionProto:
-        break;
-
-    case clang::Type::IncompleteArray:
-    case clang::Type::VariableArray:
-        break;
-
-    case clang::Type::ConstantArray:
-        break;
-
-    case clang::Type::ExtVector:
-    case clang::Type::Vector:
-        break;
-
-    case clang::Type::Builtin:
-        switch (cast<clang::BuiltinType>(qual_type)->getKind())
-        {
-        default: assert(0 && "Unknown builtin type!");
-        case clang::BuiltinType::Void:
-            break;
-
-        case clang::BuiltinType::Bool:          return lldb::eFormatBoolean;
-        case clang::BuiltinType::Char_S:
-        case clang::BuiltinType::SChar:
-        case clang::BuiltinType::Char_U:
-        case clang::BuiltinType::UChar:
-        case clang::BuiltinType::WChar:         return lldb::eFormatChar;
-        case clang::BuiltinType::Char16:        return lldb::eFormatUnicode16;
-        case clang::BuiltinType::Char32:        return lldb::eFormatUnicode32;
-        case clang::BuiltinType::UShort:        return lldb::eFormatHex;
-        case clang::BuiltinType::Short:         return lldb::eFormatDecimal;
-        case clang::BuiltinType::UInt:          return lldb::eFormatHex;
-        case clang::BuiltinType::Int:           return lldb::eFormatDecimal;
-        case clang::BuiltinType::ULong:         return lldb::eFormatHex;
-        case clang::BuiltinType::Long:          return lldb::eFormatDecimal;
-        case clang::BuiltinType::ULongLong:     return lldb::eFormatHex;
-        case clang::BuiltinType::LongLong:      return lldb::eFormatDecimal;
-        case clang::BuiltinType::UInt128:       return lldb::eFormatHex;
-        case clang::BuiltinType::Int128:        return lldb::eFormatDecimal;
-        case clang::BuiltinType::Float:         return lldb::eFormatFloat;
-        case clang::BuiltinType::Double:        return lldb::eFormatFloat;
-        case clang::BuiltinType::LongDouble:    return lldb::eFormatFloat;
-        case clang::BuiltinType::NullPtr:       return lldb::eFormatHex;
-        }
-        break;
-    case clang::Type::ObjCObjectPointer:        return lldb::eFormatHex;
-    case clang::Type::BlockPointer:             return lldb::eFormatHex;
-    case clang::Type::Pointer:                  return lldb::eFormatHex;
-    case clang::Type::LValueReference:
-    case clang::Type::RValueReference:          return lldb::eFormatHex;
-    case clang::Type::MemberPointer:            break;
-    case clang::Type::Complex:                  return lldb::eFormatComplex;
-    case clang::Type::ObjCInterface:            break;
-    case clang::Type::Record:                   break;
-    case clang::Type::Enum:                     return lldb::eFormatEnum;
-    case clang::Type::Typedef:
-        return lldb_private::Type::GetFormat(cast<clang::TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr());
-
-    case clang::Type::TypeOfExpr:
-    case clang::Type::TypeOf:
-    case clang::Type::Decltype:
-//    case clang::Type::QualifiedName:
-    case clang::Type::TemplateSpecialization:   break;
-    }
-    // We don't know hot to display this type...
-    return lldb::eFormatBytes;
-}
-
 
 lldb::Encoding
 lldb_private::Type::GetEncoding (uint32_t &count)
@@ -1154,99 +391,10 @@
     if (!ResolveClangType())
         return lldb::eEncodingInvalid;
 
-    return Type::GetEncoding (m_clang_qual_type, count);
+    return lldb_private::ClangASTType::GetEncoding (m_clang_qual_type, count);
 }
 
 
-lldb::Encoding
-lldb_private::Type::GetEncoding (void *clang_type, uint32_t &count)
-{
-    count = 1;
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-    switch (qual_type->getTypeClass())
-    {
-    case clang::Type::FunctionNoProto:
-    case clang::Type::FunctionProto:
-        break;
-
-    case clang::Type::IncompleteArray:
-    case clang::Type::VariableArray:
-        break;
-
-    case clang::Type::ConstantArray:
-        break;
-
-    case clang::Type::ExtVector:
-    case clang::Type::Vector:
-        // TODO: Set this to more than one???
-        break;
-
-    case clang::Type::Builtin:
-        switch (cast<clang::BuiltinType>(qual_type)->getKind())
-        {
-        default: assert(0 && "Unknown builtin type!");
-        case clang::BuiltinType::Void:
-            break;
-
-        case clang::BuiltinType::Bool:
-        case clang::BuiltinType::Char_S:
-        case clang::BuiltinType::SChar:
-        case clang::BuiltinType::WChar:
-        case clang::BuiltinType::Char16:
-        case clang::BuiltinType::Char32:
-        case clang::BuiltinType::Short:
-        case clang::BuiltinType::Int:
-        case clang::BuiltinType::Long:
-        case clang::BuiltinType::LongLong:
-        case clang::BuiltinType::Int128:        return lldb::eEncodingSint;
-
-        case clang::BuiltinType::Char_U:
-        case clang::BuiltinType::UChar:
-        case clang::BuiltinType::UShort:
-        case clang::BuiltinType::UInt:
-        case clang::BuiltinType::ULong:
-        case clang::BuiltinType::ULongLong:
-        case clang::BuiltinType::UInt128:       return lldb::eEncodingUint;
-
-        case clang::BuiltinType::Float:
-        case clang::BuiltinType::Double:
-        case clang::BuiltinType::LongDouble:    return lldb::eEncodingIEEE754;
-
-        case clang::BuiltinType::NullPtr:       return lldb::eEncodingUint;
-        }
-        break;
-    // All pointer types are represented as unsigned integer encodings.
-    // We may nee to add a eEncodingPointer if we ever need to know the
-    // difference
-    case clang::Type::ObjCObjectPointer:
-    case clang::Type::BlockPointer:
-    case clang::Type::Pointer:
-    case clang::Type::LValueReference:
-    case clang::Type::RValueReference:
-    case clang::Type::MemberPointer:            return lldb::eEncodingUint;
-    // Complex numbers are made up of floats
-    case clang::Type::Complex:
-        count = 2;
-        return lldb::eEncodingIEEE754;
-
-    case clang::Type::ObjCInterface:            break;
-    case clang::Type::Record:                   break;
-    case clang::Type::Enum:                     return lldb::eEncodingSint;
-    case clang::Type::Typedef:
-        return Type::GetEncoding(cast<clang::TypedefType>(qual_type)->LookThroughTypedefs().getAsOpaquePtr(), count);
-        break;
-
-    case clang::Type::TypeOfExpr:
-    case clang::Type::TypeOf:
-    case clang::Type::Decltype:
-//    case clang::Type::QualifiedName:
-    case clang::Type::TemplateSpecialization:   break;
-    }
-    count = 0;
-    return lldb::eEncodingInvalid;
-}
-
 
 bool
 lldb_private::Type::DumpValueInMemory
@@ -1273,93 +421,6 @@
     return false;
 }
 
-bool
-lldb_private::Type::ReadFromMemory
-(
-    lldb_private::ExecutionContext *exe_ctx,
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    lldb::addr_t addr,
-    lldb::AddressType address_type,
-    lldb_private::DataExtractor &data
-)
-{
-    if (address_type == lldb::eAddressTypeFile)
-    {
-        // Can't convert a file address to anything valid without more
-        // context (which Module it came from)
-        return false;
-    }
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-
-    const uint32_t byte_size = (ast_context->getTypeSize (qual_type) + 7) / 8;
-    if (data.GetByteSize() < byte_size)
-    {
-        lldb::DataBufferSP data_sp(new DataBufferHeap (byte_size, '\0'));
-        data.SetData(data_sp);
-    }
-
-    uint8_t* dst = (uint8_t*)data.PeekData(0, byte_size);
-    if (dst != NULL)
-    {
-        if (address_type == lldb::eAddressTypeHost)
-        {
-            // The address is an address in this process, so just copy it
-            memcpy (dst, (uint8_t*)NULL + addr, byte_size);
-            return true;
-        }
-        else
-        {
-            if (exe_ctx && exe_ctx->process)
-            {
-                Error error;
-                return exe_ctx->process->ReadMemory(addr, dst, byte_size, error) == byte_size;
-            }
-        }
-    }
-    return false;
-}
-
-bool
-lldb_private::Type::WriteToMemory
-(
-    lldb_private::ExecutionContext *exe_ctx,
-    clang::ASTContext *ast_context,
-    void *clang_type,
-    lldb::addr_t addr,
-    lldb::AddressType address_type,
-    StreamString &new_value
-)
-{
-    if (address_type == lldb::eAddressTypeFile)
-    {
-        // Can't convert a file address to anything valid without more
-        // context (which Module it came from)
-        return false;
-    }
-    clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
-    const uint32_t byte_size = (ast_context->getTypeSize (qual_type) + 7) / 8;
-
-    if (byte_size > 0)
-    {
-        if (address_type == lldb::eAddressTypeHost)
-        {
-            // The address is an address in this process, so just copy it
-            memcpy ((void *)addr, new_value.GetData(), byte_size);
-            return true;
-        }
-        else
-        {
-            if (exe_ctx && exe_ctx->process)
-            {
-                Error error;
-                return exe_ctx->process->WriteMemory(addr, new_value.GetData(), byte_size, error) == byte_size;
-            }
-        }
-    }
-    return false;
-}
-
 
 bool
 lldb_private::Type::ReadFromMemory (lldb_private::ExecutionContext *exe_ctx, lldb::addr_t addr, lldb::AddressType address_type, lldb_private::DataExtractor &data)





More information about the lldb-commits mailing list