summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--compile.c3
-rw-r--r--vm_opts.h29
3 files changed, 26 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ca2261b31..836e15c2df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Aug 19 13:13:52 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each/NODE_RESBODY): fix to add
+ additional nop to prevent tailcall optimization.
+
+ * vm_opts.h: clean up comments.
+
Sun Aug 19 12:58:39 2007 Koichi Sasada <ko1@atdot.net>
* insnhelper.ci (vm_call_bmethod): fix to propagate information
diff --git a/compile.c b/compile.c
index a5e997bd92..6e9caba554 100644
--- a/compile.c
+++ b/compile.c
@@ -3119,6 +3119,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ADD_INSNL(ret, nd_line(node), jump, label_miss);
ADD_LABEL(ret, label_hit);
COMPILE(ret, "resbody body", resq->nd_body);
+ if (iseq->compile_data->option->tailcall_optimization) {
+ ADD_INSN(ret, nd_line(node), nop);
+ }
ADD_INSN(ret, nd_line(node), leave);
ADD_LABEL(ret, label_miss);
resq = resq->nd_head;
diff --git a/vm_opts.h b/vm_opts.h
index 32b00ac79a..dbb3d5c87a 100644
--- a/vm_opts.h
+++ b/vm_opts.h
@@ -14,31 +14,34 @@
#ifndef VM_OPTS_H_INCLUDED
#define VM_OPTS_H_INCLUDED
+/* Compile options.
+ * You can change these options at runtime by VM::CompileOption.
+ * Following definitions are default values.
+ */
+
+#define OPT_TRACE_INSTRUCTION 0
+#define OPT_TAILCALL_OPTIMIZATION 0
+#define OPT_PEEPHOLE_OPTIMIZATION 1
+#define OPT_SPECIALISED_INSTRUCTION 1
+#define OPT_INLINE_CONST_CACHE 1
+
+
+/* Build Options.
+ * You can't change these options at runtime.
+ */
+
/* C compiler depend */
#define OPT_DIRECT_THREADED_CODE 1
#define OPT_CALL_THREADED_CODE 0
-/* architecture independent */
-
/* VM running option */
#define OPT_CHECKED_RUN 1
-#define OPT_TRACE_INSTRUCTION 0 /* default value */
-
-/* at compile */
-#define OPT_INLINE_CONST_CACHE 1
-#define OPT_TAILCALL_OPTIMIZATION 0 /* default value */
-#define OPT_PEEPHOLE_OPTIMIZATION 1
-#define OPT_SPECIALISED_INSTRUCTION 1
-
-/* at runtime */
#define OPT_INLINE_METHOD_CACHE 1
#define OPT_BLOCKINLINING 0
/* architecture independent, affects generated code */
#define OPT_OPERANDS_UNIFICATION 0
#define OPT_INSTRUCTIONS_UNIFICATION 0
-
-/* code generation parameter */
#define OPT_UNIFY_ALL_COMBINATION 0
#define OPT_STACK_CACHING 0