summaryrefslogtreecommitdiff
path: root/vm.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 /vm.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 'vm.c')
-rw-r--r--vm.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/vm.c b/vm.c
index e8507743fe..a952f5e029 100644
--- a/vm.c
+++ b/vm.c
@@ -651,60 +651,60 @@ vm_invoke_proc(rb_thread_t *th, rb_proc_t *proc,
/* special variable */
-VALUE *
-vm_cfp_svar(rb_control_frame_t *cfp, int cnt)
+VALUE
+vm_cfp_svar_get(rb_thread_t *th, rb_control_frame_t *cfp, VALUE key)
{
while (cfp->pc == 0) {
cfp++;
}
- return lfp_svar(cfp->lfp, cnt);
+ return lfp_svar_get(th, cfp->lfp, key);
}
-static VALUE *
-vm_svar(rb_thread_t *th, int cnt)
+void
+vm_cfp_svar_set(rb_thread_t *th, rb_control_frame_t *cfp, VALUE key, VALUE val)
{
- rb_control_frame_t *cfp = th->cfp;
- return vm_cfp_svar(cfp, cnt);
+ while (cfp->pc == 0) {
+ cfp++;
+ }
+ lfp_svar_set(th, cfp->lfp, key, val);
}
-VALUE *
-rb_svar(int cnt)
+static VALUE
+vm_svar_get(VALUE key)
{
- return vm_svar(GET_THREAD(), cnt);
+ rb_thread_t *th = GET_THREAD();
+ return vm_cfp_svar_get(th, th->cfp, key);
+}
+
+static void
+vm_svar_set(VALUE key, VALUE val)
+{
+ rb_thread_t *th = GET_THREAD();
+ vm_cfp_svar_set(th, th->cfp, key, val);
}
VALUE
rb_backref_get(void)
{
- VALUE *var = rb_svar(1);
- if (var) {
- return *var;
- }
- return Qnil;
+ return vm_svar_get(1);
}
void
rb_backref_set(VALUE val)
{
- VALUE *var = rb_svar(1);
- *var = val;
+ vm_svar_set(1, val);
}
VALUE
rb_lastline_get(void)
{
- VALUE *var = rb_svar(0);
- if (var) {
- return *var;
- }
- return Qnil;
+ return vm_svar_get(0);
}
void
rb_lastline_set(VALUE val)
{
- VALUE *var = rb_svar(0);
- *var = val;
+ vm_svar_set(0, val);
}
/* backtrace */
@@ -823,9 +823,8 @@ lfp_set_special_cref(VALUE *lfp, NODE * cref)
old_cref = 0;
}
else {
- pv = lfp_svar(lfp, -1);
- old_cref = (NODE *) * pv;
- *pv = (VALUE)cref;
+ old_cref = lfp_svar_get(GET_THREAD(), lfp, -1);
+ lfp_svar_set(GET_THREAD(), lfp, -1, cref);
}
return old_cref;
}