diff options
Diffstat (limited to 'vm_insnhelper.h')
-rw-r--r-- | vm_insnhelper.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/vm_insnhelper.h b/vm_insnhelper.h index c004e5ecd6..98aee9d46c 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -239,4 +239,13 @@ THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj) #define IS_ARGS_SPLAT(ci) ((ci)->flag & VM_CALL_ARGS_SPLAT) #define IS_ARGS_KEYWORD(ci) ((ci)->flag & VM_CALL_KWARG) +/* If this returns true, an optimized function returned by `vm_call_iseq_setup_func` + can be used as a fastpath. */ +static bool +vm_call_iseq_optimizable_p(const struct rb_call_info *ci, const struct rb_call_cache *cc) +{ + return !IS_ARGS_SPLAT(ci) && !IS_ARGS_KEYWORD(ci) && + !(METHOD_ENTRY_VISI(cc->me) == METHOD_VISI_PROTECTED); +} + #endif /* RUBY_INSNHELPER_H */ |