X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Floop.c;h=5e3f16991393149b27e9f136a921c8cd0db1763f;hb=d2f8593a1f1d39a3264682af0da898a3d67b68cf;hp=b0c836bcc784fe832c19bc35306d3158fec258d2;hpb=37597beca4a11edba50b847932fdfeca3a648fa2;p=pspp diff --git a/src/loop.c b/src/loop.c index b0c836bcc7..5e3f169913 100644 --- a/src/loop.c +++ b/src/loop.c @@ -18,8 +18,9 @@ 02111-1307, USA. */ #include -#include +#include "error.h" #include "alloc.h" +#include "case.h" #include "command.h" #include "do-ifP.h" #include "error.h" @@ -166,8 +167,6 @@ internal_cmd_loop (void) /* Name of indexing variable if applicable. */ char name[9]; - lex_match_id ("LOOP"); - /* Create and initialize transformations to facilitate error-handling. */ two = xmalloc (sizeof *two); @@ -200,7 +199,7 @@ internal_cmd_loop (void) assert (token == '='); lex_get (); - one->init = expr_parse (PXP_NUMERIC); + one->init = expr_parse (EXPR_NUMERIC); if (!one->init) return 0; @@ -209,7 +208,7 @@ internal_cmd_loop (void) expr_free (one->init); return 0; } - one->term = expr_parse (PXP_NUMERIC); + one->term = expr_parse (EXPR_NUMERIC); if (!one->term) { expr_free (one->init); @@ -218,7 +217,7 @@ internal_cmd_loop (void) if (lex_match (T_BY)) { - one->incr = expr_parse (PXP_NUMERIC); + one->incr = expr_parse (EXPR_NUMERIC); if (!one->incr) return 0; } @@ -231,7 +230,7 @@ internal_cmd_loop (void) { two->flags |= LPC_COND; - two->cond = expr_parse (PXP_BOOLEAN); + two->cond = expr_parse (EXPR_BOOLEAN); if (!two->cond) return 0; } @@ -261,15 +260,6 @@ internal_cmd_loop (void) add_transformation ((struct trns_header *) one); add_transformation ((struct trns_header *) two); -#if DEBUGGING - printf ("LOOP"); - if (two->flags & LPC_INDEX) - printf ("(INDEX)"); - if (two->flags & LPC_COND) - printf ("(IF)"); - printf ("\n"); -#endif - return 1; } @@ -315,7 +305,7 @@ internal_cmd_end_loop (void) /* Parse the expression if any. */ if (lex_match_id ("IF")) { - thr->cond = expr_parse (PXP_BOOLEAN); + thr->cond = expr_parse (EXPR_BOOLEAN); if (!thr->cond) return 0; } @@ -330,13 +320,6 @@ internal_cmd_end_loop (void) /* Pop off the top of stack. */ ctl_stack = ctl_stack->down; -#if DEBUGGING - printf ("END LOOP"); - if (thr->cond) - printf ("(IF)"); - printf ("\n"); -#endif - return 1; } @@ -362,7 +345,7 @@ loop_1_trns_proc (struct trns_header * trns, struct ccase * c, /* Even if the loop is never entered, force the index variable to assume the initial value. */ - c->data[two->index->fv].f = t1.f; + case_data_rw (c, two->index->fv)->f = t1.f; /* Throw out various pathological cases. */ if (!finite (t1.f) || !finite (t2.f) || !finite (t3.f) || t2.f == 0.0) @@ -418,7 +401,7 @@ loop_2_trns_proc (struct trns_header * trns, struct ccase * c, if (two->flags == 0) { two->pass++; - if (two->pass > set_mxloops) + if (two->pass > get_mxloops() ) return two->loop_term; } @@ -430,7 +413,7 @@ loop_2_trns_proc (struct trns_header * trns, struct ccase * c, return two->loop_term; /* Set the current value into the case. */ - c->data[two->index->fv].f = two->curr; + case_data_rw (c, two->index->fv)->f = two->curr; /* Decrement the current value. */ two->curr += two->incr; @@ -443,7 +426,7 @@ loop_2_trns_proc (struct trns_header * trns, struct ccase * c, return two->loop_term; /* Set the current value into the case. */ - c->data[two->index->fv].f = two->curr; + case_data_rw (c, two->index->fv)->f = two->curr; /* Increment the current value. */ two->curr += two->incr; @@ -502,8 +485,6 @@ cmd_break (void) /* New transformation. */ struct break_trns *t; - lex_match_id ("BREAK"); - for (loop = ctl_stack; loop; loop = loop->down) if (loop->type == CST_LOOP) break;