This patch adds support for evaluating expressions which reference
a captured this from within the context of a C++ lambda expression.
Currently LLDB doesn't provide Clang with enough information to
determine that we're inside a lambda expression and are allowed to
access variables on a captured this; instead Clang simply fails
to parse the expression.
There are two problems to solve here:
- Make sure clang::Sema doesn't reject the expression due to illegal member access.
- Materialize all the necessary captured variables/member variables required to evaluate the expression.
To address (1), we currently import the outer structure's AST context
onto $__lldb_class, making the contextClass and the NamingClass
match, a requirement by clang::Sema::BuildPossibleImplicitMemberExpr.
To address (2), we inject all captured variables as locals into the
expression source code.
Testing
- Added API test
We seem to put empty /// lines between each of the parameters in most other places. I think that makes them marginally easier to read, and it's what we do in most other places...