aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-03-18 00:35:02 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-03-18 00:35:02 +0900
commit4fdb10e65e3e32dad99a8a8efecc04bf7c85f024 (patch)
tree031d0ad60e3b1aeb8fe9e990b08425f9d8abd961 /eval.c
parente660b934b98943826f888f2b73f773c6411cd199 (diff)
downloadruby-4fdb10e65e3e32dad99a8a8efecc04bf7c85f024.tar.gz
A positional Hash is not keyword arguments [Bug #18632]
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/eval.c b/eval.c
index d91440676f..3a1a6b45df 100644
--- a/eval.c
+++ b/eval.c
@@ -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;
}
}