summaryrefslogtreecommitdiff
path: root/vm_callinfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'vm_callinfo.h')
-rw-r--r--vm_callinfo.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/vm_callinfo.h b/vm_callinfo.h
index 14027fc112..7c73194fca 100644
--- a/vm_callinfo.h
+++ b/vm_callinfo.h
@@ -180,15 +180,20 @@ vm_ci_dump(const struct rb_callinfo *ci)
#define vm_ci_new(mid, flag, argc, kwarg) vm_ci_new_(mid, flag, argc, kwarg, __FILE__, __LINE__)
#define vm_ci_new_runtime(mid, flag, argc, kwarg) vm_ci_new_runtime_(mid, flag, argc, kwarg, __FILE__, __LINE__)
+#/* This is passed to STATIC_ASSERT. Cannot be an inline function. */
+#define VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg) \
+ (((mid ) & ~CI_EMBED_ID_MASK) ? false : \
+ ((flag) & ~CI_EMBED_FLAG_MASK) ? false : \
+ ((argc) & ~CI_EMBED_ARGC_MASK) ? false : \
+ (kwarg) ? false : true)
+
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 ((mid & ~CI_EMBED_ID_MASK) == 0 &&
- (argc & ~CI_EMBED_ARGC_MASK) == 0 &&
- kwarg == NULL) {
+ if (VM_CI_EMBEDDABLE_P(mid, flag, argc, kwarg)) {
VALUE embed_ci =
- 1L |
+ RUBY_FIXNUM_FLAG |
((VALUE)argc << CI_EMBED_ARGC_SHFT) |
((VALUE)flag << CI_EMBED_FLAG_SHFT) |
((VALUE)mid << CI_EMBED_ID_SHFT);