Use “least” types for integers in Yacc tables
commit5463291a915ce89d0d807c11859d2750ab59de9e
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 5 Oct 2019 20:06:40 +0000 (5 13:06 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 7 Oct 2019 07:08:19 +0000 (7 00:08 -0700)
tree5fdbb3a6b05f57532c23ffbdcd323a0835865705
parent6373b90fc8f9ab2bfa19a107d44cfad3404faf20
Use “least” types for integers in Yacc tables

This changes the Yacc skeleton to use “least” integer types to
keep tables smaller on some platforms, which should lessen cache
pressure.  Since Bison uses the Yacc skeleton, it follows suit.
* data/skeletons/yacc.c: Include limits.h and stdint.h if this
seems to be needed.
(yytype_uint8, yytype_int8, yytype_uint16, yytype_int16):
If available, use GCC predefined macros __INT_MAX__ etc. to select
a “least” type, as this avoids namespace hassles.  Otherwise, if
available fall back on selecting a “least” type via the C99 macros
INT_MAX, INT_LEAST8_MAX, etc.  Otherwise, fall further back on one of
the builtin C99 types signed char, short, and int.  Make sure that
any selected type promotes to int.  Ignore any macros YYTYPE_INT16,
YYTYPE_INT8, YYTYPE_UINT16, YYTYPE_UINT8 defined by the user.
(ptrdiff_t, PTRDIFF_MAX): Simplify in the light of the above.
(yytype_uint8, yytype_uint16): Do not assume that unsigned char
and unsigned short promote to int, as this isn’t true on some
platforms (e.g., TI TMS320C55x).
* src/parse-gram.y (YYTYPE_INT16, YYTYPE_INT8, YYTYPE_UINT16)
(YYTYPE_UINT8): Remove, as these are no longer effective.
NEWS
data/skeletons/yacc.c
doc/bison.texi
src/parse-gram.y