Home | History | Annotate | Download | only in src
      1 /* Locations for Bison
      2    Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
      3 
      4    This file is part of Bison, the GNU Compiler Compiler.
      5 
      6    Bison is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 2, or (at your option)
      9    any later version.
     10 
     11    Bison is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with Bison; see the file COPYING.  If not, write to
     18    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     19    Boston, MA 02110-1301, USA.  */
     20 
     21 #ifndef LOCATION_H_
     22 # define LOCATION_H_
     23 
     24 # include "uniqstr.h"
     25 
     26 /* A boundary between two characters.  */
     27 typedef struct
     28 {
     29   /* The name of the file that contains the boundary.  */
     30   uniqstr file;
     31 
     32   /* The (origin-1) line that contains the boundary.
     33      If this is INT_MAX, the line number has overflowed.  */
     34   int line;
     35 
     36   /* The (origin-1) column just after the boundary.  This is neither a
     37      byte count, nor a character count; it is a column count.
     38      If this is INT_MAX, the column number has overflowed.  */
     39   int column;
     40 
     41 } boundary;
     42 
     43 /* Return nonzero if A and B are equal boundaries.  */
     44 static inline bool
     45 equal_boundaries (boundary a, boundary b)
     46 {
     47   return (a.column == b.column
     48 	  && a.line == b.line
     49 	  && UNIQSTR_EQ (a.file, b.file));
     50 }
     51 
     52 /* A location, that is, a region of source code.  */
     53 typedef struct
     54 {
     55   /* Boundary just before the location starts.  */
     56   boundary start;
     57 
     58   /* Boundary just after the location ends.  */
     59   boundary end;
     60 
     61 } location;
     62 
     63 #define YYLTYPE location
     64 
     65 extern location const empty_location;
     66 
     67 void location_print (FILE *out, location loc);
     68 
     69 #endif /* ! defined LOCATION_H_ */
     70