summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-07-31 03:14:42 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-07-31 03:14:42 +0900
commit53e2723faede0e6f9959bd3316f4dd1e84b69609 (patch)
treef042b6ba06db7cf63e8debcbe38e73754c1930d9 /src
parent8c9e7127845f84fcbb249c45936c97a89ca7a80a (diff)
downloadmruby-53e2723faede0e6f9959bd3316f4dd1e84b69609.tar.gz
mruby-53e2723faede0e6f9959bd3316f4dd1e84b69609.zip
Fixed a small bug in keyword argument parsing.
def m(a=1,**k) p [a,k] end m(a: 1)
Diffstat (limited to 'src')
-rw-r--r--src/vm.c5
1 files changed, 2 insertions, 3 deletions
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(&regs[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 {