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