summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-11-11 04:37:42 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-11-11 04:37:42 +0900
commit3f002b6993df9ea4843e2479d706e7426d57bb5a (patch)
tree6c7087da7fb05be7b7ae51c49c5db523012ef2c0
parent872517dff372ee6fde92c71861abf6ab9fbab958 (diff)
downloadmruby-3f002b6993df9ea4843e2479d706e7426d57bb5a.tar.gz
mruby-3f002b6993df9ea4843e2479d706e7426d57bb5a.zip
fixed a bug when number of LHS and RHS differs; fix #3239
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index c898acddc..9b064b867 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1655,11 +1655,21 @@ codegen(codegen_scope *s, node *tree, int val)
}
tree = tree->car;
if (tree->car) { /* pre */
+ int first = TRUE;
t = tree->car;
n = 0;
while (t) {
- gen_assignment(s, t->car, rhs+n, NOVAL);
- n++;
+ if (n < len) {
+ gen_assignment(s, t->car, rhs+n, NOVAL);
+ n++;
+ }
+ else {
+ if (first) {
+ genop(s, MKOP_A(OP_LOADNIL, rhs+n));
+ first = FALSE;
+ }
+ gen_assignment(s, t->car, rhs+n, NOVAL);
+ }
t = t->cdr;
}
}