mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
c++: use YYRHSLOC.
* data/lalr1.cc (YYRHSLOC): New.
(YYLLOC_DEFAULT): Use it.
* data/glr.cc: If location_type was user defined, do not include
location.hh, and do not produce location.hh and position.hh.
* tests/calc.at (YYLLOC_DEFAULT): Use YYRHSLOC.
Check that glr.cc supports user defined location_type.
* NEWS: Document this.
(cherry picked from commit bb9191dd31)
Conflicts:
ChangeLog
NEWS
data/lalr1.cc
tests/calc.at
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2010-05-07 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
c++: use YYRHSLOC.
|
||||||
|
* data/lalr1.cc (YYRHSLOC): New.
|
||||||
|
(YYLLOC_DEFAULT): Use it.
|
||||||
|
* data/glr.cc: If location_type was user defined, do not include
|
||||||
|
location.hh, and do not produce location.hh and position.hh.
|
||||||
|
* tests/calc.at (YYLLOC_DEFAULT): Use YYRHSLOC.
|
||||||
|
Check that glr.cc supports user defined location_type.
|
||||||
|
* NEWS: Document this.
|
||||||
|
|
||||||
2010-05-10 Akim Demaille <demaille@gostai.com>
|
2010-05-10 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
doc: fix lalr1.cc documentation.
|
doc: fix lalr1.cc documentation.
|
||||||
|
|||||||
35
NEWS
35
NEWS
@@ -180,6 +180,41 @@ Bison News
|
|||||||
determine which destructor to call for the lookahead upon a syntax
|
determine which destructor to call for the lookahead upon a syntax
|
||||||
error or upon parser return. This bug has been fixed.
|
error or upon parser return. This bug has been fixed.
|
||||||
|
|
||||||
|
** C++ parsers use YYRHSLOC
|
||||||
|
|
||||||
|
Similarly to the C parsers, the C++ parsers now define the YYRHSLOC
|
||||||
|
macro and use it in the default YYLLOC_DEFAULT. You are encouraged
|
||||||
|
to use it. If, for instance, your location structure has "first"
|
||||||
|
and "last" members, instead of
|
||||||
|
|
||||||
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
||||||
|
do \
|
||||||
|
if (N) \
|
||||||
|
{ \
|
||||||
|
(Current).first = (Rhs)[1].location.first; \
|
||||||
|
(Current).last = (Rhs)[N].location.last; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
(Current).first = (Current).last = (Rhs)[0].location.last; \
|
||||||
|
} \
|
||||||
|
while (false)
|
||||||
|
|
||||||
|
use:
|
||||||
|
|
||||||
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
||||||
|
do \
|
||||||
|
if (N) \
|
||||||
|
{ \
|
||||||
|
(Current).first = YYRHSLOC (Rhs, 1).first; \
|
||||||
|
(Current).last = YYRHSLOC (Rhs, N).last; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
(Current).first = (Current).last = YYRHSLOC (Rhs, 0).last; \
|
||||||
|
} \
|
||||||
|
while (false)
|
||||||
|
|
||||||
* Changes in version 2.4.3 (????-??-??):
|
* Changes in version 2.4.3 (????-??-??):
|
||||||
|
|
||||||
** Problems with spawning M4 on at least FreeBSD 8 and FreeBSD 9 have
|
** Problems with spawning M4 on at least FreeBSD 8 and FreeBSD 9 have
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ b4_defines_if([],
|
|||||||
[b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
|
[b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
|
||||||
|
|
||||||
m4_include(b4_pkgdatadir/[c++.m4])
|
m4_include(b4_pkgdatadir/[c++.m4])
|
||||||
m4_include(b4_pkgdatadir/[location.cc])
|
b4_percent_define_ifdef([[location_type]], [],
|
||||||
|
[m4_include(b4_pkgdatadir/[location.cc])])
|
||||||
|
|
||||||
m4_define([b4_parser_class_name],
|
m4_define([b4_parser_class_name],
|
||||||
[b4_percent_define_get([[parser_class_name]])])
|
[b4_percent_define_get([[parser_class_name]])])
|
||||||
|
|||||||
@@ -73,19 +73,20 @@ dnl FIXME: This is wrong, we want computed header guards.
|
|||||||
If N is 0, then set CURRENT to the empty location which ends
|
If N is 0, then set CURRENT to the empty location which ends
|
||||||
the previous symbol: RHS[0] (always defined). */
|
the previous symbol: RHS[0] (always defined). */
|
||||||
|
|
||||||
|
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
|
||||||
#ifndef YYLLOC_DEFAULT
|
#ifndef YYLLOC_DEFAULT
|
||||||
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
||||||
do { \
|
do \
|
||||||
if (N) \
|
if (N) \
|
||||||
{ \
|
{ \
|
||||||
(Current).begin = (Rhs)[1].begin; \
|
(Current).begin = YYRHSLOC (Rhs, 1).begin; \
|
||||||
(Current).end = (Rhs)[N].end; \
|
(Current).end = YYRHSLOC (Rhs, N).end; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
(Current).begin = (Current).end = (Rhs)[0].end; \
|
(Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
while (false)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
]b4_namespace_open[
|
]b4_namespace_open[
|
||||||
|
|||||||
@@ -170,18 +170,18 @@ AT_SKEL_CC_IF(
|
|||||||
Point last;
|
Point last;
|
||||||
};
|
};
|
||||||
|
|
||||||
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
||||||
do { \
|
do \
|
||||||
if (N) \
|
if (N) \
|
||||||
{ \
|
{ \
|
||||||
(Current).first = (Rhs)[1].first; \
|
(Current).first = YYRHSLOC (Rhs, 1).first; \
|
||||||
(Current).last = (Rhs)[N].last; \
|
(Current).last = YYRHSLOC (Rhs, N).last; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
(Current).first = (Current).last = (Rhs)[0].last; \
|
(Current).first = (Current).last = YYRHSLOC (Rhs, 0).last; \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
while (false)
|
||||||
|
|
||||||
]])[
|
]])[
|
||||||
/* Exercise pre-prologue dependency to %union. */
|
/* Exercise pre-prologue dependency to %union. */
|
||||||
@@ -712,6 +712,7 @@ m4_define([AT_CHECK_CALC_GLR_CC],
|
|||||||
[AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)])
|
[AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR_CC([])
|
AT_CHECK_CALC_GLR_CC([])
|
||||||
|
AT_CHECK_CALC_GLR_CC([%define location_type Span])
|
||||||
AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR_CC([%debug])
|
AT_CHECK_CALC_GLR_CC([%debug])
|
||||||
|
|||||||
Reference in New Issue
Block a user