summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler
diff options
context:
space:
mode:
authorFelix Jones <[email protected]>2016-11-10 20:01:59 +0000
committerFelix Jones <[email protected]>2016-11-10 20:01:59 +0000
commit70aa6dc38d75dd6b1e2c76f290bc576e36e36ea3 (patch)
tree2169dd999e756702a696dbd1be553b7560c2416b /mrbgems/mruby-compiler
parentcc5f40b2dbcd8e0ea703e820dcf203619b5f1003 (diff)
parent3f002b6993df9ea4843e2479d706e7426d57bb5a (diff)
downloadmruby-70aa6dc38d75dd6b1e2c76f290bc576e36e36ea3.tar.gz
mruby-70aa6dc38d75dd6b1e2c76f290bc576e36e36ea3.zip
Merge branch 'master' into android.rake-ndk-clang
Diffstat (limited to 'mrbgems/mruby-compiler')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index efdd77888..9b064b867 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1645,7 +1645,7 @@ codegen(codegen_scope *s, node *tree, int val)
node *t = tree->cdr, *p;
int rhs = cursp();
- if ((intptr_t)t->car == NODE_ARRAY && nosplat(t->cdr)) {
+ if ((intptr_t)t->car == NODE_ARRAY && t->cdr && nosplat(t->cdr)) {
/* fixed rhs */
t = t->cdr;
while (t) {
@@ -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;
}
}