summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-05-16 15:36:36 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-05-16 15:36:36 +0900
commit6b0299f72b23071342d3ab067db1abbf15253102 (patch)
tree8f5e2a4771271f857c8eeaad82b056de2e52e0c9
parent29d3a40418dd41dfb0e10f92d08ce313bb439eca (diff)
downloadmruby-6b0299f72b23071342d3ab067db1abbf15253102.tar.gz
mruby-6b0299f72b23071342d3ab067db1abbf15253102.zip
fixed remaining bugs in OP_ASGN stack adjustment; close #3159
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 37a7cbd0d..48805885f 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1855,15 +1855,16 @@ codegen(codegen_scope *s, node *tree, int val)
gen_assignment(s, tree->car, cursp(), val);
}
else {
+ if (val) {
+ genop(s, MKOP_AB(OP_MOVE, vsp, cursp()));
+ }
if (callargs == CALL_MAXARGS) {
- genop(s, MKOP_AB(OP_ARYPUSH, cursp()-1, cursp()));
- if (val) {
- genop(s, MKOP_AB(OP_MOVE, vsp, cursp()));
- }
pop();
+ genop(s, MKOP_AB(OP_ARYPUSH, cursp(), cursp()+1));
}
- else if (val) {
- genop(s, MKOP_AB(OP_MOVE, vsp, cursp()));
+ else {
+ pop_n(callargs);
+ callargs++;
}
pop();
idx = new_msym(s, attrsym(s,sym(tree->car->cdr->cdr->car)));