130fdc8d8SChris Lattner //===-- ValueObjectVariable.h -----------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9cdc514e4SJonas Devlieghere #ifndef LLDB_CORE_VALUEOBJECTVARIABLE_H
10cdc514e4SJonas Devlieghere #define LLDB_CORE_VALUEOBJECTVARIABLE_H
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner #include "lldb/Core/ValueObject.h"
1330fdc8d8SChris Lattner 
14672d2c12SJonas Devlieghere #include "lldb/Core/Value.h"
15672d2c12SJonas Devlieghere #include "lldb/Symbol/CompilerType.h"
16672d2c12SJonas Devlieghere #include "lldb/Utility/ConstString.h"
17672d2c12SJonas Devlieghere #include "lldb/lldb-defines.h"
18672d2c12SJonas Devlieghere #include "lldb/lldb-enumerations.h"
19672d2c12SJonas Devlieghere #include "lldb/lldb-forward.h"
202f3df613SZachary Turner 
21*76e47d48SRaphael Isemann #include <cstddef>
22*76e47d48SRaphael Isemann #include <cstdint>
232f3df613SZachary Turner 
242f3df613SZachary Turner namespace lldb_private {
252f3df613SZachary Turner class DataExtractor;
262f3df613SZachary Turner class Declaration;
2797206d57SZachary Turner class Status;
282f3df613SZachary Turner class ExecutionContextScope;
292f3df613SZachary Turner class SymbolContextScope;
3030fdc8d8SChris Lattner 
31bda83ba0SRaphael Isemann /// A ValueObject that contains a root variable that may or may not
32bda83ba0SRaphael Isemann /// have children.
33b9c1b51eSKate Stone class ValueObjectVariable : public ValueObject {
3430fdc8d8SChris Lattner public:
3547d118e9SEugene Zelenko   ~ValueObjectVariable() override;
3647d118e9SEugene Zelenko 
37b9c1b51eSKate Stone   static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
38b9c1b51eSKate Stone                                     const lldb::VariableSP &var_sp);
3930fdc8d8SChris Lattner 
40113f56fbSAdrian Prantl   llvm::Optional<uint64_t> GetByteSize() override;
4130fdc8d8SChris Lattner 
42b9c1b51eSKate Stone   ConstString GetTypeName() override;
4330fdc8d8SChris Lattner 
44b9c1b51eSKate Stone   ConstString GetQualifiedTypeName() override;
4530fdc8d8SChris Lattner 
46b9c1b51eSKate Stone   ConstString GetDisplayTypeName() override;
47e8daa2f8SEnrico Granata 
48b9c1b51eSKate Stone   size_t CalculateNumChildren(uint32_t max) override;
4984db9105SGreg Clayton 
50b9c1b51eSKate Stone   lldb::ValueType GetValueType() const override;
5130fdc8d8SChris Lattner 
52b9c1b51eSKate Stone   bool IsInScope() override;
5330fdc8d8SChris Lattner 
54b9c1b51eSKate Stone   lldb::ModuleSP GetModule() override;
5530fdc8d8SChris Lattner 
56b9c1b51eSKate Stone   SymbolContextScope *GetSymbolContextScope() override;
579128ee2fSEnrico Granata 
58b9c1b51eSKate Stone   bool GetDeclaration(Declaration &decl) override;
59644247c1SGreg Clayton 
60b9c1b51eSKate Stone   const char *GetLocationAsCString() override;
6181e871edSGreg Clayton 
6297206d57SZachary Turner   bool SetValueFromCString(const char *value_str, Status &error) override;
6382fabf89SEnrico Granata 
6497206d57SZachary Turner   bool SetData(DataExtractor &data, Status &error) override;
6582fabf89SEnrico Granata 
GetVariable()661756630dSRaphael Isemann   lldb::VariableSP GetVariable() override { return m_variable_sp; }
6797e31cdeSEnrico Granata 
6830fdc8d8SChris Lattner protected:
69b9c1b51eSKate Stone   bool UpdateValue() override;
70e337350bSJim Ingham 
71e337350bSJim Ingham   void DoUpdateChildrenAddressType(ValueObject &valobj) override;
7230fdc8d8SChris Lattner 
73b9c1b51eSKate Stone   CompilerType GetCompilerTypeImpl() override;
747277284fSSean Callanan 
75bda83ba0SRaphael Isemann   /// The variable that this value object is based upon.
76bda83ba0SRaphael Isemann   lldb::VariableSP m_variable_sp;
77bda83ba0SRaphael Isemann   ///< The value that DWARFExpression resolves this variable to before we patch
78bda83ba0SRaphael Isemann   ///< it up.
79bda83ba0SRaphael Isemann   Value m_resolved_value;
8030fdc8d8SChris Lattner 
8130fdc8d8SChris Lattner private:
82b9c1b51eSKate Stone   ValueObjectVariable(ExecutionContextScope *exe_scope,
83363f05b8SPavel Labath                       ValueObjectManager &manager,
84b9c1b51eSKate Stone                       const lldb::VariableSP &var_sp);
8530fdc8d8SChris Lattner   // For ValueObject only
86eaebcbc6SKonrad Kleine   ValueObjectVariable(const ValueObjectVariable &) = delete;
87eaebcbc6SKonrad Kleine   const ValueObjectVariable &operator=(const ValueObjectVariable &) = delete;
8830fdc8d8SChris Lattner };
8930fdc8d8SChris Lattner 
9030fdc8d8SChris Lattner } // namespace lldb_private
9130fdc8d8SChris Lattner 
92cdc514e4SJonas Devlieghere #endif // LLDB_CORE_VALUEOBJECTVARIABLE_H
93