124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ClangExpressionVariable.h -------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ClangExpressionVariable_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ClangExpressionVariable_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <signal.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdint.h> 16f6d8b67a2501eeffecbd016cb6192474204d133fGreg Clayton#include <string.h> 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan#include <map> 20a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include <string> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 25b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 278de27c761a22187ef63fb60000894be163e7285fGreg Clayton#include "lldb/Core/ConstString.h" 2852f792329be5db8e38961350589e97e8f2823acdGreg Clayton#include "lldb/Core/Value.h" 29a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Symbol/TaggedASTType.h" 30a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 31a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanannamespace llvm { 32a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan class Value; 33a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan} 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 368194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan 37427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonclass ClangExpressionVariableList; 38427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonclass ValueObjectConstResult; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 404a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan//---------------------------------------------------------------------- 41a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// @class ClangExpressionVariable ClangExpressionVariable.h "lldb/Expression/ClangExpressionVariable.h" 42a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// @brief Encapsulates one variable for the expression parser. 43a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// 44a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// The expression parser uses variables in three different contexts: 45a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// 46a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// First, it stores persistent variables along with the process for use 47a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// in expressions. These persistent variables contain their own data 48a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// and are typed. 494a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan/// 50a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// Second, in an interpreted expression, it stores the local variables 51a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// for the expression along with the expression. These variables 52a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// contain their own data and are typed. 53a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// 54a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// Third, in a JIT-compiled expression, it stores the variables that 55a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// the expression needs to have materialized and dematerialized at each 56a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// execution. These do not contain their own data but are named and 57a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// typed. 58a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// 59a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// This class supports all of these use cases using simple type 60a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// polymorphism, and provides necessary support methods. Its interface 61a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// is RTTI-neutral. 624a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan//---------------------------------------------------------------------- 63427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonclass ClangExpressionVariable 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 65427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonpublic: 66fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham ClangExpressionVariable(ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size); 67427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 68427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariable(const lldb::ValueObjectSP &valobj_sp); 69427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 704a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan //---------------------------------------------------------------------- 71324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// If the variable contains its own data, make a Value point at it. 72324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// If \a exe_ctx in not NULL, the value will be resolved in with 73324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// that execution context. 74a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// 75a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// @param[in] value 76a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// The value to point at the data. 77a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// 78324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// @param[in] exe_ctx 79324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// The execution context to use to resolve \a value. 80324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham /// 81a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// @return 82a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// True on success; false otherwise (in particular, if this variable 83a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// does not contain its own data). 844a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan //---------------------------------------------------------------------- 85a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan bool 86324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham PointValueAtData(Value &value, ExecutionContext *exe_ctx); 874a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan 8866ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton lldb::ValueObjectSP 89427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetValueObject(); 9066ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 914a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan //---------------------------------------------------------------------- 92a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// The following values should not live beyond parsing 93a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 94bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton class ParserVars 95bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 96bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton public: 9766ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 9866ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton ParserVars() : 9966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_parser_type(), 10066ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_named_decl (NULL), 10166ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_llvm_value (NULL), 10252f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_lldb_value (), 1039d4e86e20fd4b6a0bb4a3d003680ef2c4a842021Sean Callanan m_lldb_var (), 1049d4e86e20fd4b6a0bb4a3d003680ef2c4a842021Sean Callanan m_lldb_sym (NULL) 10566ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton { 10666ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton } 10766ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 108a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan TypeFromParser m_parser_type; ///< The type of the variable according to the parser 109a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan const clang::NamedDecl *m_named_decl; ///< The Decl corresponding to this variable 110a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan llvm::Value *m_llvm_value; ///< The IR value corresponding to this variable; usually a GlobalValue 11152f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb_private::Value m_lldb_value; ///< The value found in LLDB for this variable 112696cf5f6f2a77b87a4b06cdf0f697749b494665fSean Callanan lldb::VariableSP m_lldb_var; ///< The original variable for this variable 11301e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton const lldb_private::Symbol *m_lldb_sym; ///< The original symbol for this variable, if it was a symbol 114a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan }; 11531903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 11631903318116cbd66801cd2a526cc5e5873d20e4cSean Callananprivate: 11731903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan typedef std::map <uint64_t, ParserVars> ParserVarMap; 11831903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan ParserVarMap m_parser_vars; 11931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 12031903318116cbd66801cd2a526cc5e5873d20e4cSean Callananpublic: 121a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 122a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// Make this variable usable by the parser by allocating space for 123a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// parser-specific variables 124a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 125427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 12631903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan EnableParserVars(uint64_t parser_id) 127a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 128cec32bbcad3e99d7f797072e5e160453e29890acMatt Kopec m_parser_vars.insert(std::make_pair(parser_id, ParserVars())); 129a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 130a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 131a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 132a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// Deallocate parser-specific variables 133a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 134427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 13531903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan DisableParserVars(uint64_t parser_id) 13631903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan { 13731903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan m_parser_vars.erase(parser_id); 13831903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan } 13931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 14031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan //---------------------------------------------------------------------- 14131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan /// Access parser-specific variables 14231903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan //---------------------------------------------------------------------- 14331903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan ParserVars * 14431903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan GetParserVars(uint64_t parser_id) 145a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 14631903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan ParserVarMap::iterator i = m_parser_vars.find(parser_id); 14731903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 14831903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan if (i == m_parser_vars.end()) 14931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan return NULL; 15031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan else 15131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan return &i->second; 152a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 153a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 154a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 155a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// The following values are valid if the variable is used by JIT code 156a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 157a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan struct JITVars { 15866ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton JITVars () : 15966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_alignment (0), 16066ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_size (0), 16166ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton m_offset (0) 16266ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton { 16366ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton } 16466ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 165a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan off_t m_alignment; ///< The required alignment of the variable, in bytes 166a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan size_t m_size; ///< The space required for the variable, in bytes 167a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan off_t m_offset; ///< The offset of the variable in the struct, in bytes 168a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan }; 16931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 17031903318116cbd66801cd2a526cc5e5873d20e4cSean Callananprivate: 17131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan typedef std::map <uint64_t, JITVars> JITVarMap; 17231903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan JITVarMap m_jit_vars; 17331903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 17431903318116cbd66801cd2a526cc5e5873d20e4cSean Callananpublic: 175a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 176a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// Make this variable usable for materializing for the JIT by allocating 177a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// space for JIT-specific variables 178a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 179427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 18031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan EnableJITVars(uint64_t parser_id) 181a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 182cec32bbcad3e99d7f797072e5e160453e29890acMatt Kopec m_jit_vars.insert(std::make_pair(parser_id, JITVars())); 183a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 184a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 185a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 186a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// Deallocate JIT-specific variables 187a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 188427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 18931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan DisableJITVars(uint64_t parser_id) 190a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 19131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan m_jit_vars.erase(parser_id); 19231903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan } 19331903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 19431903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan JITVars *GetJITVars(uint64_t parser_id) 19531903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan { 19631903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan JITVarMap::iterator i = m_jit_vars.find(parser_id); 19731903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 19831903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan if (i == m_jit_vars.end()) 19931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan return NULL; 20031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan else 20131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan return &i->second; 202a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 203427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 204a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 205427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// Return the variable's size in bytes 206a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 207427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton size_t 208427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetByteSize (); 20966ed2fbeaf588fe4105a1305f7e956dcf9fbe299Greg Clayton 210427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString & 211427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetName(); 212427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 213b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton RegisterInfo * 214427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetRegisterInfo(); 215a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 216427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 217b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton SetRegisterInfo (const RegisterInfo *reg_info); 218427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 21952f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 220427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetClangType (); 221427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 222427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 22352f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetClangType (const ClangASTType &clang_type); 224427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 225427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser 226427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetTypeFromUser (); 227427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 228427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint8_t * 229427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetValueBytes (); 230427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 231427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 232427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton SetName (const ConstString &name); 233427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 234427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 235427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ValueUpdated (); 236c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen 237c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // this function is used to copy the address-of m_live_sp into m_frozen_sp 238c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // this is necessary because the results of certain cast and pointer-arithmetic 239c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // operations (such as those described in bugzilla issues 11588 and 11618) generate 240c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // frozen objcts that do not have a valid address-of, which can be troublesome when 241c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // using synthetic children providers. transferring the address-of the live object 242c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen // solves these issues and provides the expected user-level behavior 243c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen void 244c61349681fa2923bd30ad16afce450a0da6108cfJohnny Chen TransferAddress (bool force = false); 245427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 246102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton typedef std::shared_ptr<ValueObjectConstResult> ValueObjectConstResultSP; 247427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 248a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 249427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// Members 250a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 2516a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan enum Flags 2526a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan { 2536a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVNone = 0, 2546a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVIsLLDBAllocated = 1 << 0, ///< This variable is resident in a location specifically allocated for it by LLDB in the target process 2556a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVIsProgramReference = 1 << 1, ///< This variable is a reference to a (possibly invalid) area managed by the target program 2566a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVNeedsAllocation = 1 << 2, ///< Space for this variable has yet to be allocated in the target process 2576a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVIsFreezeDried = 1 << 3, ///< This variable's authoritative version is in m_frozen_sp (for example, for statically-computed results) 2586a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan EVNeedsFreezeDry = 1 << 4, ///< Copy from m_live_sp to m_frozen_sp during dematerialization 259fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan EVKeepInTarget = 1 << 5, ///< Keep the allocation after the expression is complete rather than freeze drying its contents and freeing it 2606f3bde75715fc2e1da483570c0c9241227c14c84Sean Callanan EVTypeIsReference = 1 << 6, ///< The original type of this variable is a reference, so materialize the value rather than the location 26152d0d027dd38518e4b0cfb135a5d50a6652c5dafSean Callanan EVUnknownType = 1 << 7, ///< This is a symbol of unknown type, and the type must be resolved after parsing is complete 26252d0d027dd38518e4b0cfb135a5d50a6652c5dafSean Callanan EVBareRegister = 1 << 8 ///< This variable is a direct reference to $pc or some other entity. 2636a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan }; 2646a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan 26552d0d027dd38518e4b0cfb135a5d50a6652c5dafSean Callanan typedef uint16_t FlagType; 26652d0d027dd38518e4b0cfb135a5d50a6652c5dafSean Callanan 26752d0d027dd38518e4b0cfb135a5d50a6652c5dafSean Callanan FlagType m_flags; // takes elements of Flags 2686a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan 2696a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan lldb::ValueObjectSP m_frozen_sp; 2706a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan lldb::ValueObjectSP m_live_sp; 27131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 272427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DISALLOW_COPY_AND_ASSIGN (ClangExpressionVariable); 273a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan}; 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 275a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan//---------------------------------------------------------------------- 276a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// @class ClangExpressionVariableListBase ClangExpressionVariable.h "lldb/Expression/ClangExpressionVariable.h" 277427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton/// @brief A list of variable references. 278a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan/// 279427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton/// This class stores variables internally, acting as the permanent store. 280a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan//---------------------------------------------------------------------- 281427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonclass ClangExpressionVariableList 282a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan{ 283a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callananpublic: 284a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 285427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton /// Implementation of methods in ClangExpressionVariableListBase 286a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 287a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton size_t 288427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetSize() 289427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 290427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return m_variables.size(); 291427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 292a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 293a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton lldb::ClangExpressionVariableSP 294427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetVariableAtIndex(size_t index) 295427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 296427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP var_sp; 297427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton if (index < m_variables.size()) 298427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp = m_variables[index]; 299427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 300427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 301a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan 302a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton size_t 303427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddVariable (const lldb::ClangExpressionVariableSP &var_sp) 304427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 305427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_variables.push_back(var_sp); 306427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return m_variables.size() - 1; 307427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 308427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 309a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton bool 310a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton ContainsVariable (const lldb::ClangExpressionVariableSP &var_sp) 311a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton { 312a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton const size_t size = m_variables.size(); 313a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton for (size_t index = 0; index < size; ++index) 314a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton { 315a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton if (m_variables[index].get() == var_sp.get()) 316a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton return true; 317a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton } 318a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton return false; 319a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton } 320a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton 321a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 322a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// Finds a variable by name in the list. 3234a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan /// 324a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// @param[in] name 325a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// The name of the requested variable. 3264a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan /// 3274a7c6c62ac427ac3a390809a6ab1fe325cc69a0eSean Callanan /// @return 328a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan /// The variable requested, or NULL if that variable is not in the list. 329a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan //---------------------------------------------------------------------- 330427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 331427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetVariable (const ConstString &name) 332a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 333427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP var_sp; 334427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton for (size_t index = 0, size = GetSize(); index < size; ++index) 335a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 336427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp = GetVariableAtIndex(index); 337427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton if (var_sp->GetName() == name) 338427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 339a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 340427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp.reset(); 341427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 342427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 343427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 344427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 345427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetVariable (const char *name) 346427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 347427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP var_sp; 348427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton if (name && name[0]) 349427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 350427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton for (size_t index = 0, size = GetSize(); index < size; ++index) 351427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 352427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp = GetVariableAtIndex(index); 353427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const char *var_name_cstr = var_sp->GetName().GetCString(); 354434b7dde31ae8b59f20add4dd27e051dd71fbe2cSean Callanan if (!var_name_cstr || !name) 355434b7dde31ae8b59f20add4dd27e051dd71fbe2cSean Callanan continue; 356427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton if (::strcmp (var_name_cstr, name) == 0) 357427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 358427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 359427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp.reset(); 360427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 361427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 362a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 3638c12720c108cd5e7ed792596749218d8400f647eSean Callanan 3648c12720c108cd5e7ed792596749218d8400f647eSean Callanan //---------------------------------------------------------------------- 3658c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// Finds a variable by NamedDecl in the list. 3668c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// 3678c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @param[in] name 3688c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The name of the requested variable. 3698c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// 3708c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @return 3718c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The variable requested, or NULL if that variable is not in the list. 3728c12720c108cd5e7ed792596749218d8400f647eSean Callanan //---------------------------------------------------------------------- 373427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 37431903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan GetVariable (const clang::NamedDecl *decl, uint64_t parser_id) 3758c12720c108cd5e7ed792596749218d8400f647eSean Callanan { 376427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP var_sp; 377427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton for (size_t index = 0, size = GetSize(); index < size; ++index) 3788c12720c108cd5e7ed792596749218d8400f647eSean Callanan { 379427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp = GetVariableAtIndex(index); 38031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 38131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan ClangExpressionVariable::ParserVars *parser_vars = var_sp->GetParserVars(parser_id); 38231903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 38331903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan if (parser_vars && parser_vars->m_named_decl == decl) 384427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 3858c12720c108cd5e7ed792596749218d8400f647eSean Callanan } 386427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp.reset(); 387427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 388a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 389427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 3908194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan //---------------------------------------------------------------------- 3918194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan /// Create a new variable in the list and return its index 3928194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan //---------------------------------------------------------------------- 393427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 394fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham CreateVariable (ExecutionContextScope *exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size) 3958194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan { 396fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham lldb::ClangExpressionVariableSP var_sp(new ClangExpressionVariable(exe_scope, byte_order, addr_byte_size)); 397427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_variables.push_back(var_sp); 398427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 3998194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan } 400427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 401427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 402427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton CreateVariable(const lldb::ValueObjectSP &valobj_sp) 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 404427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP var_sp(new ClangExpressionVariable(valobj_sp)); 405427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_variables.push_back(var_sp); 406427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 407a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 408427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 409427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ClangExpressionVariableSP 410fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham CreateVariable (ExecutionContextScope *exe_scope, 411fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham const ConstString &name, 412427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const TypeFromUser& user_type, 413427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton lldb::ByteOrder byte_order, 414427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint32_t addr_byte_size) 415a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan { 416fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham lldb::ClangExpressionVariableSP var_sp(new ClangExpressionVariable(exe_scope, byte_order, addr_byte_size)); 417427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton var_sp->SetName (name); 41852f792329be5db8e38961350589e97e8f2823acdGreg Clayton var_sp->SetClangType (user_type); 419427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_variables.push_back(var_sp); 420427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return var_sp; 421a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan } 4228194e42fa9e0fe204ebadb2368eb486054d66bd3Sean Callanan 423153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton void 4248f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan RemoveVariable (lldb::ClangExpressionVariableSP var_sp) 4258f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan { 4268f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan for (std::vector<lldb::ClangExpressionVariableSP>::iterator vi = m_variables.begin(), ve = m_variables.end(); 4278f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan vi != ve; 4288f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan ++vi) 4298f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan { 4308f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan if (vi->get() == var_sp.get()) 4318f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan { 4328f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan m_variables.erase(vi); 4338f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan return; 4348f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan } 4358f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan } 4368f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan } 4378f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan 4388f2e392e8937aaf66f91201dc5f4190d61902c67Sean Callanan void 439153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton Clear() 440153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton { 441153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton m_variables.clear(); 442153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton } 443153ccd72f52a6cc3595d7614558e2954f67833ebGreg Clayton 444427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Claytonprivate: 445427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton std::vector <lldb::ClangExpressionVariableSP> m_variables; 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 448427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangExpressionVariable_h_ 452