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

ruby-changes:11934

From: matz <ko1@a...>
Date: Thu, 28 May 2009 01:32:05 +0900 (JST)
Subject: [ruby-changes:11934] Ruby:r23597 (trunk): * marshal.c (w_encoding): more compact encoding information for

matz	2009-05-28 01:31:51 +0900 (Thu, 28 May 2009)

  New Revision: 23597

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

  Log:
    * marshal.c (w_encoding): more compact encoding information for
      US-ASCII and UTF-8.  [incompatible] [experimental]
    * marshal.c (r_ivar): restore :E encoding information.

  Modified files:
    trunk/ChangeLog
    trunk/marshal.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23596)
+++ ChangeLog	(revision 23597)
@@ -13,6 +13,13 @@
 
 	* bignum.c (bigand_int): even less object allocation.
 
+Wed May 27 14:29:55 2009  Yukihiro Matsumoto  <matz@r...>
+
+	* marshal.c (w_encoding): more compact encoding information for
+	  US-ASCII and UTF-8.  [incompatible] [experimental]
+
+	* marshal.c (r_ivar): restore :E encoding information.
+
 Wed May 27 14:08:39 2009  Yukihiro Matsumoto  <matz@r...>
 
 	* st.c (st_insert2): new function with processing new key,
Index: marshal.c
===================================================================
--- marshal.c	(revision 23596)
+++ marshal.c	(revision 23597)
@@ -471,6 +471,7 @@
 w_obj_each(ID id, VALUE value, struct dump_call_arg *arg)
 {
     if (id == rb_id_encoding()) return ST_CONTINUE;
+    if (id == rb_intern("E")) return ST_CONTINUE;
     w_symbol(id, arg->arg);
     w_object(value, arg->arg, arg->limit);
     return ST_CONTINUE;
@@ -488,6 +489,19 @@
 	return;
     }
     w_long(num + 1, arg->arg);
+
+    /* special treatment for US-ASCII and UTF-8 */
+    if (encidx == rb_usascii_encindex()) {
+	w_symbol(rb_intern("E"), arg->arg);
+	w_object(Qfalse, arg->arg, arg->limit);
+	return;
+    }
+    else if (encidx == rb_utf8_encindex()) {
+	w_symbol(rb_intern("E"), arg->arg);
+	w_object(Qtrue, arg->arg, arg->limit);
+	return;
+    }
+
     w_symbol(rb_id_encoding(), arg->arg);
     do {
 	if (!arg->arg->encodings)
@@ -1152,6 +1166,11 @@
 		int idx = rb_enc_find_index(StringValueCStr(val));
 		if (idx > 0) rb_enc_associate_index(obj, idx);
 	    }
+	    if (id == rb_intern("E")) {
+		if (val == Qfalse) rb_enc_associate_index(obj, rb_usascii_encindex());
+		else if (val == Qtrue) rb_enc_associate_index(obj, rb_utf8_encindex());
+		/* bogus ignore */
+	    }
 	    else {
 		rb_ivar_set(obj, id, val);
 	    }

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

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