Skip to content

Commit

Permalink
xkbcomp/scanner: avoid extra copies for keynames, keywords, identifiers
Browse files Browse the repository at this point in the history
The tokens don't have escapes so no need to use the `buf` for them.

Signed-off-by: Ran Benita <[email protected]>
  • Loading branch information
bluetech committed Feb 5, 2025
1 parent 43f6036 commit 7e84c84
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions src/xkbcomp/scanner.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,16 @@ _xkbcommon_lex(YYSTYPE *yylval, struct scanner *s)
/* Key name literal. */
if (scanner_chr(s, '<')) {
while (is_graph(scanner_peek(s)) && scanner_peek(s) != '>')
scanner_buf_append(s, scanner_next(s));
if (!scanner_buf_append(s, '\0') || !scanner_chr(s, '>')) {
scanner_next(s);
if (!scanner_chr(s, '>')) {
scanner_err(s, XKB_LOG_MESSAGE_NO_ID,
"unterminated key name literal");
return ERROR_TOK;
}
/* Empty key name literals are allowed. */
yylval->atom = xkb_atom_intern(s->ctx, s->buf, s->buf_pos - 1);
const char *start = s->s + s->token_pos + 1;
const size_t len = s->pos - s->token_pos - 2;
yylval->atom = xkb_atom_intern(s->ctx, start, len);
return KEYNAME;
}

Expand All @@ -144,20 +146,17 @@ _xkbcommon_lex(YYSTYPE *yylval, struct scanner *s)

/* Identifier. */
if (is_alpha(scanner_peek(s)) || scanner_peek(s) == '_') {
s->buf_pos = 0;
while (is_alnum(scanner_peek(s)) || scanner_peek(s) == '_')
scanner_buf_append(s, scanner_next(s));
if (!scanner_buf_append(s, '\0')) {
scanner_err(s, XKB_LOG_MESSAGE_NO_ID,
"identifier too long");
return ERROR_TOK;
}
scanner_next(s);

const char *start = s->s + s->token_pos;
const size_t len = s->pos - s->token_pos;

/* Keyword. */
tok = keyword_to_token(s->buf, s->buf_pos - 1);
if (tok != -1) return tok;
tok = keyword_to_token(start, len);
if (tok >= 0) return tok;

yylval->str = strdup(s->buf);
yylval->str = strndup(start, len);
if (!yylval->str)
return ERROR_TOK;
return IDENT;
Expand Down

0 comments on commit 7e84c84

Please sign in to comment.