From c44e2cdd58efbe13ed3b57cd56f98fc81ea64c2e Mon Sep 17 00:00:00 2001 From: ko1 Date: Wed, 27 Jun 2007 08:21:21 +0000 Subject: * 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 --- vm.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'vm.h') 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 */ -- cgit v1.2.3