From a352b0a20744a19c2fcb2ea5af576805c0706aea Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 7 May 2014 08:24:09 +0000 Subject: numeric.c: check keyword arguments * numeric.c (num_step_scan_args): check keyword arguments and fail if they conflict with positional arguments. [ruby-dev:48177] [Bug #9811] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45861 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- numeric.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'numeric.c') diff --git a/numeric.c b/numeric.c index dfa7052467..60c8ab6f1d 100644 --- a/numeric.c +++ b/numeric.c @@ -1867,8 +1867,19 @@ num_step_scan_args(int argc, const VALUE *argv, VALUE *to, VALUE *step) argc = rb_scan_args(argc, argv, "02:", to, step, &hash); if (!NIL_P(hash)) { - *step = rb_hash_aref(hash, sym_by); - *to = rb_hash_aref(hash, sym_to); + ID keys[2]; + VALUE values[2]; + keys[0] = sym_to; + keys[1] = sym_by; + rb_get_kwargs(hash, keys, 0, 2, values); + if (values[0] != Qundef) { + if (argc > 0) rb_raise(rb_eArgError, "to is given twice"); + *to = values[0]; + } + if (values[1] != Qundef) { + if (argc > 1) rb_raise(rb_eArgError, "step is given twice"); + *step = values[1]; + } } else { /* compatibility */ -- cgit v1.2.3