[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/5] c: improve the definition of public types
From: |
Akim Demaille |
Subject: |
[PATCH 1/5] c: improve the definition of public types |
Date: |
Wed, 26 Dec 2012 10:40:14 +0100 |
* 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.
---
data/c.m4 | 48 ++++++++++++++++++++++++++++++++----------------
doc/bison.texi | 2 +-
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/data/c.m4 b/data/c.m4
index b6f77d8..89ad4fd 100644
--- a/data/c.m4
+++ b/data/c.m4
@@ -270,11 +270,9 @@ m4_define([b4_token_enum],
# --------------
# Output the definition of the tokens (if there are) as enums.
m4_define([b4_token_enums],
-[b4_any_token_visible_if([[/* Tokens. */
+[b4_any_token_visible_if([[/* Token type. */
#ifndef ]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
{
]m4_join([,
@@ -503,44 +501,62 @@ b4_locations_if([, yylocationp])[]b4_user_args[);
## Declarations. ##
## -------------- ##
-# 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],
-[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined
]b4_api_PREFIX[STYPE_IS_DECLARED
+# b4_value_type_define
+# --------------------
+m4_define([b4_value_type_define],
+[[/* Value type. */
+#if ! defined ]b4_api_PREFIX[STYPE && ! defined
]b4_api_PREFIX[STYPE_IS_DECLARED
]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_api_PREFIX[STYPE;
+};
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1]],
[m4_if(b4_tag_seen_flag, 0,
[[typedef int ]b4_api_PREFIX[STYPE;
# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 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
-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_column;
int last_line;
int last_column;
-} ]b4_api_PREFIX[LTYPE;
+};
# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 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_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl
])
+
# b4_YYDEBUG_define
# ------------------
m4_define([b4_YYDEBUG_define],
-[[/* Enabling traces. */
+[[/* Debug traces. */
]m4_if(b4_api_prefix, [yy],
[[#ifndef YYDEBUG
# define YYDEBUG ]b4_parse_trace_if([1], [0])[
diff --git a/doc/bison.texi b/doc/bison.texi
index f028ebf..f738f51 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -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:
@example
-/* Enabling traces. */
+/* Debug traces. */
#ifndef CDEBUG
# if defined YYDEBUG
# if YYDEBUG
--
1.8.0.2