From 7031fb3bec5bbef1d14686ba0434442a4ebf5ebd Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Sun, 7 Jan 2024 11:02:06 -0500 Subject: [PATCH] libcdecl: Explicitly declare most scanner functions static. We use barely any of the exported functions generated by flex. As this is going into a library the compiler can't eliminate any of these, even if they are totally unused. Just marking all unused functions static is sufficient to reduce the size of the scanner by about 20% without any significant change to the code. --- src/scan.l | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/scan.l b/src/scan.l index bd1c5c5..73efdde 100644 --- a/src/scan.l +++ b/src/scan.l @@ -18,12 +18,54 @@ */ #include +#include #include "parse.h" /* Disable various generated code we don't use */ #define YY_INPUT(a, b, c) do {} while (0) #define YY_NO_INPUT 1 #define YY_NO_UNPUT 1 + +/* + * The flex-generated scanner defines a huge pile of external functions of + * which we use almost none elsewhere. Explicitly declare any unneeded + * functions static, which allows better optimization (especially wrt. + * dead code elimination). + */ +static struct yy_buffer_state *cdecl__yy_create_buffer(FILE *, int, void *); +static struct yy_buffer_state *cdecl__yy_scan_bytes(const char *, int, void *); +static struct yy_buffer_state *cdecl__yy_scan_buffer(char *, size_t, void *); +static void cdecl__yy_switch_to_buffer(struct yy_buffer_state *, void *); +static void cdecl__yy_flush_buffer(struct yy_buffer_state *, void *); +static void yypush_buffer_state(struct yy_buffer_state *, void *); +static void cdecl__yypop_buffer_state(void *); +static void cdecl__yyrestart(FILE *, void *); +static int cdecl__yylex_init(void **); + +static int cdecl__yyget_extra(void *); +static YYLTYPE *cdecl__yyget_lloc(void *); +static YYSTYPE *cdecl__yyget_lval(void *); +static char *cdecl__yyget_text(void *); +static FILE *cdecl__yyget_out(void *); +static FILE *cdecl__yyget_in(void *); +static int cdecl__yyget_debug(void *); +static int cdecl__yyget_lineno(void *); +static int cdecl__yyget_column(void *); +static int cdecl__yyget_leng(void *); + +static void cdecl__yyset_extra(int, void *); +static void cdecl__yyset_lloc(YYLTYPE *, void *); +static void cdecl__yyset_lval(YYSTYPE *, void *); +static void cdecl__yyset_in(FILE *, void *); +static void cdecl__yyset_out(FILE *, void *); +static void cdecl__yyset_debug(int, void *); +static void cdecl__yyset_lineno(int, void *); +static void cdecl__yyset_column(int, void *); +static void cdecl__yyset_leng(int, void *); + +static void *cdecl__yyrealloc(void *, size_t, void *); +static void *cdecl__yyalloc(size_t, void *); +static void cdecl__yyfree(void *, void *); } %option nodefault noyywrap bison-locations reentrant never-interactive -- 2.43.2