| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| //===-- CPlusPlusLanguage.cpp --------------------------------------*- C++ -*-===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is distributed under the University of Illinois Open Source | ||
| // License. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #include "CPlusPlusLanguage.h" | ||
|
|
||
| #include "lldb/Core/ConstString.h" | ||
| #include "lldb/Core/PluginManager.h" | ||
|
|
||
| using namespace lldb; | ||
| using namespace lldb_private; | ||
|
|
||
| void | ||
| CPlusPlusLanguage::Initialize() | ||
| { | ||
| PluginManager::RegisterPlugin (GetPluginNameStatic(), | ||
| "C++ Language", | ||
| CreateInstance); | ||
| } | ||
|
|
||
| void | ||
| CPlusPlusLanguage::Terminate() | ||
| { | ||
| PluginManager::UnregisterPlugin (CreateInstance); | ||
| } | ||
|
|
||
| lldb_private::ConstString | ||
| CPlusPlusLanguage::GetPluginNameStatic() | ||
| { | ||
| static ConstString g_name("cplusplus"); | ||
| return g_name; | ||
| } | ||
|
|
||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| lldb_private::ConstString | ||
| CPlusPlusLanguage::GetPluginName() | ||
| { | ||
| return GetPluginNameStatic(); | ||
| } | ||
|
|
||
| uint32_t | ||
| CPlusPlusLanguage::GetPluginVersion() | ||
| { | ||
| return 1; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| Language * | ||
| CPlusPlusLanguage::CreateInstance (lldb::LanguageType language) | ||
| { | ||
| switch (language) | ||
| { | ||
| case lldb::eLanguageTypeC_plus_plus: | ||
| case lldb::eLanguageTypeC_plus_plus_03: | ||
| case lldb::eLanguageTypeC_plus_plus_11: | ||
| case lldb::eLanguageTypeC_plus_plus_14: | ||
| return new CPlusPlusLanguage(); | ||
| default: | ||
| return nullptr; | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| //===-- CPlusPlusLanguage.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_CPlusPlusLanguage_h_ | ||
| #define liblldb_CPlusPlusLanguage_h_ | ||
|
|
||
| // C Includes | ||
| // C++ Includes | ||
| // Other libraries and framework includes | ||
| // Project includes | ||
| #include "lldb/lldb-private.h" | ||
| #include "lldb/Target/Language.h" | ||
|
|
||
| namespace lldb_private { | ||
|
|
||
| class CPlusPlusLanguage : | ||
| public Language | ||
| { | ||
| public: | ||
| virtual ~CPlusPlusLanguage() = default; | ||
|
|
||
| CPlusPlusLanguage () = default; | ||
|
|
||
| lldb::LanguageType | ||
| GetLanguageType () const | ||
| { | ||
| return lldb::eLanguageTypeC_plus_plus; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| static void | ||
| Initialize(); | ||
|
|
||
| static void | ||
| Terminate(); | ||
|
|
||
| static lldb_private::Language * | ||
| CreateInstance (lldb::LanguageType language); | ||
|
|
||
| static lldb_private::ConstString | ||
| GetPluginNameStatic(); | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| virtual ConstString | ||
| GetPluginName(); | ||
|
|
||
| virtual uint32_t | ||
| GetPluginVersion(); | ||
| }; | ||
|
|
||
| } // namespace lldb_private | ||
|
|
||
| #endif // liblldb_CPlusPlusLanguage_h_ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| set(LLVM_NO_RTTI 1) | ||
|
|
||
| add_lldb_library(lldbPluginAppleObjCLanguage | ||
| AppleObjCLanguage.cpp | ||
| ) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| //===-- ObjCLanguage.cpp --------------------------------------*- C++ -*-===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is distributed under the University of Illinois Open Source | ||
| // License. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #include "ObjCLanguage.h" | ||
|
|
||
| #include "lldb/Core/ConstString.h" | ||
| #include "lldb/Core/PluginManager.h" | ||
|
|
||
| using namespace lldb; | ||
| using namespace lldb_private; | ||
|
|
||
| void | ||
| ObjCLanguage::Initialize() | ||
| { | ||
| PluginManager::RegisterPlugin (GetPluginNameStatic(), | ||
| "Objective-C Language", | ||
| CreateInstance); | ||
| } | ||
|
|
||
| void | ||
| ObjCLanguage::Terminate() | ||
| { | ||
| PluginManager::UnregisterPlugin (CreateInstance); | ||
| } | ||
|
|
||
| lldb_private::ConstString | ||
| ObjCLanguage::GetPluginNameStatic() | ||
| { | ||
| static ConstString g_name("objc"); | ||
| return g_name; | ||
| } | ||
|
|
||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| lldb_private::ConstString | ||
| ObjCLanguage::GetPluginName() | ||
| { | ||
| return GetPluginNameStatic(); | ||
| } | ||
|
|
||
| uint32_t | ||
| ObjCLanguage::GetPluginVersion() | ||
| { | ||
| return 1; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| Language * | ||
| ObjCLanguage::CreateInstance (lldb::LanguageType language) | ||
| { | ||
| switch (language) | ||
| { | ||
| case lldb::eLanguageTypeObjC: | ||
| return new ObjCLanguage(); | ||
| default: | ||
| return nullptr; | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| //===-- ObjCLanguage.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_ObjCLanguage_h_ | ||
| #define liblldb_ObjCLanguage_h_ | ||
|
|
||
| // C Includes | ||
| // C++ Includes | ||
| // Other libraries and framework includes | ||
| // Project includes | ||
| #include "lldb/lldb-private.h" | ||
| #include "lldb/Target/Language.h" | ||
|
|
||
| namespace lldb_private { | ||
|
|
||
| class ObjCLanguage : | ||
| public Language | ||
| { | ||
| public: | ||
| virtual ~ObjCLanguage() = default; | ||
|
|
||
| ObjCLanguage () = default; | ||
|
|
||
| lldb::LanguageType | ||
| GetLanguageType () const | ||
| { | ||
| return lldb::eLanguageTypeObjC; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| static void | ||
| Initialize(); | ||
|
|
||
| static void | ||
| Terminate(); | ||
|
|
||
| static lldb_private::Language * | ||
| CreateInstance (lldb::LanguageType language); | ||
|
|
||
| static lldb_private::ConstString | ||
| GetPluginNameStatic(); | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| virtual ConstString | ||
| GetPluginName(); | ||
|
|
||
| virtual uint32_t | ||
| GetPluginVersion(); | ||
| }; | ||
|
|
||
| } // namespace lldb_private | ||
|
|
||
| #endif // liblldb_ObjCLanguage_h_ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| set(LLVM_NO_RTTI 1) | ||
|
|
||
| add_lldb_library(lldbPluginObjCPlusPlusLanguage | ||
| ObjCPlusPlusLanguage.cpp | ||
| ) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| //===-- ObjCPlusPlusLanguage.cpp --------------------------------------*- C++ -*-===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is distributed under the University of Illinois Open Source | ||
| // License. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #include "ObjCPlusPlusLanguage.h" | ||
|
|
||
| #include "lldb/Core/ConstString.h" | ||
| #include "lldb/Core/PluginManager.h" | ||
|
|
||
| using namespace lldb; | ||
| using namespace lldb_private; | ||
|
|
||
| void | ||
| ObjCPlusPlusLanguage::Initialize() | ||
| { | ||
| PluginManager::RegisterPlugin (GetPluginNameStatic(), | ||
| "Objective-C++ Language", | ||
| CreateInstance); | ||
| } | ||
|
|
||
| void | ||
| ObjCPlusPlusLanguage::Terminate() | ||
| { | ||
| PluginManager::UnregisterPlugin (CreateInstance); | ||
| } | ||
|
|
||
| lldb_private::ConstString | ||
| ObjCPlusPlusLanguage::GetPluginNameStatic() | ||
| { | ||
| static ConstString g_name("objcplusplus"); | ||
| return g_name; | ||
| } | ||
|
|
||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| lldb_private::ConstString | ||
| ObjCPlusPlusLanguage::GetPluginName() | ||
| { | ||
| return GetPluginNameStatic(); | ||
| } | ||
|
|
||
| uint32_t | ||
| ObjCPlusPlusLanguage::GetPluginVersion() | ||
| { | ||
| return 1; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| Language * | ||
| ObjCPlusPlusLanguage::CreateInstance (lldb::LanguageType language) | ||
| { | ||
| switch (language) | ||
| { | ||
| case lldb::eLanguageTypeObjC_plus_plus: | ||
| return new ObjCPlusPlusLanguage(); | ||
| default: | ||
| return nullptr; | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| //===-- ObjCPlusPlusLanguage.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_ObjCPlusPlusLanguage_h_ | ||
| #define liblldb_ObjCPlusPlusLanguage_h_ | ||
|
|
||
| // C Includes | ||
| // C++ Includes | ||
| // Other libraries and framework includes | ||
| // Project includes | ||
| #include "lldb/lldb-private.h" | ||
| #include "lldb/Target/Language.h" | ||
|
|
||
| namespace lldb_private { | ||
|
|
||
| class ObjCPlusPlusLanguage : | ||
| public Language | ||
| { | ||
| public: | ||
| virtual ~ObjCPlusPlusLanguage() = default; | ||
|
|
||
| ObjCPlusPlusLanguage () = default; | ||
|
|
||
| lldb::LanguageType | ||
| GetLanguageType () const | ||
| { | ||
| return lldb::eLanguageTypeObjC_plus_plus; | ||
| } | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // Static Functions | ||
| //------------------------------------------------------------------ | ||
| static void | ||
| Initialize(); | ||
|
|
||
| static void | ||
| Terminate(); | ||
|
|
||
| static lldb_private::Language * | ||
| CreateInstance (lldb::LanguageType language); | ||
|
|
||
| static lldb_private::ConstString | ||
| GetPluginNameStatic(); | ||
|
|
||
| //------------------------------------------------------------------ | ||
| // PluginInterface protocol | ||
| //------------------------------------------------------------------ | ||
| virtual ConstString | ||
| GetPluginName(); | ||
|
|
||
| virtual uint32_t | ||
| GetPluginVersion(); | ||
| }; | ||
|
|
||
| } // namespace lldb_private | ||
|
|
||
| #endif // liblldb_CPlusPlusLanguage_h_ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| //===-- Language.cpp -------------------------------------------------*- C++ -*-===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is distributed under the University of Illinois Open Source | ||
| // License. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #include <functional> | ||
| #include <map> | ||
|
|
||
| #include "lldb/Target/Language.h" | ||
|
|
||
| #include "lldb/Host/Mutex.h" | ||
| #include "lldb/Core/PluginManager.h" | ||
|
|
||
| using namespace lldb; | ||
| using namespace lldb_private; | ||
|
|
||
| typedef std::unique_ptr<Language> LanguageUP; | ||
| typedef std::map<lldb::LanguageType, LanguageUP> LanguagesMap; | ||
|
|
||
| static LanguagesMap& | ||
| GetLanguagesMap () | ||
| { | ||
| static LanguagesMap *g_map = nullptr; | ||
| static std::once_flag g_initialize; | ||
|
|
||
| std::call_once(g_initialize, [] { | ||
| g_map = new LanguagesMap(); // NOTE: INTENTIONAL LEAK due to global destructor chain | ||
| }); | ||
|
|
||
| return *g_map; | ||
| } | ||
| static Mutex& | ||
| GetLanguagesMutex () | ||
| { | ||
| static Mutex *g_mutex = nullptr; | ||
| static std::once_flag g_initialize; | ||
|
|
||
| std::call_once(g_initialize, [] { | ||
| g_mutex = new Mutex(); // NOTE: INTENTIONAL LEAK due to global destructor chain | ||
| }); | ||
|
|
||
| return *g_mutex; | ||
| } | ||
|
|
||
| Language* | ||
| Language::FindPlugin (lldb::LanguageType language) | ||
| { | ||
| Mutex::Locker locker(GetLanguagesMutex()); | ||
| LanguagesMap& map(GetLanguagesMap()); | ||
| auto iter = map.find(language), end = map.end(); | ||
| if (iter != end) | ||
| return iter->second.get(); | ||
|
|
||
| Language *language_ptr = nullptr; | ||
| LanguageCreateInstance create_callback; | ||
|
|
||
| for (uint32_t idx = 0; | ||
| (create_callback = PluginManager::GetLanguageCreateCallbackAtIndex(idx)) != nullptr; | ||
| ++idx) | ||
| { | ||
| language_ptr = create_callback(language); | ||
|
|
||
| if (language_ptr) | ||
| { | ||
| map[language] = std::unique_ptr<Language>(language_ptr); | ||
| return language_ptr; | ||
| } | ||
| } | ||
|
|
||
| return nullptr; | ||
| } | ||
|
|
||
| void | ||
| Language::ForEach (std::function<bool(Language*)> callback) | ||
| { | ||
| Mutex::Locker locker(GetLanguagesMutex()); | ||
| LanguagesMap& map(GetLanguagesMap()); | ||
| for (const auto& entry : map) | ||
| { | ||
| if (!callback(entry.second.get())) | ||
| break; | ||
| } | ||
| } | ||
|
|
||
| //---------------------------------------------------------------------- | ||
| // Constructor | ||
| //---------------------------------------------------------------------- | ||
| Language::Language() | ||
| { | ||
| } | ||
|
|
||
| //---------------------------------------------------------------------- | ||
| // Destructor | ||
| //---------------------------------------------------------------------- | ||
| Language::~Language() | ||
| { | ||
| } |