Debugging CTFE

Koroskin Denis 2korden at gmail.com
Tue Jun 17 10:27:58 PDT 2008


On Tue, 17 Jun 2008 20:56:00 +0400, BCS <ao at pathlink.com> wrote:

> Reply to Koroskin,
>
>> On Tue, 17 Jun 2008 20:04:25 +0400, Matthias Walter
>> <Matthias.Walter at st.ovgu.de> wrote:
>>
>>> Hello,
>>>  I have written some compile time executable functions with D 1.0
>>> which  work in runtime but hang (and allocate memory without end) at
>>> compile-time. Is there a way to debug this further? Can one print
>>> stuff  out? (Don't know if writefln works at compile-time, as I'm
>>> using Tango)  Can I somehow get a stack trace of the functions
>>> called?
>>>  best regards
>>> Matthias Walter
>> You can use pragma(msg, "hello there!") to output some text at compile
>> time.
>>
>
> I don't /think/ that works for what is wanted:
>
> char[] CTFE()
> {
>    char[] c = "hello world",    for(;c.length >0; c=c[0..$-1])
>       pragma(msg, c);
>
>    return c;
> }
>
>
> // not tested
>
>

You are right. But although it doesn't work (currently) for CTFE, it does  
for templates:

template itoa(uint i)
{
     static if (i < 10)
         const char[] itoa = "" ~ cast(char)(i + '0');
     else
         const char[] itoa = itoa!(i / 10) ~ itoa!(i % 10);
}

template factorial(int i)
{
     pragma(msg, "Calculating factorial of " ~ itoa!(i));

     static if (i < 2) {
         const int factorial = 1;
     } else {
         const int factorial = factorial!(i-1)*i;
     }
}

int main()
{
     const int t = factorial!(100);
     return 0;
}


More information about the Digitalmars-d-learn mailing list