projects
/
pspp
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d8c4513
)
everything passes again
ctables
author
Ben Pfaff
<blp@cs.stanford.edu>
Sat, 11 Dec 2021 05:23:07 +0000
(21:23 -0800)
committer
Ben Pfaff
<blp@cs.stanford.edu>
Sat, 11 Dec 2021 05:23:07 +0000
(21:23 -0800)
src/language/command.c
patch
|
blob
|
history
src/language/command.def
patch
|
blob
|
history
src/language/control/do-if.c
patch
|
blob
|
history
src/language/control/loop.c
patch
|
blob
|
history
src/language/data-io/data-list.c
patch
|
blob
|
history
src/language/data-io/inpt-pgm.c
patch
|
blob
|
history
src/language/data-io/inpt-pgm.h
patch
|
blob
|
history
src/language/xforms/compute.c
patch
|
blob
|
history
tests/language/control/do-if.at
patch
|
blob
|
history
diff --git
a/src/language/command.c
b/src/language/command.c
index 09c951cae2cc7690037bffb24b392a4bc654c432..bffd13ebb0d74b119de6d296b7e4f4fe3ba91f60 100644
(file)
--- a/
src/language/command.c
+++ b/
src/language/command.c
@@
-375,7
+375,8
@@
report_state_mismatch (const struct command *command, enum cmd_state state)
{
case CMD_STATE_INITIAL:
case CMD_STATE_DATA:
{
case CMD_STATE_INITIAL:
case CMD_STATE_DATA:
- switch ((int) command->states)
+ switch ((int) command->states
+ & (S_INITIAL | S_DATA | S_INPUT_PROGRAM | S_FILE_TYPE))
{
/* One allowed state. */
case S_INITIAL:
{
/* One allowed state. */
case S_INITIAL:
diff --git
a/src/language/command.def
b/src/language/command.def
index b588552244bd20036f307c97aabdff598c809c1c..352f7c107893067ce6e3ae8ce873d211969b3e27 100644
(file)
--- a/
src/language/command.def
+++ b/
src/language/command.def
@@
-149,11
+149,17
@@
DEF_CMD (S_DATA, 0, "T-TEST", cmd_t_test)
DEF_CMD (S_DATA, 0, "TEMPORARY", cmd_temporary)
DEF_CMD (S_DATA, 0, "USE", cmd_use)
DEF_CMD (S_DATA, 0, "TEMPORARY", cmd_temporary)
DEF_CMD (S_DATA, 0, "USE", cmd_use)
-/* Commands valid only
with
INPUT PROGRAM. */
+/* Commands valid only
inside
INPUT PROGRAM. */
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "END CASE", cmd_end_case)
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "END FILE", cmd_end_file)
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "REREAD", cmd_reread)
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "END CASE", cmd_end_case)
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "END FILE", cmd_end_file)
DEF_CMD (S_INPUT_PROGRAM | S_NESTED_INPUT_PROGRAM, 0, "REREAD", cmd_reread)
+/* Not really commands, but part of LOOP and DO IF syntax. */
+DEF_CMD (S_ANY, 0, "ELSE IF", cmd_inside_do_if)
+DEF_CMD (S_ANY, 0, "ELSE", cmd_inside_do_if)
+DEF_CMD (S_ANY, 0, "END IF", cmd_inside_do_if)
+DEF_CMD (S_ANY, 0, "END LOOP", cmd_inside_loop)
+
/* Commands for testing PSPP. */
DEF_CMD (S_ANY, F_TESTING, "DEBUG EXPAND", cmd_debug_expand)
DEF_CMD (S_ANY, F_TESTING, "DEBUG EVALUATE", cmd_debug_evaluate)
/* Commands for testing PSPP. */
DEF_CMD (S_ANY, F_TESTING, "DEBUG EXPAND", cmd_debug_expand)
DEF_CMD (S_ANY, F_TESTING, "DEBUG EVALUATE", cmd_debug_evaluate)
diff --git
a/src/language/control/do-if.c
b/src/language/control/do-if.c
index f4fab4734ccadc0e191fae79c37115d3c3d07ed5..c564240bb16e3b300f6573014f1237ad049e2535 100644
(file)
--- a/
src/language/control/do-if.c
+++ b/
src/language/control/do-if.c
@@
-143,6
+143,13
@@
cmd_do_if (struct lexer *lexer, struct dataset *ds)
return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
}
return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
}
+int
+cmd_inside_do_if (struct lexer *lexer UNUSED, struct dataset *ds UNUSED)
+{
+ msg (SE, _("This command cannot appear outside DO IF...END IF."));
+ return CMD_FAILURE;
+}
+
static const struct trns_chain *
do_if_find_clause (const struct do_if_trns *do_if,
struct ccase *c, casenumber case_num)
static const struct trns_chain *
do_if_find_clause (const struct do_if_trns *do_if,
struct ccase *c, casenumber case_num)
diff --git
a/src/language/control/loop.c
b/src/language/control/loop.c
index 22c73519de3caa70f48b8b2e25f0cd98bdb9510e..b55028177d588d4a588934571aa07e180e976f66 100644
(file)
--- a/
src/language/control/loop.c
+++ b/
src/language/control/loop.c
@@
-119,6
+119,13
@@
cmd_loop (struct lexer *lexer, struct dataset *ds)
return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
}
return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
}
+int
+cmd_inside_loop (struct lexer *lexer UNUSED, struct dataset *ds UNUSED)
+{
+ msg (SE, _("This command cannot appear outside LOOP...END LOOP."));
+ return CMD_FAILURE;
+}
+
static enum trns_result
break_trns_proc (void *aux UNUSED, struct ccase **c UNUSED,
casenumber case_num UNUSED)
static enum trns_result
break_trns_proc (void *aux UNUSED, struct ccase **c UNUSED,
casenumber case_num UNUSED)
@@
-128,11
+135,11
@@
break_trns_proc (void *aux UNUSED, struct ccase **c UNUSED,
/* Parses BREAK. */
int
/* Parses BREAK. */
int
-cmd_break (struct lexer *lexer
UNUSED
, struct dataset *ds)
+cmd_break (struct lexer *lexer, struct dataset *ds)
{
if (!in_loop)
{
{
if (!in_loop)
{
-
msg (SE, _("BREAK cannot appear outside LOOP...END LOOP.")
);
+
cmd_inside_loop (lexer, ds
);
return CMD_FAILURE;
}
return CMD_FAILURE;
}
diff --git
a/src/language/data-io/data-list.c
b/src/language/data-io/data-list.c
index b1a771734023307584015003f1a7f665b0928daf..1ade0dc617c566c885001a21634ea37d55df438b 100644
(file)
--- a/
src/language/data-io/data-list.c
+++ b/
src/language/data-io/data-list.c
@@
-302,6
+302,8
@@
cmd_data_list (struct lexer *lexer, struct dataset *ds)
fh_unref (fh);
free (encoding);
fh_unref (fh);
free (encoding);
+ data_list_seen ();
+
return CMD_SUCCESS;
error:
return CMD_SUCCESS;
error:
diff --git
a/src/language/data-io/inpt-pgm.c
b/src/language/data-io/inpt-pgm.c
index 03345003b701d9d6ba6fd339ce49c44d1fe611b8..c295db642830d4ef6ce2c97d2814b24185bc1c00 100644
(file)
--- a/
src/language/data-io/inpt-pgm.c
+++ b/
src/language/data-io/inpt-pgm.c
@@
-80,6
+80,12
@@
in_input_program (void)
return inside_input_program;
}
return inside_input_program;
}
+void
+data_list_seen (void)
+{
+ saw_DATA_LIST = true;
+}
+
/* Emits an END CASE transformation for INP. */
static void
emit_END_CASE (struct dataset *ds)
/* Emits an END CASE transformation for INP. */
static void
emit_END_CASE (struct dataset *ds)
diff --git
a/src/language/data-io/inpt-pgm.h
b/src/language/data-io/inpt-pgm.h
index cac4d9b6d709b978f827e0dc60f122703cd803cf..d6c5bbd63d73290d305117bf4480bc74f7b01bae 100644
(file)
--- a/
src/language/data-io/inpt-pgm.h
+++ b/
src/language/data-io/inpt-pgm.h
@@
-20,6
+20,7
@@
#include <stdbool.h>
bool in_input_program (void);
#include <stdbool.h>
bool in_input_program (void);
-void cancel_input_program (void);
+
+void data_list_seen (void);
#endif /* inpt-pgm.h */
#endif /* inpt-pgm.h */
diff --git
a/src/language/xforms/compute.c
b/src/language/xforms/compute.c
index 083d7d219f386f456bcfb0262e3d283ee4f702d5..5c330f65a823e746a8dfefa854f79ff142529e56 100644
(file)
--- a/
src/language/xforms/compute.c
+++ b/
src/language/xforms/compute.c
@@
-129,7
+129,6
@@
compute_num (void *compute_, struct ccase **c, casenumber case_num)
{
struct compute_trns *compute = compute_;
{
struct compute_trns *compute = compute_;
- printf ("compute\n");
if (compute->test == NULL
|| expr_evaluate_num (compute->test, *c, case_num) == 1.0)
{
if (compute->test == NULL
|| expr_evaluate_num (compute->test, *c, case_num) == 1.0)
{
diff --git
a/tests/language/control/do-if.at
b/tests/language/control/do-if.at
index d0bf071765c8ba9d327c39b109df1c928f87be98..4b862dce4d1cd016bb24523d65b8abbe3481132a 100644
(file)
--- a/
tests/language/control/do-if.at
+++ b/
tests/language/control/do-if.at
@@
-91,8
+91,6
@@
EXECUTE.
])
AT_CHECK([pspp -O format=csv do-if.sps], [1], [dnl
do-if.sps:7: error: ELSE: This command cannot appear outside DO IF...END IF.
])
AT_CHECK([pspp -O format=csv do-if.sps], [1], [dnl
do-if.sps:7: error: ELSE: This command cannot appear outside DO IF...END IF.
-
-do-if.sps:9: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
])
AT_CLEANUP
])
AT_CLEANUP