Thread overview | ||||||
---|---|---|---|---|---|---|
|
December 05, 2020 Where is pragma Declaration in the grammar? | ||||
---|---|---|---|---|
| ||||
Hi, today I've been dusting my SDC fork and implemented a rudimentary version of pragma(msg). I could pragmaStatement as in void f() { pragma(msg, typeof(f)); } but not a declaration as in pragma(msg, typeof(f)) without a function body. there is a StaticAssert is in the grammar under declaration, pragma is not. Maybe it's stated differently? Any help is appreciated. Cheers, Stefan |
December 05, 2020 Re: Where is pragma Declaration in the grammar? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan Koch | On Saturday, 5 December 2020 at 00:57:04 UTC, Stefan Koch wrote: > Hi, > > today I've been dusting my SDC fork and implemented a rudimentary version of pragma(msg). > > I could pragmaStatement > > as in void f() > { > pragma(msg, typeof(f)); > } > > but not a declaration as in > pragma(msg, typeof(f)) > without a function body. They're under Attribute: https://dlang.org/spec/grammar.html#Attribute The syntax tree for `pragma(msg, typeof(f))` in a declaration context would be: DeclDef AttributeSpecifier Attribute Pragma pragma(msg, typeof(f)) DeclarationBlock DeclDef ; |
December 05, 2020 Re: Where is pragma Declaration in the grammar? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Saturday, 5 December 2020 at 02:59:58 UTC, Paul Backus wrote:
> On Saturday, 5 December 2020 at 00:57:04 UTC, Stefan Koch wrote:
>> Hi,
>>
>> today I've been dusting my SDC fork and implemented a rudimentary version of pragma(msg).
>>
>> I could pragmaStatement
>>
>> as in void f()
>> {
>> pragma(msg, typeof(f));
>> }
>>
>> but not a declaration as in
>> pragma(msg, typeof(f))
>> without a function body.
>
> They're under Attribute:
>
> https://dlang.org/spec/grammar.html#Attribute
>
> The syntax tree for `pragma(msg, typeof(f))` in a declaration context would be:
>
> DeclDef
> AttributeSpecifier
> Attribute
> Pragma
> pragma(msg, typeof(f))
> DeclarationBlock
> DeclDef
> ;
The Decldef is not optional.
This is for pragmas like pragma mangle that affect symbols.
|
December 05, 2020 Re: Where is pragma Declaration in the grammar? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan Koch | On Saturday, 5 December 2020 at 03:55:52 UTC, Stefan Koch wrote: > On Saturday, 5 December 2020 at 02:59:58 UTC, Paul Backus wrote: >> >> They're under Attribute: >> >> https://dlang.org/spec/grammar.html#Attribute >> >> The syntax tree for `pragma(msg, typeof(f))` in a declaration context would be: >> >> DeclDef >> AttributeSpecifier >> Attribute >> Pragma >> pragma(msg, typeof(f)) >> DeclarationBlock >> DeclDef >> ; > > The Decldef is not optional. > This is for pragmas like pragma mangle that affect symbols. That's what I thought at first too, but according to the official grammar, the DeclDef can be a single semicolon (i.e., empty): https://dlang.org/spec/grammar.html#DeclDef |
Copyright © 1999-2021 by the D Language Foundation