aboutsummaryrefslogtreecommitdiffstats
path: root/vm_callinfo.h
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-06-03 18:25:13 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-06-09 09:52:46 +0900
commite1e84fbb4f7df57d48fd2b1331edd0d521df7812 (patch)
treec23c752223b8b3eac098a2215f1d5fd18e0ae090 /vm_callinfo.h
parent324038c66edc947a7738440621587575355087a4 (diff)
downloadruby-e1e84fbb4f7df57d48fd2b1331edd0d521df7812.tar.gz
VM_CI_NEW_ID: USE_EMBED_CI could be false
It was a wrong idea to assume CIs are always embedded.
Diffstat (limited to 'vm_callinfo.h')
-rw-r--r--vm_callinfo.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/vm_callinfo.h b/vm_callinfo.h
index f9ede405b9..03d9e2d2be 100644
--- a/vm_callinfo.h
+++ b/vm_callinfo.h
@@ -187,18 +187,20 @@ vm_ci_dump(const struct rb_callinfo *ci)
((argc) & ~CI_EMBED_ARGC_MASK) ? false : \
(kwarg) ? false : true)
+#define vm_ci_new_id(mid, flag, argc, must_zero) \
+ ((const struct rb_callinfo *) \
+ ((((VALUE)(mid )) << CI_EMBED_ID_SHFT) | \
+ (((VALUE)(flag)) << CI_EMBED_FLAG_SHFT) | \
+ (((VALUE)(argc)) << CI_EMBED_ARGC_SHFT) | \
+ RUBY_FIXNUM_FLAG))
+
static inline const struct rb_callinfo *
vm_ci_new_(ID mid, unsigned int flag, unsigned int argc, const struct rb_callinfo_kwarg *kwarg, const char *file, int line)
{
#if USE_EMBED_CI
if (VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg)) {
- VALUE embed_ci =
- RUBY_FIXNUM_FLAG |
- ((VALUE)argc << CI_EMBED_ARGC_SHFT) |
- ((VALUE)flag << CI_EMBED_FLAG_SHFT) |
- ((VALUE)mid << CI_EMBED_ID_SHFT);
RB_DEBUG_COUNTER_INC(ci_packed);
- return (const struct rb_callinfo *)embed_ci;
+ return vm_ci_new_id(mid, flag, argc, kwarg);
}
#endif