From 321290aa58ad553951a4448ea512ebeed4ddf9b1 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 2 May 2021 17:13:27 -0700 Subject: [PATCH] lexer: Remove lex_syntax_mode in favor of segmenter_mode. These two enums have the same meaning and there was no benefit to having both of them plus translation back and forth. --- src/language/control/repeat.c | 14 ++------------ src/language/lexer/lexer.c | 27 ++++++++------------------- src/language/lexer/lexer.h | 15 ++++----------- src/language/utilities/include.c | 10 +++++----- src/ui/gui/psppire-lex-reader.c | 2 +- src/ui/gui/psppire-lex-reader.h | 2 +- src/ui/gui/psppire-syntax-window.c | 8 ++++---- src/ui/gui/psppire-syntax-window.h | 2 +- src/ui/terminal/main.c | 8 ++++---- src/ui/terminal/terminal-opts.c | 10 +++++----- src/ui/terminal/terminal-opts.h | 2 +- src/ui/terminal/terminal-reader.c | 2 +- tests/output/pivot-table-test.c | 2 +- 13 files changed, 38 insertions(+), 66 deletions(-) diff --git a/src/language/control/repeat.c b/src/language/control/repeat.c index 7341f0760b..118e8d3ccd 100644 --- a/src/language/control/repeat.c +++ b/src/language/control/repeat.c @@ -252,8 +252,6 @@ do_parse_commands (struct substring s, enum segmenter_mode mode, static bool parse_commands (struct lexer *lexer, struct hmap *dummies) { - enum lex_syntax_mode syntax_mode; - enum segmenter_mode mode; struct string *outputs; struct string input; size_t n_values; @@ -281,16 +279,8 @@ parse_commands (struct lexer *lexer, struct hmap *dummies) for (i = 0; i < n_values; i++) ds_init_empty (&outputs[i]); - syntax_mode = lex_get_syntax_mode (lexer); - if (syntax_mode == LEX_SYNTAX_AUTO) - mode = SEG_MODE_AUTO; - else if (syntax_mode == LEX_SYNTAX_INTERACTIVE) - mode = SEG_MODE_INTERACTIVE; - else if (syntax_mode == LEX_SYNTAX_BATCH) - mode = SEG_MODE_BATCH; - else - NOT_REACHED (); - do_parse_commands (ds_ss (&input), mode, dummies, outputs, n_values); + do_parse_commands (ds_ss (&input), lex_get_syntax_mode (lexer), + dummies, outputs, n_values); ds_destroy (&input); diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index ec84344341..c322dec54f 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -127,7 +127,7 @@ lex_reader_init (struct lex_reader *reader, const struct lex_reader_class *class) { reader->class = class; - reader->syntax = LEX_SYNTAX_AUTO; + reader->syntax = SEG_MODE_AUTO; reader->error = LEX_ERROR_CONTINUE; reader->file_name = NULL; reader->encoding = NULL; @@ -1162,17 +1162,17 @@ lex_get_encoding (const struct lexer *lexer) /* Returns the syntax mode for the syntax file from which the current drawn is - drawn. Returns LEX_SYNTAX_AUTO for a T_STOP token or if the command's - source does not have line numbers. + drawn. Returns SEG_MODE_AUTO 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 lookahead only works to the end of a command and any given command is always within a single syntax file. */ -enum lex_syntax_mode +enum segmenter_mode lex_get_syntax_mode (const struct lexer *lexer) { struct lex_source *src = lex_source__ (lexer); - return src == NULL ? LEX_SYNTAX_AUTO : src->reader->syntax; + return src == NULL ? SEG_MODE_AUTO : src->reader->syntax; } /* Returns the error mode for the syntax file from which the current drawn is @@ -1638,21 +1638,10 @@ static struct lex_source * lex_source_create (struct lex_reader *reader) { struct lex_source *src; - enum segmenter_mode mode; src = xzalloc (sizeof *src); src->reader = reader; - - if (reader->syntax == LEX_SYNTAX_AUTO) - mode = SEG_MODE_AUTO; - else if (reader->syntax == LEX_SYNTAX_INTERACTIVE) - mode = SEG_MODE_INTERACTIVE; - else if (reader->syntax == LEX_SYNTAX_BATCH) - mode = SEG_MODE_BATCH; - else - NOT_REACHED (); - segmenter_init (&src->segmenter, mode); - + segmenter_init (&src->segmenter, reader->syntax); src->tokens = deque_init (&src->deque, 4, sizeof *src->tokens); lex_source_push_endcmd__ (src); @@ -1694,7 +1683,7 @@ static struct lex_reader_class lex_file_reader_class; Returns a null pointer if FILE_NAME cannot be opened. */ struct lex_reader * lex_reader_for_file (const char *file_name, const char *encoding, - enum lex_syntax_mode syntax, + enum segmenter_mode syntax, enum lex_error_mode error) { struct lex_file_reader *r; @@ -1782,7 +1771,7 @@ lex_reader_for_substring_nocopy (struct substring s, const char *encoding) r = xmalloc (sizeof *r); lex_reader_init (&r->reader, &lex_string_reader_class); - r->reader.syntax = LEX_SYNTAX_AUTO; + r->reader.syntax = SEG_MODE_AUTO; r->reader.encoding = xstrdup_if_nonnull (encoding); r->s = s; r->offset = 0; diff --git a/src/language/lexer/lexer.h b/src/language/lexer/lexer.h index efb909baca..caf5750331 100644 --- a/src/language/lexer/lexer.h +++ b/src/language/lexer/lexer.h @@ -23,20 +23,13 @@ #include "data/identifier.h" #include "data/variable.h" +#include "language/lexer/segment.h" #include "libpspp/cast.h" #include "libpspp/compiler.h" #include "libpspp/prompt.h" struct lexer; -/* The syntax mode for which a syntax file is intended. */ -enum lex_syntax_mode - { - LEX_SYNTAX_AUTO, /* Try to guess intent. */ - LEX_SYNTAX_INTERACTIVE, /* Interactive mode. */ - LEX_SYNTAX_BATCH /* Batch mode. */ - }; - /* Handling of errors. */ enum lex_error_mode { @@ -52,7 +45,7 @@ enum lex_error_mode struct lex_reader { const struct lex_reader_class *class; - enum lex_syntax_mode syntax; + enum segmenter_mode syntax; enum lex_error_mode error; char *encoding; char *file_name; /* NULL if not associated with a file. */ @@ -86,7 +79,7 @@ void lex_reader_set_file_name (struct lex_reader *, const char *file_name); /* Creating various kinds of lex_readers. */ struct lex_reader *lex_reader_for_file (const char *file_name, const char *encoding, - enum lex_syntax_mode syntax, + enum segmenter_mode syntax, enum lex_error_mode error); struct lex_reader *lex_reader_for_string (const char *, const char *encoding); struct lex_reader *lex_reader_for_format (const char *, const char *, ...) @@ -184,7 +177,7 @@ void lex_next_error_valist (struct lexer *lexer, int n0, int n1, PRINTF_FORMAT (4, 0); /* Error handling. */ -enum lex_syntax_mode lex_get_syntax_mode (const struct lexer *); +enum segmenter_mode lex_get_syntax_mode (const struct lexer *); enum lex_error_mode lex_get_error_mode (const struct lexer *); void lex_discard_rest_of_command (struct lexer *); void lex_interactive_reset (struct lexer *); diff --git a/src/language/utilities/include.c b/src/language/utilities/include.c index f518926de0..eefbde6158 100644 --- a/src/language/utilities/include.c +++ b/src/language/utilities/include.c @@ -46,7 +46,7 @@ enum variant static int do_insert (struct lexer *lexer, struct dataset *ds, enum variant variant) { - enum lex_syntax_mode syntax_mode; + enum segmenter_mode syntax_mode; enum lex_error_mode error_mode; char *relative_name; char *filename; @@ -76,7 +76,7 @@ do_insert (struct lexer *lexer, struct dataset *ds, enum variant variant) } lex_get (lexer); - syntax_mode = LEX_SYNTAX_INTERACTIVE; + syntax_mode = SEG_MODE_INTERACTIVE; error_mode = LEX_ERROR_CONTINUE; cd = false; status = CMD_FAILURE; @@ -98,11 +98,11 @@ do_insert (struct lexer *lexer, struct dataset *ds, enum variant variant) { lex_match (lexer, T_EQUALS); if (lex_match_id (lexer, "INTERACTIVE")) - syntax_mode = LEX_SYNTAX_INTERACTIVE; + syntax_mode = SEG_MODE_INTERACTIVE; else if (lex_match_id (lexer, "BATCH")) - syntax_mode = LEX_SYNTAX_BATCH; + syntax_mode = SEG_MODE_BATCH; else if (lex_match_id (lexer, "AUTO")) - syntax_mode = LEX_SYNTAX_AUTO; + syntax_mode = SEG_MODE_AUTO; else { lex_error_expecting (lexer, "BATCH", "INTERACTIVE", "AUTO"); diff --git a/src/ui/gui/psppire-lex-reader.c b/src/ui/gui/psppire-lex-reader.c index e3e966c1a7..b34edf97b7 100644 --- a/src/ui/gui/psppire-lex-reader.c +++ b/src/ui/gui/psppire-lex-reader.c @@ -56,7 +56,7 @@ lex_gtk_text_buffer_reader_cast (struct lex_reader *r) struct lex_reader * lex_reader_for_gtk_text_buffer (GtkTextBuffer *buffer, GtkTextIter start, GtkTextIter stop, - enum lex_syntax_mode syntax_mode) + enum segmenter_mode syntax_mode) { struct lex_gtk_text_buffer_reader *r = xmalloc (sizeof *r); diff --git a/src/ui/gui/psppire-lex-reader.h b/src/ui/gui/psppire-lex-reader.h index 4da6844249..c9e84d3f7d 100644 --- a/src/ui/gui/psppire-lex-reader.h +++ b/src/ui/gui/psppire-lex-reader.h @@ -23,6 +23,6 @@ struct lex_reader *lex_reader_for_gtk_text_buffer ( GtkTextBuffer *buffer, GtkTextIter start, GtkTextIter stop, - enum lex_syntax_mode); + enum segmenter_mode); #endif diff --git a/src/ui/gui/psppire-syntax-window.c b/src/ui/gui/psppire-syntax-window.c index 4a480a4c63..c1f9e4631e 100644 --- a/src/ui/gui/psppire-syntax-window.c +++ b/src/ui/gui/psppire-syntax-window.c @@ -527,11 +527,11 @@ on_syntax (GAction *action, GVariant *param, PsppireSyntaxWindow *sw) const gchar *what = g_variant_get_string (new_state, NULL); if (0 == g_strcmp0 (what, "auto")) - sw->syntax_mode = LEX_SYNTAX_AUTO; + sw->syntax_mode = SEG_MODE_AUTO; else if (0 == g_strcmp0 (what, "interactive")) - sw->syntax_mode = LEX_SYNTAX_INTERACTIVE; + sw->syntax_mode = SEG_MODE_INTERACTIVE; else if (0 == g_strcmp0 (what, "batch")) - sw->syntax_mode = LEX_SYNTAX_BATCH; + sw->syntax_mode = SEG_MODE_BATCH; else g_warn_if_reached (); } @@ -783,7 +783,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) NULL); window->encoding = NULL; - window->syntax_mode = LEX_SYNTAX_AUTO; + window->syntax_mode = SEG_MODE_AUTO; window->cliptext = NULL; window->dispose_has_run = FALSE; diff --git a/src/ui/gui/psppire-syntax-window.h b/src/ui/gui/psppire-syntax-window.h index 3d54681fb2..161b374597 100644 --- a/src/ui/gui/psppire-syntax-window.h +++ b/src/ui/gui/psppire-syntax-window.h @@ -53,7 +53,7 @@ struct _PsppireSyntaxWindow gchar *encoding; /* File's encoding. */ GtkWidget *sb; guint text_context; - enum lex_syntax_mode syntax_mode; + enum segmenter_mode syntax_mode; GtkPrintSettings *print_settings; GtkSourcePrintCompositor *compositor; diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index be1d035f21..630089b2d2 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -62,7 +62,7 @@ static struct session *the_session; static void add_syntax_reader (struct lexer *, const char *file_name, - const char *encoding, enum lex_syntax_mode); + const char *encoding, enum segmenter_mode); static void bug_handler(int sig); static void fpu_init (void); static void output_msg (const struct msg *, void *); @@ -73,7 +73,7 @@ main (int argc, char **argv) { struct terminal_opts *terminal_opts; struct argv_parser *parser; - enum lex_syntax_mode syntax_mode; + enum segmenter_mode syntax_mode; char *syntax_encoding; bool process_statrc; struct lexer *lexer; @@ -118,7 +118,7 @@ main (int argc, char **argv) char *rc = include_path_search ("rc"); if (rc != NULL) { - add_syntax_reader (lexer, rc, "Auto", LEX_SYNTAX_AUTO); + add_syntax_reader (lexer, rc, "Auto", SEG_MODE_AUTO); free (rc); } } @@ -236,7 +236,7 @@ output_msg (const struct msg *m_, void *lexer_) static void add_syntax_reader (struct lexer *lexer, const char *file_name, - const char *encoding, enum lex_syntax_mode syntax_mode) + const char *encoding, enum segmenter_mode syntax_mode) { struct lex_reader *reader; diff --git a/src/ui/terminal/terminal-opts.c b/src/ui/terminal/terminal-opts.c index eeb10356d8..5a6a8fbd23 100644 --- a/src/ui/terminal/terminal-opts.c +++ b/src/ui/terminal/terminal-opts.c @@ -56,7 +56,7 @@ struct terminal_opts bool has_output_driver; bool has_terminal_driver; bool has_error_file; - enum lex_syntax_mode *syntax_mode; + enum segmenter_mode *syntax_mode; bool *process_statrc; char **syntax_encoding; char *table_look; @@ -224,11 +224,11 @@ terminal_option_callback (int id, void *to_) break; case OPT_BATCH: - *to->syntax_mode = LEX_SYNTAX_BATCH; + *to->syntax_mode = SEG_MODE_BATCH; break; case OPT_INTERACTIVE: - *to->syntax_mode = LEX_SYNTAX_INTERACTIVE; + *to->syntax_mode = SEG_MODE_INTERACTIVE; break; case OPT_SYNTAX_ENCODING: @@ -260,12 +260,12 @@ terminal_option_callback (int id, void *to_) struct terminal_opts * terminal_opts_init (struct argv_parser *ap, - enum lex_syntax_mode *syntax_mode, bool *process_statrc, + enum segmenter_mode *syntax_mode, bool *process_statrc, char **syntax_encoding) { struct terminal_opts *to; - *syntax_mode = LEX_SYNTAX_AUTO; + *syntax_mode = SEG_MODE_AUTO; *process_statrc = true; *syntax_encoding = "Auto"; diff --git a/src/ui/terminal/terminal-opts.h b/src/ui/terminal/terminal-opts.h index 64581baea3..a21a772b8e 100644 --- a/src/ui/terminal/terminal-opts.h +++ b/src/ui/terminal/terminal-opts.h @@ -26,7 +26,7 @@ struct lexer; struct terminal_opts; struct terminal_opts *terminal_opts_init (struct argv_parser *, - enum lex_syntax_mode *, + enum segmenter_mode *, bool *process_statrc, char **syntax_encoding); void terminal_opts_done (struct terminal_opts *, int argc, char *argv[]); diff --git a/src/ui/terminal/terminal-reader.c b/src/ui/terminal/terminal-reader.c index e0f219826d..e418ec7e08 100644 --- a/src/ui/terminal/terminal-reader.c +++ b/src/ui/terminal/terminal-reader.c @@ -196,7 +196,7 @@ terminal_reader_create (void) r = xzalloc (sizeof *r); r->reader.class = &terminal_reader_class; - r->reader.syntax = LEX_SYNTAX_INTERACTIVE; + r->reader.syntax = SEG_MODE_INTERACTIVE; r->reader.error = LEX_ERROR_TERMINAL; r->reader.file_name = NULL; r->s = ss_empty (); diff --git a/tests/output/pivot-table-test.c b/tests/output/pivot-table-test.c index 18e7d0499f..cf476d5392 100644 --- a/tests/output/pivot-table-test.c +++ b/tests/output/pivot-table-test.c @@ -68,7 +68,7 @@ main (int argc, char **argv) settings_init (); struct lex_reader *reader = lex_reader_for_file (input_file_name, NULL, - LEX_SYNTAX_AUTO, + SEG_MODE_AUTO, LEX_ERROR_CONTINUE); if (!reader) exit (1); -- 2.30.2