diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/English.rb | 1 | ||||
| -rw-r--r-- | lib/cgi/session.rb | 4 | ||||
| -rw-r--r-- | lib/delegate.rb | 38 |
3 files changed, 25 insertions, 18 deletions
diff --git a/lib/English.rb b/lib/English.rb index c7e13bebe..968272202 100644 --- a/lib/English.rb +++ b/lib/English.rb @@ -1,4 +1,3 @@ - alias $ERROR_INFO $! alias $ERROR_POSITION $@ alias $LOADED_FEATURES $" diff --git a/lib/cgi/session.rb b/lib/cgi/session.rb index 23c9bdc2a..bd087bb5e 100644 --- a/lib/cgi/session.rb +++ b/lib/cgi/session.rb @@ -81,7 +81,7 @@ class CGI unless @data @data = @dbman.restore end - @data[key] = String(val) + @data[key] = val end def update @@ -139,7 +139,7 @@ class CGI def update @f.rewind for k,v in @hash - @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(v) + @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v)) end @f.truncate @f.tell end diff --git a/lib/delegate.rb b/lib/delegate.rb index a72ea943b..ecc23d52e 100644 --- a/lib/delegate.rb +++ b/lib/delegate.rb @@ -29,17 +29,21 @@ class Delegator end for method in obj.methods next if preserved.include? method - eval <<-EOS - def self.#{method}(*args, &block) - begin - __getobj__.__send__(:#{method}, *args, &block) - rescue Exception - $@.delete_if{|s| /:in `__getobj__'$/ =~ s} #` - $@.delete_if{|s| /^\\(eval\\):/ =~ s} - raise + begin + eval <<-EOS + def self.#{method}(*args, &block) + begin + __getobj__.__send__(:#{method}, *args, &block) + rescue Exception + $@.delete_if{|s| /:in `__getobj__'$/ =~ s} #` + $@.delete_if{|s| /^\\(eval\\):/ =~ s} + raise + end end - end - EOS + EOS + rescue SyntaxError + raise NameError, "invalid identifier %s" % method, caller(4) + end end end @@ -81,8 +85,9 @@ def DelegateClass(superclass) end EOS for method in methods - klass.module_eval <<-EOS - def #{method}(*args, &block) + begin + klass.module_eval <<-EOS + def #{method}(*args, &block) begin @obj.__send__(:#{method}, *args, &block) rescue @@ -90,10 +95,13 @@ def DelegateClass(superclass) raise end end - EOS - end - return klass; + EOS + rescue SyntaxError + raise NameError, "invalid identifier %s" % method, caller(3) + end end + return klass; +end if __FILE__ == $0 class ExtArray<DelegateClass(Array) |
