diff options
Diffstat (limited to 'scripts/dtc/srcpos.h')
-rw-r--r-- | scripts/dtc/srcpos.h | 99 |
1 files changed, 50 insertions, 49 deletions
diff --git a/scripts/dtc/srcpos.h b/scripts/dtc/srcpos.h index e17c7c04db8e..bd7966e56a53 100644 --- a/scripts/dtc/srcpos.h +++ b/scripts/dtc/srcpos.h | |||
@@ -17,69 +17,70 @@ | |||
17 | * USA | 17 | * USA |
18 | */ | 18 | */ |
19 | 19 | ||
20 | /* | 20 | #ifndef _SRCPOS_H_ |
21 | * Augment the standard YYLTYPE with a filenum index into an | 21 | #define _SRCPOS_H_ |
22 | * array of all opened filenames. | ||
23 | */ | ||
24 | 22 | ||
25 | #include <stdio.h> | 23 | #include <stdio.h> |
26 | 24 | ||
27 | struct dtc_file { | 25 | struct srcfile_state { |
26 | FILE *f; | ||
27 | char *name; | ||
28 | char *dir; | 28 | char *dir; |
29 | const char *name; | 29 | int lineno, colno; |
30 | FILE *file; | 30 | struct srcfile_state *prev; |
31 | }; | 31 | }; |
32 | 32 | ||
33 | #if ! defined(YYLTYPE) && ! defined(YYLTYPE_IS_DECLARED) | 33 | extern struct srcfile_state *current_srcfile; /* = NULL */ |
34 | typedef struct YYLTYPE { | 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 { | ||
35 | int first_line; | 40 | int first_line; |
36 | int first_column; | 41 | int first_column; |
37 | int last_line; | 42 | int last_line; |
38 | int last_column; | 43 | int last_column; |
39 | struct dtc_file *file; | 44 | struct srcfile_state *file; |
40 | } YYLTYPE; | 45 | }; |
41 | |||
42 | #define YYLTYPE_IS_DECLARED 1 | ||
43 | #define YYLTYPE_IS_TRIVIAL 1 | ||
44 | #endif | ||
45 | |||
46 | /* Cater to old parser templates. */ | ||
47 | #ifndef YYID | ||
48 | #define YYID(n) (n) | ||
49 | #endif | ||
50 | 46 | ||
51 | #define YYLLOC_DEFAULT(Current, Rhs, N) \ | 47 | #define YYLTYPE struct srcpos |
52 | do \ | ||
53 | if (YYID (N)) \ | ||
54 | { \ | ||
55 | (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ | ||
56 | (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ | ||
57 | (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ | ||
58 | (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | ||
59 | (Current).file = YYRHSLOC (Rhs, N).file; \ | ||
60 | } \ | ||
61 | else \ | ||
62 | { \ | ||
63 | (Current).first_line = (Current).last_line = \ | ||
64 | YYRHSLOC (Rhs, 0).last_line; \ | ||
65 | (Current).first_column = (Current).last_column = \ | ||
66 | YYRHSLOC (Rhs, 0).last_column; \ | ||
67 | (Current).file = YYRHSLOC (Rhs, 0).file; \ | ||
68 | } \ | ||
69 | while (YYID (0)) | ||
70 | 48 | ||
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) | ||
71 | 65 | ||
72 | 66 | ||
73 | extern void yyerror(char const *); | 67 | /* |
74 | extern void yyerrorf(char const *, ...) __attribute__((format(printf, 1, 2))); | 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; | ||
75 | 73 | ||
76 | extern struct dtc_file *srcpos_file; | 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); | ||
77 | 78 | ||
78 | struct search_path { | 79 | extern void srcpos_verror(struct srcpos *pos, char const *, va_list va) |
79 | const char *dir; /* NULL for current directory */ | 80 | __attribute__((format(printf, 2, 0))); |
80 | struct search_path *prev, *next; | 81 | extern void srcpos_error(struct srcpos *pos, char const *, ...) |
81 | }; | 82 | __attribute__((format(printf, 2, 3))); |
83 | extern void srcpos_warn(struct srcpos *pos, char const *, ...) | ||
84 | __attribute__((format(printf, 2, 3))); | ||
82 | 85 | ||
83 | extern struct dtc_file *dtc_open_file(const char *fname, | 86 | #endif /* _SRCPOS_H_ */ |
84 | const struct search_path *search); | ||
85 | extern void dtc_close_file(struct dtc_file *file); | ||