Bug in leaking logic in regards to bindings
trueadm opened this issue · 1 comments
trueadm commented
Take the following case, it fails with the current logic.
function fn(items, abstractFunc) {
var a = 10;
var arr = Array.from(items);
function fn2() {
abstractFunc(function() {
return a;
});
}
var mapped = arr.map(function() {
return fn2();
});
a = 11;
return [a, mapped];
}
inspect = function() {
var value;
function mutateBinding(caller) {
value = caller();
}
fn([1,2,3], mutateBinding);
return value;
};
global.__optimize && __optimize(fn);
The output is incorrectly:
var fn;
(function () {
var _$3 = this;
var _$4 = _$3.Array;
var _$5 = _$4.from;
var _2 = function (items, abstractFunc) {
var _9 = function () {
var _E = function () {
return 11;
};
var _$2 = abstractFunc(_E);
return void 0;
};
var _$0 = _$5(items);
var _$1 = _$0.map(_9);
return [11, _$1];
};
var _6 = function () {
var value;
function mutateBinding(caller) {
value = caller();
}
fn([1, 2, 3], mutateBinding);
return value;
};
_$3.fn = _2;
_$3.inspect = _6;
}).call(this);
trueadm commented
Another failing case:
function fn(items, abstractFunc) {
var a = 10;
var b = function() {
return a;
};
var arr = Array.from(items);
function fn2() {
abstractFunc(function() {
return b;
});
}
var mapped = arr.map(function() {
return fn2();
});
b = function() {
return 20;
};
return [b, mapped];
}
inspect = function() {
var value;
function mutateBinding(caller) {
value = caller()();
}
fn([1,2,3], mutateBinding);
return value;
};
global.__optimize && __optimize(fn);