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