From 4626a15dd155e1895262c48945a1c2b1d79b481f Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 12 Nov 2005 14:13:03 +0000 Subject: [PATCH] Let position and location be PODs. * data/location.cc (position::initialize, location::initialize): New. (position::position, location::location): Define only if b4_location_constructors is defined. * data/lalr1.cc (b4_location_constructors): Define it for backward compatibility. * doc/bison.texinfo (Initial Action Decl): Use initialize. --- ChangeLog | 12 +++++++++++- data/lalr1.cc | 2 ++ data/location.cc | 38 +++++++++++++++++++++++--------------- doc/bison.texinfo | 2 +- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 35744ce3..6c56d947 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,14 @@ -2005-11-12 Akim +2005-11-12 Akim Demaille + + Let position and location be PODs. + * data/location.cc (position::initialize, location::initialize): New. + (position::position, location::location): Define only if + b4_location_constructors is defined. + * data/lalr1.cc (b4_location_constructors): Define it for backward + compatibility. + * doc/bison.texinfo (Initial Action Decl): Use initialize. + +2005-11-12 Akim Demaille * data/lalr1.cc: Move the body of the ctor and dtor into the parser file (instead of the header). diff --git a/data/lalr1.cc b/data/lalr1.cc index 887671d1..1073e8d2 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -20,6 +20,8 @@ m4_divert(-1) # 02110-1301 USA m4_include(b4_pkgdatadir/[c++.m4]) +# Backward compatibility. +m4_define([b4_location_constructors]) m4_include(b4_pkgdatadir/[location.cc]) # We do want M4 expansion after # for CPP macros. diff --git a/data/location.cc b/data/location.cc index bb701b3e..a134bfa8 100644 --- a/data/location.cc +++ b/data/location.cc @@ -29,7 +29,7 @@ b4_copyright([Position class for Bison C++ parsers], [2002, 2003, 2004, 2005])[ /** ** \file position.hh - ** Define the position class. + ** Define the yy::position class. */ #ifndef BISON_POSITION_HH @@ -43,18 +43,22 @@ namespace yy /// Abstract a position. class position { - /** \name Ctor & dtor. - ** \{ */ public: +]m4_ifdef([b4_location_constructors], [ /// Construct a position. - position () : - filename (0), - line (1), - column (0) + position () + : filename (0), line (1), column (0) { } - /** \} */ +])[ + /// Initialization. + inline void initialize (]b4_filename_type[* fn) + { + filename = fn; + line = 1; + column = 0; + } /** \name Line and Column related manipulators ** \{ */ @@ -136,7 +140,7 @@ b4_copyright([Location class for Bison C++ parsers], [2002, 2003, 2004, 2005])[ /** ** \file location.hh - ** Define the location class. + ** Define the yy::location class. */ #ifndef BISON_LOCATION_HH @@ -152,17 +156,21 @@ namespace yy /// Abstract a location. class location { - /** \name Ctor & dtor. - ** \{ */ public: +]m4_ifdef([b4_location_constructors], [ /// Construct a location. - location () : - begin (), - end () + location () + : begin (), end () { } - /** \} */ +])[ + /// Initialization. + inline void initialize (]b4_filename_type[* fn) + { + begin.initialize (fn); + end = begin; + } /** \name Line and Column related manipulators ** \{ */ diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 01dccb41..47b6720e 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -3800,7 +3800,7 @@ For instance, if your locations use a file name, you may use %parse-param @{ char const *file_name @}; %initial-action @{ - @@$.begin.filename = @@$.end.filename = file_name; + @@$.initialize (file_name); @}; @end example -- 2.45.2