diff options
Diffstat (limited to 'vm_callinfo.h')
-rw-r--r-- | vm_callinfo.h | 13 |
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); |