From 23fd2d58f45f86033dc64e46876601afb01a2c96 Mon Sep 17 00:00:00 2001 From: Kalle Olavi Niemitalo Date: Sun, 19 Jul 2009 20:16:42 +0300 Subject: [PATCH] Make struct action const With GCC 4.3.1 on i686, this changes the sizes of sections as follows: section before after change .text 682428 682492 +64 .rodata 212668 216352 +3684 .data 58092 54444 -3648 .debug_info 1482388 1482472 +84 .debug_abbrev 153714 153723 +9 .debug_line 272299 272319 +20 .debug_loc 540394 540372 -22 .debug_ranges 113784 113792 +8 Total 3917695 3917894 +199 The surprising .text change comes from src/config/dialogs.o. Some of that is in get_keybinding_text(), where GCC changes the order of basic blocks and apparently misses some optimizations. --- src/config/dialogs.c | 16 +++++++++------- src/config/dialogs.h | 3 ++- src/config/kbdbind.c | 34 +++++++++++++++++----------------- src/config/kbdbind.h | 16 ++++++++-------- 4 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/config/dialogs.c b/src/config/dialogs.c index 6a11c63f..235b62f5 100644 --- a/src/config/dialogs.c +++ b/src/config/dialogs.c @@ -549,10 +549,11 @@ get_keybinding_action_box_item(enum keymap_id keymap_id, action_id_T action_id) struct listbox_item *keymap_box_item[KEYMAP_MAX]; void -init_keybinding_listboxes(struct keymap keymap_table[KEYMAP_MAX], struct action_list actions[]) +init_keybinding_listboxes(struct keymap keymap_table[KEYMAP_MAX], + const struct action_list actions[]) { struct listbox_item *root = &keybinding_browser.root; - struct action *act; + const struct action *act; enum keymap_id keymap_id; /* Do it backwards because add_listbox_item() add to front @@ -577,7 +578,8 @@ init_keybinding_listboxes(struct keymap keymap_table[KEYMAP_MAX], struct action_ assert(act->desc); #endif - item = add_listbox_item(NULL, keymap_box, BI_FOLDER, act, -1); + item = add_listbox_item(NULL, keymap_box, BI_FOLDER, + (void *) act, -1); if (!item) continue; item->expanded = 1; @@ -644,7 +646,7 @@ get_keybinding_text(struct listbox_item *item, struct terminal *term) return stracpy(keybinding_text_toggle ? keymap->str : _(keymap->desc, term)); } else if (item->depth < 2) { - struct action *action = item->udata; + const struct action *action = item->udata; return stracpy(keybinding_text_toggle ? action->str : _(action->desc, term)); @@ -686,7 +688,7 @@ get_keybinding_root(struct listbox_item *item) if (item->depth == 0) return NULL; if (item->depth == 1) { - struct action *action = item->udata; + const struct action *action = item->udata; return keymap_box_item[action->keymap_id]; } else { @@ -700,7 +702,7 @@ static enum listbox_match match_keybinding(struct listbox_item *item, struct terminal *term, unsigned char *text) { - struct action *action = item->udata; + const struct action *action = item->udata; unsigned char *desc; if (item->depth != 1) @@ -872,7 +874,7 @@ push_kbdbind_add_button(struct dialog_data *dlg_data, hop->action_id = keybinding->action_id; hop->keymap_id = keybinding->keymap_id; } else { - struct action *action = item->udata; + const struct action *action = item->udata; hop->action_id = action->num; hop->keymap_id = action->keymap_id; diff --git a/src/config/dialogs.h b/src/config/dialogs.h index e5f01ed3..60ec88f7 100644 --- a/src/config/dialogs.h +++ b/src/config/dialogs.h @@ -16,7 +16,8 @@ void options_manager(struct session *); void keybinding_manager(struct session *); struct listbox_item *get_keybinding_action_box_item(enum keymap_id keymap_id, action_id_T action_id); -void init_keybinding_listboxes(struct keymap keymap_table[], struct action_list actions[]); +void init_keybinding_listboxes(struct keymap keymap_table[], + const struct action_list actions[]); void done_keybinding_listboxes(void); #endif diff --git a/src/config/kbdbind.c b/src/config/kbdbind.c index 8c495f49..9fb00e91 100644 --- a/src/config/kbdbind.c +++ b/src/config/kbdbind.c @@ -26,7 +26,7 @@ /* Fix namespace clash on MacOS. */ #define table table_elinks -static struct action_list action_table[KEYMAP_MAX]; +static const struct action_list action_table[KEYMAP_MAX]; static struct keymap keymap_table[KEYMAP_MAX]; static LIST_OF(struct keybinding) keymaps[KEYMAP_MAX]; @@ -229,7 +229,7 @@ static struct keymap keymap_table[] = { * Config file helpers. */ -static struct action * +static const struct action * get_action_from_keystroke(enum keymap_id keymap_id, const unsigned char *keystroke_str) { @@ -243,8 +243,8 @@ unsigned char * get_action_name_from_keystroke(enum keymap_id keymap_id, const unsigned char *keystroke_str) { - struct action *action = get_action_from_keystroke(keymap_id, - keystroke_str); + const struct action *action = get_action_from_keystroke(keymap_id, + keystroke_str); return action ? action->str : NULL; } @@ -252,7 +252,7 @@ get_action_name_from_keystroke(enum keymap_id keymap_id, action_id_T get_action_from_string(enum keymap_id keymap_id, unsigned char *str) { - struct action *action; + const struct action *action; assert(keymap_id >= 0 && keymap_id < KEYMAP_MAX); @@ -263,7 +263,7 @@ get_action_from_string(enum keymap_id keymap_id, unsigned char *str) return -1; } -struct action * +const struct action * get_action(enum keymap_id keymap_id, action_id_T action_id) { assert(keymap_id >= 0 && keymap_id < KEYMAP_MAX); @@ -277,7 +277,7 @@ get_action(enum keymap_id keymap_id, action_id_T action_id) unsigned char * get_action_name(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action ? action->str : NULL; } @@ -285,7 +285,7 @@ get_action_name(enum keymap_id keymap_id, action_id_T action_id) static unsigned char * get_action_desc(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action ? (action->desc ? action->desc : action->str) : NULL; @@ -523,23 +523,23 @@ add_actions_to_string(struct string *string, action_id_T action_ids[], #undef KEYMAP_ID #define KEYMAP_ID KEYMAP_MAIN -static struct action main_action_table[MAIN_ACTIONS + 1] = { +static const struct action main_action_table[MAIN_ACTIONS + 1] = { #include "config/actions-main.inc" }; #undef KEYMAP_ID #define KEYMAP_ID KEYMAP_EDIT -static struct action edit_action_table[EDIT_ACTIONS + 1] = { +static const struct action edit_action_table[EDIT_ACTIONS + 1] = { #include "config/actions-edit.inc" }; #undef KEYMAP_ID #define KEYMAP_ID KEYMAP_MENU -static struct action menu_action_table[MENU_ACTIONS + 1] = { +static const struct action menu_action_table[MENU_ACTIONS + 1] = { #include "config/actions-menu.inc" }; -static struct action_list action_table[KEYMAP_MAX] = { +static const struct action_list action_table[KEYMAP_MAX] = { { main_action_table, sizeof_array(main_action_table) }, { edit_action_table, sizeof_array(edit_action_table) }, { menu_action_table, sizeof_array(menu_action_table) }, @@ -844,11 +844,11 @@ add_default_keybindings(void) */ struct action_alias { - unsigned char *str; + const unsigned char *str; action_id_T action_id; }; -static struct action_alias main_action_aliases[] = { +static const struct action_alias main_action_aliases[] = { { "back", ACT_MAIN_HISTORY_MOVE_BACK }, { "down", ACT_MAIN_MOVE_LINK_NEXT }, { "download", ACT_MAIN_LINK_DOWNLOAD }, @@ -869,13 +869,13 @@ static struct action_alias main_action_aliases[] = { { NULL, 0 } }; -static struct action_alias edit_action_aliases[] = { +static const struct action_alias edit_action_aliases[] = { { "edit", ACT_EDIT_OPEN_EXTERNAL }, { NULL, 0 } }; -static struct action_alias *action_aliases[KEYMAP_MAX] = { +static const struct action_alias *action_aliases[KEYMAP_MAX] = { main_action_aliases, edit_action_aliases, NULL, @@ -887,7 +887,7 @@ get_aliased_action(enum keymap_id keymap_id, unsigned char *action_str) assert(keymap_id >= 0 && keymap_id < KEYMAP_MAX); if (action_aliases[keymap_id]) { - struct action_alias *alias; + const struct action_alias *alias; for (alias = action_aliases[keymap_id]; alias->str; alias++) if (!strcmp(alias->str, action_str)) diff --git a/src/config/kbdbind.h b/src/config/kbdbind.h index c24df275..8facc190 100644 --- a/src/config/kbdbind.h +++ b/src/config/kbdbind.h @@ -30,7 +30,7 @@ struct action { }; struct action_list { - struct action *actions; + const struct action *actions; int num_actions; }; struct keymap { @@ -104,7 +104,7 @@ struct keybinding *add_keybinding(enum keymap_id keymap_id, action_id_T action_i int keybinding_exists(enum keymap_id keymap_id, struct term_event_keyboard *kbd, action_id_T *action_id); void free_keybinding(struct keybinding *); -struct action *get_action(enum keymap_id keymap_id, action_id_T action_id); +const struct action *get_action(enum keymap_id keymap_id, action_id_T action_id); unsigned char *get_action_name(enum keymap_id keymap_id, action_id_T action_id); action_id_T get_action_from_string(enum keymap_id keymap_id, unsigned char *str); unsigned char *get_action_name_from_keystroke(enum keymap_id keymap_id, @@ -113,7 +113,7 @@ unsigned char *get_action_name_from_keystroke(enum keymap_id keymap_id, static inline unsigned int action_is_anonymous_safe(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && !(action->flags & ACTION_RESTRICT_ANONYMOUS); } @@ -121,7 +121,7 @@ action_is_anonymous_safe(enum keymap_id keymap_id, action_id_T action_id) static inline unsigned int action_requires_view_state(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && (action->flags & ACTION_REQUIRE_VIEW_STATE); } @@ -129,7 +129,7 @@ action_requires_view_state(enum keymap_id keymap_id, action_id_T action_id) static inline unsigned int action_requires_location(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && (action->flags & ACTION_REQUIRE_LOCATION); } @@ -137,7 +137,7 @@ action_requires_location(enum keymap_id keymap_id, action_id_T action_id) static inline unsigned int action_prefix_is_link_number(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && (action->flags & ACTION_JUMP_TO_LINK); } @@ -145,7 +145,7 @@ action_prefix_is_link_number(enum keymap_id keymap_id, action_id_T action_id) static inline unsigned int action_requires_link(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && (action->flags & ACTION_REQUIRE_LINK); } @@ -153,7 +153,7 @@ action_requires_link(enum keymap_id keymap_id, action_id_T action_id) static inline unsigned int action_requires_form(enum keymap_id keymap_id, action_id_T action_id) { - struct action *action = get_action(keymap_id, action_id); + const struct action *action = get_action(keymap_id, action_id); return action && (action->flags & ACTION_REQUIRE_FORM); } -- 2.11.4.GIT