Modifiers and declarations (Was: Re: alias and typedef declarations)

Bruno Medeiros brunodomedeiros+spam at com.gmail
Tue Dec 19 04:16:27 PST 2006


Ary Manzana wrote:
> I'm almost finishing the AST nodes "à la JDT" for the Descent plugin, 
> and I run into the following:
> 
> A typical alias declaration is:
> 
> # alias int Foo;
> 
> But this is also allowed:
> 
> # alias const x = 1;
> 
> Now, the AST nodes must record enough information to fully reflect what 
> is written in the source code. Currently in DMD the last sentence is 
> turned into a VarDeclaration that saves the storage class (const), the 
> variable name (x) and the initializer (1, which is mandatory for this 
> class of declarations). So the "alias" keyword is lost, and if you 
> modify the AST and rewrite, it will definitely be lost.
> 
> So it seems the "alias" keyword isn't changing anything, so rewriting it 
> as "const x = 1;" it's the same. Should I care about keeping the "alias" 
> keyword or not? It's pretty much easier for me not to keep it.
> 
> Any suggestion?
> 
> (the same happens if "typedef" is used instead of "alias")
> 
> BTW, while building the AST I found out that any declaration can be 
> preceded with modifiers. Sometimes it's pretty funny but luckily makes 
> no harm, so I'm not complaining for this anymore. For example:
> 
> # abstract static if (true) { }
>  > Will it evaluate? It's abstract :-P
> 
> # final static assert("D rules");
>  > Now that's a final assert!
> 
> # override debug = 1;
>  > If I defined it previously, now I can make it clear that I'm 
> overriding it
> 
> Etc.
> 
> Thanks,
> Ary

Yes, unfortunately it really is that DMD allows modifiers in many 
declarations where it does not make any sense (and that's according to 
spec grammar). I would suggest Walter should fix this eventually, in the 
meanwhile (which I suspect may be long), we can either try to be fully 
DMD compliant, or start creating our own view of what modifiers are 
allowed or not. I personally favor this later one, since the first is 
IMO broken, and may lead to extra unnecessary work in the (AST) 
implementation.

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D


More information about the Digitalmars-d-learn mailing list