def from_binding(b)
meth_name = b.eval('::Kernel.__method__')
if [:__script__, nil].include?(meth_name)
nil
else
method = begin
if Object === b.eval('self')
new(Kernel.instance_method(:method).bind(b.eval("self")).call(meth_name))
else
new(b.eval('class << self; self; end.instance_method(::Kernel.__method__).bind(self)'))
end
rescue NameError, NoMethodError
Disowned.new(b.eval('self'), meth_name.to_s)
end
if WeirdMethodLocator.weird_method?(method, b)
WeirdMethodLocator.new(method, b).get_method || method
else
method
end
end
end