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