diff options
author | 卜部昌平 <[email protected]> | 2020-06-03 18:25:13 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2020-06-09 09:52:46 +0900 |
commit | e1e84fbb4f7df57d48fd2b1331edd0d521df7812 (patch) | |
tree | c23c752223b8b3eac098a2215f1d5fd18e0ae090 /vm_callinfo.h | |
parent | 324038c66edc947a7738440621587575355087a4 (diff) |
VM_CI_NEW_ID: USE_EMBED_CI could be false
It was a wrong idea to assume CIs are always embedded.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3179
Diffstat (limited to 'vm_callinfo.h')
-rw-r--r-- | vm_callinfo.h | 14 |
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 |