mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -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
48 lines
589 B
Objective-C
48 lines
589 B
Objective-C
#import <Foundation/Foundation.h>
|
|
|
|
@interface ObjcClass : NSObject {
|
|
int field;
|
|
}
|
|
|
|
@property int property;
|
|
|
|
+(ObjcClass*)createNew;
|
|
|
|
-(id)init;
|
|
|
|
-(int)method;
|
|
|
|
@end
|
|
|
|
@implementation ObjcClass
|
|
|
|
+(ObjcClass*)createNew {
|
|
return [ObjcClass new];
|
|
}
|
|
|
|
-(id)init {
|
|
self = [super init];
|
|
if (self) {
|
|
field = 1111;
|
|
_property = 2222;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
-(int)method {
|
|
return 3333;
|
|
}
|
|
|
|
@end
|
|
|
|
int main()
|
|
{
|
|
@autoreleasepool {
|
|
ObjcClass* objcClass = [ObjcClass new];
|
|
|
|
int field = 4444;
|
|
|
|
return 0; // Break here
|
|
}
|
|
}
|