[Expressions] Add support of expressions evaluation in some object's context
authorAleksandr Urakov <aleksandr.urakov@jetbrains.com>
Tue, 5 Feb 2019 09:14:36 +0000 (09:14 +0000)
committerAleksandr Urakov <aleksandr.urakov@jetbrains.com>
Tue, 5 Feb 2019 09:14:36 +0000 (09:14 +0000)
commit40624a085c03fb6d41834885d41f7158ab72950e
tree669263f8f423f073f133b68787079cf8fecb8411
parentde5220ed5e5ab1f7064e9bae57d7b4b8887277fa
[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
26 files changed:
lldb/include/lldb/API/SBValue.h
lldb/include/lldb/Expression/ExpressionSourceCode.h
lldb/include/lldb/Expression/UserExpression.h
lldb/include/lldb/Symbol/ClangASTContext.h
lldb/include/lldb/Symbol/TypeSystem.h
lldb/include/lldb/Target/Target.h
lldb/packages/Python/lldbsuite/test/expression_command/context-object-objc/Makefile [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/expression_command/context-object-objc/TestContextObjectObjc.py [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/expression_command/context-object-objc/main.m [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/expression_command/context-object/Makefile [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/expression_command/context-object/TestContextObject.py [new file with mode: 0644]
lldb/packages/Python/lldbsuite/test/expression_command/context-object/main.cpp [new file with mode: 0644]
lldb/scripts/interface/SBValue.i
lldb/source/API/SBValue.cpp
lldb/source/Breakpoint/BreakpointLocation.cpp
lldb/source/Breakpoint/Watchpoint.cpp
lldb/source/Commands/CommandObjectExpression.cpp
lldb/source/Expression/ExpressionSourceCode.cpp
lldb/source/Expression/UserExpression.cpp
lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.h
lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp
lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.h
lldb/source/Plugins/ExpressionParser/Clang/ClangUtilityFunction.cpp
lldb/source/Symbol/ClangASTContext.cpp
lldb/source/Target/Target.cpp