Thread overview
Where is pragma Declaration in the grammar?
Dec 05, 2020
Stefan Koch
Dec 05, 2020
Paul Backus
Dec 05, 2020
Stefan Koch
Dec 05, 2020
Paul Backus
December 05, 2020
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
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
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
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