aboutsummaryrefslogtreecommitdiffstats
path: root/vm_insnhelper.h
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.h')
-rw-r--r--vm_insnhelper.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/vm_insnhelper.h b/vm_insnhelper.h
index de3b25f41e..cad07da182 100644
--- a/vm_insnhelper.h
+++ b/vm_insnhelper.h
@@ -162,8 +162,8 @@ enum vm_regan_acttype {
} \
} while (0)
-#define CALL_METHOD(ci) do { \
- VALUE v = (*(ci)->call)(th, GET_CFP(), (ci)); \
+#define CALL_METHOD(calling, ci, cc) do { \
+ VALUE v = (*(cc)->call)(th, GET_CFP(), (calling), (ci), (cc)); \
if (v == Qundef) { \
RESTORE_REGS(); \
NEXT_INSN(); \
@@ -182,8 +182,8 @@ enum vm_regan_acttype {
#endif
#if OPT_CALL_FASTPATH
-#define CI_SET_FASTPATH(ci, func, enabled) do { \
- if (LIKELY(enabled)) ((ci)->call = (func)); \
+#define CI_SET_FASTPATH(cc, func, enabled) do { \
+ if (LIKELY(enabled)) ((cc)->call = (func)); \
} while (0)
#else
#define CI_SET_FASTPATH(ci, func, enabled) /* do nothing */
@@ -213,9 +213,11 @@ enum vm_regan_acttype {
#endif
#define CALL_SIMPLE_METHOD(recv_) do { \
- ci->blockptr = 0; ci->argc = ci->orig_argc; \
- vm_search_method(ci, ci->recv = (recv_)); \
- CALL_METHOD(ci); \
+ struct rb_calling_info calling; \
+ calling.blockptr = NULL; \
+ calling.argc = ci->orig_argc; \
+ vm_search_method(ci, cc, calling.recv = (recv_)); \
+ CALL_METHOD(&calling, ci, cc); \
} while (0)
#define NEXT_CLASS_SERIAL() (++ruby_vm_class_serial)