Commit | Line | Data |
---|---|---|
a4da2e3e DG |
1 | /* |
2 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU General Public License as | |
6 | * published by the Free Software Foundation; either version 2 of the | |
7 | * License, or (at your option) any later version. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License | |
15 | * along with this program; if not, write to the Free Software | |
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
17 | * USA | |
18 | */ | |
19 | ||
658f29a5 JB |
20 | #ifndef _SRCPOS_H_ |
21 | #define _SRCPOS_H_ | |
a4da2e3e | 22 | |
ed95d745 DG |
23 | #include <stdio.h> |
24 | ||
658f29a5 JB |
25 | struct srcfile_state { |
26 | FILE *f; | |
27 | char *name; | |
ed95d745 | 28 | char *dir; |
658f29a5 JB |
29 | int lineno, colno; |
30 | struct srcfile_state *prev; | |
ed95d745 DG |
31 | }; |
32 | ||
658f29a5 JB |
33 | extern struct srcfile_state *current_srcfile; /* = NULL */ |
34 | ||
35 | FILE *srcfile_relative_open(const char *fname, char **fullnamep); | |
36 | void srcfile_push(const char *fname); | |
37 | int srcfile_pop(void); | |
38 | ||
39 | struct srcpos { | |
a4da2e3e DG |
40 | int first_line; |
41 | int first_column; | |
42 | int last_line; | |
43 | int last_column; | |
658f29a5 JB |
44 | struct srcfile_state *file; |
45 | }; | |
a4da2e3e | 46 | |
658f29a5 | 47 | #define YYLTYPE struct srcpos |
a4da2e3e | 48 | |
658f29a5 JB |
49 | #define YYLLOC_DEFAULT(Current, Rhs, N) \ |
50 | do { \ | |
51 | if (N) { \ | |
52 | (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ | |
53 | (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ | |
54 | (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ | |
55 | (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | |
56 | (Current).file = YYRHSLOC(Rhs, N).file; \ | |
57 | } else { \ | |
58 | (Current).first_line = (Current).last_line = \ | |
59 | YYRHSLOC(Rhs, 0).last_line; \ | |
60 | (Current).first_column = (Current).last_column = \ | |
61 | YYRHSLOC(Rhs, 0).last_column; \ | |
62 | (Current).file = YYRHSLOC (Rhs, 0).file; \ | |
63 | } \ | |
64 | } while (0) | |
a4da2e3e DG |
65 | |
66 | ||
658f29a5 JB |
67 | /* |
68 | * Fictional source position used for IR nodes that are | |
69 | * created without otherwise knowing a true source position. | |
70 | * For example,constant definitions from the command line. | |
71 | */ | |
72 | extern struct srcpos srcpos_empty; | |
a4da2e3e | 73 | |
658f29a5 JB |
74 | extern void srcpos_update(struct srcpos *pos, const char *text, int len); |
75 | extern struct srcpos *srcpos_copy(struct srcpos *pos); | |
76 | extern char *srcpos_string(struct srcpos *pos); | |
77 | extern void srcpos_dump(struct srcpos *pos); | |
a4da2e3e | 78 | |
658f29a5 JB |
79 | extern void srcpos_verror(struct srcpos *pos, char const *, va_list va) |
80 | __attribute__((format(printf, 2, 0))); | |
81 | extern void srcpos_error(struct srcpos *pos, char const *, ...) | |
82 | __attribute__((format(printf, 2, 3))); | |
83 | extern void srcpos_warn(struct srcpos *pos, char const *, ...) | |
84 | __attribute__((format(printf, 2, 3))); | |
a4da2e3e | 85 | |
658f29a5 | 86 | #endif /* _SRCPOS_H_ */ |