summaryrefslogtreecommitdiff
path: root/vm_args.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_args.c')
-rw-r--r--vm_args.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/vm_args.c b/vm_args.c
index f8d329c993..7db1d3e989 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -579,17 +579,13 @@ ignore_keyword_hash_p(VALUE keyword_hash, const rb_iseq_t * const iseq) {
return 0;
}
-static inline VALUE
-get_loc(struct rb_calling_info *calling, const struct rb_call_info *ci)
-{
- return rb_obj_method_location(calling->recv, ci->mid);
-}
+VALUE iseq_location(const rb_iseq_t *iseq);
static inline void
-rb_warn_keyword_to_last_hash(struct rb_calling_info *calling, const struct rb_call_info *ci)
+rb_warn_keyword_to_last_hash(struct rb_calling_info *calling, const struct rb_call_info *ci, const rb_iseq_t * const iseq)
{
if (calling->recv == Qundef) return;
- VALUE loc = get_loc(calling, ci);
+ VALUE loc = iseq_location(iseq);
if (NIL_P(loc)) {
rb_warn("The keyword argument for `%s' is passed as the last hash parameter", rb_id2name(ci->mid));
}
@@ -600,10 +596,10 @@ rb_warn_keyword_to_last_hash(struct rb_calling_info *calling, const struct rb_ca
}
static inline void
-rb_warn_split_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci)
+rb_warn_split_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci, const rb_iseq_t * const iseq)
{
if (calling->recv == Qundef) return;
- VALUE loc = get_loc(calling, ci);
+ VALUE loc = iseq_location(iseq);
if (NIL_P(loc)) {
rb_warn("The last argument for `%s' is split into positional and keyword parameters", rb_id2name(ci->mid));
}
@@ -614,10 +610,10 @@ rb_warn_split_last_hash_to_keyword(struct rb_calling_info *calling, const struct
}
static inline void
-rb_warn_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci)
+rb_warn_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci, const rb_iseq_t * const iseq)
{
if (calling->recv == Qundef) return;
- VALUE loc = get_loc(calling, ci);
+ VALUE loc = iseq_location(iseq);
if (NIL_P(loc)) {
rb_warn("The last argument for `%s' is used as the keyword parameter", rb_id2name(ci->mid));
}
@@ -770,10 +766,10 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co
}
else if (check_only_symbol) {
if (keyword_hash != Qnil) {
- rb_warn_split_last_hash_to_keyword(calling, ci);
+ rb_warn_split_last_hash_to_keyword(calling, ci, iseq);
}
else {
- rb_warn_keyword_to_last_hash(calling, ci);
+ rb_warn_keyword_to_last_hash(calling, ci, iseq);
}
}
}
@@ -784,16 +780,16 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co
*/
if (ec->cfp->iseq) {
/* called from Ruby level */
- rb_warn_last_hash_to_keyword(calling, ci);
+ rb_warn_last_hash_to_keyword(calling, ci, iseq);
}
given_argc--;
}
else if (keyword_hash != Qnil && ec->cfp->iseq) {
- rb_warn_split_last_hash_to_keyword(calling, ci);
+ rb_warn_split_last_hash_to_keyword(calling, ci, iseq);
}
}
else if (given_argc == min_argc && kw_flag) {
- rb_warn_keyword_to_last_hash(calling, ci);
+ rb_warn_keyword_to_last_hash(calling, ci, iseq);
}
}