diff options
| author | Adrian Prantl <aprantl@apple.com> | 2018-04-30 23:59:15 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2018-04-30 23:59:15 +0000 |
| commit | 5435f78046ee39f7bec4be7833cb0a86043f8aa2 (patch) | |
| tree | df2c9233d60e383508bad100b33fabb427ed43c8 /lldb/source/Plugins/ExpressionParser | |
| parent | 763cd2a98a61083593cd8f167bf6d27aa7eb6d96 (diff) | |
| download | llvm-5435f78046ee39f7bec4be7833cb0a86043f8aa2.tar.gz llvm-5435f78046ee39f7bec4be7833cb0a86043f8aa2.tar.bz2 llvm-5435f78046ee39f7bec4be7833cb0a86043f8aa2.zip | |
Move the persistent variable counter into Target
so it can be shared across multiple language plugins.
In a multi-language project it is counterintuitive to have a result
variables reuse numbers just because they are using a different
language plugin in LLDB (but not for example, when they are
Objective-C versus C++, since they are both handled by Clang).
This is NFC on llvm.org except for the Go plugin.
rdar://problem/39299889
Differential Revision: https://reviews.llvm.org/D46083
llvm-svn: 331234
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser')
6 files changed, 15 insertions, 12 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp index 8ebf78409a03..34fc7a19f110 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp @@ -10,6 +10,7 @@ #include "ClangPersistentVariables.h" #include "lldb/Core/Value.h" +#include "lldb/Target/Target.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/Log.h" #include "lldb/Utility/StreamString.h" @@ -52,10 +53,11 @@ void ClangPersistentVariables::RemovePersistentVariable( m_next_persistent_variable_id--; } -ConstString ClangPersistentVariables::GetNextPersistentVariableName() { +ConstString +ClangPersistentVariables::GetNextPersistentVariableName(Target &target) { char name_cstr[256]; ::snprintf(name_cstr, sizeof(name_cstr), "$%u", - m_next_persistent_variable_id++); + target.GetNextPersistentVariableIndex()); ConstString name(name_cstr); return name; } diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h index 16981a7fe14a..a9a4a3c1a5f3 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h @@ -61,7 +61,7 @@ public: /// @return /// A string that contains the next persistent variable name. //---------------------------------------------------------------------- - ConstString GetNextPersistentVariableName() override; + ConstString GetNextPersistentVariableName(Target &target) override; void RemovePersistentVariable(lldb::ExpressionVariableSP variable) override; diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp index d6526c08f1b0..0062bb8661e5 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp @@ -65,7 +65,8 @@ ClangUserExpression::ClangUserExpression( options), m_type_system_helper(*m_target_wp.lock().get(), options.GetExecutionPolicy() == - eExecutionPolicyTopLevel) { + eExecutionPolicyTopLevel), + m_result_delegate(exe_scope.CalculateTarget()) { switch (m_language) { case lldb::eLanguageTypeC_plus_plus: m_allow_cxx = true; @@ -663,10 +664,8 @@ void ClangUserExpression::ClangUserExpressionHelper::CommitPersistentDecls() { } } -ClangUserExpression::ResultDelegate::ResultDelegate() {} - ConstString ClangUserExpression::ResultDelegate::GetName() { - return m_persistent_state->GetNextPersistentVariableName(); + return m_persistent_state->GetNextPersistentVariableName(*m_target_sp); } void ClangUserExpression::ResultDelegate::DidDematerialize( diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.h index 88a78798b657..16d4af8b167a 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.h @@ -178,7 +178,7 @@ private: class ResultDelegate : public Materializer::PersistentVariableDelegate { public: - ResultDelegate(); + ResultDelegate(lldb::TargetSP target) : m_target_sp(target) {} ConstString GetName() override; void DidDematerialize(lldb::ExpressionVariableSP &variable) override; @@ -188,6 +188,7 @@ private: private: PersistentExpressionState *m_persistent_state; lldb::ExpressionVariableSP m_variable; + lldb::TargetSP m_target_sp; }; ResultDelegate m_result_delegate; diff --git a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp index 48c006a2cf7f..43ac4c6747a0 100644 --- a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp +++ b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp @@ -272,7 +272,7 @@ GoUserExpression::DoExecute(DiagnosticManager &diagnostic_manager, PersistentExpressionState *pv = target->GetPersistentExpressionStateForLanguage(eLanguageTypeGo); if (pv != nullptr) { - result->SetName(pv->GetNextPersistentVariableName()); + result->SetName(pv->GetNextPersistentVariableName(*target)); pv->AddVariable(result); } return lldb::eExpressionCompleted; @@ -650,11 +650,12 @@ ValueObjectSP GoUserExpression::GoInterpreter::VisitCallExpr( GoPersistentExpressionState::GoPersistentExpressionState() : PersistentExpressionState(eKindGo) {} -ConstString GoPersistentExpressionState::GetNextPersistentVariableName() { +ConstString +GoPersistentExpressionState::GetNextPersistentVariableName(Target &target) { char name_cstr[256]; // We can't use the same variable format as clang. ::snprintf(name_cstr, sizeof(name_cstr), "$go%u", - m_next_persistent_variable_id++); + target.GetNextPersistentVariableIndex()); ConstString name(name_cstr); return name; } diff --git a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.h b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.h index 03ceb76b8431..28c00215ed72 100644 --- a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.h +++ b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.h @@ -29,7 +29,7 @@ class GoPersistentExpressionState : public PersistentExpressionState { public: GoPersistentExpressionState(); - ConstString GetNextPersistentVariableName() override; + ConstString GetNextPersistentVariableName(Target &target) override; void RemovePersistentVariable(lldb::ExpressionVariableSP variable) override; |
