1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/lib/v8/conversion/indentity.rb
2012-08-11 14:22:22 -05:00

31 lines
No EOL
745 B
Ruby

require 'ref'
class V8::Conversion
module Identity
def to_ruby(v8_object)
if v8_object.class <= V8::C::Object
v8_idmap[v8_object.GetIdentityHash()] || super(v8_object)
else
super(v8_object)
end
end
def to_v8(ruby_object)
return super(ruby_object) if ruby_object.is_a?(String) || ruby_object.is_a?(Primitive)
rb_idmap[ruby_object.object_id] || super(ruby_object)
end
def equate(ruby_object, v8_object)
v8_idmap[v8_object.GetIdentityHash()] = ruby_object
rb_idmap[ruby_object.object_id] = v8_object
end
def v8_idmap
@v8_idmap ||= V8::Weak::WeakValueMap.new
end
def rb_idmap
@ruby_idmap ||= V8::Weak::WeakValueMap.new
end
end
end