Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
September 18, 2011 attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Just came across some old D code that does this: version(linux){ extern(C): } <Hundreds of OpenGL decls> in dmd 2.055, the extern(C) is not being applied to the OpenGL decls. should it? |
September 18, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | On 09/18/2011 06:55 PM, Ellery Newcomer wrote:
> Just came across some old D code that does this:
>
> version(linux){
> extern(C):
> }
>
> <Hundreds of OpenGL decls>
>
>
>
> in dmd 2.055, the extern(C) is not being applied to the OpenGL decls.
> should it?
Yes they should be applied, unless they declare D functions, which is seldom the case for <Hundreds of OpenGL decls>.
If you are asking, if the D compiler is wrong here: No, it is by design, you can check with the D grammar.
|
September 18, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | On 09/18/2011 01:02 PM, Timon Gehr wrote:
>
> If you are asking, if the D compiler is wrong here: No, it is by design, you can check with the D grammar.
Nah, just confirming that failure to apply the externs is a bug.
|
September 18, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | Am 18.09.2011, 18:55 Uhr, schrieb Ellery Newcomer <ellery-newcomer@utulsa.edu>:
> Just came across some old D code that does this:
>
> version(linux){
> extern(C):
> }
>
> <Hundreds of OpenGL decls>
>
>
>
> in dmd 2.055, the extern(C) is not being applied to the OpenGL decls.
> should it?
Walter once said it was deliberate.
That extern(C) is only valid inside the version block.
But I also think it should be the other way around.
|
September 18, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | On 09/18/2011 10:46 PM, Ellery Newcomer wrote:
> On 09/18/2011 01:02 PM, Timon Gehr wrote:
>>
>> If you are asking, if the D compiler is wrong here: No, it is by design,
>> you can check with the D grammar.
>
> Nah, just confirming that failure to apply the externs is a bug.
version(linux){
extern(C):
} // affected declarations end here, because '}' is not a declaration.
ConditionalDeclarations don't work like the C preprocessor, the code is parsed before the ConditionalDeclaration is applied, not the other way round.
It would indeed be desirable to have it work like this, but it would be a special case.
|
September 18, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Trass3r | On 09/18/2011 04:09 PM, Trass3r wrote:
> Am 18.09.2011, 18:55 Uhr, schrieb Ellery Newcomer <ellery-newcomer@utulsa.edu>:
>
>> Just came across some old D code that does this:
>>
>> version(linux){
>> extern(C):
>> }
>>
>> <Hundreds of OpenGL decls>
>>
>>
>>
>> in dmd 2.055, the extern(C) is not being applied to the OpenGL decls.
>> should it?
>
> Walter once said it was deliberate.
> That extern(C) is only valid inside the version block.
> But I also think it should be the other way around.
Really.
Wonder how gunroar ever compiled
|
September 19, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | "Ellery Newcomer" <ellery-newcomer@utulsa.edu> wrote in message news:j557r6$vgt$1@digitalmars.com... > Just came across some old D code that does this: > > version(linux){ > extern(C): > } > Are the prototypes extern(Windows) when not on linux, by any chance? That is the only combination I've ever had to use, and is supported by extern(System). |
September 19, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | On 9/19/2011 1:55 AM, Ellery Newcomer wrote:
> Just came across some old D code that does this:
>
> version(linux){
> extern(C):
> }
>
> <Hundreds of OpenGL decls>
>
>
>
> in dmd 2.055, the extern(C) is not being applied to the OpenGL decls.
> should it?
Change it to the following, and you're golden.
extern(System):
<Hundreds of OpenGL decls>
|
September 19, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | > Change it to the following, and you're golden.
>
> extern(System):
>
> <Hundreds of OpenGL decls>
That only fixes this particular issue.
I once had the following case that can't be done:
version(V1)
{
extern(System):
}
else
{
extern(C):
}
|
September 19, 2011 Re: attribute decl in version decl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Trass3r | On 09/19/2011 03:37 PM, Trass3r wrote: >> Change it to the following, and you're golden. >> >> extern(System): >> >> <Hundreds of OpenGL decls> > > That only fixes this particular issue. > > I once had the following case that can't be done: > > version(V1) > { > extern(System): > } > else > { > extern(C): > } You could use the C preprocessor ;). Or this, that does the same thing: version(V1) private enum _v1=true; else private enum _v1=false; mixin((_v1?"extern(System):":"extern(C):")~q{ // all declarations that should be affected. }); |
Copyright © 1999-2021 by the D Language Foundation