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

ruby-changes:8290

From: matz <ko1@a...>
Date: Fri, 17 Oct 2008 18:15:21 +0900 (JST)
Subject: [ruby-changes:8290] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now

matz	2008-10-17 18:13:04 +0900 (Fri, 17 Oct 2008)

  New Revision: 19818

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

  Log:
    * transcode.c (str_transcode0): String#encode without argument now
      behave as if :undef => :replace, :invalid => :replace specified.
    
    * transcode.c (rb_econv_prepare_opts): should preserve options in
      any case.

  Modified files:
    trunk/ChangeLog
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19817)
+++ ChangeLog	(revision 19818)
@@ -3,6 +3,14 @@
 	* test/rubygems/gemutilities.rb (RubyGemTestCase#build_rake_in):
 	  get rid of interference with other tests.
 
+Fri Oct 17 18:06:39 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* transcode.c (str_transcode0): String#encode without argument now
+	  behave as if :undef => :replace, :invalid => :replace specified.
+
+	* transcode.c (rb_econv_prepare_opts): should preserve options in
+	  any case.
+
 Fri Oct 17 11:48:18 2008  Shugo Maeda  <shugo@r...>
 
 	* ext/socket/socket.c (init_sock): sockets should be binmode.
Index: transcode.c
===================================================================
--- transcode.c	(revision 19817)
+++ transcode.c	(revision 19818)
@@ -2307,28 +2307,27 @@
 {
     int ecflags;
     VALUE newhash = Qnil;
+    VALUE v;
+
     if (NIL_P(opthash)) {
         *opts = Qnil;
         return 0;
     }
     ecflags = econv_opts(opthash);
+    v = rb_hash_aref(opthash, sym_replace);
+    if (!NIL_P(v)) {
+	StringValue(v);
+	if (rb_enc_str_coderange(v) == ENC_CODERANGE_BROKEN) {
+	    VALUE dumped = rb_str_dump(v);
+	    rb_raise(rb_eArgError, "replacement string is broken: %s as %s",
+		     StringValueCStr(dumped),
+		     rb_enc_name(rb_enc_get(v)));
+	}
+	v = rb_str_new_frozen(v);
+	newhash = rb_hash_new();
+	rb_hash_aset(newhash, sym_replace, v);
+    }
 
-    if ((ecflags & ECONV_INVALID_MASK) == ECONV_INVALID_REPLACE ||
-        (ecflags & ECONV_UNDEF_MASK) == ECONV_UNDEF_REPLACE) {
-        VALUE v = rb_hash_aref(opthash, sym_replace);
-        if (!NIL_P(v)) {
-            StringValue(v);
-            if (rb_enc_str_coderange(v) == ENC_CODERANGE_BROKEN) {
-                VALUE dumped = rb_str_dump(v);
-                rb_raise(rb_eArgError, "replacement string is broken: %s as %s",
-                        StringValueCStr(dumped),
-                        rb_enc_name(rb_enc_get(v)));
-            }
-            v = rb_str_new_frozen(v);
-            newhash = rb_hash_new();
-            rb_hash_aset(newhash, sym_replace, v);
-        }
-    }
     if (!NIL_P(newhash))
         rb_hash_freeze(newhash);
     *opts = newhash;
@@ -2444,6 +2443,7 @@
 	if (NIL_P(arg1)) {
 	    return -1;
 	}
+	ecflags |= ECONV_INVALID_REPLACE | ECONV_UNDEF_REPLACE;
     }
     else {
 	arg1 = argv[0];

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

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