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