aboutsummaryrefslogtreecommitdiffstats
path: root/vm_args.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-11 11:17:35 -0700
committerJeremy Evans <code@jeremyevans.net>2019-09-11 11:20:16 -0700
commited96c9f270829c7c07852f0aadcd88a58a13875b (patch)
tree3c4da782659d65b30a34d5d929a9c1a3eeb50152 /vm_args.c
parentfba5bbc69545f6d45f7a2c649321a61f43a0b1a0 (diff)
downloadruby-ed96c9f270829c7c07852f0aadcd88a58a13875b.tar.gz
Emit missing keyword argument separation warnings for define_method
Previously, the warning functions skipped warning in these cases. This removes the skipping, and uses a less descriptive warning instead. This affected both last argument to keyword warnings and keyword split warnings.
Diffstat (limited to 'vm_args.c')
-rw-r--r--vm_args.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/vm_args.c b/vm_args.c
index e471095acd..0f4f95e4cd 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -597,8 +597,14 @@ rb_warn_keyword_to_last_hash(struct rb_calling_info *calling, const struct rb_ca
}
else {
rb_warn("The keyword argument is passed as the last hash parameter");
- rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
- "for `%"PRIsVALUE"' defined here", name);
+ if (name) {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for `%"PRIsVALUE"' defined here", name);
+ }
+ else {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for method defined here");
+ }
}
}
@@ -606,7 +612,6 @@ static inline void
rb_warn_split_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci, const rb_iseq_t * const iseq)
{
VALUE name, loc;
- if (calling->recv == Qundef) return;
name = rb_id2str(ci->mid);
loc = rb_iseq_location(iseq);
if (NIL_P(loc)) {
@@ -615,8 +620,14 @@ rb_warn_split_last_hash_to_keyword(struct rb_calling_info *calling, const struct
}
else {
rb_warn("The last argument is split into positional and keyword parameters");
- rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
- "for `%"PRIsVALUE"' defined here", name);
+ if (calling->recv != Qundef) {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for `%"PRIsVALUE"' defined here", name);
+ }
+ else {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for method defined here");
+ }
}
}
@@ -624,7 +635,6 @@ static inline void
rb_warn_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_call_info *ci, const rb_iseq_t * const iseq)
{
VALUE name, loc;
- if (calling->recv == Qundef) return;
name = rb_id2str(ci->mid);
loc = rb_iseq_location(iseq);
if (NIL_P(loc)) {
@@ -633,8 +643,14 @@ rb_warn_last_hash_to_keyword(struct rb_calling_info *calling, const struct rb_ca
}
else {
rb_warn("The last argument is used as the keyword parameter");
- rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
- "for `%"PRIsVALUE"' defined here", name);
+ if (calling->recv != Qundef) {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for `%"PRIsVALUE"' defined here", name);
+ }
+ else {
+ rb_compile_warn(RSTRING_PTR(RARRAY_AREF(loc, 0)), FIX2INT(RARRAY_AREF(loc, 1)),
+ "for method defined here");
+ }
}
}