ruby-changes:14733
From: nobu <ko1@a...>
Date: Sat, 6 Feb 2010 12:02:55 +0900 (JST)
Subject: [ruby-changes:14733] Ruby:r26592 (trunk): * lib/delegate.rb (Delegator#method_missing),
nobu 2010-02-06 12:02:40 +0900 (Sat, 06 Feb 2010) New Revision: 26592 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26592 Log: * lib/delegate.rb (Delegator#method_missing), (Delegator.delegating_block): don't hide backtrace from __getobj__ and reduced exception messages when $DEBUG. Modified files: trunk/ChangeLog trunk/lib/delegate.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 26591) +++ ChangeLog (revision 26592) @@ -1,3 +1,9 @@ +Sat Feb 6 12:02:36 2010 Nobuyoshi Nakada <nobu@r...> + + * lib/delegate.rb (Delegator#method_missing), + (Delegator.delegating_block): don't hide backtrace from + __getobj__ and reduced exception messages when $DEBUG. + Sat Feb 6 11:35:08 2010 Nobuyoshi Nakada <nobu@r...> * ext/socket/ipsocket.c (ip_addr, ip_peeraddr), Index: lib/delegate.rb =================================================================== --- lib/delegate.rb (revision 26591) +++ lib/delegate.rb (revision 26592) @@ -139,18 +139,11 @@ # Handles the magic of delegation through \_\_getobj\_\_. def method_missing(m, *args, &block) + target = self.__getobj__ begin - target = self.__getobj__ - unless target.respond_to?(m) - super(m, *args, &block) - else - target.__send__(m, *args, &block) - end - rescue ::Exception - if i = $@.index{|s| %r"\A#{Regexp.quote(__FILE__)}:\d+:in `method_missing'\z"o =~ s} - $@[0..i] = [] - end - ::Kernel::raise + target.respond_to?(m) ? target.__send__(m, *args, &block) : super(m, *args, &block) + ensure + $@.delete_if {|t| %r"\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:"o =~ t} if $@ end end @@ -267,12 +260,11 @@ # :stopdoc: def Delegator.delegating_block(mid) lambda do |*args, &block| + target = self.__getobj__ begin - __getobj__.__send__(mid, *args, &block) - rescue - re = /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:/o - $!.backtrace.delete_if {|t| re =~ t} - raise + target.__send__(mid, *args, &block) + ensure + $@.delete_if {|t| /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:/o =~ t} if $@ end end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/