-*- Autoconf -*-
# C M4 Macros for Bison.
-# Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 Free Software
-# Foundation, Inc.
+
+# Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+# Software Foundation, Inc.
# 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
## Identification. ##
## ---------------- ##
-# b4_comment(TEXT)
-# ----------------
+# b4_comment_(TEXT, OPEN, CONTINUE, END)
+# -------------------------------------
# Put TEXT in comment. Avoid trailing spaces: don't indent empty lines.
# Avoid adding indentation to the first line, as the indentation comes
-# from "/*". That's why we don't patsubst([$1], [^\(.\)], [ \1]).
-m4_define([b4_comment], [/* m4_bpatsubst([$1], [
+# from OPEN. That's why we don't patsubst([$1], [^\(.\)], [ \1]).
+#
+# Prefix all the output lines with PREFIX.
+m4_define([b4_comment_], [$2[]m4_bpatsubst([$1], [
\(.\)], [
- \1]) */])
+$3\1])$4])
+
+
+# b4_c_comment(TEXT, [PREFIX])
+# ----------------------------
+# Put TEXT in comment. Avoid trailing spaces: don't indent empty lines.
+# Avoid adding indentation to the first line, as the indentation comes
+# from "/*". That's why we don't patsubst([$1], [^\(.\)], [ \1]).
+#
+# Prefix all the output lines with PREFIX.
+m4_define([b4_c_comment],
+[b4_comment_([$1], [$2/* ], [$2 ], [$2 */])])
+
+
+# b4_comment(TEXT, [PREFIX])
+# --------------------------
+# By default, C comments.
+m4_define([b4_comment], [b4_c_comment($@)])
+
# b4_identification
# -----------------
# Depends on individual skeletons to define b4_pure_flag, b4_push_flag, or
# b4_pull_flag if they use the values of the %define variables api.pure or
-# api.push_pull.
+# api.push-pull.
m4_define([b4_identification],
[[/* Identify Bison output. */
#define YYBISON 1
#define YYPULL ]b4_pull_flag])[
/* Using locations. */
-#define YYLSP_NEEDED ]b4_locations_flag[
+#define YYLSP_NEEDED ]b4_locations_if([1], [0])[
]])
[b4_int_type($1_min, $1_max)])
+# b4_table_value_equals(TABLE, VALUE, LITERAL)
+# --------------------------------------------
+# Without inducing a comparison warning from the compiler, check if the
+# literal value LITERAL equals VALUE from table TABLE, which must have
+# TABLE_min and TABLE_max defined. YYID must be defined as an identity
+# function that suppresses warnings about constant conditions.
+m4_define([b4_table_value_equals],
+[m4_if(m4_eval($3 < m4_indir([b4_]$1[_min])
+ || m4_indir([b4_]$1[_max]) < $3), [1],
+ [[YYID (0)]],
+ [[((]$2[) == (]$3[))]])])
## ---------##
## Values. ##
m4_define([b4_null], [0])
+# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
+# -------------------------------------------------------------
+# Define "yy<TABLE-NAME>" which contents is CONTENT.
+m4_define([b4_integral_parser_table_define],
+[m4_ifval([$3], [b4_c_comment([$3], [ ])
+])dnl
+static const b4_int_type_for([$2]) yy$1[[]] =
+{
+ $2
+};dnl
+])
## ------------------------- ##
# -----------------------------------------
# Output the definition of this token as #define.
m4_define([b4_token_define],
-[#define b4_percent_define_get([token.prefix])$1 $2
+[#define b4_percent_define_get([api.tokens.prefix])$1 $2
])
# ---------------------------------------
# Output the definition of this token as an enum.
m4_define([b4_token_enum],
-[b4_percent_define_get([token.prefix])$1 = $2])
+[b4_percent_define_get([api.tokens.prefix])$1 = $2])
# b4_token_enums(LIST-OF-PAIRS-TOKEN-NAME-TOKEN-NUMBER)
# -----------------------------------------------------------
# Declare the function NAME.
m4_define([b4_c_function_decl],
-[#if defined __STDC__ || defined __cplusplus
+[#if b4_c_modern
b4_c_ansi_function_decl($@)
#else
$2 $1 ();
b4_syncline([@oline@], [@ofile@])
break;])
-# b4_symbol_actions(FILENAME, LINENO,
-# SYMBOL-TAG, SYMBOL-NUM,
-# SYMBOL-ACTION, SYMBOL-TYPENAME)
-# -------------------------------------------------
-m4_define([b4_symbol_actions],
-[m4_pushdef([b4_dollar_dollar],
- [b4_symbol_value([(*yyvaluep)], [$6])])dnl
-m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl
- case $4: /* $3 */
-b4_syncline([$2], [$1])
- $5;
-b4_syncline([@oline@], [@ofile@])
- break;
-m4_popdef([b4_at_dollar])dnl
-m4_popdef([b4_dollar_dollar])dnl
-])
-
# b4_yydestruct_generate(FUNCTION-DECLARATOR)
# -------------------------------------------
switch (yytype)
{
-]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
- default:
+]b4_symbol_foreach([b4_symbol_destructor])dnl
+[ default:
break;
}
}]dnl
# endif
switch (yytype)
{
-]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
+]b4_symbol_foreach([b4_symbol_printer])dnl
[ default:
break;
}