Index: docs/Block-ABI-Apple.rst =================================================================== --- docs/Block-ABI-Apple.rst +++ docs/Block-ABI-Apple.rst @@ -144,7 +144,7 @@ static struct __block_descriptor_1 { unsigned long int reserved; unsigned long int Block_size; - } __block_descriptor_1 = { 0, sizeof(struct __block_literal_1), __block_invoke_1 }; + } __block_descriptor_1 = { 0, sizeof(struct __block_literal_1) }; and where the ``Block`` literal itself appears: @@ -270,8 +270,8 @@ struct __block_literal_3 *const existingBlock; }; - void __block_invoke_4(struct __block_literal_2 *_block) { - __block->existingBlock->invoke(__block->existingBlock); + void __block_invoke_4(struct __block_literal_4 *_block) { + _block->existingBlock->invoke(_block->existingBlock); } void __block_copy_4(struct __block_literal_4 *dst, struct __block_literal_4 *src) { @@ -487,7 +487,7 @@ struct _block_byref_i { void *isa; // set to NULL - struct _block_byref_voidBlock *forwarding; + struct _block_byref_i *forwarding; int flags; //refcount; int size; void (*byref_keep)(struct _block_byref_i *dst, struct _block_byref_i *src); @@ -506,17 +506,17 @@ }; void __block_invoke_5(struct __block_literal_5 *_block) { - _block->forwarding->captured_i = 10; + _block->i_holder->forwarding->captured_i = 10; } void __block_copy_5(struct __block_literal_5 *dst, struct __block_literal_5 *src) { //_Block_byref_assign_copy(&dst->captured_i, src->captured_i); - _Block_object_assign(&dst->captured_i, src->captured_i, BLOCK_FIELD_IS_BYREF | BLOCK_BYREF_CALLER); + _Block_object_assign(&dst->i_holder, src->i_holder, BLOCK_FIELD_IS_BYREF | BLOCK_BYREF_CALLER); } void __block_dispose_5(struct __block_literal_5 *src) { //_Block_byref_release(src->captured_i); - _Block_object_dispose(src->captured_i, BLOCK_FIELD_IS_BYREF | BLOCK_BYREF_CALLER); + _Block_object_dispose(src->i_holder, BLOCK_FIELD_IS_BYREF | BLOCK_BYREF_CALLER); } static struct __block_descriptor_5 { @@ -524,19 +524,19 @@ unsigned long int Block_size; void (*copy_helper)(struct __block_literal_5 *dst, struct __block_literal_5 *src); void (*dispose_helper)(struct __block_literal_5 *); - } __block_descriptor_5 = { 0, sizeof(struct __block_literal_5) __block_copy_5, __block_dispose_5 }; + } __block_descriptor_5 = { 0, sizeof(struct __block_literal_5), __block_copy_5, __block_dispose_5 }; and: .. code-block:: c - struct _block_byref_i i = {( .forwarding=&i, .flags=0, .size=sizeof(struct _block_byref_i) )}; + struct _block_byref_i i = {( .forwarding=&i, .flags=0, .size=sizeof(struct _block_byref_i), .captured_i=2 )}; struct __block_literal_5 _block_literal = { &_NSConcreteStackBlock, (1<<25)|(1<<29), , __block_invoke_5, &__block_descriptor_5, - 2, + &i, }; Importing ``__attribute__((NSObject))`` ``__block`` variables @@ -756,7 +756,7 @@ printf("%d\n", _block->foo.value()); } - void __block_literal_10(struct __block_literal_10 *dst, struct __block_literal_10 *src) { + void __block_copy_10(struct __block_literal_10 *dst, struct __block_literal_10 *src) { FOO_ctor(&dst->foo, &src->foo); } @@ -785,7 +785,7 @@ &__block_descriptor_10, }; comp_ctor(&_block_literal->foo, &foo); // const copy into stack version - struct __block_literal_10 &block = &_block_literal; // assign literal to block variable + struct __block_literal_10 *block = &_block_literal; // assign literal to block variable block->invoke(block); // invoke block comp_dtor(&_block_literal->foo); // destroy stack version of const block copy comp_dtor(&foo); // destroy original version @@ -862,7 +862,7 @@ .. code-block:: c - _Block_object_dispose(->target, BLOCK_FIELD_); + _Block_object_dispose(src->target, BLOCK_FIELD_); in the dispose helper where ```` is: