зеркало из https://github.com/github/ruby.git
Enable keyword argument warnings when called from C
Previously, Ruby did not warn in these cases, and in some cases did not have the same behavior. This makes calls from C handled the same way as calls from Ruby.
This commit is contained in:
Родитель
80e679ef2d
Коммит
5603681520
|
@ -786,7 +786,7 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co
|
||||||
(kw_splat && given_argc > max_argc)) &&
|
(kw_splat && given_argc > max_argc)) &&
|
||||||
args->kw_argv == NULL) {
|
args->kw_argv == NULL) {
|
||||||
if (given_argc > min_argc) {
|
if (given_argc > min_argc) {
|
||||||
if (((kw_flag & (VM_CALL_KWARG | VM_CALL_KW_SPLAT)) || !ec->cfp->iseq /* called from C */)) {
|
if (kw_flag) {
|
||||||
int check_only_symbol = (kw_flag & VM_CALL_KW_SPLAT) &&
|
int check_only_symbol = (kw_flag & VM_CALL_KW_SPLAT) &&
|
||||||
iseq->body->param.flags.has_kw &&
|
iseq->body->param.flags.has_kw &&
|
||||||
!iseq->body->param.flags.has_kwrest;
|
!iseq->body->param.flags.has_kwrest;
|
||||||
|
@ -808,13 +808,10 @@ setup_parameters_complex(rb_execution_context_t * const ec, const rb_iseq_t * co
|
||||||
* def foo(k:1) p [k]; end
|
* def foo(k:1) p [k]; end
|
||||||
* foo({k:42}) #=> 42
|
* foo({k:42}) #=> 42
|
||||||
*/
|
*/
|
||||||
if (ec->cfp->iseq) {
|
rb_warn_last_hash_to_keyword(calling, ci, iseq);
|
||||||
/* called from Ruby level */
|
|
||||||
rb_warn_last_hash_to_keyword(calling, ci, iseq);
|
|
||||||
}
|
|
||||||
given_argc--;
|
given_argc--;
|
||||||
}
|
}
|
||||||
else if (keyword_hash != Qnil && ec->cfp->iseq) {
|
else if (keyword_hash != Qnil) {
|
||||||
rb_warn_split_last_hash_to_keyword(calling, ci, iseq);
|
rb_warn_split_last_hash_to_keyword(calling, ci, iseq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче