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

           Summary: delegate reference wrong scope var value
           Product: D
           Version: 1.057
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nob...@puremagic.com
        ReportedBy: chang...@gmail.com


--- Comment #0 from changlon <chang...@gmail.com> 2010-06-05 07:27:33 PDT ---
-------------------------------------------------------------------------------
extern(C) void printf(char*, ... );

interface MyCall{
    void call(int);
}

class MyObject{
    MyCall[] list;

    void add(MyCall _mycall){
        list    ~= _mycall ;
    }

    void call(int i){
        foreach( c ; list) {
            c.call(i);
        }
    }
}


class MyTest {
    public void run(){
        MyObject obj    = new MyObject ;

        test3(obj);
        test2(obj);
        test1(obj);

        obj.call(3);
    }

    static void test1(char[] name = "test1\0" )(MyObject obj){
        printf("out: `%s` = `%x` \n\0".ptr ,  name.ptr, cast(void*) obj );
        obj.add( new class( delegate(int i){
            printf("in: `%s` = `%x` \n\0".ptr ,  name.ptr, cast(void*) obj );
        } ) MyCall{
            void delegate(int) dg;
            this(void delegate(int) _dg){
                this.dg    = _dg;
            }
            void call(int i) {
                dg(i);
            }
        } ) ;
    }

    void test2(MyObject obj){
        test1!("test2\0")(obj);
    }

    void test3(ref MyObject obj){
        test1!("test3\0")(obj);
    }
}

void main(){
    auto t    = new MyTest;
    t.run;
}
-------------------------------------------------------------------------------

out: `test3` = `a42fe0` 
out: `test2` = `a42fe0` 
out: `test1` = `a42fe0` 
in: `test3` = `414204` 
in: `test2` = `414204` 
in: `test1` = `12fe88`

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to