[Issue 1016] New: CTFE fails with recursive functions
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Mar 2 02:53:24 PST 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1016
Summary: CTFE fails with recursive functions
Product: D
Version: 1.007
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla at digitalmars.com
ReportedBy: clugdbug at yahoo.com.au
This seems to be a tail recursion problem? Calling the function recursively
(while ignoring the result) seems to clobber the local value of the variable.
I'm not sure if line (3) is the same bug or not; there seems to be a morass of
related bugs in the CTFE stuff.
-----------------
int exprLength(char [] s)
{
int numParens=0;
for (int i=0; i<s.length; ++i) {
if (s[i]=='(') { numParens++; }
if (s[i]==')') { numParens--; }
if (numParens == 0) { return i; }
}
}
char [] makePostfix(char [] operations)
{
if (operations.length<2) return "x";
int x = exprLength(operations);
char [] first="bad";
if (x>0) {
first = "ok";
char [] ignore = makePostfix(operations[1..x]); // This makes (2) fail.
}
return first;
}
void main()
{
char [] q = makePostfix("(a+b)*c");
assert(q=="ok"); // (1) PASSES
const char [] q2 = makePostfix("(a+b)*c");
static assert(q2=="ok"); // (2) FAILS
static assert(makePostfix("(a+b)*c")=="ok"); // (3) not evaluatable at
compile time
}
--
More information about the Digitalmars-d-bugs
mailing list