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