105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Locations for Bison parsers in C++
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Copyright (C) 2002-2007, 2009-2012 Free Software Foundation, Inc.
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software: you can redistribute it and/or modify
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation, either version 3 of the License, or
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (at your option) any later version.
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* As a special exception, you may create a larger work that contains
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   part or all of the Bison parser skeleton and distribute that work
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   under terms of your choice, so long as that work isn't itself a
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   parser generator using the skeleton or a modified version thereof
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   as a parser skeleton.  Alternatively, if you modify or redistribute
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the parser skeleton itself, you may (at your option) remove this
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   special exception, which will cause the skeleton and the resulting
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Bison output files to be licensed under the GNU General Public
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   License without this special exception.
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This special exception was added by the Free Software Foundation in
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   version 2.2 of Bison.  */
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/**
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** \file ../../../../examples/calc++/location.hh
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** Define the yy::location class.
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include "position.hh"
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wangnamespace yy {
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Line 166 of location.cc  */
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 47 "../../../../examples/calc++/location.hh"
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Abstract a location.
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  class location
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  public:
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Construct a location from \a b to \a e.
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    location (const position& b, const position& e)
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      : begin (b)
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      , end (e)
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Construct a 0-width location in \a p.
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    explicit location (const position& p = position ())
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      : begin (p)
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      , end (p)
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Construct a 0-width location in \a f, \a l, \a c.
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    explicit location (std::string* f,
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       unsigned int l = 1u,
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       unsigned int c = 1u)
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      : begin (f, l, c)
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      , end (f, l, c)
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Initialization.
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void initialize (std::string* f = YY_NULL,
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     unsigned int l = 1u,
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     unsigned int c = 1u)
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      begin.initialize (f, l, c);
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      end = begin;
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /** \name Line and Column related manipulators
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     ** \{ */
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  public:
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Reset initial location to final location.
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void step ()
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      begin = end;
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Extend the current location to the COUNT next columns.
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void columns (unsigned int count = 1)
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      end += count;
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Extend the current location to the COUNT next lines.
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void lines (unsigned int count = 1)
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      end.lines (count);
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /** \} */
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  public:
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Beginning of the located region.
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    position begin;
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// End of the located region.
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    position end;
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  };
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Join two location objects to create a location.
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline const location operator+ (const location& begin, const location& end)
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    location res = begin;
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    res.end = end.end;
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res;
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add two location objects.
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline const location operator+ (const location& begin, unsigned int width)
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    location res = begin;
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    res.columns (width);
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res;
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add and assign a location.
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline location& operator+= (location& res, unsigned int width)
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    res.columns (width);
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res;
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Compare two location objects.
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator== (const location& loc1, const location& loc2)
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return loc1.begin == loc2.begin && loc1.end == loc2.end;
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Compare two location objects.
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator!= (const location& loc1, const location& loc2)
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return !(loc1 == loc2);
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** \brief Intercept output stream redirection.
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ** \param ostr the destination output stream
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ** \param loc a reference to the location to redirect
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   **
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ** Avoid duplicate information.
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   */
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  template <typename YYChar>
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline std::basic_ostream<YYChar>&
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    position last = loc.end - 1;
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    ostr << loc.begin;
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (last.filename
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang	&& (!loc.begin.filename
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang	    || *loc.begin.filename != *last.filename))
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ostr << '-' << last;
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    else if (loc.begin.line != last.line)
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ostr << '-' << last.line  << '.' << last.column;
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    else if (loc.begin.column != last.column)
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ostr << '-' << last.column;
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return ostr;
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang} // yy
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Line 296 of location.cc  */
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 180 "../../../../examples/calc++/location.hh"
18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !YY_YY_EXAMPLES_CALC_LOCATION_HH_INCLUDED  */
182