summaryrefslogtreecommitdiff
path: root/include/lldb/Target/StackFrameRecognizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Target/StackFrameRecognizer.h')
-rw-r--r--include/lldb/Target/StackFrameRecognizer.h62
1 files changed, 47 insertions, 15 deletions
diff --git a/include/lldb/Target/StackFrameRecognizer.h b/include/lldb/Target/StackFrameRecognizer.h
index 35ec23b754f3a..2021ac5215f38 100644
--- a/include/lldb/Target/StackFrameRecognizer.h
+++ b/include/lldb/Target/StackFrameRecognizer.h
@@ -1,15 +1,15 @@
//===-- StackFrameRecognizer.h ----------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// 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
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_StackFrameRecognizer_h_
#define liblldb_StackFrameRecognizer_h_
+#include "lldb/Core/ValueObject.h"
#include "lldb/Core/ValueObjectList.h"
#include "lldb/Symbol/VariableList.h"
#include "lldb/Utility/StructuredData.h"
@@ -18,7 +18,7 @@
namespace lldb_private {
-/// @class RecognizedStackFrame
+/// \class RecognizedStackFrame
///
/// This class provides extra information about a stack frame that was
/// provided by a specific stack frame recognizer. Right now, this class only
@@ -39,7 +39,7 @@ protected:
lldb::ValueObjectListSP m_arguments;
};
-/// @class StackFrameRecognizer
+/// \class StackFrameRecognizer
///
/// A base class for frame recognizers. Subclasses (actual frame recognizers)
/// should implement RecognizeFrame to provide a RecognizedStackFrame for a
@@ -59,9 +59,7 @@ public:
virtual ~StackFrameRecognizer(){};
};
-#ifndef LLDB_DISABLE_PYTHON
-
-/// @class ScriptedStackFrameRecognizer
+/// \class ScriptedStackFrameRecognizer
///
/// Python implementation for frame recognizers. An instance of this class
/// tracks a particular Python classobject, which will be asked to recognize
@@ -75,7 +73,7 @@ class ScriptedStackFrameRecognizer : public StackFrameRecognizer {
public:
ScriptedStackFrameRecognizer(lldb_private::ScriptInterpreter *interpreter,
const char *pclass);
- ~ScriptedStackFrameRecognizer() {}
+ ~ScriptedStackFrameRecognizer() override {}
std::string GetName() override {
return GetPythonClassName();
@@ -90,9 +88,7 @@ private:
DISALLOW_COPY_AND_ASSIGN(ScriptedStackFrameRecognizer);
};
-#endif
-
-/// @class StackFrameRecognizerManager
+/// \class StackFrameRecognizerManager
///
/// Static class that provides a registry of known stack frame recognizers.
/// Has static methods to add, enumerate, remove, query and invoke recognizers.
@@ -100,8 +96,8 @@ private:
class StackFrameRecognizerManager {
public:
static void AddRecognizer(lldb::StackFrameRecognizerSP recognizer,
- const ConstString &module,
- const ConstString &symbol,
+ ConstString module,
+ ConstString symbol,
bool first_instruction_only = true);
static void AddRecognizer(lldb::StackFrameRecognizerSP recognizer,
@@ -124,6 +120,42 @@ public:
static lldb::RecognizedStackFrameSP RecognizeFrame(lldb::StackFrameSP frame);
};
+/// \class ValueObjectRecognizerSynthesizedValue
+///
+/// ValueObject subclass that presents the passed ValueObject as a recognized
+/// value with the specified ValueType. Frame recognizers should return
+/// instances of this class as the returned objects in GetRecognizedArguments().
+
+class ValueObjectRecognizerSynthesizedValue : public ValueObject {
+ public:
+ static lldb::ValueObjectSP Create(ValueObject &parent, lldb::ValueType type) {
+ return (new ValueObjectRecognizerSynthesizedValue(parent, type))->GetSP();
+ }
+ ValueObjectRecognizerSynthesizedValue(ValueObject &parent,
+ lldb::ValueType type)
+ : ValueObject(parent), m_type(type) {
+ SetName(parent.GetName());
+ }
+
+ uint64_t GetByteSize() override { return m_parent->GetByteSize(); }
+ lldb::ValueType GetValueType() const override { return m_type; }
+ bool UpdateValue() override {
+ if (!m_parent->UpdateValueIfNeeded()) return false;
+ m_value = m_parent->GetValue();
+ return true;
+ }
+ size_t CalculateNumChildren(uint32_t max = UINT32_MAX) override {
+ return m_parent->GetNumChildren(max);
+ }
+ CompilerType GetCompilerTypeImpl() override {
+ return m_parent->GetCompilerType();
+ }
+ bool IsSynthetic() override { return true; }
+
+ private:
+ lldb::ValueType m_type;
+};
+
} // namespace lldb_private
#endif // liblldb_StackFrameRecognizer_h_