[Lldb-commits] [lldb] r248934 - Now persistent expression data no longer lives with the Target, but rather with

Sean Callanan via lldb-commits lldb-commits at lists.llvm.org
Wed Sep 30 12:57:57 PDT 2015


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




More information about the lldb-commits mailing list