[Lldb-commits] [lldb] r249769 - Added support for enumerating the languages that actually support TypeSystems

Siva Chandra via lldb-commits lldb-commits at lists.llvm.org
Thu Oct 8 17:50:57 PDT 2015


This breaks 2 tests on linux:

Failing Tests (2)
FAIL: LLDB (suite) :: TestMiBreak.py
FAIL: LLDB (suite) :: TestSettings.py

On Thu, Oct 8, 2015 at 4:07 PM, Sean Callanan via lldb-commits <
lldb-commits at lists.llvm.org> wrote:

> Author: spyffe
> Date: Thu Oct  8 18:07:53 2015
> New Revision: 249769
>
> URL: http://llvm.org/viewvc/llvm-project?rev=249769&view=rev
> Log:
> Added support for enumerating the languages that actually support
> TypeSystems
> and expressions.  Also wired that into the OptionValue infrastructure,
> although
> it isn't used for tab-completion yet.
>
> Modified:
>     lldb/trunk/include/lldb/Core/PluginManager.h
>     lldb/trunk/include/lldb/Symbol/ClangASTContext.h
>     lldb/trunk/include/lldb/Symbol/GoASTContext.h
>     lldb/trunk/include/lldb/Target/Language.h
>     lldb/trunk/include/lldb/lldb-private-interfaces.h
>     lldb/trunk/source/Core/PluginManager.cpp
>     lldb/trunk/source/Interpreter/OptionValueLanguage.cpp
>     lldb/trunk/source/Symbol/ClangASTContext.cpp
>     lldb/trunk/source/Symbol/GoASTContext.cpp
>     lldb/trunk/source/Target/Language.cpp
>
> Modified: lldb/trunk/include/lldb/Core/PluginManager.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/PluginManager.h?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/PluginManager.h (original)
> +++ lldb/trunk/include/lldb/Core/PluginManager.h Thu Oct  8 18:07:53 2015
> @@ -425,7 +425,8 @@ public:
>      static bool
>      RegisterPlugin (const ConstString &name,
>                      const char *description,
> -                    TypeSystemCreateInstance create_callback);
> +                    TypeSystemCreateInstance create_callback,
> +                    TypeSystemEnumerateSupportedLanguages
> enumerate_languages_callback);
>
>      static bool
>      UnregisterPlugin (TypeSystemCreateInstance create_callback);
> @@ -436,6 +437,12 @@ public:
>      static TypeSystemCreateInstance
>      GetTypeSystemCreateCallbackForPluginName (const ConstString &name);
>
> +    static TypeSystemEnumerateSupportedLanguages
> +    GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex (uint32_t
> idx);
> +
> +    static TypeSystemEnumerateSupportedLanguages
> +    GetTypeSystemEnumerateSupportedLanguagesCallbackForPluginName (const
> ConstString &name);
> +
>      //------------------------------------------------------------------
>      // Some plug-ins might register a DebuggerInitializeCallback
>      // callback when registering the plug-in. After a new Debugger
>
> Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)
> +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Thu Oct  8 18:07:53
> 2015
> @@ -72,6 +72,9 @@ public:
>
>      static lldb::TypeSystemSP
>      CreateInstance (lldb::LanguageType language, Module *module, Target
> *target);
> +
> +    static void
> +    EnumerateSupportedLanguages(std::set<lldb::LanguageType>
> &languages_for_types, std::set<lldb::LanguageType>
> &languages_for_expressions);
>
>      static void
>      Initialize ();
>
> Modified: lldb/trunk/include/lldb/Symbol/GoASTContext.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/GoASTContext.h?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/GoASTContext.h (original)
> +++ lldb/trunk/include/lldb/Symbol/GoASTContext.h Thu Oct  8 18:07:53 2015
> @@ -41,6 +41,9 @@ class GoASTContext : public TypeSystem
>
>      static lldb::TypeSystemSP
>      CreateInstance (lldb::LanguageType language, Module *module, Target
> *target);
> +
> +    static void
> +    EnumerateSupportedLanguages(std::set<lldb::LanguageType>
> &languages_for_types, std::set<lldb::LanguageType>
> &languages_for_expressions);
>
>      static void
>      Initialize ();
>
> Modified: lldb/trunk/include/lldb/Target/Language.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Language.h?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Language.h (original)
> +++ lldb/trunk/include/lldb/Target/Language.h Thu Oct  8 18:07:53 2015
> @@ -139,7 +139,11 @@ public:
>
>      static bool
>      LanguageIsPascal (lldb::LanguageType language);
> -
> +
> +    static void
> +    GetLanguagesSupportingTypeSystems (std::set<lldb::LanguageType>
> &languages,
> +                                       std::set<lldb::LanguageType>
> &languages_for_expressions);
> +
>  protected:
>      //------------------------------------------------------------------
>      // Classes that inherit from Language can see and modify these
>
> Modified: lldb/trunk/include/lldb/lldb-private-interfaces.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-interfaces.h?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/lldb-private-interfaces.h (original)
> +++ lldb/trunk/include/lldb/lldb-private-interfaces.h Thu Oct  8 18:07:53
> 2015
> @@ -14,6 +14,8 @@
>
>  #include "lldb/lldb-private.h"
>
> +#include <set>
> +
>  namespace lldb_private
>  {
>      typedef lldb::ABISP (*ABICreateInstance) (const ArchSpec &arch);
> @@ -47,6 +49,7 @@ namespace lldb_private
>      typedef lldb::InstrumentationRuntimeType
> (*InstrumentationRuntimeGetType) ();
>      typedef lldb::InstrumentationRuntimeSP
> (*InstrumentationRuntimeCreateInstance) (const lldb::ProcessSP &process_sp);
>      typedef lldb::TypeSystemSP (*TypeSystemCreateInstance)
> (lldb::LanguageType language, Module *module, Target *target);
> +    typedef void (*TypeSystemEnumerateSupportedLanguages)
> (std::set<lldb::LanguageType> &languages_for_types,
> std::set<lldb::LanguageType> &languages_for_expressions);
>      typedef int (*ComparisonFunction)(const void *, const void *);
>      typedef void (*DebuggerInitializeCallback)(Debugger &debugger);
>
>
> Modified: lldb/trunk/source/Core/PluginManager.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/PluginManager.cpp?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Core/PluginManager.cpp (original)
> +++ lldb/trunk/source/Core/PluginManager.cpp Thu Oct  8 18:07:53 2015
> @@ -2531,6 +2531,7 @@ struct TypeSystemInstance
>      ConstString name;
>      std::string description;
>      TypeSystemCreateInstance create_callback;
> +    TypeSystemEnumerateSupportedLanguages enumerate_callback;
>  };
>
>  typedef std::vector<TypeSystemInstance> TypeSystemInstances;
> @@ -2552,7 +2553,8 @@ GetTypeSystemInstances ()
>  bool
>  PluginManager::RegisterPlugin (const ConstString &name,
>                                 const char *description,
> -                               TypeSystemCreateInstance create_callback)
> +                               TypeSystemCreateInstance create_callback,
> +                               TypeSystemEnumerateSupportedLanguages
> enumerate_supported_languages_callback)
>  {
>      if (create_callback)
>      {
> @@ -2617,6 +2619,33 @@ PluginManager::GetTypeSystemCreateCallba
>      return NULL;
>  }
>
> +TypeSystemEnumerateSupportedLanguages
> +PluginManager::GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex
> (uint32_t idx)
> +{
> +    Mutex::Locker locker (GetTypeSystemMutex ());
> +    TypeSystemInstances &instances = GetTypeSystemInstances ();
> +    if (idx < instances.size())
> +        return instances[idx].enumerate_callback;
> +    return NULL;
> +}
> +
> +TypeSystemEnumerateSupportedLanguages
> +PluginManager::GetTypeSystemEnumerateSupportedLanguagesCallbackForPluginName
> (const ConstString &name)
> +{
> +    if (name)
> +    {
> +        Mutex::Locker locker (GetTypeSystemMutex ());
> +        TypeSystemInstances &instances = GetTypeSystemInstances ();
> +
> +        TypeSystemInstances::iterator pos, end = instances.end();
> +        for (pos = instances.begin(); pos != end; ++ pos)
> +        {
> +            if (name == pos->name)
> +                return pos->enumerate_callback;
> +        }
> +    }
> +    return NULL;
> +}
>
>  #pragma mark PluginManager
>
>
> Modified: lldb/trunk/source/Interpreter/OptionValueLanguage.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueLanguage.cpp?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Interpreter/OptionValueLanguage.cpp (original)
> +++ lldb/trunk/source/Interpreter/OptionValueLanguage.cpp Thu Oct  8
> 18:07:53 2015
> @@ -48,8 +48,12 @@ OptionValueLanguage::SetValueFromString
>      case eVarSetOperationAssign:
>          {
>              ConstString lang_name(value.trim());
> +            std::set<lldb::LanguageType> languages_for_types;
> +            std::set<lldb::LanguageType> languages_for_expressions;
> +
> Language::GetLanguagesSupportingTypeSystems(languages_for_types,
> languages_for_expressions);
> +
>              LanguageType new_type =
> Language::GetLanguageTypeFromString(lang_name.GetCString());
> -            if (new_type)
> +            if (new_type && languages_for_types.count(new_type))
>              {
>                  m_value_was_set = true;
>                  m_current_value = new_type;
> @@ -59,7 +63,10 @@ OptionValueLanguage::SetValueFromString
>                  StreamString error_strm;
>                  error_strm.Printf("invalid language type '%s', ",
> value.str().c_str());
>                  error_strm.Printf("valid values are:\n");
> -                Language::PrintAllLanguages(error_strm, "    ", "\n");
> +                for (lldb::LanguageType language : languages_for_types)
> +                {
> +                    error_strm.Printf("%s%s%s", "    ",
> Language::GetNameForLanguageType(language), "\n");
> +                }
>                  error.SetErrorString(error_strm.GetData());
>              }
>          }
>
> Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
> +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Thu Oct  8 18:07:53 2015
> @@ -13,6 +13,7 @@
>  // C++ Includes
>  #include <mutex> // std::once
>  #include <string>
> +#include <vector>
>
>  // Other libraries and framework includes
>
> @@ -424,13 +425,41 @@ ClangASTContext::CreateInstance (lldb::L
>      return lldb::TypeSystemSP();
>  }
>
> +void
> +ClangASTContext::EnumerateSupportedLanguages(std::set<lldb::LanguageType>
> &languages_for_types, std::set<lldb::LanguageType>
> &languages_for_expressions)
> +{
> +    static std::vector<lldb::LanguageType>
> s_supported_languages_for_types({
> +        lldb::eLanguageTypeC89,
> +        lldb::eLanguageTypeC,
> +        lldb::eLanguageTypeC11,
> +        lldb::eLanguageTypeC_plus_plus,
> +        lldb::eLanguageTypeC99,
> +        lldb::eLanguageTypeObjC,
> +        lldb::eLanguageTypeObjC_plus_plus,
> +        lldb::eLanguageTypeC_plus_plus_03,
> +        lldb::eLanguageTypeC_plus_plus_11,
> +        lldb::eLanguageTypeC11,
> +        lldb::eLanguageTypeC_plus_plus_14});
> +
> +    static std::vector<lldb::LanguageType>
> s_supported_languages_for_expressions({
> +        lldb::eLanguageTypeC_plus_plus,
> +        lldb::eLanguageTypeObjC_plus_plus,
> +        lldb::eLanguageTypeC_plus_plus_03,
> +        lldb::eLanguageTypeC_plus_plus_11,
> +        lldb::eLanguageTypeC_plus_plus_14});
> +
> +    languages_for_types.insert(s_supported_languages_for_types.begin(),
> s_supported_languages_for_types.end());
> +
> languages_for_expressions.insert(s_supported_languages_for_expressions.begin(),
> s_supported_languages_for_expressions.end());
> +}
> +
>
>  void
>  ClangASTContext::Initialize()
>  {
>      PluginManager::RegisterPlugin (GetPluginNameStatic(),
>                                     "clang base AST context plug-in",
> -                                   CreateInstance);
> +                                   CreateInstance,
> +                                   EnumerateSupportedLanguages);
>  }
>
>  void
>
> Modified: lldb/trunk/source/Symbol/GoASTContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/GoASTContext.cpp?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Symbol/GoASTContext.cpp (original)
> +++ lldb/trunk/source/Symbol/GoASTContext.cpp Thu Oct  8 18:07:53 2015
> @@ -342,13 +342,26 @@ GoASTContext::CreateInstance (lldb::Lang
>      return lldb::TypeSystemSP();
>  }
>
> +void
> +GoASTContext::EnumerateSupportedLanguages(std::set<lldb::LanguageType>
> &languages_for_types, std::set<lldb::LanguageType>
> &languages_for_expressions)
> +{
> +    static std::vector<lldb::LanguageType>
> s_supported_languages_for_types({
> +        lldb::eLanguageTypeGo});
> +
> +    static std::vector<lldb::LanguageType>
> s_supported_languages_for_expressions({});
> +
> +    languages_for_types.insert(s_supported_languages_for_types.begin(),
> s_supported_languages_for_types.end());
> +
> languages_for_expressions.insert(s_supported_languages_for_expressions.begin(),
> s_supported_languages_for_expressions.end());
> +}
> +
>
>  void
>  GoASTContext::Initialize()
>  {
>      PluginManager::RegisterPlugin (GetPluginNameStatic(),
>                                     "AST context plug-in",
> -                                   CreateInstance);
> +                                   CreateInstance,
> +                                   EnumerateSupportedLanguages);
>  }
>
>  void
>
> Modified: lldb/trunk/source/Target/Language.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Language.cpp?rev=249769&r1=249768&r2=249769&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Target/Language.cpp (original)
> +++ lldb/trunk/source/Target/Language.cpp Thu Oct  8 18:07:53 2015
> @@ -287,6 +287,18 @@ Language::LanguageIsPascal (LanguageType
>      }
>  }
>
> +void
> +Language::GetLanguagesSupportingTypeSystems (std::set<lldb::LanguageType>
> &languages,
> +                                             std::set<lldb::LanguageType>
> &languages_for_expressions)
> +{
> +    uint32_t idx = 0;
> +
> +    while (TypeSystemEnumerateSupportedLanguages enumerate =
> PluginManager::GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex(idx++))
> +    {
> +        (*enumerate)(languages, languages_for_expressions);
> +    }
> +}
> +
>  std::unique_ptr<Language::TypeScavenger>
>  Language::GetTypeScavenger ()
>  {
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151008/ea1a5fc3/attachment-0001.html>


More information about the lldb-commits mailing list