Project

General

Profile

Actions

Bug #2830

closed

Some methods raise ArgumentError instead of TypeError

Added by marcandre (Marc-Andre Lafortune) almost 15 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2dev (2010-03-02 trunk 26792) [x86_64-darwin10.2.0]
Backport:
[ruby-core:28395]

Description

=begin
Some methods of Ruby 1.9 expect integers/reals and call internally nurat_int_value/nurat_int_check. These functions raise an ArgumentError when the argument is not an Integer, instead of a TypeError.

Thus:
42.gcd(:foo) # => ArgumentError, should be TypeError
42.lcm(:foo) # => ditto
42.gcdlcm(:foo) # => ditto
Rational(:foo,1) # => ditto

Note that on the other hand:
Rational(nil, 1) # => TypeError
Rational(:foo) # => TypeError

In a similar fashion:
Complex.rect(nil) # => ArgumentError, should be TypeError
Complex.polar(nil) # => ditto

Unless there is objection, I will commit the following patch (and fix RubySpec):

diff --git a/complex.c b/complex.c
index 214d3a2..6742257 100644
--- a/complex.c
+++ b/complex.c
@@ -377,7 +377,7 @@ nucomp_real_check(VALUE num)
break;
default:
if (!k_numeric_p(num) || !f_real_p(num))

  •       rb_raise(rb_eArgError, "not a real");
    
  •       rb_raise(rb_eTypeError, "not a real");
    
    }
    }

diff --git a/rational.c b/rational.c
index 65d3cf4..f5a6d26 100644
--- a/rational.c
+++ b/rational.c
@@ -419,7 +419,7 @@ nurat_int_check(VALUE num)
break;
default:
if (!k_numeric_p(num) || !f_integer_p(num))

  •       rb_raise(rb_eArgError, "not an integer");
    
  •       rb_raise(rb_eTypeError, "not an integer");
    
    }
    }
    =end
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0