]>
Commit | Line | Data |
---|---|---|
c0e032e0 TR |
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 | ||
db405d19 RH |
20 | #ifndef SRCPOS_H |
21 | #define SRCPOS_H | |
c0e032e0 TR |
22 | |
23 | #include <stdio.h> | |
24 | #include <stdbool.h> | |
d6fc90ce | 25 | #include "util.h" |
c0e032e0 TR |
26 | |
27 | struct srcfile_state { | |
28 | FILE *f; | |
29 | char *name; | |
30 | char *dir; | |
31 | int lineno, colno; | |
32 | struct srcfile_state *prev; | |
33 | }; | |
34 | ||
35 | extern FILE *depfile; /* = NULL */ | |
36 | extern struct srcfile_state *current_srcfile; /* = NULL */ | |
37 | ||
38 | /** | |
39 | * Open a source file. | |
40 | * | |
41 | * If the source file is a relative pathname, then it is searched for in the | |
42 | * current directory (the directory of the last source file read) and after | |
43 | * that in the search path. | |
44 | * | |
45 | * We work through the search path in order from the first path specified to | |
46 | * the last. | |
47 | * | |
48 | * If the file is not found, then this function does not return, but calls | |
49 | * die(). | |
50 | * | |
51 | * @param fname Filename to search | |
52 | * @param fullnamep If non-NULL, it is set to the allocated filename of the | |
53 | * file that was opened. The caller is then responsible | |
54 | * for freeing the pointer. | |
55 | * @return pointer to opened FILE | |
56 | */ | |
57 | FILE *srcfile_relative_open(const char *fname, char **fullnamep); | |
58 | ||
59 | void srcfile_push(const char *fname); | |
60 | bool srcfile_pop(void); | |
61 | ||
62 | /** | |
63 | * Add a new directory to the search path for input files | |
64 | * | |
65 | * The new path is added at the end of the list. | |
66 | * | |
67 | * @param dirname Directory to add | |
68 | */ | |
69 | void srcfile_add_search_path(const char *dirname); | |
70 | ||
71 | struct srcpos { | |
72 | int first_line; | |
73 | int first_column; | |
74 | int last_line; | |
75 | int last_column; | |
76 | struct srcfile_state *file; | |
77 | }; | |
78 | ||
79 | #define YYLTYPE struct srcpos | |
80 | ||
81 | #define YYLLOC_DEFAULT(Current, Rhs, N) \ | |
82 | do { \ | |
83 | if (N) { \ | |
84 | (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ | |
85 | (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ | |
86 | (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ | |
87 | (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | |
88 | (Current).file = YYRHSLOC(Rhs, N).file; \ | |
89 | } else { \ | |
90 | (Current).first_line = (Current).last_line = \ | |
91 | YYRHSLOC(Rhs, 0).last_line; \ | |
92 | (Current).first_column = (Current).last_column = \ | |
93 | YYRHSLOC(Rhs, 0).last_column; \ | |
94 | (Current).file = YYRHSLOC (Rhs, 0).file; \ | |
95 | } \ | |
96 | } while (0) | |
97 | ||
98 | ||
99 | /* | |
100 | * Fictional source position used for IR nodes that are | |
101 | * created without otherwise knowing a true source position. | |
102 | * For example,constant definitions from the command line. | |
103 | */ | |
104 | extern struct srcpos srcpos_empty; | |
105 | ||
106 | extern void srcpos_update(struct srcpos *pos, const char *text, int len); | |
107 | extern struct srcpos *srcpos_copy(struct srcpos *pos); | |
108 | extern char *srcpos_string(struct srcpos *pos); | |
109 | ||
d6fc90ce TR |
110 | extern void PRINTF(3, 0) srcpos_verror(struct srcpos *pos, const char *prefix, |
111 | const char *fmt, va_list va); | |
112 | extern void PRINTF(3, 4) srcpos_error(struct srcpos *pos, const char *prefix, | |
113 | const char *fmt, ...); | |
c0e032e0 TR |
114 | |
115 | extern void srcpos_set_line(char *f, int l); | |
116 | ||
db405d19 | 117 | #endif /* SRCPOS_H */ |