]>
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 | 23 | #include <stdio.h> |
47605971 | 24 | #include <stdbool.h> |
89d12310 | 25 | #include "util.h" |
ed95d745 | 26 | |
658f29a5 JB |
27 | struct srcfile_state { |
28 | FILE *f; | |
29 | char *name; | |
ed95d745 | 30 | char *dir; |
658f29a5 JB |
31 | int lineno, colno; |
32 | struct srcfile_state *prev; | |
ed95d745 DG |
33 | }; |
34 | ||
136ec204 | 35 | extern FILE *depfile; /* = NULL */ |
658f29a5 JB |
36 | extern struct srcfile_state *current_srcfile; /* = NULL */ |
37 | ||
cd296721 SW |
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 | */ | |
658f29a5 | 57 | FILE *srcfile_relative_open(const char *fname, char **fullnamep); |
cd296721 | 58 | |
658f29a5 | 59 | void srcfile_push(const char *fname); |
47605971 | 60 | bool srcfile_pop(void); |
658f29a5 | 61 | |
cd296721 SW |
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 | ||
658f29a5 | 71 | struct srcpos { |
a4da2e3e DG |
72 | int first_line; |
73 | int first_column; | |
74 | int last_line; | |
75 | int last_column; | |
658f29a5 JB |
76 | struct srcfile_state *file; |
77 | }; | |
a4da2e3e | 78 | |
658f29a5 | 79 | #define YYLTYPE struct srcpos |
a4da2e3e | 80 | |
658f29a5 JB |
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) | |
a4da2e3e DG |
97 | |
98 | ||
658f29a5 JB |
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; | |
a4da2e3e | 105 | |
658f29a5 JB |
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); | |
a4da2e3e | 109 | |
89d12310 RH |
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, ...); | |
a4da2e3e | 114 | |
cd296721 SW |
115 | extern void srcpos_set_line(char *f, int l); |
116 | ||
658f29a5 | 117 | #endif /* _SRCPOS_H_ */ |