Sha256: 3dc57a7ab02e85f82dd3f841fc97f0ea4f6da3b442696667bd4e5ca8b372d803

Contents?: true

Size: 735 Bytes

Versions: 15

Compression:

Stored size: 735 Bytes

Contents

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 ||= Ref::WeakValueMap.new
    end

    def rb_idmap
      @ruby_idmap ||= Ref::WeakValueMap.new
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
therubyracer-0.11.0beta7-x86_64-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta7-x86-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta7-x86_64-darwin-10 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta7 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta6-x86-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta6-x86_64-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta6 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta5-x86-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta5 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta5-x86_64-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta4 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta3 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta2-x86_64-linux lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta2 lib/v8/conversion/indentity.rb
therubyracer-0.11.0beta1 lib/v8/conversion/indentity.rb