diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-11 08:03:26 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-11 08:03:26 +0000 |
commit | c0667c018769699cbc7eecac0411e2e3b9e7af93 (patch) | |
tree | 5b8587767502fcda5020b47101e51e93e7c6775b | |
parent | 1c411796ef50c6e4da9f0628d12816219d5f864a (diff) |
* lib/delegate.rb (Delegator#initialize, DelegateClass): skip correct
backtrace. [ruby-dev:34019]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15747 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/delegate.rb | 16 |
2 files changed, 12 insertions, 9 deletions
@@ -1,3 +1,8 @@ +Tue Mar 11 17:03:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * lib/delegate.rb (Delegator#initialize, DelegateClass): skip correct + backtrace. [ruby-dev:34019] + Tue Mar 11 16:43:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * win32/win32.c (rb_w32_cmdvector): terminate shrunken command line. diff --git a/lib/delegate.rb b/lib/delegate.rb index d810ccad42..1559c80542 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -115,6 +115,7 @@ # implementation, see SimpleDelegator. # class Delegator + IgnoreBacktracePat = %r"\A#{Regexp.quote(__FILE__)}:\d+:in `" # # Pass in the _obj_ to delegate method calls to. All methods supported by @@ -133,14 +134,12 @@ class Delegator for method in obj.methods next if preserved.include? method begin - eval <<-EOS + eval <<-EOS, nil, __FILE__, __LINE__+1 def self.#{method}(*args, &block) begin __getobj__.__send__(:#{method}, *args, &block) - rescue Exception - $@.delete_if{|s| /:in `__getobj__'$/ =~ s} #` - $@.delete_if{|s| /^\\(eval\\):/ =~ s} - Kernel::raise + ensure + $@.delete_if{|s|IgnoreBacktracePat=~s} end end EOS @@ -291,13 +290,12 @@ def DelegateClass(superclass) } for method in methods begin - klass.module_eval <<-EOS + klass.module_eval <<-EOS, __FILE__, __LINE__+1 def #{method}(*args, &block) begin @_dc_obj.__send__(:#{method}, *args, &block) - rescue - $@[0,2] = nil - raise + ensure + $@.delete_if{|s| ::Delegator::IgnoreBacktracePat =~ s} end end EOS |