================
@@ -0,0 +1,271 @@
+//===-- SymbolLocatorScripted.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 "SymbolLocatorScripted.h"
+
+#include "lldb/Core/Debugger.h"
+#include "lldb/Core/Module.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Interpreter/OptionValueString.h"
+#include "lldb/Interpreter/ScriptInterpreter.h"
+#include "lldb/Utility/LLDBLog.h"
+#include "lldb/Utility/Log.h"
+
+#include <unordered_map>
+
+using namespace lldb;
+using namespace lldb_private;
+
+LLDB_PLUGIN_DEFINE(SymbolLocatorScripted)
+
+namespace {
+
+#define LLDB_PROPERTIES_symbollocatorscripted
+#include "SymbolLocatorScriptedProperties.inc"
+
+enum {
+#define LLDB_PROPERTIES_symbollocatorscripted
+#include "SymbolLocatorScriptedPropertiesEnum.inc"
+};
+
+class PluginProperties : public Properties {
+public:
+  static llvm::StringRef GetSettingName() {
+    return SymbolLocatorScripted::GetPluginNameStatic();
+  }
+
+  PluginProperties() {
+    m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
+    m_collection_sp->Initialize(g_symbollocatorscripted_properties_def);
+
+    m_collection_sp->SetValueChangedCallback(
+        ePropertyScriptClass, [this] { ScriptClassChangedCallback(); });
+  }
+
+  llvm::StringRef GetScriptClassName() const {
+    const OptionValueString *s =
+        m_collection_sp->GetPropertyAtIndexAsOptionValueString(
+            ePropertyScriptClass);
+    if (s)
+      return s->GetCurrentValueAsRef();
+    return {};
+  }
----------------
medismailben wrote:

Settings aren't very discoverable by users and they're hard to used when 
scripting.
Instead of making the scripted symbol locator a global setting, I'd register it 
with the target with:
- New subcommand `target symbols scripted register -C 
"myscriptedsymbollocatormodule.myscriptedsymbollocatormodule" -k "key1" -v 
"val1"`. For completely, we should also have a `clear` subcommand  and may be 
an `info` subcommand` if the scripted symbol locator can describe itself.
- `SBTarget::RegisterScriptedSymbolLocator(const char *class_name, const 
SBStructuredData& args)` & `SBTarget::ClearScriptedSymbolLocator()`

https://github.com/llvm/llvm-project/pull/181334
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to