yarv-diff:36
From: ko1 atdot.net
Date: 1 Jul 2005 02:08:17 -0000
Subject: [yarv-diff:36] r191 - trunk
Author: ko1
Date: 2005-07-01 11:08:17 +0900 (Fri, 01 Jul 2005)
New Revision: 191
Modified:
trunk/ChangeLog
trunk/compile.c
trunk/compile.h
trunk/insnhelper.h
trunk/test.rb
Log:
* compile.h : fix to pass VALUE type to new_insn_body
* insnhelper.h : add cast
* compile.c : fix getdynamic argument (0 == Qfalse -> I2F(0))
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2005-06-30 14:36:27 UTC (rev 190)
+++ trunk/ChangeLog 2005-07-01 02:08:17 UTC (rev 191)
@@ -4,6 +4,15 @@
# from Mon, 03 May 2004 01:24:19 +0900
#
+2005-07-01(Fri) 11:04:11 +0900 Koichi Sasada <ko1 atdot.net>
+
+ * compile.h : fix to pass VALUE type to new_insn_body
+
+ * insnhelper.h : add cast
+
+ * compile.c : fix getdynamic argument (0 == Qfalse -> I2F(0))
+
+
2005-06-30(Thu) 23:34:10 +0900 Koichi Sasada <ko1 atdot.net>
* rb/eval.rb : add and fix some rules
Modified: trunk/compile.c
===================================================================
--- trunk/compile.c 2005-06-30 14:36:27 UTC (rev 190)
+++ trunk/compile.c 2005-07-01 02:08:17 UTC (rev 191)
@@ -499,7 +499,7 @@
args[2] = iseq_filename(self);
args[3] = parent;
args[4] = type;
-
+
ret = rb_class_new_instance(5, args, cYarvISeq);
debugs("[new_child_iseq]< ---------------------------------------\n");
@@ -673,7 +673,7 @@
snprintf(buff, 0x20, "__tp%d__", idx);
id = rb_intern(buff);
/* idx-th param, current level*/
- ADD_INSN2(anchor, nd_line(node), getdynamic, I2F(idx), 0);
+ ADD_INSN2(anchor, nd_line(node), getdynamic, I2F(idx), I2F(0));
COMPILE(&anc, "set_block_local_tbl#masgn/other", nelem);
ADD_LINKED_LIST(anchor, LAST_ELEMENT(&anc));
rb_ary_push(vars, I2F(id));
@@ -702,7 +702,7 @@
tid = rb_intern("__tp__");
}
iseqobj->argc = 1;
- ADD_INSN2(anchor, nd_line(node), getdynamic, I2F(1), 0); /* first param, current level*/
+ ADD_INSN2(anchor, nd_line(node), getdynamic, I2F(1), I2F(0)); /* first param, current level*/
COMPILE(&anc, "set_block_local_tbl#lasgn/dasgn", nargs);
ADD_LINKED_LIST(anchor, POP_ELEMENT(&anc));
rb_ary_push(vars, I2F(tid));
@@ -889,7 +889,6 @@
int k, pos, stack_max = 0;
GC_CHECK();
-
/* set label position */
list = FIRST_ELEMENT(anchor);
k = pos = 0;
@@ -925,7 +924,6 @@
insn_info_tbl = ALLOC_N(struct insn_info_struct, k);
GC_CHECK();
-
list = FIRST_ELEMENT(anchor);
k = pos = 0;
@@ -1032,6 +1030,7 @@
}
list = list->next;
}
+
{
iseqobj->iseq = (void*)generated_iseq;
iseqobj->size = pos;
@@ -1626,7 +1625,7 @@
ADD_INSN3(ret, nd_line(node), defined, I2F(DEFINED_IVAR), ID2SYM(node->nd_vid), needstr);
return 1;
case NODE_GVAR:
- ADD_INSN3(ret, nd_line(node), defined, I2F(DEFINED_GVAR), ((int)node->nd_entry) | 1, needstr);
+ ADD_INSN3(ret, nd_line(node), defined, I2F(DEFINED_GVAR), ((VALUE)node->nd_entry) | 1, needstr);
return 1;
case NODE_CVAR:
ADD_INSN3(ret, nd_line(node), defined, I2F(DEFINED_CVAR), ID2SYM(node->nd_vid), needstr);
@@ -1987,7 +1986,6 @@
LABEL_OBJECT * retry_end_l = NEW_LABEL(nd_line(node));
VALUE name = rb_str_new2("b@");
rb_str_concat(name, iseqobj->name);
-
iseqobj->compile_data->current_block = NEW_CHILD_ISEQOBJ(node, name,
self, ISEQ_TYPE_BLOCK);
ADD_LABEL(ret, retry_label);
Modified: trunk/compile.h
===================================================================
--- trunk/compile.h 2005-06-30 14:36:27 UTC (rev 190)
+++ trunk/compile.h 2005-07-01 02:08:17 UTC (rev 191)
@@ -94,7 +94,7 @@
NEW_CHILD_ISEQOBJ(node, name, 0, type)
#define NEW_CHILD_ISEQOBJ(node, name, parent, type) \
- new_child_iseq(self, iseqobj, node, name, parent, type)
+ new_child_iseq(self, iseqobj, node, (VALUE)name, (VALUE)parent, (VALUE)type)
/* add instructions */
#define ADD_SEQ(seq1, seq2) \
@@ -106,21 +106,26 @@
/* add an instruction with label operand */
#define ADD_INSNL(seq, line, insn, label) \
- ADD_LINKED_LIST(seq, (struct iseq_link_element *) new_insn_body(iseqobj, line, BIN(insn), 1, label))
+ ADD_LINKED_LIST(seq, (struct iseq_link_element *) \
+ new_insn_body(iseqobj, line, BIN(insn), 1, (VALUE)label))
/* add an instruction with some operands (1, 2, 3, 5) */
#define ADD_INSN1(seq, line, insn, op1) \
- ADD_LINKED_LIST(seq, (struct iseq_link_element *) new_insn_body(iseqobj, line, BIN(insn), 1, op1))
+ ADD_LINKED_LIST(seq, (struct iseq_link_element *) \
+ new_insn_body(iseqobj, line, BIN(insn), 1, (VALUE)op1))
#define ADD_INSN2(seq, line, insn, op1, op2) \
- ADD_LINKED_LIST(seq, (struct iseq_link_element *) new_insn_body(iseqobj, line, BIN(insn), 2, op1, op2))
+ ADD_LINKED_LIST(seq, (struct iseq_link_element *) \
+ new_insn_body(iseqobj, line, BIN(insn), 2, (VALUE)op1, (VALUE)op2))
-#define ADD_INSN3(seq, line, insn, op1, op2, op3) \
- ADD_LINKED_LIST(seq, (struct iseq_link_element *) new_insn_body(iseqobj, line, BIN(insn), 3, op1, op2, op3))
+#define ADD_INSN3(seq, line, insn, op1, op2, op3) \
+ ADD_LINKED_LIST(seq, (struct iseq_link_element *) \
+ new_insn_body(iseqobj, line, BIN(insn), 3, (VALUE)op1, (VALUE)op2, (VALUE)op3))
#define ADD_INSN5(seq, line, insn, o1, o2, o3, o4, o5) \
- ADD_LINKED_LIST(seq, (struct iseq_link_element *) new_insn_body(iseqobj, line, BIN(insn), 5, \
- o1, o2, o3, o4, o5))
+ ADD_LINKED_LIST(seq, (struct iseq_link_element *) \
+ new_insn_body(iseqobj, line, BIN(insn), 5, \
+ (VALUE)o1, (VALUE)o2, (VALUE)o3, (VALUE)o4, (VALUE)o5))
/* add label */
#define ADD_LABEL(seq, label) \
ADD_LINKED_LIST(seq, (struct iseq_link_element *)label)
@@ -139,10 +144,10 @@
/* Specific Insn factory */
#define ADD_SEND(seq, line, id, argc) \
- ADD_SEND_R(seq, line, id, argc, Qfalse, I2F(0))
+ ADD_SEND_R(seq, line, id, argc, (VALUE)Qfalse, (VALUE)I2F(0))
#define ADD_SEND_R(seq, line, id, argc, block, flag) \
- ADD_INSN5(seq, line, send, id, argc, block, flag, 0)
+ ADD_INSN5(seq, line, send, id, argc, block, flag, 0);
/* compile node */
Modified: trunk/insnhelper.h
===================================================================
--- trunk/insnhelper.h 2005-06-30 14:36:27 UTC (rev 190)
+++ trunk/insnhelper.h 2005-07-01 02:08:17 UTC (rev 191)
@@ -80,7 +80,7 @@
/* SP */
#define GET_SP() (USAGE_ANALYSIS_REGISTER_HELPER(1, 0, REG_SP))
#define SET_SP(x) (th->sp = REG_SP = (USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (x))))
-#define INC_SP(x) (th->sp = REG_SP += (int)(USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (VALUE*)(x))))
+#define INC_SP(x) (th->sp = REG_SP += ((VALUE)(USAGE_ANALYSIS_REGISTER_HELPER(1, 1, (VALUE)(x)))))
#define SET_SV(x) (*GET_SP() = (x))
/* set current stack value as x */
Modified: trunk/test.rb
===================================================================
--- trunk/test.rb 2005-06-30 14:36:27 UTC (rev 190)
+++ trunk/test.rb 2005-07-01 02:08:17 UTC (rev 191)
@@ -9,6 +9,18 @@
###########################################################
$prog =<<'__EOP__'
+sum = 0
+for x in [1, 2, 3]
+ sum += x
+end
+sum
+
+__END__
+10000000.times{|i|
+ "hoge" + "huga" + "hage"
+}
+
+__END__
p
p 1
p 1,2
--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml