diff options
author | Nobuyoshi Nakada <[email protected]> | 2022-03-18 00:35:02 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2022-03-18 00:35:02 +0900 |
commit | 4fdb10e65e3e32dad99a8a8efecc04bf7c85f024 (patch) | |
tree | 031d0ad60e3b1aeb8fe9e990b08425f9d8abd961 /eval.c | |
parent | e660b934b98943826f888f2b73f773c6411cd199 (diff) |
A positional Hash is not keyword arguments [Bug #18632]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5676
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -695,17 +695,18 @@ rb_interrupt(void) enum {raise_opt_cause, raise_max_opt}; /*< \private */ static int -extract_raise_opts(int argc, const VALUE *argv, VALUE *opts) +extract_raise_opts(int argc, VALUE *argv, VALUE *opts) { int i; if (argc > 0) { - VALUE opt = argv[argc-1]; - if (RB_TYPE_P(opt, T_HASH)) { + VALUE opt; + argc = rb_scan_args(argc, argv, "*:", NULL, &opt); + if (!NIL_P(opt)) { if (!RHASH_EMPTY_P(opt)) { ID keywords[1]; CONST_ID(keywords[0], "cause"); rb_get_kwargs(opt, keywords, 0, -1-raise_max_opt, opts); - if (RHASH_EMPTY_P(opt)) --argc; + if (!RHASH_EMPTY_P(opt)) argv[argc++] = opt; return argc; } } |