Share vm_call_iseq_optimizable_p to reduce copy-paste
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a8695d5022
commit
52bd8f6f68
@ -69,8 +69,8 @@ inlinable_iseq_p(CALL_INFO ci, CALL_CACHE cc, const rb_iseq_t *iseq)
|
|||||||
{
|
{
|
||||||
extern bool rb_simple_iseq_p(const rb_iseq_t *iseq);
|
extern bool rb_simple_iseq_p(const rb_iseq_t *iseq);
|
||||||
return iseq != NULL
|
return iseq != NULL
|
||||||
&& rb_simple_iseq_p(iseq) && !(ci->flag & VM_CALL_KW_SPLAT) /* Top of vm_callee_setup_arg. In this case, opt_pc is 0. */
|
&& !(ci->flag & VM_CALL_KW_SPLAT) && rb_simple_iseq_p(iseq) // Top of vm_callee_setup_arg. In this case, opt_pc is 0.
|
||||||
&& (!IS_ARGS_SPLAT(ci) && !IS_ARGS_KEYWORD(ci) && !(METHOD_ENTRY_VISI(cc->me) == METHOD_VISI_PROTECTED)); /* CC_SET_FASTPATH */
|
&& vm_call_iseq_optimizable_p(ci, cc); // CC_SET_FASTPATH condition
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1782,9 +1782,7 @@ vm_callee_setup_arg(rb_execution_context_t *ec, struct rb_calling_info *calling,
|
|||||||
argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
|
argument_arity_error(ec, iseq, calling->argc, iseq->body->param.lead_num, iseq->body->param.lead_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size),
|
CC_SET_FASTPATH(cc, vm_call_iseq_setup_func(ci, param_size, local_size), vm_call_iseq_optimizable_p(ci, cc));
|
||||||
(!IS_ARGS_SPLAT(ci) && !IS_ARGS_KEYWORD(ci) &&
|
|
||||||
!(METHOD_ENTRY_VISI(cc->me) == METHOD_VISI_PROTECTED)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (rb_iseq_only_optparam_p(iseq)) {
|
else if (rb_iseq_only_optparam_p(iseq)) {
|
||||||
|
@ -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_SPLAT(ci) ((ci)->flag & VM_CALL_ARGS_SPLAT)
|
||||||
#define IS_ARGS_KEYWORD(ci) ((ci)->flag & VM_CALL_KWARG)
|
#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 */
|
#endif /* RUBY_INSNHELPER_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user