[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]