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

ruby-changes:5552

From: tadf <ko1@a...>
Date: Mon, 9 Jun 2008 21:02:45 +0900 (JST)
Subject: [ruby-changes:5552] Ruby:r17056 (trunk): * complex.c (nucomp_s_convert): can accept Complex('i').

tadf	2008-06-09 21:02:29 +0900 (Mon, 09 Jun 2008)

  New Revision: 17056

  Modified files:
    trunk/ChangeLog
    trunk/complex.c
    trunk/rational.c

  Log:
    * complex.c (nucomp_s_convert): can accept Complex('i').
      [ruby-dev:34991]
    and some minor changes.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/complex.c?r1=17056&r2=17055&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17056&r2=17055&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/rational.c?r1=17056&r2=17055&diff_format=u

Index: complex.c
===================================================================
--- complex.c	(revision 17055)
+++ complex.c	(revision 17056)
@@ -1125,22 +1125,21 @@
 }
 
 static VALUE comp_pat1, comp_pat2, a_slash, a_dot_and_an_e,
-    image_garbages_pat, null_string, underscores_pat, an_underscore;
+    null_string, underscores_pat, an_underscore;
 
 #define DIGITS "(?:\\d(?:_\\d|\\d)*)"
 #define NUMERATOR "(?:" DIGITS "?\\.)?" DIGITS "(?:[eE][-+]?" DIGITS ")?"
 #define DENOMINATOR "[-+]?" DIGITS
 #define NUMBER "[-+]?" NUMERATOR "(?:\\/" DENOMINATOR ")?"
 #define NUMBERNOS NUMERATOR "(?:\\/" DENOMINATOR ")?"
-#define PATTERN1 "\\A(" NUMBER "|\\(" NUMBER "\\))[iIjJ]"
-#define PATTERN2 "\\A(" NUMBER ")([-+](?:" NUMBERNOS "|\\(" NUMBER "\\))[iIjJ])?"
+#define PATTERN1 "\\A(" NUMBER "|\\(" NUMBER "\\))?[iIjJ]"
+#define PATTERN2 "\\A(" NUMBER ")(([-+])(?:(" NUMBERNOS ")|\\((" NUMBER ")\\))?[iIjJ])?"
 
 static void
 make_patterns(void)
 {
     static const char comp_pat1_source[] = PATTERN1;
     static const char comp_pat2_source[] = PATTERN2;
-    static const char image_garbages_pat_source[] = "[+\\(\\)iIjJ]";
     static const char underscores_pat_source[] = "_+";
 
     if (comp_pat1) return;
@@ -1157,10 +1156,6 @@
     a_dot_and_an_e = rb_str_new2(".eE");
     rb_global_variable(&a_dot_and_an_e);
 
-    image_garbages_pat = rb_reg_new(image_garbages_pat_source,
-				    sizeof image_garbages_pat_source - 1, 0);
-    rb_global_variable(&image_garbages_pat);
-
     null_string = rb_str_new2("");
     rb_global_variable(&null_string);
 
@@ -1213,6 +1208,8 @@
 	if (!NIL_P(m)) {
 	    sr = Qnil;
 	    si = f_aref(m, INT2FIX(1));
+	    if (NIL_P(si))
+	      si = rb_str_new2("1");
 	    re = f_post_match(m);
 	}
 	if (NIL_P(m)) {
@@ -1220,7 +1217,19 @@
 	    if (NIL_P(m))
 		return rb_assoc_new(Qnil, self);
 	    sr = f_aref(m, INT2FIX(1));
-	    si = f_aref(m, INT2FIX(2));
+	    if (NIL_P(f_aref(m, INT2FIX(2))))
+	      si = Qnil;
+	    else {
+	      VALUE t;
+
+	      si = f_aref(m, INT2FIX(3));
+	      t = f_aref(m, INT2FIX(4));
+	      if (NIL_P(t))
+		t = f_aref(m, INT2FIX(5));
+	      if (NIL_P(t))
+		t = rb_str_new2("1");
+	      rb_str_concat(si, t);
+	    }
 	    re = f_post_match(m);
 	}
 	r = INT2FIX(0);
@@ -1234,7 +1243,6 @@
 		r = f_to_i(sr);
 	}
 	if (!NIL_P(si)) {
-	    f_gsub_bang(si, image_garbages_pat, null_string);
 	    if (f_include_p(si, a_slash))
 		i = f_to_r(si);
 	    else if (f_gt_p(f_count(si, a_dot_and_an_e), INT2FIX(0)))
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17055)
+++ ChangeLog	(revision 17056)
@@ -1,3 +1,8 @@
+Mon Jun  9 21:00:32 2008  Tadayoshi Funaba  <tadf@d...>
+
+	* complex.c (nucomp_s_convert): can accept Complex('i').
+	  [ruby-dev:34991]
+
 Mon Jun  9 18:25:30 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* include/ruby/ruby.h (CONST_ID): constant ID cache for non-gcc.
Index: rational.c
===================================================================
--- rational.c	(revision 17055)
+++ rational.c	(revision 17056)
@@ -512,25 +512,19 @@
 #endif
 
 static VALUE
-nurat_s_new(VALUE klass, VALUE num, VALUE den)
+nurat_s_new(int argc, VALUE *argv, VALUE klass)
 {
+    VALUE num, den;
+
+    if (rb_scan_args(argc, argv, "11", &num, &den) == 1)
+	den = ONE;
+
     nurat_int_check(num);
     nurat_int_check(den);
 
     return nurat_s_canonicalize_internal(klass, num, den);
 }
 
-static VALUE
-nurat_s_new_m(int argc, VALUE *argv, VALUE klass)
-{
-    VALUE num, den;
-
-    if (rb_scan_args(argc, argv, "11", &num, &den) == 1) {
-	den = ONE;
-    }
-    return nurat_s_new(klass, num, den);
-}
-
 inline static VALUE
 f_rational_new1(VALUE klass, VALUE x)
 {
@@ -1428,9 +1422,8 @@
 {
     VALUE a1, a2;
 
-    if (rb_scan_args(argc, argv, "02", &a1, &a2) == 1) {
+    if (rb_scan_args(argc, argv, "02", &a1, &a2) == 1)
 	a2 = ONE;
-    }
 
     switch (TYPE(a1)) {
       case T_COMPLEX:
@@ -1489,7 +1482,12 @@
 	return f_div(a1, a2);
     }
 
-    return nurat_s_new(klass, a1, a2);
+    {
+	VALUE argv2[2];
+	argv2[0] = a1;
+	argv2[1] = a2;
+	return nurat_s_new(argc, argv2, klass);
+    }
 }
 
 static VALUE
@@ -1533,7 +1531,7 @@
     rb_funcall(rb_cRational, rb_intern("private_class_method"), 1,
 	       ID2SYM(rb_intern("new!")));
 
-    rb_define_singleton_method(rb_cRational, "new", nurat_s_new_m, -1);
+    rb_define_singleton_method(rb_cRational, "new", nurat_s_new, -1);
     rb_funcall(rb_cRational, rb_intern("private_class_method"), 1,
 	       ID2SYM(rb_intern("new")));
 

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

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