Index: include/lldb/API/SBModule.h
===================================================================
--- include/lldb/API/SBModule.h	(revision 182772)
+++ include/lldb/API/SBModule.h	(working copy)
@@ -199,7 +199,9 @@
     
     lldb::SBType
     GetBasicType(lldb::BasicType type);
-    
+
+    lldb::SBTypeList
+    GetAllTypes();
     //------------------------------------------------------------------
     /// Get the module version numbers.
     ///
Index: include/lldb/API/SBType.h
===================================================================
--- include/lldb/API/SBType.h	(revision 182772)
+++ include/lldb/API/SBType.h	(working copy)
@@ -235,6 +235,7 @@
     
 private:
     std::unique_ptr<lldb_private::TypeListImpl> m_opaque_ap;
+    friend class SBModule;
 };
     
 
Index: include/lldb/Symbol/SymbolFile.h
===================================================================
--- include/lldb/Symbol/SymbolFile.h	(revision 182772)
+++ include/lldb/Symbol/SymbolFile.h	(working copy)
@@ -140,6 +140,7 @@
     virtual uint32_t        FindTypes (const SymbolContext& sc, const ConstString &name, const ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, TypeList& types) = 0;
 //  virtual uint32_t        FindTypes (const SymbolContext& sc, const RegularExpression& regex, bool append, uint32_t max_matches, TypeList& types) = 0;
     virtual TypeList *      GetTypeList ();
+    virtual size_t          GetAllTypes(lldb_private::TypeList &type_list);
     virtual ClangASTContext &
                             GetClangASTContext ();
     virtual ClangNamespaceDecl
Index: include/lldb/Symbol/SymbolVendor.h
===================================================================
--- include/lldb/Symbol/SymbolVendor.h	(revision 182772)
+++ include/lldb/Symbol/SymbolVendor.h	(working copy)
@@ -153,6 +153,9 @@
         return m_type_list;
     }
 
+    virtual size_t
+    GetAllTypes(lldb_private::TypeList &type_list);
+
     SymbolFile *
     GetSymbolFile()
     {
Index: include/lldb/Symbol/Type.h
===================================================================
--- include/lldb/Symbol/Type.h	(revision 182772)
+++ include/lldb/Symbol/Type.h	(working copy)
@@ -470,7 +470,28 @@
     {
         m_content.push_back(type);
     }
-    
+
+    class AppendVisitor
+    {
+    public:
+      AppendVisitor(TypeListImpl &type_list)
+      : m_type_list(type_list)
+      {
+      }
+
+      void
+      operator() (const lldb::TypeImplSP& type)
+      {
+        m_type_list.Append(type);
+      }
+
+    private:
+      TypeListImpl &m_type_list;
+    };
+
+    void
+    Append (const lldb_private::TypeList &type_list);
+
     lldb::TypeImplSP
     GetTypeAtIndex(size_t idx)
     {
Index: include/lldb/Symbol/TypeList.h
===================================================================
--- include/lldb/Symbol/TypeList.h	(revision 182772)
+++ include/lldb/Symbol/TypeList.h	(working copy)
@@ -51,6 +51,12 @@
     lldb::TypeSP
     GetTypeAtIndex(uint32_t idx);
 
+    void
+    ForEach (std::function <bool(const lldb::TypeSP &type_sp)> const &callback) const;
+
+    void
+    ForEach (std::function <bool(lldb::TypeSP &type_sp)> const &callback);
+
     bool
     RemoveTypeWithUID (lldb::user_id_t uid);
 
Index: source/API/SBModule.cpp
===================================================================
--- source/API/SBModule.cpp	(revision 182772)
+++ source/API/SBModule.cpp	(working copy)
@@ -561,7 +561,25 @@
     return retval;
 }
 
+lldb::SBTypeList
+SBModule::GetAllTypes()
+{
+  SBTypeList retval;
 
+  ModuleSP module_sp (GetSP ());
+  if (module_sp)
+  {
+    SymbolVendor* vendor = module_sp->GetSymbolVendor();
+    if (vendor)
+    {
+      TypeList type_list;
+      vendor->GetAllTypes(type_list);
+      retval.m_opaque_ap->Append(type_list);
+    }
+  }
+}
+
+
 SBSection
 SBModule::FindSection (const char *sect_name)
 {
Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp	(revision 182772)
+++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp	(working copy)
@@ -236,6 +236,13 @@
 
 }
 
+size_t
+SymbolFileDWARF::GetAllTypes(lldb_private::TypeList &type_list)
+{
+
+}
+
+
 //----------------------------------------------------------------------
 // Gets the first parent that is a lexical block, function or inlined
 // subroutine, or compile unit.
Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
===================================================================
--- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h	(revision 182772)
+++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h	(working copy)
@@ -121,6 +121,9 @@
     virtual uint32_t        FindTypes (const lldb_private::SymbolContext& sc, const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::TypeList& types);
     virtual lldb_private::TypeList *
                             GetTypeList ();
+    virtual size_t
+                            GetAllTypes(lldb_private::TypeList &type_list);
+
     virtual lldb_private::ClangASTContext &
                             GetClangASTContext ();
 
Index: source/Symbol/SymbolFile.cpp
===================================================================
--- source/Symbol/SymbolFile.cpp	(revision 182772)
+++ source/Symbol/SymbolFile.cpp	(working copy)
@@ -66,6 +66,12 @@
     return NULL;
 }
 
+size_t
+SymbolFile::GetAllTypes(lldb_private::TypeList &type_list)
+{
+  return 0;
+}
+
 lldb_private::ClangASTContext &       
 SymbolFile::GetClangASTContext ()
 {
Index: source/Symbol/SymbolVendor.cpp
===================================================================
--- source/Symbol/SymbolVendor.cpp	(revision 182772)
+++ source/Symbol/SymbolVendor.cpp	(working copy)
@@ -352,6 +352,12 @@
     return 0;
 }
 
+size_t
+SymbolVendor::GetAllTypes(lldb_private::TypeList &type_list)
+{
+  return 0;
+}
+
 ClangNamespaceDecl
 SymbolVendor::FindNamespace(const SymbolContext& sc, const ConstString &name, const ClangNamespaceDecl *parent_namespace_decl)
 {
Index: source/Symbol/Type.cpp
===================================================================
--- source/Symbol/Type.cpp	(revision 182772)
+++ source/Symbol/Type.cpp	(working copy)
@@ -33,6 +33,33 @@
 using namespace lldb;
 using namespace lldb_private;
 
+class TypeAppendVisitor
+{
+public:
+  TypeAppendVisitor(TypeListImpl &type_list)
+  : m_type_list(type_list)
+  {
+  }
+
+  bool
+  operator() (const lldb::TypeSP& type)
+  {
+    m_type_list.Append(TypeImplSP(new TypeImpl(type)));
+    return true;
+  }
+
+private:
+  TypeListImpl &m_type_list;
+};
+
+void
+TypeListImpl::Append (const lldb_private::TypeList &type_list)
+{
+  TypeAppendVisitor cb(*this);
+  type_list.ForEach(cb);
+}
+
+
 Type *
 SymbolFileType::GetType ()
 {
Index: source/Symbol/TypeList.cpp
===================================================================
--- source/Symbol/TypeList.cpp	(revision 182772)
+++ source/Symbol/TypeList.cpp	(working copy)
@@ -135,6 +135,25 @@
     return TypeSP();
 }
 
+void
+TypeList::ForEach (std::function <bool(const lldb::TypeSP &type_sp)> const &callback) const
+{
+  for (auto pos = m_types.begin(), end = m_types.end(); pos != end; ++pos)
+  {
+    callback(pos->second);
+  }
+}
+
+void
+TypeList::ForEach (std::function <bool(lldb::TypeSP &type_sp)> const &callback)
+{
+  for (auto pos = m_types.begin(), end = m_types.end(); pos != end; ++pos)
+  {
+    callback(pos->second);
+  }
+}
+
+
 bool
 TypeList::RemoveTypeWithUID (user_id_t uid)
 {

