X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/2a1bd0d7fec51ea91cee0406805f608e79cb8876..1c7ec959b1dddfbf594d5b76572e4b473c055be2:/data/location.cc
diff --git a/data/location.cc b/data/location.cc
index 30f0a02f..58182a34 100644
--- a/data/location.cc
+++ b/data/location.cc
@@ -15,24 +15,21 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-# We do want M4 expansion after # for CPP macros.
-m4_changecom()
-m4_divert_push(0)dnl
-@output(b4_dir_prefix[]position.hh@)@
+
+b4_output_begin([b4_dir_prefix[]position.hh])
b4_copyright([Positions for Bison parsers in C++],
[2002-2007, 2009-2012])[
/**
- ** \file position.hh
+ ** \file ]b4_dir_prefix[position.hh
** Define the ]b4_namespace_ref[::position class.
*/
-#ifndef BISON_POSITION_HH
-# define BISON_POSITION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[
+# include // std::max
# include
# include
-# include
]b4_null_define[
@@ -41,29 +38,34 @@ b4_copyright([Positions for Bison parsers in C++],
class position
{
public:
-]m4_ifdef([b4_location_constructors], [
+]m4_ifdef([b4_location_constructors], [[
/// Construct a position.
- position ()
- : filename (YY_NULL), line (]b4_location_initial_line[), column (]b4_location_initial_column[)
+ explicit position (]b4_percent_define_get([[filename_type]])[* f = YY_NULL,
+ unsigned int l = ]b4_location_initial_line[u,
+ unsigned int c = ]b4_location_initial_column[u)
+ : filename (f)
+ , line (l)
+ , column (c)
{
}
-])[
+]])[
/// Initialization.
- void initialize (]b4_percent_define_get([[filename_type]])[* fn = YY_NULL)
+ void initialize (]b4_percent_define_get([[filename_type]])[* fn = YY_NULL,
+ unsigned int l = ]b4_location_initial_line[u,
+ unsigned int c = ]b4_location_initial_column[u)
{
filename = fn;
- line = ]b4_location_initial_line[;
- column = ]b4_location_initial_column[;
+ line = l;
+ column = c;
}
/** \name Line and Column related manipulators
** \{ */
- public:
/// (line related) Advance to the COUNT next lines.
void lines (int count = 1)
{
- column = ]b4_location_initial_column[;
+ column = ]b4_location_initial_column[u;
line += count;
}
@@ -74,7 +76,6 @@ b4_copyright([Positions for Bison parsers in C++],
}
/** \} */
- public:
/// File name to which this position refers.
]b4_percent_define_get([[filename_type]])[* filename;
/// Current line number.
@@ -84,7 +85,7 @@ b4_copyright([Positions for Bison parsers in C++],
};
/// Add and assign a position.
- inline const position&
+ inline position&
operator+= (position& res, const int width)
{
res.columns (width);
@@ -100,7 +101,7 @@ b4_copyright([Positions for Bison parsers in C++],
}
/// Add and assign a position.
- inline const position&
+ inline position&
operator-= (position& res, const int width)
{
return res += -width;
@@ -144,21 +145,21 @@ b4_copyright([Positions for Bison parsers in C++],
}
]b4_namespace_close[
-#endif // not BISON_POSITION_HH]
-@output(b4_dir_prefix[]location.hh@)@
+]b4_cpp_guard_close([b4_dir_prefix[]position.hh])
+b4_output_end()
+
+
+b4_output_begin([b4_dir_prefix[]location.hh])
b4_copyright([Locations for Bison parsers in C++],
- [2002-2007, 2009-2011])[
+ [2002-2007, 2009-2012])[
/**
- ** \file location.hh
+ ** \file ]b4_dir_prefix[location.hh
** Define the ]b4_namespace_ref[::location class.
*/
-#ifndef BISON_LOCATION_HH
-# define BISON_LOCATION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[
-# include
-# include
# include "position.hh"
]b4_namespace_open[
@@ -168,17 +169,36 @@ b4_copyright([Locations for Bison parsers in C++],
{
public:
]m4_ifdef([b4_location_constructors], [
- /// Construct a location.
- location ()
- : begin (), end ()
+ /// Construct a location from \a b to \a e.
+ location (const position& b, const position& e)
+ : begin (b)
+ , end (e)
+ {
+ }
+
+ /// Construct a 0-width location in \a p.
+ explicit location (const position& p = position ())
+ : begin (p)
+ , end (p)
+ {
+ }
+
+ /// Construct a 0-width location in \a f, \a l, \a c.
+ explicit location (]b4_percent_define_get([[filename_type]])[* f,
+ unsigned int l = ]b4_location_initial_line[u,
+ unsigned int c = ]b4_location_initial_column[u)
+ : begin (f, l, c)
+ , end (f, l, c)
{
}
])[
/// Initialization.
- void initialize (]b4_percent_define_get([[filename_type]])[* fn = YY_NULL)
+ void initialize (]b4_percent_define_get([[filename_type]])[* f = YY_NULL,
+ unsigned int l = ]b4_location_initial_line[u,
+ unsigned int c = ]b4_location_initial_column[u)
{
- begin.initialize (fn);
+ begin.initialize (f, l, c);
end = begin;
}
@@ -272,6 +292,5 @@ b4_copyright([Locations for Bison parsers in C++],
]b4_namespace_close[
-#endif // not BISON_LOCATION_HH]
-m4_divert_pop(0)
-m4_changecom([#])
+]b4_cpp_guard_close([b4_dir_prefix[]location.hh])
+b4_output_end()