mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-22 13:05:52 -04:00

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
47 lines
742 B
C++
47 lines
742 B
C++
namespace cpp_namespace {
|
|
struct CppStruct {
|
|
int field = 1111;
|
|
|
|
int function() {
|
|
return 2222;
|
|
}
|
|
};
|
|
|
|
union CppUnion {
|
|
char field_char;
|
|
short field_short;
|
|
int field_int;
|
|
};
|
|
|
|
CppStruct GetCppStruct() {
|
|
return CppStruct();
|
|
}
|
|
|
|
CppStruct global;
|
|
|
|
CppStruct *GetCppStructPtr() {
|
|
return &global;
|
|
}
|
|
}
|
|
|
|
int global = 3333;
|
|
|
|
int main()
|
|
{
|
|
cpp_namespace::CppStruct cpp_struct = cpp_namespace::GetCppStruct();
|
|
cpp_struct.function();
|
|
|
|
int field = 4444;
|
|
|
|
cpp_namespace::CppUnion cpp_union;
|
|
cpp_union.field_int = 5555;
|
|
|
|
int cpp_scalar = 6666;
|
|
|
|
cpp_namespace::CppStruct cpp_array[16];
|
|
|
|
cpp_namespace::CppStruct *cpp_pointer = cpp_namespace::GetCppStructPtr();
|
|
|
|
return 0; // Break here
|
|
}
|