diff --git a/lib/v8.rb b/lib/v8.rb index 58b0f4f..399fef5 100644 --- a/lib/v8.rb +++ b/lib/v8.rb @@ -7,6 +7,7 @@ require 'v8/error/protect' require 'v8/error/try' require 'v8/conversion/fundamental' require 'v8/conversion/indentity' +require 'v8/conversion/reference' require 'v8/conversion/primitive' require 'v8/conversion/code' require 'v8/conversion/class' diff --git a/lib/v8/conversion/object.rb b/lib/v8/conversion/object.rb index 17b71fa..3c811ad 100644 --- a/lib/v8/conversion/object.rb +++ b/lib/v8/conversion/object.rb @@ -1,10 +1,7 @@ class V8::Conversion module Object def to_v8 - context = V8::Context.current - constructor = context.to_v8(self.class) - object = constructor.NewInstance([V8::C::External::New(self)]) - return object + Reference.construct! self end def to_ruby diff --git a/lib/v8/conversion/reference.rb b/lib/v8/conversion/reference.rb new file mode 100644 index 0000000..2ae2164 --- /dev/null +++ b/lib/v8/conversion/reference.rb @@ -0,0 +1,16 @@ +class V8::Conversion + module Reference + + def self.construct!(object) + context = V8::Context.current + constructor = context.to_v8(object.class) + reference = constructor.NewInstance([V8::C::External::New(object)]) + return reference + end + + def to_v8 + Reference.construct! self + end + + end +end \ No newline at end of file