mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
c: improve the definition of public types
* data/c.m4 (b4_token_enum): Improve comments. (b4_value_type_define, b4_location_type_define): New, extracted from... (b4_declare_yylstype): here. Separate the typedefs from the union/struct definitions.
This commit is contained in:
48
data/c.m4
48
data/c.m4
@@ -270,11 +270,9 @@ m4_define([b4_token_enum],
|
|||||||
# --------------
|
# --------------
|
||||||
# Output the definition of the tokens (if there are) as enums.
|
# Output the definition of the tokens (if there are) as enums.
|
||||||
m4_define([b4_token_enums],
|
m4_define([b4_token_enums],
|
||||||
[b4_any_token_visible_if([[/* Tokens. */
|
[b4_any_token_visible_if([[/* Token type. */
|
||||||
#ifndef ]b4_api_PREFIX[TOKENTYPE
|
#ifndef ]b4_api_PREFIX[TOKENTYPE
|
||||||
# define ]b4_api_PREFIX[TOKENTYPE
|
# define ]b4_api_PREFIX[TOKENTYPE
|
||||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
|
||||||
know about them. */
|
|
||||||
enum ]b4_api_prefix[tokentype
|
enum ]b4_api_prefix[tokentype
|
||||||
{
|
{
|
||||||
]m4_join([,
|
]m4_join([,
|
||||||
@@ -503,44 +501,62 @@ b4_locations_if([, yylocationp])[]b4_user_args[);
|
|||||||
## Declarations. ##
|
## Declarations. ##
|
||||||
## -------------- ##
|
## -------------- ##
|
||||||
|
|
||||||
# b4_declare_yylstype
|
# b4_value_type_define
|
||||||
# -------------------
|
# --------------------
|
||||||
# Declarations that might either go into the header (if --defines) or
|
m4_define([b4_value_type_define],
|
||||||
# in the parser body. Declare YYSTYPE/YYLTYPE, and yylval/yylloc.
|
[[/* Value type. */
|
||||||
m4_define([b4_declare_yylstype],
|
#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED
|
||||||
[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED
|
|
||||||
]m4_ifdef([b4_stype],
|
]m4_ifdef([b4_stype],
|
||||||
[[typedef union ]b4_union_name[
|
[[typedef union ]b4_union_name[ ]b4_api_PREFIX[STYPE;
|
||||||
|
union ]b4_union_name[
|
||||||
{
|
{
|
||||||
]b4_user_stype[
|
]b4_user_stype[
|
||||||
} ]b4_api_PREFIX[STYPE;
|
};
|
||||||
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]],
|
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]],
|
||||||
[m4_if(b4_tag_seen_flag, 0,
|
[m4_if(b4_tag_seen_flag, 0,
|
||||||
[[typedef int ]b4_api_PREFIX[STYPE;
|
[[typedef int ]b4_api_PREFIX[STYPE;
|
||||||
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]])])[
|
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]])])[
|
||||||
# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1
|
# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1
|
||||||
#endif]b4_locations_if([[
|
#endif
|
||||||
|
]])
|
||||||
|
|
||||||
|
|
||||||
|
# b4_location_type_define
|
||||||
|
# -----------------------
|
||||||
|
m4_define([b4_location_type_define],
|
||||||
|
[[/* Location type. */
|
||||||
#if ! defined ]b4_api_PREFIX[LTYPE && ! defined ]b4_api_PREFIX[LTYPE_IS_DECLARED
|
#if ! defined ]b4_api_PREFIX[LTYPE && ! defined ]b4_api_PREFIX[LTYPE_IS_DECLARED
|
||||||
typedef struct ]b4_api_PREFIX[LTYPE
|
typedef struct ]b4_api_PREFIX[LTYPE ]b4_api_PREFIX[LTYPE;
|
||||||
|
struct ]b4_api_PREFIX[LTYPE
|
||||||
{
|
{
|
||||||
int first_line;
|
int first_line;
|
||||||
int first_column;
|
int first_column;
|
||||||
int last_line;
|
int last_line;
|
||||||
int last_column;
|
int last_column;
|
||||||
} ]b4_api_PREFIX[LTYPE;
|
};
|
||||||
# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1
|
# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1
|
||||||
# define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1
|
# define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1
|
||||||
#endif]])
|
#endif
|
||||||
|
]])
|
||||||
|
|
||||||
|
|
||||||
|
# b4_declare_yylstype
|
||||||
|
# -------------------
|
||||||
|
# Declarations that might either go into the header (if --defines) or
|
||||||
|
# in the parser body. Declare YYSTYPE/YYLTYPE, and yylval/yylloc.
|
||||||
|
m4_define([b4_declare_yylstype],
|
||||||
|
[b4_value_type_define[]b4_locations_if([
|
||||||
|
b4_location_type_define])
|
||||||
|
|
||||||
b4_pure_if([], [[extern ]b4_api_PREFIX[STYPE ]b4_prefix[lval;
|
b4_pure_if([], [[extern ]b4_api_PREFIX[STYPE ]b4_prefix[lval;
|
||||||
]b4_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl
|
]b4_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
# b4_YYDEBUG_define
|
# b4_YYDEBUG_define
|
||||||
# ------------------
|
# ------------------
|
||||||
m4_define([b4_YYDEBUG_define],
|
m4_define([b4_YYDEBUG_define],
|
||||||
[[/* Enabling traces. */
|
[[/* Debug traces. */
|
||||||
]m4_if(b4_api_prefix, [yy],
|
]m4_if(b4_api_prefix, [yy],
|
||||||
[[#ifndef YYDEBUG
|
[[#ifndef YYDEBUG
|
||||||
# define YYDEBUG ]b4_parse_trace_if([1], [0])[
|
# define YYDEBUG ]b4_parse_trace_if([1], [0])[
|
||||||
|
|||||||
@@ -6092,7 +6092,7 @@ parsers. To comply with this tradition, when @code{api.prefix} is used,
|
|||||||
@code{YYDEBUG} (not renamed) is used as a default value:
|
@code{YYDEBUG} (not renamed) is used as a default value:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
/* Enabling traces. */
|
/* Debug traces. */
|
||||||
#ifndef CDEBUG
|
#ifndef CDEBUG
|
||||||
# if defined YYDEBUG
|
# if defined YYDEBUG
|
||||||
# if YYDEBUG
|
# if YYDEBUG
|
||||||
|
|||||||
Reference in New Issue
Block a user