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

ruby-changes:10707

From: nobu <ko1@a...>
Date: Fri, 13 Feb 2009 01:29:31 +0900 (JST)
Subject: [ruby-changes:10707] Ruby:r22270 (trunk): * compile.c (iseq_set_sequence, compile_dstr_fragments),

nobu	2009-02-13 01:29:17 +0900 (Fri, 13 Feb 2009)

  New Revision: 22270

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

  Log:
    * compile.c (iseq_set_sequence, compile_dstr_fragments),
      (iseq_compile_each): hides other internal objects.

  Modified files:
    trunk/ChangeLog
    trunk/compile.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22269)
+++ ChangeLog	(revision 22270)
@@ -1,3 +1,8 @@
+Fri Feb 13 01:29:16 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* compile.c (iseq_set_sequence, compile_dstr_fragments),
+	  (iseq_compile_each): hides other internal objects.
+
 Fri Feb 13 00:48:42 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* insns.def (defineclass): try to autoload const to be overridden.
Index: compile.c
===================================================================
--- compile.c	(revision 22269)
+++ compile.c	(revision 22270)
@@ -1361,6 +1361,7 @@
 						       "duplicated when clause is ignored");
 				}
 			    }
+			    hide_obj(map);
 			    generated_iseq[pos + 1 + j] = map;
 			    iseq_add_mark_object(iseq, map);
 			    break;
@@ -2121,7 +2122,8 @@
     int cnt = 1;
 
     debugp_param("nd_lit", lit);
-    ADD_INSN1(ret, nd_line(node), putobject, node->nd_lit);
+    hide_obj(lit);
+    ADD_INSN1(ret, nd_line(node), putobject, lit);
 
     while (list) {
 	COMPILE(ret, "each string", list->nd_head);
@@ -2237,7 +2239,7 @@
 		rb_ary_push(ary, node->nd_head->nd_lit);
 		node = node->nd_next;
 	    }
-
+	    OBJ_FREEZE(ary);
 	    iseq_add_mark_object_compile_time(iseq, ary);
 	    ADD_INSN1(ret, nd_line(node_root), duparray, ary);
 	}
@@ -4369,6 +4371,7 @@
 	break;
       }
       case NODE_XSTR:{
+	hide_obj(node->nd_lit);
 	ADD_CALL_RECEIVER(ret, nd_line(node));
 	ADD_INSN1(ret, nd_line(node), putobject, node->nd_lit);
 	ADD_CALL(ret, nd_line(node), ID2SYM(idBackquote), INT2FIX(1));
@@ -4660,6 +4663,7 @@
 			       RSTRING_PTR(iseq->name), (void *)iseq,
 			       iseq->compile_data->flip_cnt++);
 
+	hide_obj(key);
 	iseq_add_mark_object_compile_time(iseq, key);
 	ADD_INSN2(ret, nd_line(node), getspecial, key, INT2FIX(0));
 	ADD_INSNL(ret, nd_line(node), branchif, lend);

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

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