aboutsummaryrefslogtreecommitdiff
path: root/mfd/drivers.c
diff options
context:
space:
mode:
Diffstat (limited to 'mfd/drivers.c')
-rw-r--r--mfd/drivers.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/mfd/drivers.c b/mfd/drivers.c
index ed8a288a..1b7203fa 100644
--- a/mfd/drivers.c
+++ b/mfd/drivers.c
@@ -1998,8 +1998,8 @@ code_type_switch(NODE *node, struct locus **old_locus)
/* Loop nesting stack */
struct loop_stack {
struct literal *ident;
- prog_counter_t *begjmp;
prog_counter_t *endjmp;
+ prog_counter_t *nxtjmp;
};
static mf_stack_t loop_stack;
@@ -2039,13 +2039,13 @@ within_loop(struct literal *lit)
}
void
-enter_loop(struct literal *lit, prog_counter_t *begptr, prog_counter_t *endptr)
+enter_loop(struct literal *lit, prog_counter_t *endptr, prog_counter_t *nxtptr)
{
struct loop_stack ent;
if (!loop_stack)
loop_stack = mf_stack_create(sizeof(struct loop_stack), 0);
- ent.begjmp = begptr;
ent.endjmp = endptr;
+ ent.nxtjmp = nxtptr;
ent.ident = lit;
mf_stack_push(loop_stack, &ent);
}
@@ -2083,7 +2083,7 @@ code_type_next(NODE *node, struct locus **old_locus)
}
code_op(opcode_jmp);
- *ent.begjmp = code_immediate((void*) *ent.begjmp);
+ *ent.nxtjmp = code_immediate((void*) *ent.nxtjmp);
}
@@ -2206,11 +2206,11 @@ code_type_loop(NODE *node, struct locus **old_locus)
jmp L_begin
L_end:
*/
- prog_counter_t begin, end, begjmp = 0, endjmp = 0;
+ prog_counter_t begin, end, stmt, endjmp = 0, nxtjmp = 0;
MARK_LOCUS();
- enter_loop(node->v.loop.ident, &begjmp, &endjmp);
+ enter_loop(node->v.loop.ident, &endjmp, &nxtjmp);
traverse_tree(node->v.loop.for_stmt);
begin = code_get_counter();
@@ -2227,14 +2227,15 @@ code_type_loop(NODE *node, struct locus **old_locus)
code_op(opcode_bz);
endjmp = code_immediate((void*)endjmp);
}
-
+
+ stmt = code_get_counter();
traverse_tree(node->v.loop.stmt);
code_op(opcode_jmp);
code_immediate((void*)(begin - code_get_counter() - 1));
end = code_get_counter();
- jump_fixup(begjmp, begin);
jump_fixup(endjmp, end);
+ jump_fixup(nxtjmp, stmt);
}

Return to:

Send suggestions and report system problems to the System administrator.