gsksltokenizer: Always return idents

Turning idents into keywords is the job of the preprocessor and has to
be done after processing #defines.
This commit is contained in:
Benjamin Otte
2017-09-23 15:08:50 +02:00
parent 9417507829
commit d3511003cf
3 changed files with 25 additions and 13 deletions

View File

@@ -213,6 +213,13 @@ gsk_sl_preprocessor_ensure (GskSlPreprocessor *preproc)
break;
}
}
if (gsk_sl_token_is (&preproc->token, GSK_SL_TOKEN_IDENTIFIER))
{
char *ident = preproc->token.str;
gsk_sl_token_init_from_identifier (&preproc->token, ident);
g_free (ident);
}
}
const GskSlToken *

View File

@@ -1463,14 +1463,11 @@ gsk_sl_token_reader_read_number (GskSlTokenReader *reader,
return gsk_sl_token_reader_read_float_number (reader, token, error);
}
static gboolean
static void
gsk_sl_token_reader_read_identifier (GskSlTokenReader *reader,
GskSlToken *token,
GError **error)
GskSlToken *token)
{
GString *string;
guint i;
char *ident;
char c;
string = g_string_new ("");
@@ -1483,19 +1480,26 @@ gsk_sl_token_reader_read_identifier (GskSlTokenReader *reader,
gsk_sl_token_reader_consume (reader, 1);
}
ident = g_string_free (string, FALSE);
gsk_sl_token_init (token, GSK_SL_TOKEN_IDENTIFIER);
token->str = g_string_free (string, FALSE);
}
void
gsk_sl_token_init_from_identifier (GskSlToken *token,
const char *ident)
{
guint i;
if (g_str_equal (ident, "true"))
{
gsk_sl_token_init (token, GSK_SL_TOKEN_BOOLCONSTANT);
token->b = TRUE;
return TRUE;
return;
}
else if (g_str_equal (ident, "false"))
{
gsk_sl_token_init (token, GSK_SL_TOKEN_BOOLCONSTANT);
token->b = FALSE;
return TRUE;
return;
}
for (i = 0; i < G_N_ELEMENTS (keywords); i++)
@@ -1506,14 +1510,12 @@ gsk_sl_token_reader_read_identifier (GskSlTokenReader *reader,
if (g_str_equal (ident, keywords[i]))
{
gsk_sl_token_init (token, i);
return TRUE;
return;
}
}
gsk_sl_token_init (token, GSK_SL_TOKEN_IDENTIFIER);
token->str = ident;
return TRUE;
token->str = g_strdup (ident);
}
void
@@ -1828,7 +1830,7 @@ gsk_sl_tokenizer_read_token (GskSlTokenizer *tokenizer,
}
else if (is_identifier_start (c))
{
gsk_sl_token_reader_read_identifier (&reader, token, &error);
gsk_sl_token_reader_read_identifier (&reader, token);
}
else
{

View File

@@ -266,6 +266,9 @@ struct _GskSlToken {
void gsk_sl_token_clear (GskSlToken *token);
void gsk_sl_token_init_from_identifier (GskSlToken *token,
const char *ident);
gboolean gsk_sl_token_is_finite (const GskSlToken *token);
#define gsk_sl_token_is(token, _type) ((token)->type == (_type))
gboolean gsk_sl_token_is_ident (const GskSlToken *token,