From 0c3226db0443972eb76bde5af3f9e14bdb4dbd85 Mon Sep 17 00:00:00 2001 From: ksss Date: Tue, 6 May 2014 23:23:32 +0900 Subject: OP_ENTER fix variable assignment --- src/vm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index ae19db0b6..317b5f6b1 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1325,16 +1325,18 @@ RETRY_TRY_BLOCK: pc += argc - m1 - m2 + 1; } else { + int rnum = 0; if (argv0 != argv) { regs[len+1] = *blk; /* move block */ value_move(®s[1], argv, m1+o); } if (r) { - regs[m1+o+1] = mrb_ary_new_from_values(mrb, argc-m1-o-m2, argv+m1+o); + rnum = argc-m1-o-m2; + regs[m1+o+1] = mrb_ary_new_from_values(mrb, rnum, argv+m1+o); } if (m2) { if (argc-m2 > m1) { - value_move(®s[m1+o+r+1], &argv[argc-m2], m2); + value_move(®s[m1+o+r+1], &argv[m1+o+rnum], m2); } } if (argv0 == argv) { -- cgit v1.2.3