Author: spyffe Date: Wed Sep 30 14:57:57 2015 New Revision: 248934 URL: http://llvm.org/viewvc/llvm-project?rev=248934&view=rev Log: Now persistent expression data no longer lives with the Target, but rather with the corresponding TypeSystem. This makes sense because what kind of data there is -- and how it can be looked up -- depends on the language.
Functionality that is common to all type systems is factored out into PersistentExpressionState. Modified: lldb/trunk/include/lldb/Expression/ExpressionVariable.h lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/include/lldb/Target/Target.h lldb/trunk/include/lldb/lldb-forward.h lldb/trunk/source/API/SBFrame.cpp lldb/trunk/source/Commands/CommandObjectMemory.cpp lldb/trunk/source/Core/ValueObject.cpp lldb/trunk/source/Expression/ExpressionSourceCode.cpp lldb/trunk/source/Expression/ExpressionVariable.cpp lldb/trunk/source/Expression/Materializer.cpp lldb/trunk/source/Expression/UserExpression.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Target/ABI.cpp lldb/trunk/source/Target/Target.cpp Modified: lldb/trunk/include/lldb/Expression/ExpressionVariable.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ExpressionVariable.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/include/lldb/Expression/ExpressionVariable.h (original) +++ lldb/trunk/include/lldb/Expression/ExpressionVariable.h Wed Sep 30 14:57:57 2015 @@ -265,6 +265,36 @@ private: std::vector <lldb::ExpressionVariableSP> m_variables; }; +class PersistentExpressionState : public ExpressionVariableList { +public: + //---------------------------------------------------------------------- + // See TypeSystem.h for how to add subclasses to this. + //---------------------------------------------------------------------- + enum LLVMCastKind { + eKindClang, + eKindSwift, + eKindGo, + kNumKinds + }; + + LLVMCastKind getKind() const { return m_kind; } + + PersistentExpressionState(LLVMCastKind kind) : + m_kind(kind) + { + } + + virtual ~PersistentExpressionState (); + + virtual ConstString + GetNextPersistentVariableName () = 0; + + virtual void + RemovePersistentVariable (lldb::ExpressionVariableSP variable) = 0; +private: + LLVMCastKind m_kind; +}; + } #endif /* liblldb_ExpressionVariable_h_ */ Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Wed Sep 30 14:57:57 2015 @@ -20,6 +20,8 @@ #include <utility> // Other libraries and framework includes +#include "ClangPersistentVariables.h" + #include "llvm/ADT/SmallVector.h" #include "clang/AST/ASTContext.h" #include "clang/AST/TemplateBase.h" @@ -1188,8 +1190,12 @@ public: UtilityFunction * GetUtilityFunction(const char *text, const char *name) override; + + PersistentExpressionState * + GetPersistentExpressionState() override; private: lldb::TargetWP m_target_wp; + lldb::ClangPersistentVariablesUP m_persistent_variables; ///< These are the persistent variables associated with this process for the expression parser. }; } // namespace lldb_private Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original) +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Wed Sep 30 14:57:57 2015 @@ -504,6 +504,12 @@ public: return nullptr; } + virtual PersistentExpressionState * + GetPersistentExpressionState() + { + return nullptr; + } + virtual CompilerType GetTypeForFormatters (void* type); Modified: lldb/trunk/include/lldb/Target/Target.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Target.h (original) +++ lldb/trunk/include/lldb/Target/Target.h Wed Sep 30 14:57:57 2015 @@ -1319,9 +1319,9 @@ public: lldb::ValueObjectSP &result_valobj_sp, const EvaluateExpressionOptions& options = EvaluateExpressionOptions()); - ClangPersistentVariables & - GetPersistentVariables(); - + lldb::ExpressionVariableSP + GetPersistentVariable(const ConstString &name); + //------------------------------------------------------------------ // Target Stop Hooks //------------------------------------------------------------------ @@ -1523,7 +1523,6 @@ protected: lldb::ClangASTSourceUP m_scratch_ast_source_ap; lldb::ClangASTImporterUP m_ast_importer_ap; lldb::ClangModulesDeclVendorUP m_clang_modules_decl_vendor_ap; - lldb::ClangPersistentVariablesUP m_persistent_variables; ///< These are the persistent variables associated with this process for the expression parser. lldb::SourceManagerUP m_source_manager_ap; Modified: lldb/trunk/include/lldb/lldb-forward.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-forward.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/include/lldb/lldb-forward.h (original) +++ lldb/trunk/include/lldb/lldb-forward.h Wed Sep 30 14:57:57 2015 @@ -165,6 +165,7 @@ class OptionValueUUID; class NamedOption; class PathMappingList; class FunctionCaller; +class PersistentExpressionState; class Platform; class Process; class ProcessAttachInfo; Modified: lldb/trunk/source/API/SBFrame.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBFrame.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/API/SBFrame.cpp (original) +++ lldb/trunk/source/API/SBFrame.cpp Wed Sep 30 14:57:57 2015 @@ -956,7 +956,7 @@ SBFrame::FindValue (const char *name, Va case eValueTypeConstResult: // constant result variables { ConstString const_name(name); - ExpressionVariableSP expr_var_sp (target->GetPersistentVariables().GetVariable (const_name)); + ExpressionVariableSP expr_var_sp (target->GetPersistentVariable (const_name)); if (expr_var_sp) { value_sp = expr_var_sp->GetValueObject(); Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Wed Sep 30 14:57:57 2015 @@ -530,7 +530,7 @@ protected: if (type_list.GetSize() == 0 && lookup_type_name.GetCString() && *lookup_type_name.GetCString() == '$') { - clang::TypeDecl *tdecl = target->GetPersistentVariables().GetPersistentType(ConstString(lookup_type_name)); + clang::TypeDecl *tdecl = llvm::cast<ClangPersistentVariables>(target->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState())->GetPersistentType(ConstString(lookup_type_name)); if (tdecl) { clang_ast_type.SetCompilerType(ClangASTContext::GetASTContext(&tdecl->getASTContext()),(const lldb::opaque_compiler_type_t)tdecl->getTypeForDecl()); Modified: lldb/trunk/source/Core/ValueObject.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Core/ValueObject.cpp (original) +++ lldb/trunk/source/Core/ValueObject.cpp Wed Sep 30 14:57:57 2015 @@ -4277,14 +4277,19 @@ ValueObject::Persist () if (!target_sp) return nullptr; - ConstString name(target_sp->GetPersistentVariables().GetNextPersistentVariableName()); + PersistentExpressionState *persistent_state = target_sp->GetScratchTypeSystemForLanguage(GetCompilerType().GetMinimumLanguage())->GetPersistentExpressionState(); + + if (!persistent_state) + return nullptr; + + ConstString name(persistent_state->GetNextPersistentVariableName()); ExpressionVariableSP clang_var_sp(new ClangExpressionVariable(target_sp.get(), GetValue(), name)); if (clang_var_sp) { clang_var_sp->m_live_sp = clang_var_sp->m_frozen_sp; clang_var_sp->m_flags |= ClangExpressionVariable::EVIsProgramReference; - target_sp->GetPersistentVariables().AddVariable(clang_var_sp); + persistent_state->AddVariable(clang_var_sp); } return clang_var_sp->GetValueObject(); Modified: lldb/trunk/source/Expression/ExpressionSourceCode.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ExpressionSourceCode.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Expression/ExpressionSourceCode.cpp (original) +++ lldb/trunk/source/Expression/ExpressionSourceCode.cpp Wed Sep 30 14:57:57 2015 @@ -13,6 +13,7 @@ #include "Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.h" #include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h" #include "lldb/Symbol/Block.h" +#include "lldb/Symbol/TypeSystem.h" #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Platform.h" #include "lldb/Target/StackFrame.h" @@ -82,7 +83,8 @@ bool ExpressionSourceCode::GetText (std: if (ClangModulesDeclVendor *decl_vendor = target->GetClangModulesDeclVendor()) { - const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = target->GetPersistentVariables().GetHandLoadedClangModules(); + ClangPersistentVariables *persistent_vars = llvm::cast<ClangPersistentVariables>(target->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState()); + const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = persistent_vars->GetHandLoadedClangModules(); ClangModulesDeclVendor::ModuleVector modules_for_macros; for (ClangModulesDeclVendor::ModuleID module : hand_imported_modules) Modified: lldb/trunk/source/Expression/ExpressionVariable.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ExpressionVariable.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Expression/ExpressionVariable.cpp (original) +++ lldb/trunk/source/Expression/ExpressionVariable.cpp Wed Sep 30 14:57:57 2015 @@ -30,3 +30,7 @@ ExpressionVariable::GetValueBytes() } return NULL; } + +PersistentExpressionState::~PersistentExpressionState () +{ +} Modified: lldb/trunk/source/Expression/Materializer.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/Materializer.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Expression/Materializer.cpp (original) +++ lldb/trunk/source/Expression/Materializer.cpp Wed Sep 30 14:57:57 2015 @@ -11,8 +11,7 @@ #include "lldb/Core/RegisterValue.h" #include "lldb/Core/ValueObjectConstResult.h" #include "lldb/Core/ValueObjectVariable.h" -#include "Plugins/ExpressionParser/Clang/ClangExpressionVariable.h" -#include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h" +#include "lldb/Expression/ExpressionVariable.h" #include "lldb/Expression/Materializer.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/Symbol.h" @@ -858,9 +857,25 @@ public: return; } - ConstString name = target_sp->GetPersistentVariables().GetNextPersistentVariableName(); + TypeSystem *type_system = target_sp->GetScratchTypeSystemForLanguage(m_type.GetMinimumLanguage()); - lldb::ExpressionVariableSP ret = ClangExpressionVariable::CreateVariableInList(target_sp->GetPersistentVariables(), + if (!type_system) + { + err.SetErrorString("Couldn't dematerialize a result variable: couldn't get the corresponding type system"); + return; + } + + PersistentExpressionState *persistent_state = type_system->GetPersistentExpressionState(); + + if (!persistent_state) + { + err.SetErrorString("Couldn't dematerialize a result variable: corresponding type system doesn't handle persistent variables"); + return; + } + + ConstString name = persistent_state->GetNextPersistentVariableName(); + + lldb::ExpressionVariableSP ret = ClangExpressionVariable::CreateVariableInList(*persistent_state, exe_scope, name, m_type, Modified: lldb/trunk/source/Expression/UserExpression.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/UserExpression.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Expression/UserExpression.cpp (original) +++ lldb/trunk/source/Expression/UserExpression.cpp Wed Sep 30 14:57:57 2015 @@ -34,6 +34,7 @@ #include "lldb/Symbol/ObjectFile.h" #include "lldb/Symbol/SymbolVendor.h" #include "lldb/Symbol/Type.h" +#include "lldb/Symbol/TypeSystem.h" #include "lldb/Symbol/VariableList.h" #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Process.h" @@ -586,7 +587,7 @@ UserExpression::Evaluate (ExecutionConte if (options.GetResultIsInternal() && expr_result && process) { - process->GetTarget().GetPersistentVariables().RemovePersistentVariable (expr_result); + process->GetTarget().GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState()->RemovePersistentVariable (expr_result); } if (execution_results != lldb::eExpressionCompleted) Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp Wed Sep 30 14:57:57 2015 @@ -464,7 +464,7 @@ ASTResultSynthesizer::MaybeRecordPersist D); if (TypeDecl *TypeDecl_scratch = dyn_cast<TypeDecl>(D_scratch)) - m_target.GetPersistentVariables().RegisterPersistentType(name_cs, TypeDecl_scratch); + llvm::cast<ClangPersistentVariables>(m_target.GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState())->RegisterPersistentType(name_cs, TypeDecl_scratch); } void Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp Wed Sep 30 14:57:57 2015 @@ -104,7 +104,7 @@ ClangExpressionDeclMap::WillParse(Execut if (target) { - m_parser_vars->m_persistent_vars = &target->GetPersistentVariables(); + m_parser_vars->m_persistent_vars = llvm::cast<ClangPersistentVariables>(target->GetScratchTypeSystemForLanguage(eLanguageTypeC)->GetPersistentExpressionState()); if (!target->GetScratchClangASTContext()) return false; Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp Wed Sep 30 14:57:57 2015 @@ -331,7 +331,8 @@ ClangExpressionParser::ClangExpressionPa if (ClangModulesDeclVendor *decl_vendor = target_sp->GetClangModulesDeclVendor()) { - std::unique_ptr<PPCallbacks> pp_callbacks(new LLDBPreprocessorCallbacks(*decl_vendor, target_sp->GetPersistentVariables())); + ClangPersistentVariables *clang_persistent_vars = llvm::cast<ClangPersistentVariables>(target_sp->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState()); + std::unique_ptr<PPCallbacks> pp_callbacks(new LLDBPreprocessorCallbacks(*decl_vendor, *clang_persistent_vars)); m_pp_callbacks = static_cast<LLDBPreprocessorCallbacks*>(pp_callbacks.get()); m_compiler->getPreprocessor().addPPCallbacks(std::move(pp_callbacks)); } Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp Wed Sep 30 14:57:57 2015 @@ -20,7 +20,7 @@ using namespace lldb; using namespace lldb_private; ClangPersistentVariables::ClangPersistentVariables () : - ExpressionVariableList(), + lldb_private::PersistentExpressionState(LLVMCastKind::eKindClang), m_next_persistent_variable_id (0) { } Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h Wed Sep 30 14:57:57 2015 @@ -13,6 +13,8 @@ #include "ClangExpressionVariable.h" #include "ClangModulesDeclVendor.h" +#include "lldb/Expression/ExpressionVariable.h" + #include "llvm/ADT/DenseMap.h" namespace lldb_private @@ -26,7 +28,7 @@ namespace lldb_private /// ClangPersistentVariable for more discussion. Also provides an increasing, /// 0-based counter for naming result variables. //---------------------------------------------------------------------- -class ClangPersistentVariables : public ExpressionVariableList +class ClangPersistentVariables : public PersistentExpressionState { public: @@ -34,6 +36,16 @@ public: /// Constructor //---------------------------------------------------------------------- ClangPersistentVariables (); + + ~ClangPersistentVariables () { } + + //------------------------------------------------------------------ + // llvm casting support + //------------------------------------------------------------------ + static bool classof(const PersistentExpressionState *pv) + { + return pv->getKind() == PersistentExpressionState::eKindClang; + } lldb::ExpressionVariableSP CreatePersistentVariable (const lldb::ValueObjectSP &valobj_sp); @@ -53,10 +65,10 @@ public: /// A string that contains the next persistent variable name. //---------------------------------------------------------------------- ConstString - GetNextPersistentVariableName (); + GetNextPersistentVariableName () override; void - RemovePersistentVariable (lldb::ExpressionVariableSP variable); + RemovePersistentVariable (lldb::ExpressionVariableSP variable) override; void RegisterPersistentType (const ConstString &name, Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp (original) +++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp Wed Sep 30 14:57:57 2015 @@ -357,7 +357,7 @@ ClangUserExpression::Parse (Stream &erro if (ClangModulesDeclVendor *decl_vendor = m_target->GetClangModulesDeclVendor()) { - const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = m_target->GetPersistentVariables().GetHandLoadedClangModules(); + const ClangModulesDeclVendor::ModuleVector &hand_imported_modules = llvm::cast<ClangPersistentVariables>(m_target->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC)->GetPersistentExpressionState())->GetHandLoadedClangModules(); ClangModulesDeclVendor::ModuleVector modules_for_macros; for (ClangModulesDeclVendor::ModuleID module : hand_imported_modules) Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original) +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Wed Sep 30 14:57:57 2015 @@ -9158,7 +9158,8 @@ ClangASTContext::DeclContextGetClangASTC ClangASTContextForExpressions::ClangASTContextForExpressions (Target &target) : ClangASTContext (target.GetArchitecture().GetTriple().getTriple().c_str()), - m_target_wp(target.shared_from_this()) + m_target_wp(target.shared_from_this()), + m_persistent_variables (new ClangPersistentVariables) { } @@ -9196,9 +9197,15 @@ UtilityFunction * ClangASTContextForExpressions::GetUtilityFunction (const char *text, const char *name) { - TargetSP target_sp = m_target_wp.lock(); + TargetSP target_sp = m_target_wp.lock(); if (!target_sp) return nullptr; return new ClangUtilityFunction(*target_sp.get(), text, name); } + +PersistentExpressionState * +ClangASTContextForExpressions::GetPersistentExpressionState () +{ + return m_persistent_variables.get(); +} Modified: lldb/trunk/source/Target/ABI.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ABI.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Target/ABI.cpp (original) +++ lldb/trunk/source/Target/ABI.cpp Wed Sep 30 14:57:57 2015 @@ -13,6 +13,7 @@ #include "lldb/Core/ValueObjectConstResult.h" #include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h" #include "lldb/Symbol/CompilerType.h" +#include "lldb/Symbol/TypeSystem.h" #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" @@ -123,8 +124,8 @@ ABI::GetReturnValueObject (Thread &threa if (persistent) { - ClangPersistentVariables& persistent_variables = thread.CalculateTarget()->GetPersistentVariables(); - ConstString persistent_variable_name (persistent_variables.GetNextPersistentVariableName()); + PersistentExpressionState *persistent_expression_state = thread.CalculateTarget()->GetScratchTypeSystemForLanguage(ast_type.GetMinimumLanguage())->GetPersistentExpressionState(); + ConstString persistent_variable_name (persistent_expression_state->GetNextPersistentVariableName()); lldb::ValueObjectSP const_valobj_sp; @@ -141,7 +142,7 @@ ABI::GetReturnValueObject (Thread &threa return_valobj_sp = const_valobj_sp; - ExpressionVariableSP clang_expr_variable_sp(persistent_variables.CreatePersistentVariable(return_valobj_sp)); + ExpressionVariableSP clang_expr_variable_sp(ClangExpressionVariable::CreateVariableInList(*persistent_expression_state, return_valobj_sp)->shared_from_this()); assert (clang_expr_variable_sp.get()); Modified: lldb/trunk/source/Target/Target.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=248934&r1=248933&r2=248934&view=diff ============================================================================== --- lldb/trunk/source/Target/Target.cpp (original) +++ lldb/trunk/source/Target/Target.cpp Wed Sep 30 14:57:57 2015 @@ -88,7 +88,6 @@ Target::Target(Debugger &debugger, const m_scratch_ast_context_ap (), m_scratch_ast_source_ap (), m_ast_importer_ap (), - m_persistent_variables (new ClangPersistentVariables), m_source_manager_ap(), m_stop_hooks (), m_stop_hook_next_id (0), @@ -231,7 +230,6 @@ Target::Destroy() m_last_created_watchpoint.reset(); m_search_filter_sp.reset(); m_image_search_paths.Clear(notify); - m_persistent_variables->Clear(); m_stop_hooks.clear(); m_stop_hook_next_id = 0; m_suppress_stop_hooks = false; @@ -2119,7 +2117,7 @@ Target::EvaluateExpression lldb::ExpressionVariableSP persistent_var_sp; // Only check for persistent variables the expression starts with a '$' if (expr_cstr[0] == '$') - persistent_var_sp = m_persistent_variables->GetVariable (expr_cstr); + persistent_var_sp = GetScratchTypeSystemForLanguage(eLanguageTypeC)->GetPersistentExpressionState()->GetVariable (expr_cstr); if (persistent_var_sp) { @@ -2143,10 +2141,18 @@ Target::EvaluateExpression return execution_results; } -ClangPersistentVariables & -Target::GetPersistentVariables() +lldb::ExpressionVariableSP +Target::GetPersistentVariable(const ConstString &name) { - return *m_persistent_variables; + if (ClangASTContext *ast_context = GetScratchClangASTContext(false)) + { + if (PersistentExpressionState *persistent_state = ast_context->GetPersistentExpressionState()) + { + return persistent_state->GetVariable(name); + } + } + + return ExpressionVariableSP(); } lldb::addr_t _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits