The tarball didn't work for me, it may have been generated from a different commit as the patch wasn't included.
I've tried to bootstrap from git, but that gave me an error message. Autoconf submodule registration fails for some reason. At this point i gave up. Can you generate a tarball that includes the patch? Thank you Bazsi On Mon, Apr 22, 2019, 20:30 Scheidler, Balázs < balazs.scheid...@oneidentity.com wrote: > Thanks. I will give it a spin in this branch: > > https://github.com/balabit/syslog-ng/pull/2526 > > On Mon, Apr 22, 2019, 19:41 Akim Demaille <a...@lrde.epita.fr wrote: > >> Hi Balázs, >> >> > Le 19 avr. 2019 à 06:33, Akim Demaille <a...@lrde.epita.fr> a écrit : >> > >> > >> >> Le 18 avr. 2019 à 21:06, Scheidler, Balázs < >> balazs.scheid...@oneidentity.com> a écrit : >> > >> >> Is this something that is worth considering? >> > >> > Yes, you are right, it would be a nice addition to the C API. I'll >> > prepare something for 3.4. >> >> What do you think about the following patch? Could you please give it a >> try? It's also available there: >> >> https://www.lrde.epita.fr/~akim/private/bison/bison-3.3.4-acfb2.tar.gz >> >> Cheers! >> >> commit d22eac7d211c23ae37e8e936905b6a1203d5442f >> Author: Akim Demaille <akim.demai...@gmail.com> >> Date: Mon Apr 22 19:24:11 2019 +0200 >> >> api.location.type: support it in C >> >> Reported by Balázs Scheidler. >> >> * data/skeletons/c.m4 (b4_location_type_define): Use api.location.type >> if defined. >> * doc/bison.texi: Document it. >> * tests/local.at (AT_C_IF, AT_LANG_CASE): New. >> Support Span in C. >> * tests/calc.at (Span): Convert it to be usable in C and C++. >> Check api.location.type with yacc.c and glr.c. >> >> diff --git a/NEWS b/NEWS >> index 8a423fdf..23e3b6f6 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -61,6 +61,15 @@ GNU Bison NEWS >> >> %define api.header.include {<parser/parse.h>} >> >> +*** api.location.type is now supported in C (yacc.c, glr.c) >> + >> + The %define variable api.location.type defines the name of the type to >> use >> + for locations. When defined, Bison no longer defines YYLTYPE. >> + >> + This can be used in programs with several parsers to factor their >> + definition of locations: let one of them generate them, and the others >> + just use them. >> + >> ** Documentation >> >> A new example in C shows an simple infix calculator with a hand-written >> diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4 >> index 4db36aff..ff769410 100644 >> --- a/data/skeletons/bison.m4 >> +++ b/data/skeletons/bison.m4 >> @@ -1078,10 +1078,10 @@ m4_define_default([b4_location_initial_line], >> [1]) >> ## Sanity checks. ## >> ## --------------- ## >> >> -# api.location.prefix={...} (Java and C++). >> +# api.location.type={...} (C, C++ and Java). >> b4_percent_define_check_kind([api.location.type], [code], [deprecated]) >> >> -# api.position.prefix={...} (Java). >> +# api.position.type={...} (Java). >> b4_percent_define_check_kind([api.position.type], [code], [deprecated]) >> >> # api.prefix >< %name-prefix. >> diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 >> index d485cb69..5987232d 100644 >> --- a/data/skeletons/c.m4 >> +++ b/data/skeletons/c.m4 >> @@ -730,7 +730,10 @@ typedef ]b4_percent_define_get([[api.value.type]])[ >> ]b4_api_PREFIX[STYPE; >> # ----------------------- >> m4_define([b4_location_type_define], >> [[/* Location type. */ >> -#if ! defined ]b4_api_PREFIX[LTYPE && ! defined >> ]b4_api_PREFIX[LTYPE_IS_DECLARED >> +]b4_percent_define_ifdef([[api.location.type]], >> +[[typedef ]b4_percent_define_get([[api.location.type]])[ >> ]b4_api_PREFIX[LTYPE; >> +]], >> +[[#if ! defined ]b4_api_PREFIX[LTYPE && ! defined >> ]b4_api_PREFIX[LTYPE_IS_DECLARED >> typedef struct ]b4_api_PREFIX[LTYPE ]b4_api_PREFIX[LTYPE; >> struct ]b4_api_PREFIX[LTYPE >> { >> @@ -742,7 +745,7 @@ struct ]b4_api_PREFIX[LTYPE >> # define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1 >> # define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1 >> #endif >> -]]) >> +]])]) >> >> >> # b4_declare_yylstype >> diff --git a/doc/bison.texi b/doc/bison.texi >> index 41e75d28..59da4084 100644 >> --- a/doc/bison.texi >> +++ b/doc/bison.texi >> @@ -5975,7 +5975,7 @@ Introduced in Bison 3.2. >> @deffn {Directive} {%define api.location.type} @{@var{type}@} >> >> @itemize @bullet >> -@item Language(s): C++, Java >> +@item Language(s): C, C++, Java >> >> @item Purpose: Define the location type. >> @xref{User Defined Location Type}. >> @@ -5985,8 +5985,7 @@ Introduced in Bison 3.2. >> @item Default Value: none >> >> @item History: >> -Introduced in Bison 2.7 for C, C++ and Java. Introduced under the name >> -@code{location_type} for C++ in Bison 2.5 and for Java in Bison 2.4. >> +Introduced in Bison 2.7 for C++ and Java, in Bison 3.4 for C. >> @end itemize >> @end deffn >> >> diff --git a/tests/calc.at b/tests/calc.at >> index 87761c73..38f85dcd 100644 >> --- a/tests/calc.at >> +++ b/tests/calc.at >> @@ -289,18 +289,17 @@ AT_DATA_GRAMMAR([calc.y], >> %code requires >> { >> ]AT_LOCATION_TYPE_SPAN_IF([[ >> -# include <iostream> >> - struct Point >> + typedef struct >> { >> int l; >> int c; >> - }; >> + } Point; >> >> - struct Span >> + typedef struct >> { >> Point first; >> Point last; >> - }; >> + } Span; >> >> # define YYLLOC_DEFAULT(Current, Rhs, N) \ >> do \ >> @@ -313,7 +312,13 @@ AT_DATA_GRAMMAR([calc.y], >> { \ >> (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last; \ >> } \ >> - while (false) >> + while (0) >> + >> +]AT_C_IF( >> +[[#include <stdio.h> >> +void location_print (FILE *o, Span s); >> +#define LOCATION_PRINT location_print >> +]])[ >> >> ]])[ >> /* Exercise pre-prologue dependency to %union. */ >> @@ -416,7 +421,8 @@ power (int base, int exponent) >> return res; >> } >> >> -]AT_LOCATION_TYPE_SPAN_IF([[ >> +]AT_LOCATION_TYPE_SPAN_IF([AT_CXX_IF([[ >> +#include <iostream> >> namespace >> { >> std::ostream& >> @@ -430,7 +436,17 @@ namespace >> return o; >> } >> } >> -]])[ >> +]], [[ >> +void >> +location_print (FILE *o, Span s) >> +{ >> + fprintf (o, "%d.%d", s.first.l, s.first.c); >> + if (s.first.l != s.last.l) >> + fprintf (o, "-%d.%d", s.last.l, s.last.c - 1); >> + else if (s.first.c != s.last.c - 1) >> + fprintf (o, "-%d", s.last.c - 1); >> +} >> +]])])[ >> ]AT_YYERROR_DEFINE[ >> ]AT_DEFINES_IF([], >> [AT_CALC_LEX >> @@ -684,6 +700,7 @@ AT_CHECK_CALC_LALR() >> >> AT_CHECK_CALC_LALR([%defines]) >> AT_CHECK_CALC_LALR([%locations]) >> +AT_CHECK_CALC_LALR([%locations %define api.location.type {Span}]) >> >> AT_CHECK_CALC_LALR([%name-prefix "calc"]) >> AT_CHECK_CALC_LALR([%verbose]) >> @@ -726,6 +743,7 @@ AT_CHECK_CALC_GLR() >> >> AT_CHECK_CALC_GLR([%defines]) >> AT_CHECK_CALC_GLR([%locations]) >> +AT_CHECK_CALC_GLR([%locations %define api.location.type {Span}]) >> AT_CHECK_CALC_GLR([%name-prefix "calc"]) >> AT_CHECK_CALC_GLR([%define api.prefix {calc}]) >> AT_CHECK_CALC_GLR([%verbose]) >> diff --git a/tests/headers.at b/tests/headers.at >> index 96ac83e7..8b19d3fe 100644 >> --- a/tests/headers.at >> +++ b/tests/headers.at >> @@ -65,7 +65,6 @@ AT_TEST_CPP_GUARD_H([9foo], [%glr-parser]) >> ## export YYLTYPE. ## >> ## ---------------- ## >> >> - >> AT_SETUP([export YYLTYPE]) >> >> AT_BISON_OPTION_PUSHDEFS([%name-prefix "my_"]) >> diff --git a/tests/local.at b/tests/local.at >> index ecb0fe04..1f55bedc 100644 >> --- a/tests/local.at >> +++ b/tests/local.at >> @@ -157,6 +157,8 @@ m4_pushdef([AT_LANG], >> [AT_CXX_IF([c++], >> [AT_D_IF([d], >> [c])])])]) >> +m4_pushdef([AT_C_IF], >> +[m4_if(AT_LANG, [c], [$1], [$2])]) >> m4_pushdef([AT_GLR_IF], >> [m4_bmatch([$3], [%glr-parser\|%skeleton "glr\..*"], [$1], [$2])]) >> m4_pushdef([AT_LALR1_CC_IF], >> @@ -288,13 +290,12 @@ AT_TOKEN_CTOR_IF( >> m4_pushdef([AT_YYLEX_PRE_ARGS], []) >> ])]) >> >> -# Handle the different types of location components. >> >> -AT_CXX_IF( >> - [AT_LOCATION_TYPE_SPAN_IF( >> +# Handle the different types of location components. >> +AT_LOCATION_TYPE_SPAN_IF( >> [AT_LOC_PUSHDEF([first.l], [first.c], [last.l], [last.c])], >> - [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], >> [end.column])])], >> - [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], >> [last_column])]) >> + [AT_CXX_IF([AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], >> [end.column])], >> + [AT_LOC_PUSHDEF([first_line], [first_column], >> [last_line], [last_column])])]) >> >> >> AT_GLR_IF([AT_KEYWORDS([glr])]) >> @@ -334,6 +335,7 @@ m4_popdef([AT_LEXPARAM_IF]) >> m4_popdef([AT_YACC_IF]) >> m4_popdef([AT_GLR_IF]) >> m4_popdef([AT_CXX_IF]) >> +m4_popdef([AT_C_IF]) >> m4_popdef([AT_LANG]) >> m4_popdef([AT_JAVA_IF]) >> m4_popdef([AT_GLR_CC_IF]) >> @@ -349,6 +351,12 @@ AT_LOC_POPDEF])dnl >> ## Generating Grammar Files. ## >> ## -------------------------- ## >> >> +# AT_LANG_CASE(LANG1, IF-LANG1, LANG2, IF-LANG2, ..., DEFAULT) >> +# ------------------------------------------------------------ >> +m4_define([AT_LANG_CASE], >> +[m4_case(AT_LANG, $@)]) >> + >> + >> # _AT_LANG_DISPATCH(LANG, MACRO, ARGS) >> # ------------------------------------ >> # Call the specialization of MACRO for LANG with ARGS. Complain if >> @@ -990,7 +998,7 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1], >> >> >> # AT_LANG_FOR_EACH_STD(BODY) >> -# ------------------------------- >> +# -------------------------- >> m4_define([AT_LANG_FOR_EACH_STD], [AT_LANG_DISPATCH([$0], $@)]) >> >> >> >>