www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Where is pragma Declaration in the grammar?

reply Stefan Koch <uplink.coder googlemail.com> writes:
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
Dec 04 2020
parent reply Paul Backus <snarwin gmail.com> writes:
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 ;
Dec 04 2020
parent reply Stefan Koch <uplink.coder googlemail.com> writes:
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.
Dec 04 2020
parent Paul Backus <snarwin gmail.com> writes:
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
Dec 04 2020