[Issue 7744] New: Crash with forward reference in string mixin
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Mar 20 20:16:41 PDT 2012
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=7744
           Summary: Crash with forward reference in string mixin
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: jminer7 at gmail.com
--- Comment #0 from Jordan Miner <jminer7 at gmail.com> 2012-03-20 20:16:58 PDT ---
Hi, I was working on a grammar with Pegged and dmd crashed. I reduced it to:
class ZeroOrMore(Expr)
{
    enum name = "ZeroOrMore!("~Expr.name~")";
}
class Range(char begin, char end)
{
    enum name = "Range!("~begin~","~end~")";
}
mixin(q{
    class RubySource : ZeroOrMore!(DecLiteral)
    {
    }
    class DecLiteral : Range!('0','9')
    {
    }
});
void main() {
}
I get this error, followed by dmd crashing:
dmd_crash.d(13): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'name'
If RubySource and DecLiteral are entered normally (not as a string mixin), then
the code compiles.
I tried reducing it a bit more:
class ZeroOrMore(Expr)
{
    enum name = "ZeroOrMore!("~Expr.name~")";
}
mixin(q{
    alias ZeroOrMore!(DecLiteral) foo;
    class DecLiteral
    {
        enum name = "Range!("~begin~","~end~")";
    }
});
void main() {
}
However, then I get a *large* number of errors:
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'name'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'opDot'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'opDispatch'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'ame'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'nme'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'nae'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'nam'
dmd_crash.d(32): Error: class dmd_crash.DecLiteral is forward referenced when
looking for 'anme'
...
For thousands of lines. I waited a little while, then killed dmd. Both of these
examples are valid code, right?
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list