]> git.saurik.com Git - bison.git/blame - src/location.h
Do not use date ranges in copyright notices.
[bison.git] / src / location.h
CommitLineData
0c15323d 1/* Locations for Bison
31f8b787
PE
2
3 Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
4 Software Foundation, Inc.
0c15323d
AD
5
6 This file is part of Bison, the GNU Compiler Compiler.
7
f16b0819 8 This program is free software: you can redistribute it and/or modify
0c15323d 9 it under the terms of the GNU General Public License as published by
f16b0819
PE
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
0c15323d 12
f16b0819 13 This program is distributed in the hope that it will be useful,
0c15323d
AD
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
f16b0819 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0c15323d
AD
20
21#ifndef LOCATION_H_
22# define LOCATION_H_
23
dca81a78
PE
24# include "uniqstr.h"
25
8f759107
PE
26/* A boundary between two characters. */
27typedef struct
0c15323d 28{
8f759107 29 /* The name of the file that contains the boundary. */
dca81a78 30 uniqstr file;
8f759107 31
580c075d
JD
32 /* If nonnegative, the (origin-1) line that contains the boundary.
33 If this is INT_MAX, the line number has overflowed.
34
35 Meaningless and not displayed if negative.
36 */
8f759107
PE
37 int line;
38
5d3a1ecb
AD
39 /* If nonnegative, the (origin-1) column just after the boundary.
40 This is neither a byte count, nor a character count; it is a
41 column count. If this is INT_MAX, the column number has
42 overflowed.
43
44 Meaningless and not displayed if negative.
45 */
8f759107
PE
46 int column;
47
48} boundary;
49
e9071366
AD
50/* Set the position of \a a. */
51static inline void
52boundary_set (boundary *b, const char *f, int l, int c)
53{
db06f0ce
PE
54 b->file = f;
55 b->line = l;
56 b->column = c;
e9071366
AD
57}
58
8f759107
PE
59/* Return nonzero if A and B are equal boundaries. */
60static inline bool
61equal_boundaries (boundary a, boundary b)
62{
63 return (a.column == b.column
64 && a.line == b.line
dca81a78 65 && UNIQSTR_EQ (a.file, b.file));
8f759107
PE
66}
67
68/* A location, that is, a region of source code. */
69typedef struct
70{
71 /* Boundary just before the location starts. */
72 boundary start;
73
74 /* Boundary just after the location ends. */
75 boundary end;
76
69b8cc09 77} location;
8f759107 78
69b8cc09 79#define YYLTYPE location
0c15323d 80
28e52c0d 81#define EMPTY_LOCATION_INIT {{NULL, 0, 0}, {NULL, 0, 0}}
69b8cc09 82extern location const empty_location;
8f759107 83
e9071366
AD
84/* Set *LOC and adjust scanner cursor to account for token TOKEN of
85 size SIZE. */
86void location_compute (location *loc,
87 boundary *cur, char const *token, size_t size);
88
6e0f8287 89void location_print (FILE *out, location loc);
8f759107 90
3fc65ead
JD
91/* LOC_STR must be formatted as `file:line.column', it will be modified. */
92void boundary_set_from_string (boundary *bound, char *loc_str);
93
8f759107 94#endif /* ! defined LOCATION_H_ */