Re: Where is pragma Declaration in the grammar?

2020-12-04 Thread Paul Backus via Digitalmars-d-learn

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


Re: Where is pragma Declaration in the grammar?

2020-12-04 Thread Stefan Koch via Digitalmars-d-learn

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.


Re: Where is pragma Declaration in the grammar?

2020-12-04 Thread Paul Backus via Digitalmars-d-learn

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
;


Where is pragma Declaration in the grammar?

2020-12-04 Thread Stefan Koch via Digitalmars-d-learn

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