diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-05-16 15:36:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-05-16 15:36:36 +0900 |
| commit | 6b0299f72b23071342d3ab067db1abbf15253102 (patch) | |
| tree | 8f5e2a4771271f857c8eeaad82b056de2e52e0c9 /mrbgems/mruby-compiler/core/codegen.c | |
| parent | 29d3a40418dd41dfb0e10f92d08ce313bb439eca (diff) | |
| download | mruby-6b0299f72b23071342d3ab067db1abbf15253102.tar.gz mruby-6b0299f72b23071342d3ab067db1abbf15253102.zip | |
fixed remaining bugs in OP_ASGN stack adjustment; close #3159
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 13 |
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))); |
