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

ruby-changes:11059

From: usa <ko1@a...>
Date: Fri, 27 Feb 2009 14:42:18 +0900 (JST)
Subject: [ruby-changes:11059] Ruby:r22654 (trunk): * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert

usa	2009-02-27 14:42:06 +0900 (Fri, 27 Feb 2009)

  New Revision: 22654

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22654

  Log:
    * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
      isnan() checks for VC++6.
    * insns.def (opt_lt, opt_gt): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/insns.def
    trunk/numeric.c

Index: insns.def
===================================================================
--- insns.def	(revision 22653)
+++ insns.def	(revision 22654)
@@ -1676,7 +1676,13 @@
 	else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
 		 HEAP_CLASS_OF(obj) == rb_cFloat  &&
 		 BASIC_OP_UNREDEFINED_P(BOP_LT)) {
-	    val = RFLOAT_VALUE(recv) < RFLOAT_VALUE(obj) ? Qtrue : Qfalse;
+	    double a = RFLOAT_VALUE(recv);
+	    double b = RFLOAT_VALUE(obj);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	    if (isnan(a) || isnan(b)) val = Qfalse;
+	    else
+#endif
+	    val = a < b ? Qtrue : Qfalse;
 	}
 #endif
 	else {
@@ -1750,7 +1756,13 @@
 	else if (HEAP_CLASS_OF(recv) == rb_cFloat &&
 		 HEAP_CLASS_OF(obj) == rb_cFloat  &&
 		 BASIC_OP_UNREDEFINED_P(BOP_GT)) {
-	    val = RFLOAT_VALUE(recv) > RFLOAT_VALUE(obj) ? Qtrue : Qfalse;
+	    double a = RFLOAT_VALUE(recv);
+	    double b = RFLOAT_VALUE(obj);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	    if (isnan(a) || isnan(b)) val = Qfalse;
+	    else
+#endif
+	    val = a > b ? Qtrue : Qfalse;
 	}
 #endif
 	else {
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22653)
+++ ChangeLog	(revision 22654)
@@ -1,3 +1,10 @@
+Fri Feb 27 14:39:40 2009  NAKAMURA Usaku  <usa@r...>
+
+	* numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
+	  isnan() checks for VC++6.
+
+	* insns.def (opt_lt, opt_gt): ditto.
+
 Fri Feb 27 14:23:09 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/ostruct.rb (modifiable): check if really frozen.
Index: numeric.c
===================================================================
--- numeric.c	(revision 22653)
+++ numeric.c	(revision 22654)
@@ -874,11 +874,17 @@
 	break;
       case T_FLOAT:
 	b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(b)) return Qfalse;
+#endif
 	break;
       default:
 	return num_equal(x, y);
     }
     a = RFLOAT_VALUE(x);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+    if (isnan(a)) return Qfalse;
+#endif
     return (a == b)?Qtrue:Qfalse;
 }
 
@@ -968,11 +974,17 @@
 
       case T_FLOAT:
 	b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(b)) return Qfalse;
+#endif
 	break;
 
       default:
 	return rb_num_coerce_relop(x, y, '>');
     }
+#if defined(_MSC_VER) && _MSC_VER < 1300
+    if (isnan(a)) return Qfalse;
+#endif
     return (a > b)?Qtrue:Qfalse;
 }
 
@@ -1001,11 +1013,17 @@
 
       case T_FLOAT:
 	b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(b)) return Qfalse;
+#endif
 	break;
 
       default:
 	return rb_num_coerce_relop(x, y, rb_intern(">="));
     }
+#if defined(_MSC_VER) && _MSC_VER < 1300
+    if (isnan(a)) return Qfalse;
+#endif
     return (a >= b)?Qtrue:Qfalse;
 }
 
@@ -1033,11 +1051,17 @@
 
       case T_FLOAT:
 	b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(b)) return Qfalse;
+#endif
 	break;
 
       default:
 	return rb_num_coerce_relop(x, y, '<');
     }
+#if defined(_MSC_VER) && _MSC_VER < 1300
+    if (isnan(a)) return Qfalse;
+#endif
     return (a < b)?Qtrue:Qfalse;
 }
 
@@ -1066,11 +1090,17 @@
 
       case T_FLOAT:
 	b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(b)) return Qfalse;
+#endif
 	break;
 
       default:
 	return rb_num_coerce_relop(x, y, rb_intern("<="));
     }
+#if defined(_MSC_VER) && _MSC_VER < 1300
+    if (isnan(a)) return Qfalse;
+#endif
     return (a <= b)?Qtrue:Qfalse;
 }
 
@@ -1089,7 +1119,12 @@
 flo_eql(VALUE x, VALUE y)
 {
     if (TYPE(y) == T_FLOAT) {
-	if (RFLOAT_VALUE(x) == RFLOAT_VALUE(y))
+	double a = RFLOAT_VALUE(x);
+	double b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+	if (isnan(a) || isnan(b)) return Qfalse;
+#endif
+	if (a == b)
 	    return Qtrue;
     }
     return Qfalse;

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

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