www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Re: Debugging CTFE

Koroskin Denis Wrote:

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

 On Tue, 17 Jun 2008 20:04:25 +0400, Matthias Walter
 <Matthias.Walter st.ovgu.de> wrote:

  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
  best regards
 Matthias Walter


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; }

Yes, the problem is, that compile-time functions must also be runtime-executable (and pragma must not depend on runtime variables), which I think, should not be a necessarity. But I guess this makes sense from Walters point of view, so this won't change in near future, I guess.
Jun 19 2008