diff options
Diffstat (limited to 'include/lldb/Target/StackFrameRecognizer.h')
-rw-r--r-- | include/lldb/Target/StackFrameRecognizer.h | 62 |
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_ |