REREAD: Improve error messages and coding style.
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 7 Nov 2022 03:09:16 +0000 (19:09 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 10 Nov 2022 04:42:31 +0000 (20:42 -0800)
src/language/data-io/inpt-pgm.c
tests/language/data-io/inpt-pgm.at

index c429c6a120b14f91d3d536804db49e6cc53d009a..8705a187ab8f89ba55c6fe66303fb910f36cbaf6 100644 (file)
@@ -293,13 +293,9 @@ struct reread_trns
 int
 cmd_reread (struct lexer *lexer, struct dataset *ds)
 {
-  struct file_handle *fh;       /* File to be re-read. */
-  struct expression *e;         /* Expression for column to set. */
-  struct reread_trns *t;        /* Created transformation. */
   char *encoding = NULL;
-
-  fh = fh_get_default_handle ();
-  e = NULL;
+  struct file_handle *fh = fh_get_default_handle ();
+  struct expression *e = NULL;
   while (lex_token (lexer) != T_ENDCMD)
     {
       if (lex_match_id (lexer, "COLUMN"))
@@ -337,14 +333,16 @@ cmd_reread (struct lexer *lexer, struct dataset *ds)
        }
       else
        {
-         lex_error (lexer, NULL);
+         lex_error_expecting (lexer, "COLUMN", "FILE", "ENCODING");
           goto error;
        }
     }
 
-  t = xmalloc (sizeof *t);
-  t->reader = dfm_open_reader (fh, lexer, encoding);
-  t->column = e;
+  struct reread_trns *t = xmalloc (sizeof *t);
+  *t = (struct reread_trns) {
+    .reader = dfm_open_reader (fh, lexer, encoding),
+    .column = e,
+  };
   add_transformation (ds, &reread_trns_class, t);
 
   fh_unref (fh);
index 1c61d52fe73caa922f59b1cde5ffd67c3efe250a..87418c2cb40725f2a5bdebab89a7287e42afbd59 100644 (file)
@@ -351,4 +351,52 @@ any variables.
     2 | END FILE.
     3 | END INPUT PROGRAM.
 ])
+AT_CLEANUP
+
+AT_SETUP([REREAD syntax errors])
+AT_DATA([reread.sps], [dnl
+INPUT PROGRAM.
+REREAD COLUMN=1 COLUMN=**.
+END INPUT PROGRAM.
+
+INPUT PROGRAM.
+REREAD COLUMN=**.
+END INPUT PROGRAM.
+
+INPUT PROGRAM.
+REREAD FILE=**.
+END INPUT PROGRAM.
+
+INPUT PROGRAM.
+REREAD ENCODING=**.
+END INPUT PROGRAM.
+
+INPUT PROGRAM.
+REREAD **.
+END INPUT PROGRAM.
+])
+AT_DATA([insert.sps], [dnl
+INSERT FILE='reread.sps' ERROR=IGNORE.
+])
+AT_CHECK([pspp --testing-mode -O format=csv insert.sps], [1], [dnl
+"reread.sps:2.17-2.22: error: REREAD: Subcommand COLUMN may only be specified once.
+    2 | REREAD COLUMN=1 COLUMN=**.
+      |                 ^~~~~~"
+
+"reread.sps:6.15-6.16: error: REREAD: Syntax error.
+    6 | REREAD COLUMN=**.
+      |               ^~"
+
+"reread.sps:10.13-10.14: error: REREAD: Syntax error expecting a file name or handle name.
+   10 | REREAD FILE=**.
+      |             ^~"
+
+"reread.sps:14.17-14.18: error: REREAD: Syntax error expecting string.
+   14 | REREAD ENCODING=**.
+      |                 ^~"
+
+"reread.sps:18.8-18.9: error: REREAD: Syntax error expecting COLUMN, FILE, or ENCODING.
+   18 | REREAD **.
+      |        ^~"
+])
 AT_CLEANUP
\ No newline at end of file