From: Ben Pfaff Date: Mon, 7 Nov 2022 03:09:16 +0000 (-0800) Subject: REREAD: Improve error messages and coding style. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e69771b9abc897858cf13fd2227b2d5e4d8e53d2;p=pspp REREAD: Improve error messages and coding style. --- diff --git a/src/language/data-io/inpt-pgm.c b/src/language/data-io/inpt-pgm.c index c429c6a120..8705a187ab 100644 --- a/src/language/data-io/inpt-pgm.c +++ b/src/language/data-io/inpt-pgm.c @@ -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); diff --git a/tests/language/data-io/inpt-pgm.at b/tests/language/data-io/inpt-pgm.at index 1c61d52fe7..87418c2cb4 100644 --- a/tests/language/data-io/inpt-pgm.at +++ b/tests/language/data-io/inpt-pgm.at @@ -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