summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/ExpressionSourceCode.cpp
diff options
context:
space:
mode:
authorAleksandr Urakov <aleksandr.urakov@jetbrains.com>2019-02-05 09:14:36 +0000
committerAleksandr Urakov <aleksandr.urakov@jetbrains.com>2019-02-05 09:14:36 +0000
commit40624a085c03fb6d41834885d41f7158ab72950e (patch)
tree669263f8f423f073f133b68787079cf8fecb8411 /lldb/source/Expression/ExpressionSourceCode.cpp
parentde5220ed5e5ab1f7064e9bae57d7b4b8887277fa (diff)
downloadbcm5719-llvm-40624a085c03fb6d41834885d41f7158ab72950e.tar.gz
bcm5719-llvm-40624a085c03fb6d41834885d41f7158ab72950e.zip
[Expressions] Add support of expressions evaluation in some object's context
Summary: This patch adds support of expression evaluation in a context of some object. Consider the following example: ``` struct S { int a = 11; int b = 12; }; int main() { S s; int a = 1; int b = 2; // We have stopped here return 0; } ``` This patch allows to do something like that: ``` lldb.frame.FindVariable("s").EvaluateExpression("a + b") ``` and the result will be `33` (not `3`) because fields `a` and `b` of `s` will be used (not locals `a` and `b`). This is achieved by replacing of `this` type and object for the expression. This has some limitations: an expression can be evaluated only for values located in the debuggee process memory (they must have an address of `eAddressTypeLoad` type). Reviewers: teemperor, clayborg, jingham, zturner, labath, davide, spyffe, serge-sans-paille Reviewed By: jingham Subscribers: abidh, lldb-commits, leonid.mashinskiy Tags: #lldb Differential Revision: https://reviews.llvm.org/D55318 llvm-svn: 353149
Diffstat (limited to 'lldb/source/Expression/ExpressionSourceCode.cpp')
-rw-r--r--lldb/source/Expression/ExpressionSourceCode.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/lldb/source/Expression/ExpressionSourceCode.cpp b/lldb/source/Expression/ExpressionSourceCode.cpp
index d19321a429e..a146472c26c 100644
--- a/lldb/source/Expression/ExpressionSourceCode.cpp
+++ b/lldb/source/Expression/ExpressionSourceCode.cpp
@@ -178,7 +178,8 @@ static void AddLocalVariableDecls(const lldb::VariableListSP &var_list_sp,
bool ExpressionSourceCode::GetText(std::string &text,
lldb::LanguageType wrapping_language,
bool static_method,
- ExecutionContext &exe_ctx) const {
+ ExecutionContext &exe_ctx,
+ bool add_locals) const {
const char *target_specific_defines = "typedef signed char BOOL;\n";
std::string module_macros;
@@ -251,12 +252,13 @@ bool ExpressionSourceCode::GetText(std::string &text,
}
}
- ConstString object_name;
- if (Language::LanguageIsCPlusPlus(frame->GetLanguage())) {
- if (target->GetInjectLocalVariables(&exe_ctx)) {
- lldb::VariableListSP var_list_sp =
- frame->GetInScopeVariableList(false, true);
- AddLocalVariableDecls(var_list_sp, lldb_local_var_decls);
+ if (add_locals) {
+ if (Language::LanguageIsCPlusPlus(frame->GetLanguage())) {
+ if (target->GetInjectLocalVariables(&exe_ctx)) {
+ lldb::VariableListSP var_list_sp =
+ frame->GetInScopeVariableList(false, true);
+ AddLocalVariableDecls(var_list_sp, lldb_local_var_decls);
+ }
}
}
}
OpenPOWER on IntegriCloud