From: Ben Pfaff Date: Fri, 16 Aug 2013 05:35:19 +0000 (-0700) Subject: lexer: Rename LEX_ERROR_INTERACTIVE to LEX_ERROR_TERMINAL, change default X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=693ac90cdac91d29870f303b88763a3685b3f341;p=pspp lexer: Rename LEX_ERROR_INTERACTIVE to LEX_ERROR_TERMINAL, change default The LEX_ERROR_INTERACTIVE error handling mode really only makes sense for reading from a terminal, where we know we're getting one line at a time and not partial lines. Unfortunately LEX_ERROR_INTERACTIVE was the default and it was getting used as such in the GUI for reading from syntax files. This meant that if there was an error in the GUI then the current buffer (which might be any arbitrary chunk of syntax) was being discarded, which caused terrible confusion. This commit changes the default to LEX_ERROR_CONTINUE, which works in a reasonable fashion regardless of the input source. It also renames LEX_ERROR_INTERACTIVE to LEX_ERROR_TERMINAL to make it clear that that's the only reasonable use. Reported by Thambu David , archived at: http://lists.gnu.org/archive/html/pspp-users/2013-08/msg00019.html --- diff --git a/NEWS b/NEWS index 92226aa723..c522d1871d 100644 --- a/NEWS +++ b/NEWS @@ -6,16 +6,19 @@ Please send PSPP bug reports to bug-gnu-pspp@gnu.org. Changes after 0.8.0: - * Notable bug fixes: - - - System files written by IBM SPSS 21 are now read without warnings. - * PSPPIRE graphical user interface improvements: - Syntax windows now parse syntax in "auto" mode, which in practice should mean that both "batch" and "interactive" syntax now works, instead of just "interactive" syntax. + * Notable bug fixes: + + - System files written by IBM SPSS 21 are now read without warnings. + + - PSPPIRE should now more gracefully handle syntax files that contain + errors. + Changes from 0.6.2 to 0.8.0: * New commands: diff --git a/src/language/data-io/inpt-pgm.c b/src/language/data-io/inpt-pgm.c index a500df4117..0301d7d057 100644 --- a/src/language/data-io/inpt-pgm.c +++ b/src/language/data-io/inpt-pgm.c @@ -127,7 +127,7 @@ cmd_input_program (struct lexer *lexer, struct dataset *ds) default: if (cmd_result_is_failure (result) - && lex_get_error_mode (lexer) != LEX_ERROR_INTERACTIVE) + && lex_get_error_mode (lexer) != LEX_ERROR_TERMINAL) { if (result == CMD_EOF) msg (SE, _("Unexpected end-of-file within INPUT PROGRAM.")); diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index 61676bb717..bbe16cbe17 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -129,7 +129,7 @@ lex_reader_init (struct lex_reader *reader, { reader->class = class; reader->syntax = LEX_SYNTAX_AUTO; - reader->error = LEX_ERROR_INTERACTIVE; + reader->error = LEX_ERROR_CONTINUE; reader->file_name = NULL; reader->line_number = 0; } @@ -1053,7 +1053,7 @@ lex_get_syntax_mode (const struct lexer *lexer) } /* Returns the error mode for the syntax file from which the current drawn is - drawn. Returns LEX_ERROR_INTERACTIVE for a T_STOP token or if the command's + drawn. Returns LEX_ERROR_TERMINAL for a T_STOP token or if the command's source does not have line numbers. There is no version of this function that takes an N argument because @@ -1063,13 +1063,12 @@ enum lex_error_mode lex_get_error_mode (const struct lexer *lexer) { struct lex_source *src = lex_source__ (lexer); - return src == NULL ? LEX_ERROR_INTERACTIVE : src->reader->error; + return src == NULL ? LEX_ERROR_TERMINAL : src->reader->error; } /* If the source that LEXER is currently reading has error mode - LEX_ERROR_INTERACTIVE, discards all buffered input and tokens, so that the - next token to be read comes directly from whatever is next read from the - stream. + LEX_ERROR_TERMINAL, discards all buffered input and tokens, so that the next + token to be read comes directly from whatever is next read from the stream. It makes sense to call this function after encountering an error in a command entered on the console, because usually the user would prefer not to @@ -1078,7 +1077,7 @@ void lex_interactive_reset (struct lexer *lexer) { struct lex_source *src = lex_source__ (lexer); - if (src != NULL && src->reader->error == LEX_ERROR_INTERACTIVE) + if (src != NULL && src->reader->error == LEX_ERROR_TERMINAL) { src->head = src->tail = 0; src->journal_pos = src->seg_pos = src->line_pos = 0; @@ -1100,7 +1099,7 @@ lex_discard_rest_of_command (struct lexer *lexer) } /* Discards all lookahead tokens in LEXER, then discards all input sources - until it encounters one with error mode LEX_ERROR_INTERACTIVE or until it + until it encounters one with error mode LEX_ERROR_TERMINAL or until it runs out of input sources. */ void lex_discard_noninteractive (struct lexer *lexer) @@ -1112,7 +1111,7 @@ lex_discard_noninteractive (struct lexer *lexer) while (!deque_is_empty (&src->deque)) lex_source_pop__ (src); - for (; src != NULL && src->reader->error != LEX_ERROR_INTERACTIVE; + for (; src != NULL && src->reader->error != LEX_ERROR_TERMINAL; src = lex_source__ (lexer)) lex_source_destroy (src); } diff --git a/src/language/lexer/lexer.h b/src/language/lexer/lexer.h index a6be161fe1..87b1e2e723 100644 --- a/src/language/lexer/lexer.h +++ b/src/language/lexer/lexer.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2010, 2011, 2013 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 @@ -38,7 +38,7 @@ enum lex_syntax_mode /* Handling of errors. */ enum lex_error_mode { - LEX_ERROR_INTERACTIVE, /* Always continue to next command. */ + LEX_ERROR_TERMINAL, /* Discard input line and continue reading. */ LEX_ERROR_CONTINUE, /* Continue to next command, except for cascading failures. */ LEX_ERROR_STOP /* Stop processing. */ diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index 6e573d5cca..c30b5f85bc 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -147,7 +147,7 @@ main (int argc, char **argv) lex_discard_noninteractive (lexer); } else if (result == CMD_CASCADING_FAILURE - && lex_get_error_mode (lexer) != LEX_ERROR_INTERACTIVE) + && lex_get_error_mode (lexer) != LEX_ERROR_TERMINAL) { msg (SE, _("Stopping syntax file processing here to avoid " "a cascade of dependent command failures.")); diff --git a/src/ui/terminal/terminal-reader.c b/src/ui/terminal/terminal-reader.c index a3f33e7255..43f3b92f67 100644 --- a/src/ui/terminal/terminal-reader.c +++ b/src/ui/terminal/terminal-reader.c @@ -177,7 +177,7 @@ terminal_reader_create (void) r = xzalloc (sizeof *r); r->reader.class = &terminal_reader_class; r->reader.syntax = LEX_SYNTAX_INTERACTIVE; - r->reader.error = LEX_ERROR_INTERACTIVE; + r->reader.error = LEX_ERROR_TERMINAL; r->reader.file_name = NULL; r->s = ss_empty (); r->offset = 0;