Present-to-absent check is necessary in assertion removal handler

This commit is contained in:
Tony Garnock-Jones 2018-10-21 13:32:06 +01:00
parent c26186f871
commit 2a806da35c
1 changed files with 8 additions and 5 deletions

View File

@ -204,11 +204,14 @@ function add_to_handler(h, vs) {
function del_from_cont(c, v) { c.cachedAssertions = c.cachedAssertions.remove(v); } function del_from_cont(c, v) { c.cachedAssertions = c.cachedAssertions.remove(v); }
function del_from_leaf(l, v) { l.cachedAssertions = l.cachedAssertions.remove(v); } function del_from_leaf(l, v) { l.cachedAssertions = l.cachedAssertions.remove(v); }
function del_from_handler(h, vs) { function del_from_handler(h, vs) {
h.cachedCaptures = Bag.change(h.cachedCaptures, vs, -1).bag; let net;
h.callbacks.forEach((cb) => { ({bag: h.cachedCaptures, net: net} = Bag.change(h.cachedCaptures, vs, -1));
cb(EVENT_REMOVED, vs); if (net === Bag.PRESENT_TO_ABSENT) {
return true; h.callbacks.forEach((cb) => {
}); cb(EVENT_REMOVED, vs);
return true;
});
}
} }
Index.prototype.adjustAssertion = function(outerValue, delta) { Index.prototype.adjustAssertion = function(outerValue, delta) {