From 62deb7dbbda5104c352abd723053bd1b18e50dbf Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 24 Jun 2007 13:05:51 +0000 Subject: * insn_send.ci: removed. * common.mk: ditto. * vm.c (vm_call_bmethod), isnsn.def: added. fix to use this function instead of using goto. * vm.c (vm_call_bmethod): renamed from th_invoke_bmethod(). * vm.c (vm_method_missing): renamed from eval_methdo_missing(). * vm_evalbody.ci: remove tmp_* variables. * insnhelper.h: add some macros. * insns.def: forbid zsuper from method defined by define_method(). * test/ruby/test_super.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12601 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- insnhelper.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'insnhelper.h') diff --git a/insnhelper.h b/insnhelper.h index 3801e5a41b..1fe19128b7 100644 --- a/insnhelper.h +++ b/insnhelper.h @@ -146,4 +146,20 @@ while (0) #define BASIC_OP_UNREDEFINED_P(op) ((yarv_redefined_flag & (op)) == 0) #define HEAP_CLASS_OF(obj) RBASIC(obj)->klass +#define CALL_METHOD(num, blockptr, flag, id, mn, recv, klass) do { \ + VALUE v = vm_call_method(th, GET_CFP(), num, blockptr, flag, id, mn, recv, klass); \ + if (v == Qundef) { \ + RESTORE_REGS(); \ + NEXT_INSN(); \ + } \ + else { \ + val = v; \ + } \ +} while (0) + +#define CALL_SIMPLE_METHOD(num, id, recv) do { \ + VALUE klass = CLASS_OF(recv); \ + CALL_METHOD(num, 0, 0, id, rb_method_node(klass, id), recv, CLASS_OF(recv)); \ +} while (0) + #endif /* _INSNHELPER_H_INCLUDED_ */ -- cgit v1.2.3