summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--eval.c1
-rw-r--r--eval_intern.h6
-rw-r--r--vm.h6
4 files changed, 13 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 423302fcf1..ff7ad9226c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Sep 26 19:36:26 2007 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (eval): fix to check stack overflow.
+
+ * eval_intern.h, vm.h: move CHECK_STACK_OVERFLOW() macro.
+
Wed Sep 26 19:27:11 2007 Koichi Sasada <ko1@atdot.net>
* insnhelper.ci (vm_throw): fix to move increment point.
diff --git a/eval.c b/eval.c
index 4ad528819b..639010efd8 100644
--- a/eval.c
+++ b/eval.c
@@ -1735,6 +1735,7 @@ eval(VALUE self, VALUE src, VALUE scope, const char *file, int line)
}
/* kick */
+ CHECK_STACK_OVERFLOW(th->cfp, iseq->stack_max);
result = vm_eval_body(th);
}
POP_TAG();
diff --git a/eval_intern.h b/eval_intern.h
index 3f4c81bf48..e5680a2731 100644
--- a/eval_intern.h
+++ b/eval_intern.h
@@ -186,6 +186,12 @@ char *strrchr _((const char *, const char));
ruby_cref()->nd_visi = (f); \
}
+#define CHECK_STACK_OVERFLOW(cfp, margin) do \
+ if (((VALUE *)(cfp)->sp) + (margin) >= ((VALUE *)cfp)) { \
+ rb_exc_raise(sysstack_error); \
+ } \
+while (0)
+
void rb_thread_cleanup _((void));
void rb_thread_wait_other_threads _((void));
diff --git a/vm.h b/vm.h
index 02629e8814..fa131d96e7 100644
--- a/vm.h
+++ b/vm.h
@@ -214,12 +214,6 @@ default: \
((rb_control_frame_t *)(th->stack + th->stack_size) - (rb_control_frame_t *)(cfp))
#define VM_SP_CNT(th, sp) ((sp) - (th)->stack)
-#define CHECK_STACK_OVERFLOW(cfp, margin) do \
- if (((VALUE *)(cfp)->sp) + (margin) >= ((VALUE *)cfp)) { \
- rb_exc_raise(sysstack_error); \
- } \
-while (0)
-
/*
env{
env[0] // special (block or prev env)