Index: src/Makefile ================================================================== --- src/Makefile +++ src/Makefile @@ -7,11 +7,10 @@ SRCS = OFApplication.m \ OFArray.m \ OFAutoreleasePool.m \ OFConstString.m \ - ${OFBLOCK_M} \ OFDataArray.m \ OFDictionary.m \ OFExceptions.m \ OFFile.m \ OFHash.m \ @@ -41,19 +40,21 @@ OFXMLElementBuilder.m \ OFXMLParser.m \ unicode.m INCLUDES := ${SRCS:.m=.h} \ + OFBlock.h \ OFCollection.h \ ObjFW.h \ asprintf.h \ ${ATOMIC_H} \ macros.h \ objfw-defs.h \ ${THREADING_H} -SRCS += ${ASPRINTF_M} \ +SRCS += ${OFBLOCK_M} \ + ${ASPRINTF_M} \ iso_8859_15.m \ windows_1252.m \ ${OBJC_PROPERTIES_M} \ ${OBJC_SYNC_M} Index: src/OFBlock.h ================================================================== --- src/OFBlock.h +++ src/OFBlock.h @@ -64,7 +64,14 @@ - copy; - (void)release; - autorelease; @end -extern of_block_literal_t* Block_copy(of_block_literal_t*); -extern void Block_release(of_block_literal_t*); +extern void* _Block_copy(const void*); +extern void _Block_release(const void*); + +#ifndef Block_copy +# define Block_copy(x) ((__typeof__(x))_Block_copy((const void*)(x))) +#endif +#ifndef Block_release +# define Block_release(x) _Block_release((const void*)(x)) +#endif Index: src/OFBlock.m ================================================================== --- src/OFBlock.m +++ src/OFBlock.m @@ -88,11 +88,11 @@ __objc_exec_class(&module); } /* Emd of ObjC module */ of_block_literal_t* -Block_copy(of_block_literal_t *block) +_Block_copy(of_block_literal_t *block) { if (block->isa == (Class)&_NSConcreteStackBlock) { of_block_literal_t *copy; if ((copy = malloc(block->descriptor->size)) == NULL) { @@ -115,11 +115,11 @@ return block; } void -Block_release(of_block_literal_t *block) +_Block_release(of_block_literal_t *block) { if (block->isa != (Class)&_NSConcreteMallocBlock) return; if (--block->reserved == 0) { @@ -136,11 +136,11 @@ flags &= OF_BLOCK_FIELD_IS_BLOCK | OF_BLOCK_FIELD_IS_OBJECT | OF_BLOCK_FIELD_IS_BYREF; switch (flags) { case OF_BLOCK_FIELD_IS_BLOCK: - *(of_block_literal_t**)dst = Block_copy(src); + *(of_block_literal_t**)dst = _Block_copy(src); break; case OF_BLOCK_FIELD_IS_OBJECT: *(id*)dst = [(id)src retain]; break; case OF_BLOCK_FIELD_IS_BYREF:; @@ -175,11 +175,11 @@ flags &= OF_BLOCK_FIELD_IS_BLOCK | OF_BLOCK_FIELD_IS_OBJECT | OF_BLOCK_FIELD_IS_BYREF; switch (flags) { case OF_BLOCK_FIELD_IS_BLOCK: - Block_release(obj); + _Block_release(obj); break; case OF_BLOCK_FIELD_IS_OBJECT: [(id)obj release]; break; case OF_BLOCK_FIELD_IS_BYREF:; @@ -198,16 +198,16 @@ static Class autoreleasepool = Nil; @implementation OFBlock - copy { - return (id)Block_copy((of_block_literal_t*)self); + return Block_copy(self); } - (void)release { - Block_release((of_block_literal_t*)self); + Block_release(self); } - autorelease { /*