C-Style declarations, are they here to stay?!! Walter?

Hasan Aljudy hasan.aljudy at gmail.com
Fri Mar 31 18:16:29 PST 2006


Walter Bright wrote:
> Hasan Aljudy wrote:
> 
>> why is foo(y) allowed at the global scope? and why is it disallowed at 
>> local scope?!!
> 
> 
> It should be disallowed at global scope as well. I'll add it to the list 
> of bugs to be fixed.

I /think/ this comes from the C-Style declaration syntax ..

Decl:
         BasicType Declarators ;

Declarator:
         Identifier
         ( Declarator )

hence, int(x) has a parse tree which looks like:

       Decl
         |
    _____|_______
   |             |
BaiscType   Declarator
   |            |
  int       ____|_______
           |      |     |
           |      |     |
           ( Declarator )
                  |
                  |
              Identifier
                  |
                  |
                  x

The C-Style declaration syntax requires parenthesis around declarators, 
D-Style declaration syntax does not.

I think this is caught at the local scope because there's an ambiguity, is
# foo(x)
a function call or a declaration?

At the global scope there's no ambiguity, it must be a declaration.

However, inside function bodies, it could be a statement (function call 
or other things).
The code that disambiguates /assumes/ that foo(bar) declarations are not 
allowed, but the grammar allows it, and the docs don't indicate anywhere 
that foo(bar) is not a valid declaration.

Hence,
C-Style declarations cause ambiguities and trouble with the D 
declaration syntax.

Can they be gone now? :)






More information about the Digitalmars-d mailing list