From ad5e4c8cd8aae9c7f4c0e983a2089a932919d667 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 22 Jul 2018 16:03:58 +0000 Subject: object.c: prefer base optarg * object.c (rb_f_integer): prefer `base` optional argument over keyword arguments. this issue should be resolved more generally by separating keyword arguments from hashes in the future. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- object.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'object.c') diff --git a/object.c b/object.c index 9492abfac9..7d6e47932c 100644 --- a/object.c +++ b/object.c @@ -3214,15 +3214,23 @@ rb_f_integer(int argc, VALUE *argv, VALUE obj) VALUE arg = Qnil, opts = Qnil; int base = 0; - switch (rb_scan_args(argc, argv, "11:", NULL, NULL, &opts)) { - case 2: - base = NUM2INT(argv[1]); - case 1: - arg = argv[0]; - break; - default: - UNREACHABLE; + if (argc > 1) { + int narg = 1; + VALUE vbase = rb_check_to_int(argv[1]); + if (!NIL_P(vbase)) { + base = NUM2INT(vbase); + narg = 2; + } + if (argc > narg) { + VALUE hash = rb_check_hash_type(argv[argc-1]); + if (!NIL_P(hash)) { + opts = rb_extract_keywords(&hash); + if (!hash) --argc; + } + } } + rb_check_arity(argc, 1, 2); + arg = argv[0]; return rb_convert_to_integer(arg, base, opts_exception_p(opts)); } -- cgit v1.2.3