gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnustep-cvs] r32376 - in /libs/base/trunk/Source: GNUmakefile GSBlo


From: Fred Kiefer
Subject: Re: [Gnustep-cvs] r32376 - in /libs/base/trunk/Source: GNUmakefile GSBlocks.m
Date: Sat, 26 Feb 2011 21:40:15 +0100
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.1.16) Gecko/20101125 SUSE/3.0.11 Thunderbird/3.0.11

Now you did the fixes that I listed as the easy ones. You still didn't
add a proper heading for the file. Nor did you write a solution for
stupid linkers. Your idea of using #if __has_feature(blocks) should
work, but somebody has to put it in there.

Fred

Am 26.02.2011 20:28, schrieb David Chisnall:
> This should just need the loop rewriting in C89 syntax (done in r32382) and a 
> few other tweaks.  The forward declaration warnings were caused by my 
> declaring the function and forgetting that I was calling it via a macro 
> normally.
> 
> The point of having this stuff in base is so that people can use blocks in 
> their code.  Without it, attempts to send -retain / -copy / -release to 
> blocks do badly wrong things, while developers expect them to Just Work™.  
> This is independent of whether the compiler used for -base supports 
> blocks[1], because the compiler used for -base may not be the same as the 
> compiler used for other code.
> 
> David
> 
> [1] You don't need a configure check for this, the following will work, and 
> is used in NSRegularExpression and a few other places:
> 
> #if __has_feature(blocks)
> // code that uses blocks
> #endif
> 
> On 26 Feb 2011, at 14:33, Fred Kiefer wrote:
>> I am getting a lot of errors from gcc 4.5 with this change:
>>
>> Compiling file GSBlocks.m ...
>> GSBlocks.m: In function ‘+[GSBlock load]’:
>> GSBlocks.m:25:2: error: ‘for’ loop initial declarations are only allowed
>> in C99 mode
>> GSBlocks.m:25:2: note: use option -std=c99 or -std=gnu99 to compile your
>> code
>> GSBlocks.m:30:2: warning: ISO C90 forbids mixed declarations and code
>> GSBlocks.m: In function ‘-[GSBlock copyWithZone:]’:
>> GSBlocks.m:35:2: warning: implicit declaration of function ‘Block_copy’
>> GSBlocks.m:35:2: warning: return makes pointer from integer without a cast
>> GSBlocks.m: In function ‘-[GSBlock copy]’:
>> GSBlocks.m:39:2: warning: return makes pointer from integer without a cast
>> GSBlocks.m: In function ‘-[GSBlock retain]’:
>> GSBlocks.m:43:2: warning: return makes pointer from integer without a cast
>> GSBlocks.m: In function ‘-[GSBlock release]’:
>> GSBlocks.m:47:2: warning: implicit declaration of function ‘Block_release’
>>
>> Now most of this would be resolvable by sticking to old C conventions
>> and renaming the locally declared functions by removing the underscore.
>> But what would happen then? When linking this file the block functions
>> would still be missing. A clever linker wont complain about that, but
>> will this also work on Windows? And what is the whole point of adding
>> support for blocks into base, when the compiler and runtime don't
>> support them?
>> What we need here is a proper detection of block support in the
>> configure step. And while you are at it, would you mind to put in a
>> correct header for this file? (copyright, licence and what so ever)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]