summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-07-23 15:56:11 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-07-28 23:08:58 +0900
commitadfd29c1b02337c80a4e1d764d66757c0a43d959 (patch)
tree4ec47fd53bce347b85ade6cc810976bf29a85ffc /mrbgems/mruby-compiler/core/codegen.c
parente81d497155ad09a6ebd6aea7ca37535d8ca08ff8 (diff)
downloadmruby-adfd29c1b02337c80a4e1d764d66757c0a43d959.tar.gz
mruby-adfd29c1b02337c80a4e1d764d66757c0a43d959.zip
codegen.c: fix `loopinfo` structure members.
- `pc0`: `next` destination - `pc1`: `redo` destination (renamed from `pc2`) - `pc3`: `break` destination (renamed from `pc3`) old `pc1` was unused so removed.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 3e94caaeb..32eaa8fa3 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -39,7 +39,9 @@ enum looptype {
struct loopinfo {
enum looptype type;
- uint32_t pc0, pc2, pc3;
+ uint32_t pc0; /* `next` destination */
+ uint32_t pc1; /* `redo` destination */
+ uint32_t pc2; /* `break` destination */
int acc;
struct loopinfo *prev;
};
@@ -1003,7 +1005,7 @@ for_body(codegen_scope *s, node *tree)
}
/* construct loop */
lp = loop_push(s, LOOP_FOR);
- lp->pc2 = new_label(s);
+ lp->pc1 = new_label(s);
/* loop body */
codegen(s, tree->cdr->cdr->car, VAL);
@@ -1931,17 +1933,17 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_WHILE:
{
struct loopinfo *lp = loop_push(s, LOOP_NORMAL);
- uint32_t pc1;
+ uint32_t pos;
if (!val) lp->acc = -1;
lp->pc0 = new_label(s);
- pc1 = genjmp_0(s, OP_JMP);
- lp->pc2 = new_label(s);
+ pos = genjmp_0(s, OP_JMP);
+ lp->pc1 = new_label(s);
codegen(s, tree->cdr, NOVAL);
- dispatch(s, pc1);
+ dispatch(s, pos);
codegen(s, tree->car, VAL);
pop();
- genjmp2(s, OP_JMPIF, cursp(), lp->pc2, NOVAL);
+ genjmp2(s, OP_JMPIF, cursp(), lp->pc1, NOVAL);
loop_pop(s, val);
}
@@ -1950,17 +1952,17 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_UNTIL:
{
struct loopinfo *lp = loop_push(s, LOOP_NORMAL);
- uint32_t pc1;
+ uint32_t pos;
if (!val) lp->acc = -1;
lp->pc0 = new_label(s);
- pc1 = genjmp_0(s, OP_JMP);
- lp->pc2 = new_label(s);
+ pos = genjmp_0(s, OP_JMP);
+ lp->pc1 = new_label(s);
codegen(s, tree->cdr, NOVAL);
- dispatch(s, pc1);
+ dispatch(s, pos);
codegen(s, tree->car, VAL);
pop();
- genjmp2(s, OP_JMPNOT, cursp(), lp->pc2, NOVAL);
+ genjmp2(s, OP_JMPNOT, cursp(), lp->pc1, NOVAL);
loop_pop(s, val);
}
@@ -2562,7 +2564,7 @@ codegen(codegen_scope *s, node *tree, int val)
raise_error(s, "unexpected redo");
}
else {
- genjmp(s, OP_JMPUW, s->loop->pc2);
+ genjmp(s, OP_JMPUW, s->loop->pc1);
}
if (val) push();
break;
@@ -3324,7 +3326,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->pc2 = p->pc3 = JMPLINK_START;
+ p->pc0 = p->pc1 = p->pc2 = JMPLINK_START;
p->prev = s->loop;
p->acc = cursp();
s->loop = p;
@@ -3379,8 +3381,8 @@ loop_break(codegen_scope *s, node *tree)
genop_1(s, OP_LOADNIL, loop->acc);
}
}
- tmp = genjmp(s, OP_JMPUW, loop->pc3);
- loop->pc3 = tmp;
+ tmp = genjmp(s, OP_JMPUW, loop->pc2);
+ loop->pc2 = tmp;
}
else {
if (!tree) {
@@ -3397,7 +3399,7 @@ loop_pop(codegen_scope *s, int val)
if (val) {
genop_1(s, OP_LOADNIL, cursp());
}
- dispatch_linked(s, s->loop->pc3);
+ dispatch_linked(s, s->loop->pc2);
s->loop = s->loop->prev;
if (val) push();
}