[gtk/wip/baedert/for-master] csstokenizer: Keep a GString for name parsing around
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/for-master] csstokenizer: Keep a GString for name parsing around
- Date: Sun, 3 Jan 2021 21:48:23 +0000 (UTC)
commit 8a66ac2cffaeb2ff9aec22e33caa260b3d4a7a30
Author: Timm Bäder <mail baedert org>
Date: Sun Jan 3 22:41:02 2021 +0100
csstokenizer: Keep a GString for name parsing around
We only every parse one of those at a time, so keep a GString around for
it. This way we don't have to create a new GString every time we parse
an identifier. Doesn't spare us the strdup though.
gtk/css/gtkcsstokenizer.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
---
diff --git a/gtk/css/gtkcsstokenizer.c b/gtk/css/gtkcsstokenizer.c
index 436d523297..a406ad3d06 100644
--- a/gtk/css/gtkcsstokenizer.c
+++ b/gtk/css/gtkcsstokenizer.c
@@ -30,6 +30,7 @@ struct _GtkCssTokenizer
{
int ref_count;
GBytes *bytes;
+ GString *name_buffer;
const char *data;
const char *end;
@@ -565,6 +566,7 @@ gtk_css_tokenizer_new (GBytes *bytes)
tokenizer = g_slice_new0 (GtkCssTokenizer);
tokenizer->ref_count = 1;
tokenizer->bytes = g_bytes_ref (bytes);
+ tokenizer->name_buffer = g_string_new (NULL);
tokenizer->data = g_bytes_get_data (bytes, NULL);
tokenizer->end = tokenizer->data + g_bytes_get_size (bytes);
@@ -589,6 +591,7 @@ gtk_css_tokenizer_unref (GtkCssTokenizer *tokenizer)
if (tokenizer->ref_count > 0)
return;
+ g_string_free (tokenizer->name_buffer, TRUE);
g_bytes_unref (tokenizer->bytes);
g_slice_free (GtkCssTokenizer, tokenizer);
}
@@ -599,11 +602,7 @@ gtk_css_tokenizer_get_location (GtkCssTokenizer *tokenizer)
return &tokenizer->position;
}
-static void
-gtk_css_tokenizer_parse_error (GError **error,
- const char *format,
- ...) G_GNUC_PRINTF(2, 3);
-static void
+static void G_GNUC_PRINTF(2, 3)
gtk_css_tokenizer_parse_error (GError **error,
const char *format,
...)
@@ -874,7 +873,7 @@ gtk_css_tokenizer_read_escape (GtkCssTokenizer *tokenizer)
static char *
gtk_css_tokenizer_read_name (GtkCssTokenizer *tokenizer)
{
- GString *string = g_string_new (NULL);
+ g_string_set_size (tokenizer->name_buffer, 0);
do {
if (*tokenizer->data == '\\')
@@ -882,7 +881,7 @@ gtk_css_tokenizer_read_name (GtkCssTokenizer *tokenizer)
if (gtk_css_tokenizer_has_valid_escape (tokenizer))
{
gunichar value = gtk_css_tokenizer_read_escape (tokenizer);
- g_string_append_unichar (string, value);
+ g_string_append_unichar (tokenizer->name_buffer, value);
}
else
{
@@ -890,16 +889,16 @@ gtk_css_tokenizer_read_name (GtkCssTokenizer *tokenizer)
if (tokenizer->data == tokenizer->end)
{
- g_string_append_unichar (string, 0xFFFD);
+ g_string_append_unichar (tokenizer->name_buffer, 0xFFFD);
break;
}
- gtk_css_tokenizer_consume_char (tokenizer, string);
+ gtk_css_tokenizer_consume_char (tokenizer, tokenizer->name_buffer);
}
}
else if (is_name (*tokenizer->data))
{
- gtk_css_tokenizer_consume_char (tokenizer, string);
+ gtk_css_tokenizer_consume_char (tokenizer, tokenizer->name_buffer);
}
else
{
@@ -908,7 +907,7 @@ gtk_css_tokenizer_read_name (GtkCssTokenizer *tokenizer)
}
while (tokenizer->data != tokenizer->end);
- return g_string_free (string, FALSE);
+ return g_strndup (tokenizer->name_buffer->str, tokenizer->name_buffer->len);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]