[前][次][番号順一覧][スレッド一覧][生データ]

yarv-diff:128

From: ko1 atdot.net
Date: 31 Oct 2005 23:20:45 -0000
Subject: [yarv-diff:128] r285 - trunk

Author: ko1
Date: 2005-11-01 08:20:44 +0900 (Tue, 01 Nov 2005)
New Revision: 285

Modified:
   trunk/ChangeLog
   trunk/compile.c
   trunk/test.rb
Log:
	* compile.c : push and pop values after checkincludearray for
	stack caching



Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2005-10-31 06:53:27 UTC (rev 284)
+++ trunk/ChangeLog	2005-10-31 23:20:44 UTC (rev 285)
@@ -4,6 +4,13 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+
+2005-11-01(Tue) 08:18:33 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* compile.c : push and pop values after checkincludearray for
+	stack caching
+
+
 2005-10-31(Mon) 15:37:09 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* benchmark/bm_app_mandelbrot.rb : added

Modified: trunk/compile.c
===================================================================
--- trunk/compile.c	2005-10-31 06:53:27 UTC (rev 284)
+++ trunk/compile.c	2005-10-31 23:20:44 UTC (rev 285)
@@ -1614,7 +1614,8 @@
     if(lobj->sc_state != 0){
       if(lobj->sc_state != nstate){
         dump_disasm_list((LINK_ELEMENT*) iobj);
-        printf("%d, %d: ", lobj->sc_state, nstate);
+        dump_disasm_list((LINK_ELEMENT*) lobj);
+        printf("\n-- %d, %d\n", lobj->sc_state, nstate);
         rb_bug("insn_set_sc_state error\n");
         return 0;
       }
@@ -1661,7 +1662,8 @@
   /* initialize */
   state = SCS_XX;
   list = FIRST_ELEMENT(anchor);
-
+  // dump_disasm_list(list);
+  
   /* for each list element */
   while(list){
   redo_point:
@@ -2374,6 +2376,9 @@
           if(nd_type(val) == NODE_WHEN){// && nd_type(val->nd_head) != NODE_ARRAY){
             COMPILE  (cond_seq, "when/cond specail?", val->nd_head);
             ADD_INSN1(cond_seq, nd_line(node), checkincludearray, Qtrue);
+            /* for stack caching */
+            ADD_INSN (cond_seq, nd_line(node), putnil);
+            ADD_INSN (cond_seq, nd_line(node), pop);
           }
           else{
             COMPILE  (cond_seq, "when cond", val);

Modified: trunk/test.rb
===================================================================
--- trunk/test.rb	2005-10-31 06:53:27 UTC (rev 284)
+++ trunk/test.rb	2005-10-31 23:20:44 UTC (rev 285)
@@ -1,2 +1,25 @@
+ary = [1, 2]
+case 1
+when :x, *ary
+  :ok
+when :z
+  :ng1
+else
+  :ng2
+end
 
-1+1
+__END__
+
+def re
+  /#{RE}/o
+end
+RE = 'a'
+p [re, re.__id__, re.__id__]
+
+Object.module_eval %q{
+  remove_const :RE
+}
+RE = 'b'
+p [re, re.__id__, re.__id__]
+
+


--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]