1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-28 01:35:32 +00:00

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.
This commit is contained in:
Kalle Olavi Niemitalo 2009-07-19 20:16:42 +03:00 committed by Kalle Olavi Niemitalo
parent 89c7e57890
commit 23fd2d58f4
4 changed files with 36 additions and 33 deletions

View File

@ -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;

View File

@ -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

View File

@ -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))

View File

@ -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);
}