summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-10 08:04:52 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-07-10 08:04:52 +0000
commita6e3d19f3ac344613da68dff705fb411d9120d63 (patch)
tree7f16e466dd79c5750c740d3aac7a4704b924885e /eval.c
parentd4662d49d925484f673969693f47cd4ac4338206 (diff)
* vm.c, insnhelper.ci: fix svar interface.
* compile.c (iseq_compile_each), yarvcore.h: fix to use new svar interface for flip flop. * eval.c: ditto. * insns.def: ditto. * include/ruby/intern.h: remove "rb_svar()" declaration. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/eval.c b/eval.c
index 6c3669054b..6edef41ff5 100644
--- a/eval.c
+++ b/eval.c
@@ -1781,7 +1781,8 @@ rb_f_eval(int argc, VALUE *argv, VALUE self)
return eval(self, src, scope, file, line);
}
-VALUE *vm_cfp_svar(rb_control_frame_t *cfp, int idx);
+VALUE vm_cfp_svar_get(rb_thread_t *th, rb_control_frame_t *cfp, VALUE key);
+void vm_cfp_svar_set(rb_thread_t *th, rb_control_frame_t *cfp, VALUE key, VALUE val);
/* function to call func under the specified class/module context */
static VALUE
@@ -1793,7 +1794,6 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE self, VALUE args)
rb_control_frame_t *pcfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
VALUE stored_self = pcfp->self;
NODE *stored_cref = 0;
- NODE **pcref = 0;
rb_block_t block;
rb_block_t *blockptr;
@@ -1813,9 +1813,8 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE self, VALUE args)
cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
}
- pcref = (NODE **) vm_cfp_svar(cfp, -1);
- stored_cref = *pcref;
- *pcref = vm_cref_push(th, under, NOEX_PUBLIC);
+ stored_cref = vm_cfp_svar_get(th, cfp, -1);
+ vm_cfp_svar_set(th, cfp, -1, vm_cref_push(th, under, NOEX_PUBLIC));
PUSH_TAG();
if ((state = EXEC_TAG()) == 0) {
@@ -1824,7 +1823,7 @@ exec_under(VALUE (*func) (VALUE), VALUE under, VALUE self, VALUE args)
POP_TAG();
/* restore environment */
- *pcref = stored_cref;
+ vm_cfp_svar_set(th, cfp, -1, stored_cref);
pcfp->self = stored_self;
if (state) {