Avoid relocations for the array of symbol names.

2006-04-02  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkrc.c: Avoid relocations for the array of symbol names.
This commit is contained in:
Matthias Clasen 2006-04-03 03:57:29 +00:00 committed by Matthias Clasen
parent 58daa1a3f2
commit 168e2d2590
3 changed files with 82 additions and 41 deletions

View File

@ -1,5 +1,7 @@
2006-04-02 Matthias Clasen <mclasen@redhat.com> 2006-04-02 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkrc.c: Avoid relocations for the array of symbol names.
* gtk/gtkruler.c: Remove unused strings from the ruler_metrics * gtk/gtkruler.c: Remove unused strings from the ruler_metrics
structs, to avoid relocations. (#336917, Stephane Chauveau) structs, to avoid relocations. (#336917, Stephane Chauveau)

View File

@ -1,5 +1,7 @@
2006-04-02 Matthias Clasen <mclasen@redhat.com> 2006-04-02 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkrc.c: Avoid relocations for the array of symbol names.
* gtk/gtkruler.c: Remove unused strings from the ruler_metrics * gtk/gtkruler.c: Remove unused strings from the ruler_metrics
structs, to avoid relocations. (#336917, Stephane Chauveau) structs, to avoid relocations. (#336917, Stephane Chauveau)

View File

@ -279,48 +279,86 @@ static const GScannerConfig gtk_rc_scanner_config =
TRUE /* symbol_2_token */, TRUE /* symbol_2_token */,
FALSE /* scope_0_fallback */, FALSE /* scope_0_fallback */,
}; };
static const gchar symbol_names[] =
"include\0"
"NORMAL\0"
"ACTIVE\0"
"PRELIGHT\0"
"SELECTED\0"
"INSENSITIVE\0"
"fg\0"
"bg\0"
"text\0"
"base\0"
"xthickness\0"
"ythickness\0"
"font\0"
"fontset\0"
"font_name\0"
"bg_pixmap\0"
"pixmap_path\0"
"style\0"
"binding\0"
"bind\0"
"widget\0"
"widget_class\0"
"class\0"
"lowest\0"
"gtk\0"
"application\0"
"theme\0"
"rc\0"
"highest\0"
"engine\0"
"module_path\0"
"stock\0"
"im_module_file\0"
"LTR\0"
"RTL\0"
"color\0";
static const struct static const struct
{ {
gchar *name; guint name_offset;
guint token; guint token;
} symbols[] = { } symbols[] = {
{ "include", GTK_RC_TOKEN_INCLUDE }, { 0, GTK_RC_TOKEN_INCLUDE },
{ "NORMAL", GTK_RC_TOKEN_NORMAL }, { 8, GTK_RC_TOKEN_NORMAL },
{ "ACTIVE", GTK_RC_TOKEN_ACTIVE }, { 15, GTK_RC_TOKEN_ACTIVE },
{ "PRELIGHT", GTK_RC_TOKEN_PRELIGHT }, { 22, GTK_RC_TOKEN_PRELIGHT },
{ "SELECTED", GTK_RC_TOKEN_SELECTED }, { 31, GTK_RC_TOKEN_SELECTED },
{ "INSENSITIVE", GTK_RC_TOKEN_INSENSITIVE }, { 40, GTK_RC_TOKEN_INSENSITIVE },
{ "fg", GTK_RC_TOKEN_FG }, { 52, GTK_RC_TOKEN_FG },
{ "bg", GTK_RC_TOKEN_BG }, { 55, GTK_RC_TOKEN_BG },
{ "text", GTK_RC_TOKEN_TEXT }, { 58, GTK_RC_TOKEN_TEXT },
{ "base", GTK_RC_TOKEN_BASE }, { 63, GTK_RC_TOKEN_BASE },
{ "xthickness", GTK_RC_TOKEN_XTHICKNESS }, { 68, GTK_RC_TOKEN_XTHICKNESS },
{ "ythickness", GTK_RC_TOKEN_YTHICKNESS }, { 79, GTK_RC_TOKEN_YTHICKNESS },
{ "font", GTK_RC_TOKEN_FONT }, { 90, GTK_RC_TOKEN_FONT },
{ "fontset", GTK_RC_TOKEN_FONTSET }, { 95, GTK_RC_TOKEN_FONTSET },
{ "font_name", GTK_RC_TOKEN_FONT_NAME }, { 103, GTK_RC_TOKEN_FONT_NAME },
{ "bg_pixmap", GTK_RC_TOKEN_BG_PIXMAP }, { 113, GTK_RC_TOKEN_BG_PIXMAP },
{ "pixmap_path", GTK_RC_TOKEN_PIXMAP_PATH }, { 123, GTK_RC_TOKEN_PIXMAP_PATH },
{ "style", GTK_RC_TOKEN_STYLE }, { 135, GTK_RC_TOKEN_STYLE },
{ "binding", GTK_RC_TOKEN_BINDING }, { 141, GTK_RC_TOKEN_BINDING },
{ "bind", GTK_RC_TOKEN_BIND }, { 149, GTK_RC_TOKEN_BIND },
{ "widget", GTK_RC_TOKEN_WIDGET }, { 154, GTK_RC_TOKEN_WIDGET },
{ "widget_class", GTK_RC_TOKEN_WIDGET_CLASS }, { 161, GTK_RC_TOKEN_WIDGET_CLASS },
{ "class", GTK_RC_TOKEN_CLASS }, { 174, GTK_RC_TOKEN_CLASS },
{ "lowest", GTK_RC_TOKEN_LOWEST }, { 180, GTK_RC_TOKEN_LOWEST },
{ "gtk", GTK_RC_TOKEN_GTK }, { 187, GTK_RC_TOKEN_GTK },
{ "application", GTK_RC_TOKEN_APPLICATION }, { 191, GTK_RC_TOKEN_APPLICATION },
{ "theme", GTK_RC_TOKEN_THEME }, { 203, GTK_RC_TOKEN_THEME },
{ "rc", GTK_RC_TOKEN_RC }, { 209, GTK_RC_TOKEN_RC },
{ "highest", GTK_RC_TOKEN_HIGHEST }, { 212, GTK_RC_TOKEN_HIGHEST },
{ "engine", GTK_RC_TOKEN_ENGINE }, { 220, GTK_RC_TOKEN_ENGINE },
{ "module_path", GTK_RC_TOKEN_MODULE_PATH }, { 227, GTK_RC_TOKEN_MODULE_PATH },
{ "stock", GTK_RC_TOKEN_STOCK }, { 239, GTK_RC_TOKEN_STOCK },
{ "im_module_file", GTK_RC_TOKEN_IM_MODULE_FILE }, { 245, GTK_RC_TOKEN_IM_MODULE_FILE },
{ "LTR", GTK_RC_TOKEN_LTR }, { 260, GTK_RC_TOKEN_LTR },
{ "RTL", GTK_RC_TOKEN_RTL }, { 264, GTK_RC_TOKEN_RTL },
{ "color", GTK_RC_TOKEN_COLOR } { 268, GTK_RC_TOKEN_COLOR }
}; };
static GHashTable *realized_style_ht = NULL; static GHashTable *realized_style_ht = NULL;
@ -2024,8 +2062,7 @@ gtk_rc_parse_any (GtkRcContext *context,
scanner->input_name = input_name; scanner->input_name = input_name;
for (i = 0; i < G_N_ELEMENTS (symbols); i++) for (i = 0; i < G_N_ELEMENTS (symbols); i++)
g_scanner_scope_add_symbol (scanner, 0, symbols[i].name, GINT_TO_POINTER (symbols[i].token)); g_scanner_scope_add_symbol (scanner, 0, symbol_names + symbols[i].name_offset, GINT_TO_POINTER (symbols[i].token));
done = FALSE; done = FALSE;
while (!done) while (!done)
{ {
@ -2056,7 +2093,7 @@ gtk_rc_parse_any (GtkRcContext *context,
{ {
for (i = 0; i < G_N_ELEMENTS (symbols); i++) for (i = 0; i < G_N_ELEMENTS (symbols); i++)
if (symbols[i].token == expected_token) if (symbols[i].token == expected_token)
msg = symbols[i].name; msg = symbol_names + symbols[i].name_offset;
if (msg) if (msg)
msg = g_strconcat ("e.g. `", msg, "'", NULL); msg = g_strconcat ("e.g. `", msg, "'", NULL);
} }
@ -2066,7 +2103,7 @@ gtk_rc_parse_any (GtkRcContext *context,
symbol_name = "???"; symbol_name = "???";
for (i = 0; i < G_N_ELEMENTS (symbols); i++) for (i = 0; i < G_N_ELEMENTS (symbols); i++)
if (symbols[i].token == scanner->token) if (symbols[i].token == scanner->token)
symbol_name = symbols[i].name; symbol_name = symbol_names + symbols[i].name_offset;
} }
} }
g_scanner_unexp_token (scanner, g_scanner_unexp_token (scanner,