From 53e2723faede0e6f9959bd3316f4dd1e84b69609 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 31 Jul 2018 03:14:42 +0900 Subject: Fixed a small bug in keyword argument parsing. def m(a=1,**k) p [a,k] end m(a: 1) --- src/vm.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/vm.c') diff --git a/src/vm.c b/src/vm.c index 8aeb68fc2..8fe7c69b0 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1770,7 +1770,7 @@ RETRY_TRY_BLOCK: } /* no rest arguments */ - if (argc < len) { + if (argc-kargs < len) { int mlen = m2; if (argc < m1+m2) { mlen = m1 < argc ? argc - m1 : 0; @@ -1778,7 +1778,6 @@ RETRY_TRY_BLOCK: regs[blk_pos] = *blk; /* move block */ if (kd) regs[len + 1] = kdict; - SET_NIL_VALUE(regs[argc+1]); /* copy mandatory and optional arguments */ if (argv0 != argv) { value_move(®s[1], argv, argc-mlen); /* m1 + o */ @@ -1798,7 +1797,7 @@ RETRY_TRY_BLOCK: regs[m1+o+1] = mrb_ary_new_capa(mrb, 0); } /* skip initailizer of passed arguments */ - if (o > 0 && argc-kargs >= m1+m2) + if (o > 0 && argc-kargs > m1+m2) pc += (argc - kargs - m1 - m2)*3; } else { -- cgit v1.2.3