summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-04 12:31:23 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-04 12:31:23 +0000
commit18d1ea6cc83ee236f9d8368fa5cb68af839f03e8 (patch)
tree5ae581f16c10e4d341e671de64b032f44dc5065a
parentb28ac942ef90c255f26c7bbfbf27046740a72da5 (diff)
merges r23210 from trunk into ruby_1_9_1.
-- * eval.c (ruby_cleanup): the order of local variables on stack is undefined. should use outermost VALUE for ruby_init_stack. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23342 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--common.mk2
-rw-r--r--eval.c7
3 files changed, 10 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 3649c19ca4..105ad336f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Apr 19 14:43:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): the order of local variables on stack is
+ undefined. should use outermost VALUE for ruby_init_stack.
+
Mon Apr 13 11:35:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
* sprintf.c (rb_str_format): optimize previous commit.
diff --git a/common.mk b/common.mk
index 0bdd7bd397..9ef95179cd 100644
--- a/common.mk
+++ b/common.mk
@@ -487,7 +487,7 @@ error.$(OBJEXT): {$(VPATH)}error.c {$(VPATH)}known_errors.inc $(RUBY_H_INCLUDES)
$(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h
eval.$(OBJEXT): {$(VPATH)}eval.c {$(VPATH)}eval_intern.h \
$(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_error.c \
- {$(VPATH)}eval_jump.c {$(VPATH)}debug.h \
+ {$(VPATH)}eval_jump.c {$(VPATH)}debug.h {$(VPATH)}gc.h \
{$(VPATH)}iseq.h
load.$(OBJEXT): {$(VPATH)}load.c {$(VPATH)}eval_intern.h \
{$(VPATH)}util.h $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) \
diff --git a/eval.c b/eval.c
index dce877a27a..6b46dc1426 100644
--- a/eval.c
+++ b/eval.c
@@ -13,6 +13,7 @@
#include "eval_intern.h"
#include "iseq.h"
+#include "gc.h"
VALUE proc_invoke(VALUE, VALUE, VALUE, VALUE);
VALUE rb_binding_new(void);
@@ -82,7 +83,7 @@ ruby_options(int argc, char **argv)
int state;
void *tree = 0;
- Init_stack((void *)&state);
+ Init_stack((void *)&tree);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
SAVE_ROOT_JMPBUF(GET_THREAD(), tree = ruby_process_options(argc, argv));
@@ -135,7 +136,7 @@ ruby_cleanup(int ex)
errs[1] = th->errinfo;
th->safe_level = 0;
- Init_stack((void *)&state);
+ Init_stack(&errs[STACK_UPPER(errs, 0, 1)]);
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
@@ -631,7 +632,7 @@ rb_rescue(VALUE (* b_proc)(ANYARGS), VALUE data1,
VALUE
rb_protect(VALUE (* proc) (VALUE), VALUE data, int * state)
{
- VALUE result = Qnil; /* OK */
+ volatile VALUE result = Qnil;
int status;
rb_thread_t *th = GET_THREAD();
rb_control_frame_t *cfp = th->cfp;