fragile
Version:
A fragile `weak` implementation for v8.
28 lines (20 loc) • 412 B
JavaScript
/* global gc */
function * _weak(value) {
const d = new WeakSet()
function setWeakValue(_value) {
if (_value === false) return
d.add(_value)
}
setWeakValue(value)
setWeakValue(false)
value = null
while (true) {
gc()
yield eval('%GetWeakSetValues(d, 0).length !== 0')
}
}
function weak(value) {
const a = _weak(value)
return () => a.next().value
}
module.exports = weak