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

ruby-changes:4936

From: ko1@a...
Date: Fri, 16 May 2008 13:18:03 +0900 (JST)
Subject: [ruby-changes:4936] matz - Ruby:r16429 (trunk): * math.c (to_flo): rb_Float() accepts even strings for input.

matz	2008-05-16 13:17:45 +0900 (Fri, 16 May 2008)

  New Revision: 16429

  Modified files:
    trunk/ChangeLog
    trunk/complex.c
    trunk/math.c
    trunk/object.c
    trunk/test/ruby/test_float.rb
    trunk/version.h

  Log:
    * math.c (to_flo): rb_Float() accepts even strings for input.
    
    * complex.c (nucomp_to_f): fix wrong message.
    
    * complex.c (nucomp_to_r): ditto.
    
    * object.c (rb_Float): do not check NaN for error.  NaN is a part
      of valid float values.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=16429&r2=16428&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/math.c?r1=16429&r2=16428&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/complex.c?r1=16429&r2=16428&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16429&r2=16428&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_float.rb?r1=16429&r2=16428&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/object.c?r1=16429&r2=16428&diff_format=u

Index: complex.c
===================================================================
--- complex.c	(revision 16428)
+++ complex.c	(revision 16429)
@@ -1093,7 +1093,7 @@
 
     if (k_float_p(dat->image) || !f_zero_p(dat->image)) {
 	VALUE s = f_to_s(self);
-	rb_raise(rb_eRangeError, "can't convert %s into Integer",
+	rb_raise(rb_eRangeError, "can't convert %s into Float",
 		 StringValuePtr(s));
     }
     return f_to_f(dat->real);
@@ -1106,7 +1106,7 @@
 
     if (k_float_p(dat->image) || !f_zero_p(dat->image)) {
 	VALUE s = f_to_s(self);
-	rb_raise(rb_eRangeError, "can't convert %s into Integer",
+	rb_raise(rb_eRangeError, "can't convert %s into Rational",
 		 StringValuePtr(s));
     }
     return f_to_r(dat->real);
Index: math.c
===================================================================
--- math.c	(revision 16428)
+++ math.c	(revision 16429)
@@ -15,7 +15,20 @@
 
 VALUE rb_mMath;
 
-#define Need_Float(x) (x) = rb_Float(x)
+static VALUE
+to_flo(VALUE x)
+{
+    if (!rb_obj_is_kind_of(x, rb_cNumeric)) {
+	rb_raise(rb_eTypeError, "can't convert %s into Float",
+		 NIL_P(x) ? "nil" :
+		 x == Qtrue ? "true" :
+		 x == Qfalse ? "false" :
+		 rb_obj_classname(x));
+    }
+    return rb_convert_type(x, T_FLOAT, "Float", "to_f");
+}
+
+#define Need_Float(x) (x) = to_flo(x)
 #define Need_Float2(x,y) do {\
     Need_Float(x);\
     Need_Float(y);\
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16428)
+++ ChangeLog	(revision 16429)
@@ -1,3 +1,14 @@
+Fri May 16 12:48:33 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* math.c (to_flo): rb_Float() accepts even strings for input.
+
+	* complex.c (nucomp_to_f): fix wrong message.
+
+	* complex.c (nucomp_to_r): ditto.
+
+	* object.c (rb_Float): do not check NaN for error.  NaN is a part
+	  of valid float values.
+
 Thu May 15 23:36:09 2008  Yusuke Endoh  <mame@t...>
 
 	* test/ruby/test_string.rb: add tests to achieve over 90% test
Index: object.c
===================================================================
--- object.c	(revision 16428)
+++ object.c	(revision 16429)
@@ -2148,13 +2148,7 @@
 	break;
 
       default:
-      {
-	  VALUE f = rb_convert_type(val, T_FLOAT, "Float", "to_f");
-	  if (isnan(RFLOAT_VALUE(f))) {
-	      rb_raise(rb_eArgError, "invalid value for Float()");
-	  }
-	  return f;
-      }
+	return rb_convert_type(val, T_FLOAT, "Float", "to_f");
     }
 }
 
Index: version.h
===================================================================
--- version.h	(revision 16428)
+++ version.h	(revision 16429)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2008-05-15"
+#define RUBY_RELEASE_DATE "2008-05-16"
 #define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20080515
+#define RUBY_RELEASE_CODE 20080516
 #define RUBY_PATCHLEVEL 0
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 0
 #define RUBY_RELEASE_YEAR 2008
 #define RUBY_RELEASE_MONTH 5
-#define RUBY_RELEASE_DAY 15
+#define RUBY_RELEASE_DAY 16
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: test/ruby/test_float.rb
===================================================================
--- test/ruby/test_float.rb	(revision 16428)
+++ test/ruby/test_float.rb	(revision 16429)
@@ -415,7 +415,7 @@
     assert_raise(TypeError) { Float(nil) }
     o = Object.new
     def o.to_f; inf = 1.0/0.0; inf/inf; end
-    assert_raise(ArgumentError) { Float(o) }
+    assert(Float(o).nan?)
   end
 
   def test_num2dbl

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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