-
-
Save lxmfly123/8018796f6eefd7833efaa51238210047 to your computer and use it in GitHub Desktop.
obj-c block implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct __block_impl { | |
void *isa; | |
int Flags; | |
int Reserved; | |
void *FuncPtr; | |
}; | |
struct __main_block_impl_0 { | |
struct __block_impl impl; | |
struct __main_block_desc_0* Desc; | |
__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { | |
impl.isa = &_NSConcreteStackBlock; | |
impl.Flags = flags; | |
impl.FuncPtr = fp; | |
Desc = desc; | |
} | |
}; | |
static void __main_block_func_0(struct __main_block_impl_0 *__cself) { | |
printf("Block\n"); | |
} | |
static struct __main_block_desc_0 { | |
size_t reserved; | |
size_t Block_size; | |
} __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)}; | |
int main () { | |
void (*blk) (void) = ((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA)); | |
((void (*)(__block_impl *))((__block_impl *)blk)->FuncPtr)((__block_impl *)blk); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment