mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
fixed a bug in initializing post mandatory block parameters
This commit is contained in:
@@ -1186,9 +1186,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
value_move(®s[1], argv, argc-m2); /* m1 + o */
|
||||
}
|
||||
if (m2) {
|
||||
value_move(®s[len-m2+1], &argv[argc-m2], m2); /* m2 */
|
||||
int mlen = m2;
|
||||
if (argc-m2 <= m1) {
|
||||
mlen = argc - m1;
|
||||
}
|
||||
value_move(®s[len-m2+1], &argv[argc-mlen], mlen);
|
||||
}
|
||||
if (r) { /* r */
|
||||
if (r) {
|
||||
regs[m1+o+1] = mrb_ary_new_capa(mrb, 0);
|
||||
}
|
||||
if (o == 0) pc++;
|
||||
@@ -1198,13 +1202,15 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
else {
|
||||
if (argv0 != argv) {
|
||||
regs[len+1] = *blk; /* move block */
|
||||
value_move(®s[1], argv, m1+o); /* m1 + o */
|
||||
value_move(®s[1], argv, m1+o);
|
||||
}
|
||||
if (r) { /* r */
|
||||
if (r) {
|
||||
regs[m1+o+1] = mrb_ary_new_from_values(mrb, argc-m1-o-m2, argv+m1+o);
|
||||
}
|
||||
if (m2) {
|
||||
value_move(®s[m1+o+r+1], &argv[argc-m2], m2);
|
||||
if (argc-m2 > m1) {
|
||||
value_move(®s[m1+o+r+1], &argv[argc-m2], m2);
|
||||
}
|
||||
}
|
||||
if (argv0 == argv) {
|
||||
regs[len+1] = *blk; /* move block */
|
||||
|
||||
Reference in New Issue
Block a user