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

ruby-changes:7885

From: matz <ko1@a...>
Date: Thu, 18 Sep 2008 17:27:37 +0900 (JST)
Subject: [ruby-changes:7885] Ruby:r19406 (trunk): * transcode.c (enc_arg): revert last change. too early exception

matz	2008-09-18 17:27:17 +0900 (Thu, 18 Sep 2008)

  New Revision: 19406

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

  Log:
    * transcode.c (enc_arg): revert last change.  too early exception
      raising.
    
    * transcode.c (enc_arg): need not to take pointer argument.

  Modified files:
    trunk/ChangeLog
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19405)
+++ ChangeLog	(revision 19406)
@@ -1,3 +1,10 @@
+Thu Sep 18 17:18:35 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* transcode.c (enc_arg): revert last change.  too early exception
+	  raising.
+
+	* transcode.c (enc_arg): need not to take pointer argument.
+
 Sun Jun  8 21:50:27 2008  Yusuke Endoh  <mame@t...>
 
 	* test/bigdecimal/test_bigdecimal.rb: add tests to achieve over 90%
Index: transcode.c
===================================================================
--- transcode.c	(revision 19405)
+++ transcode.c	(revision 19406)
@@ -2387,12 +2387,26 @@
 }
 
 static int
-enc_arg(volatile VALUE *arg, const char **name_p, rb_encoding **enc_p)
+enc_arg(VALUE arg, const char **name_p, rb_encoding **enc_p)
 {
-    rb_encoding *enc = rb_to_encoding(*arg);
-    *name_p = rb_enc_name(enc);
+    rb_encoding *enc;
+    const char *n;
+    int encidx;
+
+    if ((encidx = rb_to_encoding_index(arg)) < 0) {
+	enc = NULL;
+	encidx = 0;
+	n = StringValueCStr(arg);
+    }
+    else {
+	enc = rb_enc_from_index(encidx);
+	n = rb_enc_name(enc);
+    }
+
+    *name_p = n;
     *enc_p = enc;
-    return rb_enc_to_index(enc);
+
+    return encidx;
 }
 
 static int
@@ -2404,7 +2418,7 @@
     const char *sname, *dname;
     int sencidx, dencidx;
 
-    dencidx = enc_arg(arg1, &dname, &denc);
+    dencidx = enc_arg(*arg1, &dname, &denc);
 
     if (NIL_P(*arg2)) {
 	sencidx = rb_enc_get_index(str);
@@ -2412,7 +2426,7 @@
 	sname = rb_enc_name(senc);
     }
     else {
-        sencidx = enc_arg(arg2, &sname, &senc);
+        sencidx = enc_arg(*arg2, &sname, &senc);
     }
 
     *sname_p = sname;
@@ -2656,7 +2670,7 @@
     const char *arg_name, *result_name;
     rb_encoding *arg_enc, *result_enc;
 
-    enc_arg(&arg, &arg_name, &arg_enc);
+    enc_arg(arg, &arg_name, &arg_enc);
 
     result_name = rb_econv_asciicompat_encoding(arg_name);
 
@@ -2867,9 +2881,9 @@
             if (RARRAY_LEN(pair) != 2)
                 rb_raise(rb_eArgError, "not a 2-element array in convpath");
             snamev = rb_ary_entry(pair, 0);
-            enc_arg(&snamev, &sname, &senc);
+            enc_arg(snamev, &sname, &senc);
             dnamev = rb_ary_entry(pair, 1);
-            enc_arg(&dnamev, &dname, &denc);
+            enc_arg(dnamev, &dname, &denc);
         }
         else {
             sname = "";

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

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