digitalmars.D.learn - Re: Debugging CTFE
- Matthias Walter <Matthias.Walter st.ovgu.de> Jun 19 2008
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: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
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; }
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