X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Flexer.c;h=21309f5f975f688693e0ea09534cd750cf29dab9;hb=5581c901aba8df3b31f6406d7fff09e26a9e7fc1;hp=df2806eedf090e64d14747512dd1070620cc7b16;hpb=ddf2365f2c3b8924f37cb0c96b2093cceaa64cb9;p=pspp diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index df2806eedf..21309f5f97 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -198,7 +198,7 @@ lex_push_token__ (struct lex_source *src) src->tokens = deque_expand (&src->deque, src->tokens, sizeof *src->tokens); token = &src->tokens[deque_push_front (&src->deque)]; - token_init (&token->token); + token->token = (struct token) { .type = T_STOP }; return token; } @@ -852,9 +852,7 @@ lex_next__ (const struct lexer *lexer_, int n) return lex_source_next__ (src, n); else { - static const struct lex_token stop_token = - { TOKEN_INITIALIZER (T_STOP, 0.0, ""), 0, 0, 0, 0 }; - + static const struct lex_token stop_token = { .token = { .type = T_STOP } }; return &stop_token; } } @@ -988,7 +986,7 @@ lex_match_phrase (struct lexer *lexer, const char *s) int i; i = 0; - string_lexer_init (&slex, s, strlen (s), SEG_MODE_INTERACTIVE); + string_lexer_init (&slex, s, strlen (s), SEG_MODE_INTERACTIVE, true); while (string_lexer_next (&slex, &token)) if (token.type != SCAN_SKIP) { @@ -1238,7 +1236,8 @@ lex_interactive_reset (struct lexer *lexer) src->journal_pos = src->seg_pos = src->line_pos = 0; src->n_newlines = 0; src->suppress_next_newline = false; - segmenter_init (&src->segmenter, segmenter_get_mode (&src->segmenter)); + src->segmenter = segmenter_init (segmenter_get_mode (&src->segmenter), + false); while (!deque_is_empty (&src->deque)) lex_source_pop__ (src); lex_source_push_endcmd__ (src); @@ -1370,41 +1369,6 @@ lex_source_get_syntax__ (const struct lex_source *src, int n0, int n1) lex_source_next__ (src, MAX (n0, n1))); } -static void -lex_ellipsize__ (struct substring in, char *out, size_t out_size) -{ - size_t out_maxlen; - size_t out_len; - int mblen; - - assert (out_size >= 16); - out_maxlen = out_size - 1; - if (in.length > out_maxlen - 3) - out_maxlen -= 3; - - for (out_len = 0; out_len < in.length; out_len += mblen) - { - if (in.string[out_len] == '\n' - || in.string[out_len] == '\0' - || (in.string[out_len] == '\r' - && out_len + 1 < in.length - && in.string[out_len + 1] == '\n')) - break; - - mblen = u8_mblen (CHAR_CAST (const uint8_t *, in.string + out_len), - in.length - out_len); - - if (mblen < 0) - break; - - if (out_len + mblen > out_maxlen) - break; - } - - memcpy (out, in.string, out_len); - strcpy (&out[out_len], out_len < in.length ? "..." : ""); -} - static void lex_source_error_valist (struct lex_source *src, int n0, int n1, const char *format, va_list args) @@ -1424,7 +1388,7 @@ lex_source_error_valist (struct lex_source *src, int n0, int n1, { char syntax_cstr[64]; - lex_ellipsize__ (syntax, syntax_cstr, sizeof syntax_cstr); + str_ellipsize (syntax, syntax_cstr, sizeof syntax_cstr); ds_put_format (&s, _("Syntax error at `%s'"), syntax_cstr); } else @@ -1658,12 +1622,12 @@ lex_source_push_endcmd__ (struct lex_source *src) static struct lex_source * lex_source_create (struct lex_reader *reader) { - struct lex_source *src; - - src = xzalloc (sizeof *src); - src->reader = reader; - segmenter_init (&src->segmenter, reader->syntax); - src->tokens = deque_init (&src->deque, 4, sizeof *src->tokens); + struct lex_source *src = xmalloc (sizeof *src); + *src = (struct lex_source) { + .reader = reader, + .segmenter = segmenter_init (reader->syntax, false), + .tokens = deque_init (&src->deque, 4, sizeof *src->tokens), + }; lex_source_push_endcmd__ (src);