]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/gengtype.h
Merge from pch-branch up to tag pch-commit-20020603.
[thirdparty/gcc.git] / gcc / gengtype.h
1 /* Process source files and output type information.
2 Copyright (C) 2002 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING. If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA. */
20
21 /* A file position, mostly for error messages.
22 The FILE element may be compared using pointer equality. */
23 struct fileloc {
24 const char *file;
25 int line;
26 };
27
28 /* Kinds of types we can understand. */
29 enum typekind {
30 TYPE_SCALAR,
31 TYPE_STRING,
32 TYPE_STRUCT,
33 TYPE_UNION,
34 TYPE_POINTER,
35 TYPE_ARRAY,
36 TYPE_LANG_STRUCT,
37 TYPE_PARAM_STRUCT
38 };
39
40 /* A way to pass data through to the output end. */
41 typedef struct options {
42 struct options *next;
43 const char *name;
44 void *info;
45 } *options_p;
46
47 typedef struct pair *pair_p;
48 typedef struct type *type_p;
49 typedef unsigned lang_bitmap;
50
51 /* A name and a type. */
52 struct pair {
53 pair_p next;
54 const char *name;
55 type_p type;
56 struct fileloc line;
57 options_p opt;
58 };
59
60 /* A description of a type. */
61 struct type {
62 enum typekind kind;
63 type_p next;
64 type_p pointer_to;
65 enum gc_used_enum {
66 GC_UNUSED = 0,
67 GC_USED,
68 GC_MAYBE_POINTED_TO,
69 GC_POINTED_TO
70 } gc_used;
71 union {
72 type_p p;
73 struct {
74 const char *tag;
75 struct fileloc line;
76 pair_p fields;
77 options_p opt;
78 lang_bitmap bitmap;
79 type_p lang_struct;
80 } s;
81 char *sc;
82 struct {
83 type_p p;
84 const char *len;
85 } a;
86 struct {
87 type_p stru;
88 type_p param;
89 struct fileloc line;
90 } param_struct;
91 } u;
92 };
93
94 #define UNION_P(x) \
95 ((x)->kind == TYPE_UNION || \
96 ((x)->kind == TYPE_LANG_STRUCT \
97 && (x)->u.s.lang_struct->kind == TYPE_UNION))
98 #define UNION_OR_STRUCT_P(x) \
99 ((x)->kind == TYPE_UNION \
100 || (x)->kind == TYPE_STRUCT \
101 || (x)->kind == TYPE_LANG_STRUCT)
102
103 /* The one and only TYPE_STRING. */
104 extern struct type string_type;
105
106 /* Variables used to communicate between the lexer and the parser. */
107 extern int lexer_toplevel_done;
108 extern struct fileloc lexer_line;
109
110 /* Print an error message. */
111 extern void error_at_line
112 VPARAMS ((struct fileloc *pos, const char *msg, ...));
113
114 /* Constructor routines for types. */
115 extern void do_typedef PARAMS ((const char *s, type_p t, struct fileloc *pos));
116 extern type_p resolve_typedef PARAMS ((const char *s, struct fileloc *pos));
117 extern void new_structure PARAMS ((const char *name, int isunion,
118 struct fileloc *pos, pair_p fields,
119 options_p o));
120 extern type_p find_structure PARAMS ((const char *s, int isunion));
121 extern type_p create_scalar_type PARAMS ((const char *name, size_t name_len));
122 extern type_p create_pointer PARAMS ((type_p t));
123 extern type_p create_array PARAMS ((type_p t, const char *len));
124 extern type_p adjust_field_type PARAMS ((type_p, options_p));
125 extern void note_variable PARAMS ((const char *s, type_p t, options_p o,
126 struct fileloc *pos));
127 extern void note_yacc_type PARAMS ((options_p o, pair_p fields,
128 pair_p typeinfo, struct fileloc *pos));
129
130 /* Lexer and parser routines, most automatically generated. */
131 extern int yylex PARAMS((void));
132 extern void yyerror PARAMS ((const char *));
133 extern int yyparse PARAMS ((void));
134 extern void parse_file PARAMS ((char *name));
135
136 /* Output file handling. */
137
138 FILE *get_output_file PARAMS ((const char *input_file));
139 const char *get_output_file_name PARAMS ((const char *));
140
141 /* The output header file that is included into pretty much every
142 source file. */
143 extern FILE *header_file;
144
145 /* An output file, suitable for definitions, that can see declarations
146 made in INPUT_FILE and is linked into every language that uses
147 INPUT_FILE. */
148 extern FILE *get_output_file_with_visibility PARAMS ((const char *input_file));
149
150 /* A list of output files suitable for definitions. There is one
151 BASE_FILES entry for each language. */
152 extern FILE *base_files[];
153
154 /* A bitmap that specifies which of BASE_FILES should be used to
155 output a definition that is different for each language and must be
156 defined once in each language that uses INPUT_FILE. */
157 extern lang_bitmap get_base_file_bitmap PARAMS ((const char *input_file));