benmerckx / genes

Generates split ES6 modules and Typescript definitions from Haxe modules.
44 stars 8 forks source link

Incorrect function binding #10

Closed kevinresol closed 4 years ago

kevinresol commented 4 years ago
class Main {
    static function main() {
        var m = new Main();
        log(m.foo); // ok

        m.foo = null;
        log(m.foo); // fail
    }

    function new() {}

    dynamic function foo():String
        return 'foo';

    static function log(f:()->String)
        if(f != null) trace(f());
}

Haxe generated:

var m = new Main();
Main.log($bind(m,m.foo));
m.foo = null;
Main.log($bind(m,m.foo));

genes:

var m = new Main();
Main.log(m.foo.bind(m));
m.foo = null;
Main.log(m.foo.bind(m));

and obviously m.foo.bind will fail when m.foo is null

kevinresol commented 4 years ago

https://github.com/HaxeFoundation/haxe/pull/6301 should be useful?

benmerckx commented 4 years ago

https://github.com/benmerckx/genes/pull/11#issuecomment-597184759