]>
Commit | Line | Data |
---|---|---|
1a59d1b8 | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
a4da2e3e DG |
2 | /* |
3 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. | |
a4da2e3e DG |
4 | */ |
5 | ||
9130ba88 RH |
6 | #ifndef SRCPOS_H |
7 | #define SRCPOS_H | |
a4da2e3e | 8 | |
ed95d745 | 9 | #include <stdio.h> |
47605971 | 10 | #include <stdbool.h> |
89d12310 | 11 | #include "util.h" |
ed95d745 | 12 | |
658f29a5 JB |
13 | struct srcfile_state { |
14 | FILE *f; | |
15 | char *name; | |
ed95d745 | 16 | char *dir; |
658f29a5 JB |
17 | int lineno, colno; |
18 | struct srcfile_state *prev; | |
ed95d745 DG |
19 | }; |
20 | ||
136ec204 | 21 | extern FILE *depfile; /* = NULL */ |
658f29a5 JB |
22 | extern struct srcfile_state *current_srcfile; /* = NULL */ |
23 | ||
cd296721 SW |
24 | /** |
25 | * Open a source file. | |
26 | * | |
27 | * If the source file is a relative pathname, then it is searched for in the | |
28 | * current directory (the directory of the last source file read) and after | |
29 | * that in the search path. | |
30 | * | |
31 | * We work through the search path in order from the first path specified to | |
32 | * the last. | |
33 | * | |
34 | * If the file is not found, then this function does not return, but calls | |
35 | * die(). | |
36 | * | |
37 | * @param fname Filename to search | |
38 | * @param fullnamep If non-NULL, it is set to the allocated filename of the | |
39 | * file that was opened. The caller is then responsible | |
40 | * for freeing the pointer. | |
41 | * @return pointer to opened FILE | |
42 | */ | |
658f29a5 | 43 | FILE *srcfile_relative_open(const char *fname, char **fullnamep); |
cd296721 | 44 | |
658f29a5 | 45 | void srcfile_push(const char *fname); |
47605971 | 46 | bool srcfile_pop(void); |
658f29a5 | 47 | |
cd296721 SW |
48 | /** |
49 | * Add a new directory to the search path for input files | |
50 | * | |
51 | * The new path is added at the end of the list. | |
52 | * | |
53 | * @param dirname Directory to add | |
54 | */ | |
55 | void srcfile_add_search_path(const char *dirname); | |
56 | ||
658f29a5 | 57 | struct srcpos { |
a4da2e3e DG |
58 | int first_line; |
59 | int first_column; | |
60 | int last_line; | |
61 | int last_column; | |
658f29a5 | 62 | struct srcfile_state *file; |
c2e7075c | 63 | struct srcpos *next; |
658f29a5 | 64 | }; |
a4da2e3e | 65 | |
658f29a5 | 66 | #define YYLTYPE struct srcpos |
a4da2e3e | 67 | |
658f29a5 JB |
68 | #define YYLLOC_DEFAULT(Current, Rhs, N) \ |
69 | do { \ | |
70 | if (N) { \ | |
71 | (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ | |
72 | (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ | |
73 | (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ | |
74 | (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | |
75 | (Current).file = YYRHSLOC(Rhs, N).file; \ | |
76 | } else { \ | |
77 | (Current).first_line = (Current).last_line = \ | |
78 | YYRHSLOC(Rhs, 0).last_line; \ | |
79 | (Current).first_column = (Current).last_column = \ | |
80 | YYRHSLOC(Rhs, 0).last_column; \ | |
81 | (Current).file = YYRHSLOC (Rhs, 0).file; \ | |
82 | } \ | |
c2e7075c | 83 | (Current).next = NULL; \ |
658f29a5 | 84 | } while (0) |
a4da2e3e DG |
85 | |
86 | ||
658f29a5 JB |
87 | extern void srcpos_update(struct srcpos *pos, const char *text, int len); |
88 | extern struct srcpos *srcpos_copy(struct srcpos *pos); | |
c2e7075c RH |
89 | extern struct srcpos *srcpos_extend(struct srcpos *new_srcpos, |
90 | struct srcpos *old_srcpos); | |
658f29a5 | 91 | extern char *srcpos_string(struct srcpos *pos); |
c2e7075c RH |
92 | extern char *srcpos_string_first(struct srcpos *pos, int level); |
93 | extern char *srcpos_string_last(struct srcpos *pos, int level); | |
94 | ||
a4da2e3e | 95 | |
89d12310 RH |
96 | extern void PRINTF(3, 0) srcpos_verror(struct srcpos *pos, const char *prefix, |
97 | const char *fmt, va_list va); | |
98 | extern void PRINTF(3, 4) srcpos_error(struct srcpos *pos, const char *prefix, | |
99 | const char *fmt, ...); | |
a4da2e3e | 100 | |
cd296721 SW |
101 | extern void srcpos_set_line(char *f, int l); |
102 | ||
9130ba88 | 103 | #endif /* SRCPOS_H */ |