This revision was automatically updated to reflect the committed changes.
Closed by commit rG8340fbb9c7bc: [lldb] Reactivate Objective-C++ plugin 
(authored by teemperor).
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82109/new/

https://reviews.llvm.org/D82109

Files:
  lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
  lldb/unittests/Language/CLanguages/CLanguagesTest.cpp
  lldb/unittests/Language/CLanguages/CMakeLists.txt
  lldb/unittests/Language/CMakeLists.txt
  lldb/unittests/Language/Highlighting/HighlighterTest.cpp


Index: lldb/unittests/Language/Highlighting/HighlighterTest.cpp
===================================================================
--- lldb/unittests/Language/Highlighting/HighlighterTest.cpp
+++ lldb/unittests/Language/Highlighting/HighlighterTest.cpp
@@ -58,6 +58,8 @@
   EXPECT_EQ(getName("a/dir.CC"), "clang");
   EXPECT_EQ(getName("/a/dir.hpp"), "clang");
   EXPECT_EQ(getName("header.h"), "clang");
+  EXPECT_EQ(getName("foo.m"), "clang");
+  EXPECT_EQ(getName("foo.mm"), "clang");
 
   EXPECT_EQ(getName(""), "none");
   EXPECT_EQ(getName("/dev/null"), "none");
Index: lldb/unittests/Language/CMakeLists.txt
===================================================================
--- lldb/unittests/Language/CMakeLists.txt
+++ lldb/unittests/Language/CMakeLists.txt
@@ -1,2 +1,3 @@
 add_subdirectory(CPlusPlus)
+add_subdirectory(CLanguages)
 add_subdirectory(Highlighting)
Index: lldb/unittests/Language/CLanguages/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/unittests/Language/CLanguages/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_lldb_unittest(LanguageCLanguagesTests
+  CLanguagesTest.cpp
+
+  LINK_LIBS
+    lldbPluginCPlusPlusLanguage
+    lldbPluginObjCLanguage
+    lldbPluginObjCPlusPlusLanguage
+)
Index: lldb/unittests/Language/CLanguages/CLanguagesTest.cpp
===================================================================
--- /dev/null
+++ lldb/unittests/Language/CLanguages/CLanguagesTest.cpp
@@ -0,0 +1,46 @@
+//===-- CLanguagesTest.cpp 
------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
+#include "Plugins/Language/ObjC/ObjCLanguage.h"
+#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
+#include "TestingSupport/SubsystemRAII.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+/// Returns the name of the LLDB plugin for the given language or a null
+/// ConstString if there is no fitting plugin.
+static ConstString GetPluginName(lldb::LanguageType language) {
+  Language *language_plugin = Language::FindPlugin(language);
+  if (language_plugin)
+    return language_plugin->GetPluginName();
+  return ConstString();
+}
+
+TEST(CLanguages, LookupCLanguagesByLanguageType) {
+  SubsystemRAII<CPlusPlusLanguage, ObjCPlusPlusLanguage, ObjCLanguage> langs;
+
+  // There is no plugin to find for C.
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC89), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC99), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC11), nullptr);
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_03), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_11), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_14), "cplusplus");
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeObjC), "objc");
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeObjC_plus_plus), "objcplusplus");
+}
Index: lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
===================================================================
--- lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -70,7 +70,9 @@
 // Static Functions
 
 Language *CPlusPlusLanguage::CreateInstance(lldb::LanguageType language) {
-  if (Language::LanguageIsCPlusPlus(language))
+  // Use plugin for C++ but not for Objective-C++ (which has its own plugin).
+  if (Language::LanguageIsCPlusPlus(language) &&
+      language != eLanguageTypeObjC_plus_plus)
     return new CPlusPlusLanguage();
   return nullptr;
 }


Index: lldb/unittests/Language/Highlighting/HighlighterTest.cpp
===================================================================
--- lldb/unittests/Language/Highlighting/HighlighterTest.cpp
+++ lldb/unittests/Language/Highlighting/HighlighterTest.cpp
@@ -58,6 +58,8 @@
   EXPECT_EQ(getName("a/dir.CC"), "clang");
   EXPECT_EQ(getName("/a/dir.hpp"), "clang");
   EXPECT_EQ(getName("header.h"), "clang");
+  EXPECT_EQ(getName("foo.m"), "clang");
+  EXPECT_EQ(getName("foo.mm"), "clang");
 
   EXPECT_EQ(getName(""), "none");
   EXPECT_EQ(getName("/dev/null"), "none");
Index: lldb/unittests/Language/CMakeLists.txt
===================================================================
--- lldb/unittests/Language/CMakeLists.txt
+++ lldb/unittests/Language/CMakeLists.txt
@@ -1,2 +1,3 @@
 add_subdirectory(CPlusPlus)
+add_subdirectory(CLanguages)
 add_subdirectory(Highlighting)
Index: lldb/unittests/Language/CLanguages/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/unittests/Language/CLanguages/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_lldb_unittest(LanguageCLanguagesTests
+  CLanguagesTest.cpp
+
+  LINK_LIBS
+    lldbPluginCPlusPlusLanguage
+    lldbPluginObjCLanguage
+    lldbPluginObjCPlusPlusLanguage
+)
Index: lldb/unittests/Language/CLanguages/CLanguagesTest.cpp
===================================================================
--- /dev/null
+++ lldb/unittests/Language/CLanguages/CLanguagesTest.cpp
@@ -0,0 +1,46 @@
+//===-- CLanguagesTest.cpp ------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
+#include "Plugins/Language/ObjC/ObjCLanguage.h"
+#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
+#include "TestingSupport/SubsystemRAII.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+/// Returns the name of the LLDB plugin for the given language or a null
+/// ConstString if there is no fitting plugin.
+static ConstString GetPluginName(lldb::LanguageType language) {
+  Language *language_plugin = Language::FindPlugin(language);
+  if (language_plugin)
+    return language_plugin->GetPluginName();
+  return ConstString();
+}
+
+TEST(CLanguages, LookupCLanguagesByLanguageType) {
+  SubsystemRAII<CPlusPlusLanguage, ObjCPlusPlusLanguage, ObjCLanguage> langs;
+
+  // There is no plugin to find for C.
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC89), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC99), nullptr);
+  EXPECT_EQ(Language::FindPlugin(lldb::eLanguageTypeC11), nullptr);
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_03), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_11), "cplusplus");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeC_plus_plus_14), "cplusplus");
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeObjC), "objc");
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeObjC_plus_plus), "objcplusplus");
+}
Index: lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
===================================================================
--- lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -70,7 +70,9 @@
 // Static Functions
 
 Language *CPlusPlusLanguage::CreateInstance(lldb::LanguageType language) {
-  if (Language::LanguageIsCPlusPlus(language))
+  // Use plugin for C++ but not for Objective-C++ (which has its own plugin).
+  if (Language::LanguageIsCPlusPlus(language) &&
+      language != eLanguageTypeObjC_plus_plus)
     return new CPlusPlusLanguage();
   return nullptr;
 }
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to