diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-07-23 15:51:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-07-28 23:08:58 +0900 |
| commit | e81d497155ad09a6ebd6aea7ca37535d8ca08ff8 (patch) | |
| tree | be95964ad93e88ef1965c2cae1351f5e1620cc56 /mrbgems/mruby-compiler/core | |
| parent | 2910af0010c90f30906e44a91b24c6bc2c545a7d (diff) | |
| download | mruby-e81d497155ad09a6ebd6aea7ca37535d8ca08ff8.tar.gz mruby-e81d497155ad09a6ebd6aea7ca37535d8ca08ff8.zip | |
codegen.c: removed bytecode when the value of `while` is not used.
Diffstat (limited to 'mrbgems/mruby-compiler/core')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 6ea37f255..3e94caaeb 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -39,7 +39,7 @@ enum looptype { struct loopinfo { enum looptype type; - uint32_t pc0, pc1, pc2, pc3; + uint32_t pc0, pc2, pc3; int acc; struct loopinfo *prev; }; @@ -1931,13 +1931,14 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_WHILE: { struct loopinfo *lp = loop_push(s, LOOP_NORMAL); + uint32_t pc1; if (!val) lp->acc = -1; lp->pc0 = new_label(s); - lp->pc1 = genjmp_0(s, OP_JMP); + pc1 = genjmp_0(s, OP_JMP); lp->pc2 = new_label(s); codegen(s, tree->cdr, NOVAL); - dispatch(s, lp->pc1); + dispatch(s, pc1); codegen(s, tree->car, VAL); pop(); genjmp2(s, OP_JMPIF, cursp(), lp->pc2, NOVAL); @@ -1949,13 +1950,14 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_UNTIL: { struct loopinfo *lp = loop_push(s, LOOP_NORMAL); + uint32_t pc1; if (!val) lp->acc = -1; lp->pc0 = new_label(s); - lp->pc1 = genjmp_0(s, OP_JMP); + pc1 = genjmp_0(s, OP_JMP); lp->pc2 = new_label(s); codegen(s, tree->cdr, NOVAL); - dispatch(s, lp->pc1); + dispatch(s, pc1); codegen(s, tree->car, VAL); pop(); genjmp2(s, OP_JMPNOT, cursp(), lp->pc2, NOVAL); @@ -3322,7 +3324,7 @@ loop_push(codegen_scope *s, enum looptype t) struct loopinfo *p = (struct loopinfo *)codegen_palloc(s, sizeof(struct loopinfo)); p->type = t; - p->pc0 = p->pc1 = p->pc2 = p->pc3 = JMPLINK_START; + p->pc0 = p->pc2 = p->pc3 = JMPLINK_START; p->prev = s->loop; p->acc = cursp(); s->loop = p; |
