Thread overview
[Issue 2804] New: Impure nested functions should be legal inside pure functions[patch included]
Apr 06, 2009
d-bugmail
Apr 06, 2009
d-bugmail
Apr 18, 2009
d-bugmail
April 06, 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@digitalmars.com
        ReportedBy: clugdbug@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'


-- 

April 06, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2804





------- Comment #1 from clugdbug@yahoo.com.au  2009-04-06 06:30 -------
Created an attachment (id=315)
 --> (http://d.puremagic.com/issues/attachment.cgi?id=315&action=view)
patch for 2804

This allows pure functions to call their own nested functions (even if such
functions aren't marked as pure), but prevents nested functions inside pure
functions from
(1) calling impure functions and
(2) accessing static variables.


-- 

April 18, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2804


clugdbug@yahoo.com.au changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED




------- Comment #2 from clugdbug@yahoo.com.au  2009-04-18 01:05 -------
Fixed DMD2.028


--