diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-11-28 19:03:33 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-11-28 19:03:33 +0900 |
| commit | 6bb2af966697910425eadffd5813e4677e924cb4 (patch) | |
| tree | 6c7999ee22c784ce5470a18ded521de1115338a7 | |
| parent | e4d691778676f8cb284c91b8ca72b2dff41e2560 (diff) | |
| parent | 58a9621df7b5336448c5d16f7b2eb00a3edc76f1 (diff) | |
| download | mruby-6bb2af966697910425eadffd5813e4677e924cb4.tar.gz mruby-6bb2af966697910425eadffd5813e4677e924cb4.zip | |
Merge pull request #5587 from dearblue/args-pass.1
Fix `args_unshift()` in `mrbgems/mruby-method`
| -rw-r--r-- | mrbgems/mruby-method/src/method.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index 18fcaa03a..85e8872e2 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -46,10 +46,18 @@ args_unshift(mrb_state *mrb, mrb_value obj) if (ci->n < 15) { mrb_assert(ci->nk == 0 || ci->nk == 15); - argv[0] = mrb_ary_new_from_values(mrb, ci->n, argv); - argv[1] = argv[ci->n]; // keyword or block - if (ci->nk == 15) { - argv[2] = argv[ci->n + 1]; // block + mrb_value args = mrb_ary_new_from_values(mrb, ci->n, argv); + if (ci->nk == 0) { + mrb_value block = argv[ci->n]; + argv[0] = args; + argv[1] = block; + } + else { + mrb_value keyword = argv[ci->n]; + mrb_value block = argv[ci->n + 1]; + argv[0] = args; + argv[1] = keyword; + argv[2] = block; } ci->n = 15; } |
