X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Flexer.c;h=9b879c71ec5d57484bb4105a0540e6db2b6b11d9;hb=173d1687aea88e0e5e1b1d8615ed68ebefb15d08;hp=265116141eb36f0d8ffa685a326431cd79f7b7ad;hpb=d6ede2e8f16079edae2e308583f8af4f7e9daddd;p=pspp diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index 265116141e..9b879c71ec 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "xalloc.h" @@ -175,19 +176,19 @@ lex_get (struct lexer *lexer) return; } - /* If a token was pushed ahead, return it. */ - if (lexer->put_token) - { - restore_token (lexer); + /* If a token was pushed ahead, return it. */ + if (lexer->put_token) + { + restore_token (lexer); #if DUMP_TOKENS dump_token (lexer); #endif - return; - } + return; + } - for (;;) - { - /* Skip whitespace. */ + for (;;) + { + /* Skip whitespace. */ while (c_isspace ((unsigned char) *lexer->prog)) lexer->prog++; @@ -385,10 +386,9 @@ lex_get (struct lexer *lexer) else { unsigned char c = *lexer->prog++; - if (c_isgraph (c)) - msg (SE, _("Bad character in input: `%c'."), c); - else - msg (SE, _("Bad character in input: `\\%o'."), c); + char *c_name = xasprintf (c_isgraph (c) ? "%c" : "\\%o", c); + msg (SE, _("Bad character in input: `%s'."), c_name); + free (c_name); continue; } } @@ -874,16 +874,16 @@ lex_preprocess_line (struct string *line, } } -/* Reads a line, without performing any preprocessing. - Sets *SYNTAX, if SYNTAX is non-null, to the line's syntax - mode. */ +/* Reads a line, without performing any preprocessing. */ bool lex_get_line_raw (struct lexer *lexer) { bool ok = getl_read_line (lexer->ss, &lexer->line_buffer); - enum syntax_mode mode = lex_current_syntax_mode (lexer); - journal_write (mode == GETL_BATCH, ds_cstr (&lexer->line_buffer)); - + if (ok) + { + const char *line = ds_cstr (&lexer->line_buffer); + text_item_submit (text_item_create (TEXT_ITEM_SYNTAX, line)); + } return ok; } @@ -1218,13 +1218,6 @@ finish: if (type != CHARACTER_STRING) convert_numeric_string_to_char_string (lexer, type); - if (ds_length (&lexer->tokstr) > 255) - { - msg (SE, _("String exceeds 255 characters in length (%zu characters)."), - ds_length (&lexer->tokstr)); - ds_truncate (&lexer->tokstr, 255); - } - return T_STRING; } @@ -1256,7 +1249,7 @@ dump_token (struct lexer *lexer) break; case T_STRING: - fprintf (stderr, "STRING\t\"%s\"\n", ds_cstr (&lexer->tokstr)); + fprintf (stderr, "STRING\t`%s'\n", ds_cstr (&lexer->tokstr)); break; case T_STOP: