HomePhabricator

[Expressions] Add support of expressions evaluation in some object's context

Description

[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

Details

Committed
aleksandr.urakovFeb 5 2019, 1:14 AM
Reviewer
jingham
Differential Revision
D55318: [Expressions] Add support of expressions evaluation in some object's context
Branches
Unknown
Tags
Unknown