X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/1ef30936f5fdb253b397347b91521455d0c39172..a118e977106144aa753045c59e9f5278facc48d7:/src/cdecl-internal.h diff --git a/src/cdecl-internal.h b/src/cdecl-internal.h index cae248b..b586dd4 100644 --- a/src/cdecl-internal.h +++ b/src/cdecl-internal.h @@ -1,6 +1,6 @@ /* * Internal declarations for libcdecl. - * Copyright © 2021, 2023 Nick Bowler + * Copyright © 2021, 2023-2024 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +22,8 @@ #include #include "cdecl.h" +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + #define _(s) dgettext(PACKAGE, s) #define N_(s) s @@ -68,7 +70,7 @@ static inline void cdecl__init_i18n(void) } #endif -void cdecl__err(unsigned code, const char *fmt, const char *arg); +void cdecl__err(const char *fmt, const char *arg); void cdecl__errmsg(unsigned msg); struct cdecl_declspec *cdecl__normalize_specs(struct cdecl_declspec *specs); @@ -81,6 +83,7 @@ struct output_state { size_t cdecl__advance(struct output_state *dst, size_t amount); size_t cdecl__emit(struct output_state *dst, const char *src); +size_t cdecl__emit_uint(struct output_state *dst, uintmax_t val); size_t cdecl__strlcpy(char *dst, const char *src, size_t len); const char *cdecl__emit_specs(struct output_state *dst, @@ -106,6 +109,7 @@ struct parse_item { union { struct cdecl_declarator declarator; struct cdecl_declspec declspec; + struct cdecl decl; } u; char s[FLEXIBLE_ARRAY_MEMBER]; @@ -113,4 +117,21 @@ struct parse_item { struct parse_item *cdecl__alloc_item(size_t s_sz); +/* + * GCC enables -finline-small-functions in most optimization modes; this works + * on a highlevel estimate of how big a function actually is and occasionally + * this produces really bad results. + * + * While old versions of GCC do not support this attribute the result seems + * to be merely a warning so hopefully we can get away with this check and + * save a configure test. + */ +#ifndef CDECL__NOINLINE +# if __GNUC__ +# define CDECL__NOINLINE __attribute__((__noinline__)) +# else +# define CDECL__NOINLINE /**/ +# endif +#endif + #endif