1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00

fix breakage when V8 module is not included in the top level scope.

This commit is contained in:
Charles Lowell 2010-07-08 10:10:19 -05:00
parent 25f1d91b3f
commit cd512d3135

View file

@ -95,7 +95,21 @@ module V8
end
end
module AccessibleMethods
def accessible_methods(obj)
obj.public_methods(false).map {|m| m.to_s}.to_set.tap do |methods|
ancestors = obj.class.ancestors.dup
while ancestor = ancestors.shift
break if ancestor == ::Object
methods.merge(ancestor.public_instance_methods(false).map {|m| m.to_s})
end
methods.reject! {|m| m == "[]" || m == "[]="}
end
end
end
class NamedPropertyGetter
extend AccessibleMethods
def self.call(property, info)
name = To.rb(property)
obj = To.rb(info.This())
@ -116,6 +130,7 @@ module V8
end
class NamedPropertySetter
extend AccessibleMethods
def self.call(property, value, info)
obj = To.rb(info.This())
name = To.rb(property)
@ -134,6 +149,7 @@ module V8
end
class NamedPropertyEnumerator
extend AccessibleMethods
def self.call(info)
obj = To.rb(info.This())
methods = accessible_methods(obj)
@ -183,18 +199,4 @@ module V8
end
end
end
private
# evil - but access will be plugggable
def accessible_methods(obj)
obj.public_methods(false).map {|m| m.to_s}.to_set.tap do |methods|
ancestors = obj.class.ancestors.dup
while ancestor = ancestors.shift
break if ancestor == ::Object
methods.merge(ancestor.public_instance_methods(false).map {|m| m.to_s})
end
methods.reject! {|m| m == "[]" || m == "[]="}
end
end
end