summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-26 10:55:45 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-26 10:55:45 +0000
commit98c88786c7a77a6c18c8e1be40a83c1452e15bff (patch)
tree86aaf8168aa3e7c10c6aa9e00943b2e3242d6f82 /error.c
parentba4aba0d6ca77a6c4724c26f6bfaedf83a0fb443 (diff)
error.c: copy keyword arguments
* error.c (rb_key_err_new): pass arguments all arguments to the super method, except for keyword arguments copied to instance variables. [Feature #14313] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r--error.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/error.c b/error.c
index 7870e58035..0704d2e057 100644
--- a/error.c
+++ b/error.c
@@ -1690,29 +1690,21 @@ rb_key_err_new(VALUE mesg, VALUE recv, VALUE key)
static VALUE
key_err_initialize(int argc, VALUE *argv, VALUE self)
{
- VALUE message;
VALUE options;
- rb_scan_args(argc, argv, "01:", &message, &options);
-
- if (NIL_P(message)) {
- rb_call_super(0, NULL);
- }
- else {
- rb_call_super(1, &message);
- }
+ rb_call_super(rb_scan_args(argc, argv, "01:", NULL, &options), argv);
if (!NIL_P(options)) {
ID keywords[2];
- VALUE values[2];
+ VALUE values[numberof(keywords)];
+ int i;
keywords[0] = id_receiver;
keywords[1] = id_key;
- rb_get_kwargs(options, keywords, 0, 2, values);
- if (values[0] != Qundef) {
- rb_ivar_set(self, id_receiver, values[0]);
- }
- if (values[1] != Qundef) {
- rb_ivar_set(self, id_key, values[1]);
+ rb_get_kwargs(options, keywords, 0, numberof(values), values);
+ for (i = 0; i < numberof(values); ++i) {
+ if (values[i] != Qundef) {
+ rb_ivar_set(self, keywords[i], values[i]);
+ }
}
}