]> git.saurik.com Git - bison.git/blobdiff - src/location.h
Fix push parsing memory leak reported by Brandon Lucia at
[bison.git] / src / location.h
index 3bdf93c376b5ca5a0c6bf4bb7babbf83e6fecea7..0b4f715a2cca17585443ddabe444034c406128d7 100644 (file)
@@ -1,5 +1,5 @@
 /* Locations for Bison
 /* Locations for Bison
-   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -15,8 +15,8 @@
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #ifndef LOCATION_H_
 # define LOCATION_H_
 
 #ifndef LOCATION_H_
 # define LOCATION_H_
@@ -29,15 +29,26 @@ typedef struct
   /* The name of the file that contains the boundary.  */
   uniqstr file;
 
   /* The name of the file that contains the boundary.  */
   uniqstr file;
 
-  /* The (origin-1) line that contains the boundary.  */
+  /* The (origin-1) line that contains the boundary.
+     If this is INT_MAX, the line number has overflowed.  */
   int line;
 
   /* The (origin-1) column just after the boundary.  This is neither a
   int line;
 
   /* The (origin-1) column just after the boundary.  This is neither a
-     byte count, nor a character count; it is a column count.  */
+     byte count, nor a character count; it is a column count.
+     If this is INT_MAX, the column number has overflowed.  */
   int column;
 
 } boundary;
 
   int column;
 
 } boundary;
 
+/* Set the position of \a a. */
+static inline void
+boundary_set (boundary *b, const char *f, int l, int c)
+{
+  b->file = f;
+  b->line = l;
+  b->column = c;
+}
+
 /* Return nonzero if A and B are equal boundaries.  */
 static inline bool
 equal_boundaries (boundary a, boundary b)
 /* Return nonzero if A and B are equal boundaries.  */
 static inline bool
 equal_boundaries (boundary a, boundary b)
@@ -60,8 +71,17 @@ typedef struct
 
 #define YYLTYPE location
 
 
 #define YYLTYPE location
 
+#define EMPTY_LOCATION_INIT {{NULL, 0, 0}, {NULL, 0, 0}}
 extern location const empty_location;
 
 extern location const empty_location;
 
-void location_print (FILE *, location);
+/* Set *LOC and adjust scanner cursor to account for token TOKEN of
+   size SIZE.  */
+void location_compute (location *loc,
+                      boundary *cur, char const *token, size_t size);
+
+void location_print (FILE *out, location loc);
+
+/* LOC_STR must be formatted as `file:line.column', it will be modified.  */
+void boundary_set_from_string (boundary *bound, char *loc_str);
 
 #endif /* ! defined LOCATION_H_ */
 
 #endif /* ! defined LOCATION_H_ */