blob: e07241759cf109eb585c7bb3373cb39b27013922 [file] [log] [blame]
#include <stdio.h>
#include <Block.h>
struct test1
{
char test1_char;
int test1_int;
};
int called_from_block (int in_value)
{
return in_value * 2;
}
int (^(block_maker (int in_ref_value, char *strptr))) (int, char *)
{
__block int by_ref = in_ref_value;
int nother_value = strptr[0];
int test_value;
int test_value2;
/* Breakpoint for first Block function. */
int (^blockptr) (int, char *) = ^(int inval, char *strptr) {
inval = called_from_block (inval);
by_ref++;
return by_ref + inval + nother_value;
};
/* Breakpoint for second Block function. */
int (^blockptr2) (int, char*) = ^(int inval, char *strptr) { return by_ref + inval + (int)strptr[0]; };
test_value = blockptr (0, "other_string");
test_value2 = blockptr2 (5, "flibberty-gibbit");
return Block_copy (blockptr);
}
int
block_taker (int (^myBlock)(int, char *), int other_input, char *instr)
{
return 5 * myBlock (other_input, instr);
}
struct test1
block_taker_struct (struct test1 (^myBlock) (int), int test1_int)
{
return myBlock (test1_int);
}
struct test1 (^(block_maker_struct (int in_ref))) (int)
{
__block struct test1 by_ref;
int by_value = 2 * in_ref;
struct test1 test_value;
by_ref.test1_int = 1;
by_ref.test1_char = 'a';
/* Breakpoint for third Block function. */
struct test1 (^blockptr) (int) = ^(int inint) {
struct test1 my_struct;
called_from_block (0);
if (by_value > 1)
my_struct.test1_char = 'a';
else
my_struct.test1_char = 'b';
my_struct.test1_int = inint + by_ref.test1_int;
by_ref.test1_int++;
return my_struct;
};
test_value = blockptr (0);
return Block_copy (blockptr);
}
int main (int argc, char **argv)
{
int int_ret;
struct test1 test1_ret;
int (^block_ptr) (int, char *) = (int (^) (int, char *)) block_maker (100, "some string");
struct test1 (^struct_block_ptr) (int) = (struct test1 (^) (int)) block_maker_struct (100);
int_ret = block_taker (block_ptr, 5, "some string");
test1_ret = block_taker_struct (struct_block_ptr, 10);
return 0;
}