X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/8e1687aef68e5955ecd3140149d5f97337c222f1..231ed89af1eaff303a22f72aeb1c2c0cf5e25c21:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index ffb04c20..71bcb28d 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -18,48 +18,15 @@ m4_divert(-1) -*- Autoconf -*- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA - ## ---------------- ## ## Identification. ## ## ---------------- ## -# b4_copyright(TITLE, YEARS) -# -------------------------- -m4_define([b4_copyright], -[/* A Bison parser, made by GNU Bison b4_version. */ - -/* $1 - -m4_text_wrap([Copyright (C) $2 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 - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */]) - +# b4_comment(TEXT) +# ---------------- +m4_define([b4_comment], [/* m4_bpatsubst([$1], [ +], [ + ]) */]) # b4_identification # ----------------- @@ -76,6 +43,9 @@ m4_define([b4_identification], /* Pure parsers. */ [#]define YYPURE b4_pure_flag +/* Push parsers. */ +[#]define YYPUSH b4_push_flag + /* Using locations. */ [#]define YYLSP_NEEDED b4_locations_flag ]) @@ -85,15 +55,11 @@ m4_define([b4_identification], ## Default values. ## ## ---------------- ## -m4_define_default([b4_epilogue], []) - # If the %union is not named, its name is YYSTYPE. m4_define_default([b4_union_name], [YYSTYPE]) -# The initial column and line. -m4_define_default([b4_location_initial_column], [1]) -m4_define_default([b4_location_initial_line], [1]) - +# If the %name-prefix is not given, it is yy. +m4_define_default([b4_prefix], [yy]) ## ------------------------ ## ## Pure/impure interfaces. ## @@ -109,7 +75,6 @@ m4_define([b4_user_args], # -------------- # If defined, b4_parse_param arrives double quoted, but below we prefer # it to be single quoted. -m4_define_default([b4_parse_param]) m4_define([b4_parse_param], b4_parse_param)) @@ -140,13 +105,6 @@ m4_define([b4_parse_param_use], ## Data Types. ## ## ------------ ## -# b4_ints_in(INT1, INT2, LOW, HIGH) -# --------------------------------- -# Return 1 iff both INT1 and INT2 are in [LOW, HIGH], 0 otherwise. -m4_define([b4_ints_in], -[m4_eval([$3 <= $1 && $1 <= $4 && $3 <= $2 && $2 <= $4])]) - - # b4_int_type(MIN, MAX) # --------------------- # Return the smallest int type able to handle numbers ranging from @@ -170,7 +128,6 @@ m4_define([b4_int_type], m4_define([b4_int_type_for], [b4_int_type($1_min, $1_max)]) - ## ---------## ## Values. ## ## ---------## @@ -182,50 +139,6 @@ m4_define([b4_int_type_for], m4_define([b4_null], [0]) -## ------------------ ## -## Decoding options. ## -## ------------------ ## - -# b4_flag_if(FLAG, IF-TRUE, IF-FALSE) -# ----------------------------------- -# Run IF-TRUE if b4_FLAG_flag is 1, IF-FALSE if FLAG is 0, otherwise fail. -m4_define([b4_flag_if], -[m4_case(b4_$1_flag, - [0], [$3], - [1], [$2], - [m4_fatal([invalid $1 value: ]$1)])]) - - -# b4_define_flag_if(FLAG) -# ----------------------- -# Define "b4_FLAG_if(IF-TRUE, IF-FALSE)" that depends on the -# value of the Boolean FLAG. -m4_define([b4_define_flag_if], -[_b4_define_flag_if($[1], $[2], [$1])]) - -# _b4_define_flag_if($1, $2, FLAG) -# -------------------------------- -# This macro works around the impossibility to define macros -# inside macros, because issuing `[$1]' is not possible in M4 :(. -# This sucks hard, GNU M4 should really provide M5 like $$1. -m4_define([_b4_define_flag_if], -[m4_if([$1$2], $[1]$[2], [], - [m4_fatal([$0: Invalid arguments: $@])])dnl -m4_define([b4_$3_if], - [b4_flag_if([$3], [$1], [$2])])]) - - -# b4_FLAG_if(IF-TRUE, IF-FALSE) -# ----------------------------- -# Expand IF-TRUE, if FLAG is true, IF-FALSE otherwise. -b4_define_flag_if([defines]) # Whether headers are requested. -b4_define_flag_if([error_verbose]) # Whether error are verbose. -b4_define_flag_if([locations]) # Whether locations are tracked. -b4_define_flag_if([pure]) # Whether the interface is pure. -b4_define_flag_if([yacc]) # Whether POSIX Yacc is emulated. - - - ## ------------------------- ## ## Assigning token numbers. ## ## ------------------------- ## @@ -417,50 +330,9 @@ m4_define([b4_c_arg], ## Synclines. ## ## ----------- ## -# b4_basename(NAME) -# ----------------- -# Similar to POSIX basename; the differences don't matter here. -# Beware that NAME is not evaluated. -m4_define([b4_basename], -[m4_bpatsubst([$1], [^.*/\([^/]+\)/*$], [\1])]) - - -# b4_syncline(LINE, FILE) -# ----------------------- -m4_define([b4_syncline], -[b4_flag_if([synclines], -[/* Line __line__ of b4_basename(m4_quote(__file__)). */ -[#]line $1 $2])]) - - -# b4_user_code(USER-CODE) +# b4_sync_start(LINE, FILE) # ----------------------- -# Emit code from the user, ending it with synclines. -m4_define([b4_user_code], -[$1 -b4_syncline([@oline@], [@ofile@])]) - - -# b4_define_user_code(MACRO) -# -------------------------- -# From b4_MACRO, build b4_user_MACRO that includes the synclines. -m4_define([b4_define_user_code], -[m4_define([b4_user_$1], -[b4_user_code([b4_$1])])]) - - -# b4_user_actions -# b4_user_initial_action -# b4_user_post_prologue -# b4_user_start_header -# b4_user_stype -# ---------------------- -# Macros that issue user code, ending with synclines. -b4_define_user_code([actions]) -b4_define_user_code([initial_action]) -b4_define_user_code([post_prologue]) -b4_define_user_code([start_header]) -b4_define_user_code([stype]) +m4_define([b4_sync_start], [[#]line $1 $2]) ## -------------- ##