34 lines
697 B
Ruby
34 lines
697 B
Ruby
## TODO: DELETE ME WHEN https://github.com/cowboyd/therubyracer/pull/336
|
|
# is upstreamed and released
|
|
#
|
|
module V8
|
|
module Weak
|
|
class WeakValueMap
|
|
def initialize
|
|
@values = {}
|
|
end
|
|
|
|
def [](key)
|
|
if ref = @values[key]
|
|
ref.object
|
|
end
|
|
end
|
|
|
|
def []=(key, value)
|
|
ref = V8::Weak::Ref.new(value)
|
|
ObjectSpace.define_finalizer(value, self.class.ensure_cleanup(@values, key, ref))
|
|
|
|
@values[key] = ref
|
|
end
|
|
|
|
private
|
|
|
|
def self.ensure_cleanup(values,key,ref)
|
|
proc {
|
|
values.delete(key) if values[key] == ref
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|