projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
render: Add comment.
[pspp]
/
src
/
language
/
control
/
loop.c
diff --git
a/src/language/control/loop.c
b/src/language/control/loop.c
index 362f199327e00c33826d90976dd746a33ee90c9e..bfd364ccd1085a8d5874c6b018cfd2ded31fc4f8 100644
(file)
--- a/
src/language/control/loop.c
+++ b/
src/language/control/loop.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2009
, 2010,
2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2009
-
2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-19,8
+19,8
@@
#include "language/control/control-stack.h"
#include "data/case.h"
#include "language/control/control-stack.h"
#include "data/case.h"
+#include "data/dataset.h"
#include "data/dictionary.h"
#include "data/dictionary.h"
-#include "data/procedure.h"
#include "data/settings.h"
#include "data/transformations.h"
#include "data/variable.h"
#include "data/settings.h"
#include "data/transformations.h"
#include "data/variable.h"
@@
-61,7
+61,7
@@
struct loop_trns
/* Iteration limit. */
int max_pass_count; /* Maximum number of passes (-1=unlimited). */
/* Iteration limit. */
int max_pass_count; /* Maximum number of passes (-1=unlimited). */
- int pass; /* Number of passes thr
u
the loop so far. */
+ int pass; /* Number of passes thr
ough
the loop so far. */
/* a=a TO b [BY c]. */
struct variable *index_var; /* Index variable. */
/* a=a TO b [BY c]. */
struct variable *index_var; /* Index variable. */
@@
-154,7
+154,7
@@
cmd_end_loop (struct lexer *lexer, struct dataset *ds)
/* Parses BREAK. */
int
/* Parses BREAK. */
int
-cmd_break (struct lexer *lexer, struct dataset *ds)
+cmd_break (struct lexer *lexer
UNUSED
, struct dataset *ds)
{
struct ctl_stmt *loop = ctl_stack_search (&loop_class);
if (loop == NULL)
{
struct ctl_stmt *loop = ctl_stack_search (&loop_class);
if (loop == NULL)
@@
-162,7
+162,7
@@
cmd_break (struct lexer *lexer, struct dataset *ds)
add_transformation (ds, break_trns_proc, NULL, loop);
add_transformation (ds, break_trns_proc, NULL, loop);
- return
lex_end_of_command (lexer)
;
+ return
CMD_SUCCESS
;
}
/* Closes a LOOP construct by emitting the END LOOP
}
/* Closes a LOOP construct by emitting the END LOOP
@@
-177,10
+177,7
@@
close_loop (void *loop_)
/* If there's nothing else limiting the number of loops, use
MXLOOPS as a limit. */
/* If there's nothing else limiting the number of loops, use
MXLOOPS as a limit. */
- if (loop->max_pass_count == -1
- && loop->index_var == NULL
- && loop->loop_condition == NULL
- && loop->end_loop_condition == NULL)
+ if (loop->max_pass_count == -1 && loop->index_var == NULL)
loop->max_pass_count = settings_get_mxloops ();
}
loop->max_pass_count = settings_get_mxloops ();
}
@@
-261,7
+258,7
@@
parse_index_clause (struct dataset *ds, struct lexer *lexer,
}
if (loop->last_expr == NULL)
{
}
if (loop->last_expr == NULL)
{
- lex_sbc_missing (
lexer,
"TO");
+ lex_sbc_missing ("TO");
return false;
}
if (loop->by_expr == NULL)
return false;
}
if (loop->by_expr == NULL)
@@
-367,12
+364,8
@@
end_loop_trns_proc (void *loop_, struct ccase **c, casenumber case_num UNUSED)
goto break_out;
/* MXLOOPS limiter. */
goto break_out;
/* MXLOOPS limiter. */
- if (loop->max_pass_count >= 0)
- {
- if (loop->pass >= loop->max_pass_count)
- goto break_out;
- loop->pass++;
- }
+ if (loop->max_pass_count >= 0 && ++loop->pass >= loop->max_pass_count)
+ goto break_out;
/* Indexing clause limiter: counting downward. */
if (loop->index_var != NULL)
/* Indexing clause limiter: counting downward. */
if (loop->index_var != NULL)