summaryrefslogtreecommitdiff
path: root/vm.h
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-27 08:21:21 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-06-27 08:21:21 +0000
commitc44e2cdd58efbe13ed3b57cd56f98fc81ea64c2e (patch)
treeabdc14d507681448910f39bd422f65296ed9b8ce /vm.h
parent35ecb83d413f5d7143dd269b2d591cb742526a90 (diff)
* vm_evalbody.ci: support OPT_CALL_THREADED_CODE.
* insns.def, vm.c, vm.h: ditto. * vm.h: add VM_CFP_CNT() and VM_SP_CNT(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12633 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.h')
-rw-r--r--vm.h15
1 files changed, 14 insertions, 1 deletions
diff --git a/vm.h b/vm.h
index b3e311cb0f..364eaa11d9 100644
--- a/vm.h
+++ b/vm.h
@@ -112,7 +112,7 @@ typedef rb_control_frame_t *
(*insn_func_type) (rb_thread_t *, rb_control_frame_t *)FASTCALL;
#define INSN_ENTRY(insn) \
- rb_control_frame_t * \
+ static rb_control_frame_t * \
LABEL(insn)(rb_thread_t *th, rb_control_frame_t *reg_cfp) FASTCALL {
#define END_INSN(insn) return reg_cfp;}
@@ -219,6 +219,10 @@ default: \
/************************************************/
/************************************************/
+#define VM_CFP_CNT(th, cfp) \
+ ((rb_control_frame_t *)(th->stack + th->stack_size) - (rb_control_frame_t *)(cfp))
+#define VM_SP_CNT(th, sp) ((sp) - (th)->stack)
+
/*
env{
env[0] // special (block or prev env)
@@ -266,6 +270,15 @@ default: \
#define SET_THROWOBJ_STATE(obj, val) \
(RNODE((obj))->u3.value = (val))
+#if OPT_CALL_THREADED_CODE
+#define THROW_EXCEPTION(exc) do { \
+ th->errinfo = (VALUE)(exc); \
+ return 0; \
+} while (0)
+#else
+#define THROW_EXCEPTION(exc) return (exc)
+#endif
+
#define SCREG(r) (reg_##r)
/* VM state version */