diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-07-31 03:14:42 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-07-31 03:14:42 +0900 |
| commit | 53e2723faede0e6f9959bd3316f4dd1e84b69609 (patch) | |
| tree | f042b6ba06db7cf63e8debcbe38e73754c1930d9 /src/vm.c | |
| parent | 8c9e7127845f84fcbb249c45936c97a89ca7a80a (diff) | |
| download | mruby-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/vm.c')
| -rw-r--r-- | src/vm.c | 5 |
1 files changed, 2 insertions, 3 deletions
@@ -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 { |
