config: avoid tll() code expansion when generating default bindings

tll_push_back() is a macro that results in quite a lot of
instructions. Expanding this macro explicitly in many places thus
causes code explosion.

This is what happened in when we generate the default key/mouse
bindings.

Fix by calling tll_push_back() in a no-inline function.

Reduces code size with ~4-5K
This commit is contained in:
Daniel Eklöf 2021-05-07 17:18:46 +02:00
parent 449ac7c361
commit ba2c3606bf
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 34 additions and 29 deletions

View file

@ -2132,15 +2132,20 @@ get_server_socket_path(void)
return xasprintf("%s/foot-%s.sock", xdg_runtime, wayland_display); return xasprintf("%s/foot-%s.sock", xdg_runtime, wayland_display);
} }
static void NOINLINE
add_key_binding(config_key_binding_list_t *list, int action,
const struct config_key_modifiers *mods, xkb_keysym_t sym)
{
tll_push_back(
*list,
((struct config_key_binding){action, *mods, sym}));
}
static void static void
add_default_key_bindings(struct config *conf) add_default_key_bindings(struct config *conf)
{ {
#define add_binding(action, mods, sym) \ #define add_binding(action, mods, sym) \
do { \ add_key_binding(&conf->bindings.key, action, &mods, sym)
tll_push_back( \
conf->bindings.key, \
((struct config_key_binding){action, mods, sym})); \
} while (0)
const struct config_key_modifiers shift = {.shift = true}; const struct config_key_modifiers shift = {.shift = true};
const struct config_key_modifiers ctrl = {.ctrl = true}; const struct config_key_modifiers ctrl = {.ctrl = true};
@ -2165,15 +2170,12 @@ add_default_key_bindings(struct config *conf)
#undef add_binding #undef add_binding
} }
static void static void
add_default_search_bindings(struct config *conf) add_default_search_bindings(struct config *conf)
{ {
#define add_binding(action, mods, sym) \ #define add_binding(action, mods, sym) \
do { \ add_key_binding(&conf->bindings.search, action, &mods, sym)
tll_push_back( \
conf->bindings.search, \
((struct config_key_binding){action, mods, sym})); \
} while (0)
const struct config_key_modifiers none = {0}; const struct config_key_modifiers none = {0};
const struct config_key_modifiers alt = {.alt = true}; const struct config_key_modifiers alt = {.alt = true};
@ -2217,11 +2219,7 @@ static void
add_default_url_bindings(struct config *conf) add_default_url_bindings(struct config *conf)
{ {
#define add_binding(action, mods, sym) \ #define add_binding(action, mods, sym) \
do { \ add_key_binding(&conf->bindings.url, action, &mods, sym)
tll_push_back( \
conf->bindings.url, \
((struct config_key_binding){action, mods, sym})); \
} while (0)
const struct config_key_modifiers none = {0}; const struct config_key_modifiers none = {0};
const struct config_key_modifiers ctrl = {.ctrl = true}; const struct config_key_modifiers ctrl = {.ctrl = true};
@ -2234,15 +2232,21 @@ add_default_url_bindings(struct config *conf)
#undef add_binding #undef add_binding
} }
static void NOINLINE
add_mouse_binding(config_mouse_binding_list_t *list, int action,
const struct config_key_modifiers *mods,
int button, int count)
{
tll_push_back(
*list,
((struct config_mouse_binding){action, *mods, button, count, {0}}));
}
static void static void
add_default_mouse_bindings(struct config *conf) add_default_mouse_bindings(struct config *conf)
{ {
#define add_binding(action, mods, btn, count) \ #define add_binding(action, mods, btn, count) \
do { \ add_mouse_binding(&conf->bindings.mouse, action, &mods, btn, count)
tll_push_back( \
conf->bindings.mouse, \
((struct config_mouse_binding){action, mods, btn, count, {0}})); \
} while (0)
const struct config_key_modifiers none = {0}; const struct config_key_modifiers none = {0};
const struct config_key_modifiers ctrl = {.ctrl = true}; const struct config_key_modifiers ctrl = {.ctrl = true};

View file

@ -52,6 +52,7 @@ struct config_mouse_binding {
int count; int count;
struct config_binding_pipe pipe; struct config_binding_pipe pipe;
}; };
typedef tll(struct config_mouse_binding) config_mouse_binding_list_t;
struct config_spawn_template { struct config_spawn_template {
char *raw_cmd; char *raw_cmd;
@ -166,7 +167,7 @@ struct config {
struct { struct {
/* Bindings for "normal" mode */ /* Bindings for "normal" mode */
config_key_binding_list_t key; config_key_binding_list_t key;
tll(struct config_mouse_binding) mouse; config_mouse_binding_list_t mouse;
/* /*
* Special modes * Special modes