mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
class.c: check kw hash
* class.c (rb_keyword_error_new): get rid of an intermediate string and check if keys are symbols. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4179fada20
commit
1292d2d24c
1 changed files with 12 additions and 10 deletions
22
class.c
22
class.c
|
@ -1776,18 +1776,20 @@ rb_define_attr(VALUE klass, const char *name, int read, int write)
|
|||
VALUE
|
||||
rb_keyword_error_new(const char *error, VALUE keys)
|
||||
{
|
||||
const char *msg = "";
|
||||
VALUE error_message;
|
||||
const VALUE *ptr = RARRAY_CONST_PTR(keys);
|
||||
long i = 0, len = RARRAY_LEN(keys);
|
||||
VALUE error_message = rb_sprintf("%s keyword%.*s", error, len > 1, "s");
|
||||
|
||||
if (RARRAY_LEN(keys) == 1) {
|
||||
keys = RARRAY_AREF(keys, 0);
|
||||
if (len > 0) {
|
||||
rb_str_cat_cstr(error_message, ": ");
|
||||
while (1) {
|
||||
const VALUE k = ptr[i];
|
||||
Check_Type(k, T_SYMBOL); /* wrong hash is given to rb_get_kwargs */
|
||||
rb_str_append(error_message, rb_sym2str(k));
|
||||
if (++i >= len) break;
|
||||
rb_str_cat_cstr(error_message, ", ");
|
||||
}
|
||||
}
|
||||
else {
|
||||
keys = rb_ary_join(keys, rb_usascii_str_new2(", "));
|
||||
msg = "s";
|
||||
}
|
||||
|
||||
error_message = rb_sprintf("%s keyword%s: %"PRIsVALUE, error, msg, keys);
|
||||
|
||||
return rb_exc_new_str(rb_eArgError, error_message);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue