From 3d4a0cad569527d854a97ed1c54f5de7eaa22458 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 12 May 2010 11:12:24 +0200 Subject: [PATCH] lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT. * data/lalr1.cc (YYLLOC_DEFAULT): Move its definition from the header file to the implementation file, after the user %code sections. * NEWS: Document it. Conflicts: ChangeLog data/lalr1.cc --- ChangeLog | 8 ++++++++ NEWS | 7 +++++++ data/lalr1.cc | 40 ++++++++++++++++++++-------------------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7d8b96be..2b80e95b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-05-11 Akim Demaille + + lalrl1.cc: give a chance to user defined YYLLOC_DEFAULT. + * data/lalr1.cc (YYLLOC_DEFAULT): Move its definition from the + header file to the implementation file, after the user %code + sections. + * NEWS (2.5): Document this. + 2010-05-07 Akim Demaille c++: use YYRHSLOC. diff --git a/NEWS b/NEWS index ee269105..d890edbb 100644 --- a/NEWS +++ b/NEWS @@ -215,6 +215,13 @@ Bison News } \ while (false) +** YYLLOC_DEFAULT in C++ + + The default implementation of YYLLOC_DEFAULT used to be issued in + the header file. It is now output in the implementation file, after + the user %code sections so that its #ifndef guard does not try to + override the user's YYLLOC_DEFAULT if provided. + * Changes in version 2.4.3 (????-??-??): ** Problems with spawning M4 on at least FreeBSD 8 and FreeBSD 9 have diff --git a/data/lalr1.cc b/data/lalr1.cc index b400b310..641a45ce 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -69,26 +69,6 @@ dnl FIXME: This is wrong, we want computed header guards. # define YYTOKEN_TABLE ]b4_token_table[ #endif -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).begin = YYRHSLOC (Rhs, 1).begin; \ - (Current).end = YYRHSLOC (Rhs, N).end; \ - } \ - else \ - { \ - (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ - } \ - while (false) -#endif - ]b4_namespace_open[ /// A Bison parser. @@ -331,6 +311,26 @@ b4_percent_code_get[]dnl # endif #endif +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (false) +#endif + /* Suppress unused-variable warnings by "using" E. */ #define YYUSE(e) ((void) (e)) -- 2.45.2