[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