diff --git a/lib/v8/access/invocation.rb b/lib/v8/access/invocation.rb index 210bf146..878f82e0 100644 --- a/lib/v8/access/invocation.rb +++ b/lib/v8/access/invocation.rb @@ -13,7 +13,7 @@ def aritize(args) module Proc include Aritize def methodcall(this, args) - call *aritize([this].concat(args)) + call(*aritize([this].concat(args))) end ::Proc.send :include, self end @@ -24,11 +24,11 @@ def methodcall(this, args) context = V8::Context.current access = context.access if this.equal? self.receiver - call *aritize(args) + call(*aritize(args)) elsif this.class <= self.receiver.class access.methodcall(unbind, this, args) elsif this.equal? context.scope - call *aritize(args) + call(*aritize(args)) else fail TypeError, "cannot invoke #{self} on #{this}" end diff --git a/lib/v8/error.rb b/lib/v8/error.rb index 92a9c9e3..f9f1e19b 100644 --- a/lib/v8/error.rb +++ b/lib/v8/error.rb @@ -40,7 +40,6 @@ def causes def backtrace(*modifiers) return unless super() - trace_framework = modifiers.include?(:framework) trace_ruby = modifiers.length == 0 || modifiers.include?(:ruby) trace_javascript = modifiers.length == 0 || modifiers.include?(:javascript) bilingual_backtrace(trace_ruby, trace_javascript).tap do |trace| @@ -61,17 +60,17 @@ def in_ruby? end def bilingual_backtrace(trace_ruby = true, trace_javascript = true) - backtrace = causes.reduce(:backtrace => [], :ruby => -1, :javascript => -1) { |accumulator, cause| + causes.reduce(:backtrace => [], :ruby => -1, :javascript => -1) { |accumulator, cause| accumulator.tap do if trace_ruby backtrace_selector = cause.respond_to?(:standard_error_backtrace) ? :standard_error_backtrace : :backtrace ruby_frames = cause.send(backtrace_selector)[0..accumulator[:ruby]] - accumulator[:backtrace].unshift *ruby_frames + accumulator[:backtrace].unshift(*ruby_frames) accumulator[:ruby] -= ruby_frames.length end if trace_javascript && cause.respond_to?(:javascript_backtrace) javascript_frames = cause.javascript_backtrace.to_a[0..accumulator[:javascript]].map(&:to_s) - accumulator[:backtrace].unshift *javascript_frames + accumulator[:backtrace].unshift(*javascript_frames) accumulator[:javascript] -= javascript_frames.length end end diff --git a/lib/v8/weak.rb b/lib/v8/weak.rb index 46147980..e30080df 100644 --- a/lib/v8/weak.rb +++ b/lib/v8/weak.rb @@ -46,12 +46,20 @@ def []=(key, value) module Cell def weakcell(name, &block) - unless storage = instance_variable_get("@#{name}") - storage = instance_variable_set("@#{name}", Storage.new) - end - storage.access(&block) + ivar = "@#{name}" + + if instance_variable_defined?(ivar) && instance_variable_get(ivar) + instance_variable_get(ivar) + else + instance_variable_set(ivar, Storage.new) + end.access(&block) end + class Storage + def initialize + @ref = nil + end + def access(&block) if @ref @ref.object || populate(block) @@ -70,4 +78,4 @@ def populate(block) end end end -end \ No newline at end of file +end diff --git a/spec/v8/conversion_spec.rb b/spec/v8/conversion_spec.rb index faeaf47b..c757c4af 100644 --- a/spec/v8/conversion_spec.rb +++ b/spec/v8/conversion_spec.rb @@ -25,13 +25,13 @@ def test context "for 32-bit numbers" do it "should convert positive integer" do cxt['fixnum_a'] = 123 - cxt['fixnum_a'].should == 123 + cxt['fixnum_a'].should eq(123) cxt['fixnum_a'].should be_instance_of(Fixnum) end it "should convert negative integer" do cxt['fixnum_b'] = -123 - cxt['fixnum_b'].should == -123 + cxt['fixnum_b'].should eq(-123) cxt['fixnum_b'].should be_instance_of(Fixnum) end end