[Issue 2804] New: Impure nested functions should be legal inside pure functions[patch included]

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Apr 6 04:27:31 PDT 2009


http://d.puremagic.com/issues/show_bug.cgi?id=2804

           Summary: Impure nested functions should be legal inside pure
                    functions[patch included]
           Product: D
           Version: 2.027
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: patch, rejects-valid
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: clugdbug at yahoo.com.au


Example contributed by bearophile.

------
import std.c.stdio: printf;
import std.conv: toInt;

pure int double_sqr(int x) {
    int y, z;
    void do_sqr() { y *= y; }
    y = x;
    do_sqr();
    z += y;
    y = x;
    do_sqr();
    z += y;
    return z;
}

void main(string[] args) {
    int x = args.length == 2 ? toInt(args[1]) : 10;
    int y = double_sqr(x) + double_sqr(x);
    printf("4 * x * x = %d\n", y);
}
--------
pure_test3.d(...): Error: pure function 'double_sqr' cannot call impure
function 'do_sqr'

pure_test3.d(...): Error: pure function 'double_sqr' cannot call impure
function 'do_sqr'


-- 



More information about the Digitalmars-d-bugs mailing list