Backport of r28376:

* lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
  to both the delegator and __getobj__ [ruby-core:26138]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28378 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
marcandre 2010-06-22 04:29:59 +00:00
parent 0418aab850
commit b76c33fead
2 changed files with 41 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Tue Jun 22 13:26:47 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
* lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
to both the delegator and __getobj__ [ruby-core:26138]
Tue Jun 22 01:38:23 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> Tue Jun 22 01:38:23 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
* lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too * lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too

View file

@ -137,7 +137,9 @@ class Delegator < BasicObject
__setobj__(obj) __setobj__(obj)
end end
#
# Handles the magic of delegation through \_\_getobj\_\_. # Handles the magic of delegation through \_\_getobj\_\_.
#
def method_missing(m, *args, &block) def method_missing(m, *args, &block)
target = self.__getobj__ target = self.__getobj__
begin begin
@ -222,7 +224,9 @@ class Delegator < BasicObject
raise NotImplementedError, "need to define `__setobj__'" raise NotImplementedError, "need to define `__setobj__'"
end end
#
# Serialization support for the object returned by \_\_getobj\_\_. # Serialization support for the object returned by \_\_getobj\_\_.
#
def marshal_dump def marshal_dump
ivars = instance_variables.reject {|var| /\A@delegate_/ =~ var} ivars = instance_variables.reject {|var| /\A@delegate_/ =~ var}
[ [
@ -231,7 +235,10 @@ class Delegator < BasicObject
__getobj__ __getobj__
] ]
end end
#
# Reinitializes delegation from a serialized object. # Reinitializes delegation from a serialized object.
#
def marshal_load(data) def marshal_load(data)
version, vars, values, obj = data version, vars, values, obj = data
if version == :__v2__ if version == :__v2__
@ -250,7 +257,36 @@ class Delegator < BasicObject
end end
private :initialize_clone, :initialize_dup private :initialize_clone, :initialize_dup
##
# :method: trust
# Trust both the object returned by \_\_getobj\_\_ and self.
#
##
# :method: untrust
# Untrust both the object returned by \_\_getobj\_\_ and self.
#
##
# :method: taint
# Taint both the object returned by \_\_getobj\_\_ and self.
#
##
# :method: untaint
# Untaint both the object returned by \_\_getobj\_\_ and self.
#
[:trust, :untrust, :taint, :untaint].each do |method|
define_method method do
__getobj__.send(method)
super()
end
end
#
# Freeze self and target at once. # Freeze self and target at once.
#
def freeze def freeze
__getobj__.freeze __getobj__.freeze
super super