summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/vm.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/vm.c b/src/vm.c
index 43c3d120f..9c4580fb3 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1791,21 +1791,19 @@ RETRY_TRY_BLOCK:
kargs = 0;
}
else {
- if (!mrb_hash_p(argv[argc - 1])) {
- if (r) {
- kdict = mrb_hash_new(mrb);
- kargs = 0;
- }
- else {
- mrb_value str = mrb_str_new_lit(mrb, "Excepcted `Hash` as last argument for keyword arguments");
- mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
- goto L_RAISE;
- }
+ if (argv && argc > 0 && mrb_hash_p(argv[argc-1])) {
+ kdict = argv[argc-1];
+ mrb_hash_check_kdict(mrb, kdict);
+ }
+ else if (r) {
+ kdict = mrb_hash_new(mrb);
+ kargs = 0;
}
else {
- kdict = argv[argc-1];
+ mrb_value str = mrb_str_new_lit(mrb, "Excepcted `Hash` as last argument for keyword arguments");
+ mrb_exc_set(mrb, mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str));
+ goto L_RAISE;
}
- mrb_hash_check_kdict(mrb, kdict);
if (MRB_ASPEC_KEY(a) > 0) {
kdict = mrb_hash_dup(mrb, kdict);
}