summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--proc.c2
-rw-r--r--vm_core.h1
-rw-r--r--vm_eval.c2
4 files changed, 11 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 4184ef34fb..ceba0a3eca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Fri Feb 13 15:11:11 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (eval_string_with_cref): use rb_vm_get_ruby_level_next_cfp()
+ instead of vm_get_ruby_level_caller_cfp(). checking a upper frame
+ is not enough. [ruby-dev:37984]
+
+ * proc.c, vm_core.h: declare rb_vm_get_ruby_level_next_cfp()
+ on vm_core.h.
+
Thu Feb 12 22:51:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* compile.c (hide_obj): OBJ_FREEZE() is not an expression. a patch
diff --git a/proc.c b/proc.c
index 747b6bceb7..e9ebd174ea 100644
--- a/proc.c
+++ b/proc.c
@@ -271,8 +271,6 @@ binding_clone(VALUE self)
return bindval;
}
-rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(rb_thread_t *th, rb_control_frame_t *cfp);
-
VALUE
rb_binding_new(void)
{
diff --git a/vm_core.h b/vm_core.h
index ca1cc74a3a..fa3dd424f3 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -590,6 +590,7 @@ VALUE rb_vm_make_env_object(rb_thread_t *th, rb_control_frame_t *cfp);
void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
int ruby_thread_has_gvl_p(void);
+rb_control_frame_t *rb_vm_get_ruby_level_next_cfp(rb_thread_t *th, rb_control_frame_t *cfp);
NOINLINE(void rb_gc_save_machine_context(rb_thread_t *));
diff --git a/vm_eval.c b/vm_eval.c
index 2c98758dbe..4f53e63c9c 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -704,7 +704,7 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char
th->base_block = &env->block;
}
else {
- rb_control_frame_t *cfp = vm_get_ruby_level_caller_cfp(th, th->cfp);
+ rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(th, th->cfp);
if (cfp != 0) {
block = *RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp);