digitalmars.D - UDAs grammar: <template_instance> valid?
- Bruno Medeiros (11/11) Oct 29 2014 Someone opened an issue report for a bug in the DDT parser, it doesn't
- Kenji Hara via Digitalmars-d (28/36) Oct 29 2014 It is a grammar bug, because DMD parser intentionally accepts the syntax...
- Bruno Medeiros (5/16) Oct 29 2014 Opened: https://issues.dlang.org/show_bug.cgi?id=13664
Someone opened an issue report for a bug in the DDT parser, it doesn't
parse this:
template X(int Y){}
X!3 // error here
void main(){}
And yet DMD accepts this code. Is this grammar supposed to be valid
though? The grammar spec doesn't allow it, not that means much. I
searched for an open grammar bug, but couldn't find one.
--
Bruno Medeiros
https://twitter.com/brunodomedeiros
Oct 29 2014
2014-10-29 21:33 GMT+09:00 Bruno Medeiros via Digitalmars-d <
digitalmars-d puremagic.com>:
Someone opened an issue report for a bug in the DDT parser, it doesn't
parse this:
template X(int Y){}
X!3 // error here
void main(){}
And yet DMD accepts this code. Is this grammar supposed to be valid
though? The grammar spec doesn't allow it, not that means much. I searched
for an open grammar bug, but couldn't find one.
It is a grammar bug, because DMD parser intentionally accepts the syntax.
https://github.com/D-Programming-Language/dmd/blob/9d1d0245fda3107f01d2b1460c7bcc34188a751e/src/parse.c#L1003
StorageClass Parser::parseAttribute(Expressions **pudas)
{
nextToken();
Expressions *udas = NULL;
StorageClass stc = 0;
if (token.value == TOKidentifier)
{
if (token.ident == Id::property)
...
else
{
// Allow identifier, template instantiation, or function call
<-----
Expression *exp = parsePrimaryExp();
if (token.value == TOKlparen)
{
Loc loc = token.loc;
exp = new CallExp(loc, exp, parseArguments());
}
udas = new Expressions();
udas->push(exp);
}
}
Kenji Hara
Oct 29 2014
On 29/10/2014 13:21, Kenji Hara via Digitalmars-d wrote:
2014-10-29 21:33 GMT+09:00 Bruno Medeiros via Digitalmars-d
<digitalmars-d puremagic.com <mailto:digitalmars-d puremagic.com>>:
Someone opened an issue report for a bug in the DDT parser, it
doesn't parse this:
template X(int Y){}
X!3 // error here
void main(){}
And yet DMD accepts this code. Is this grammar supposed to be valid
though? The grammar spec doesn't allow it, not that means much. I
searched for an open grammar bug, but couldn't find one.
It is a grammar bug, because DMD parser intentionally accepts the syntax.
Opened: https://issues.dlang.org/show_bug.cgi?id=13664
--
Bruno Medeiros
https://twitter.com/brunodomedeiros
Oct 29 2014








Bruno Medeiros <bruno.do.medeiros+dng gmail.com>