1#import "ivars-in-blocks.h"
2#import <stdio.h>
3
4typedef int (^my_block_ptr_type) (int);
5
6@interface IAmBlocky()
7{
8 int _hidden_ivar;
9 my_block_ptr_type _block_ptr;
10}
11
12@end
13
14@implementation IAmBlocky
15
16+ (int) addend
17{
18 return 3;
19}
20
21+ (void) classMethod
22{
23 int (^my_block)(int) = ^(int foo)
24 {
25 int ret = foo + [self addend];
26 return ret; // Break here inside the class method block.
27 };
28 printf(format: "%d\n", my_block(2));
29}
30
31- (void) makeBlockPtr;
32{
33 _block_ptr = ^(int inval)
34 {
35 _hidden_ivar += inval;
36 return blocky_ivar * inval; // Break here inside the block.
37 };
38}
39
40- (IAmBlocky *) init
41{
42 blocky_ivar = 10;
43 _hidden_ivar = 20;
44 // Interesting... Apparently you can't make a block in your init method. This crashes...
45 // [self makeBlockPtr];
46 return self;
47}
48
49- (int) callABlock: (int) block_value
50{
51 if (_block_ptr == NULL)
52 [self makeBlockPtr];
53 int ret = _block_ptr (block_value);
54 [IAmBlocky classMethod];
55 return ret;
56}
57@end
58
59

source code of lldb/test/API/lang/objc/blocks/ivars-in-blocks.m