1 /* Process source files and output type information.
2 Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
4 This file is part of GCC.
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
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
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
21 /* A file position, mostly for error messages.
22 The FILE element may be compared using pointer equality. */
28 /* Kinds of types we can understand. */
40 /* A way to pass data through to the output end. */
41 typedef struct options
{
47 typedef struct pair
*pair_p
;
48 typedef struct type
*type_p
;
49 typedef unsigned lang_bitmap
;
51 /* A name and a type. */
62 /* A description of a type. */
90 type_p param
[NUM_PARAM
];
97 ((x)->kind == TYPE_UNION || \
98 ((x)->kind == TYPE_LANG_STRUCT \
99 && (x)->u.s.lang_struct->kind == TYPE_UNION))
100 #define UNION_OR_STRUCT_P(x) \
101 ((x)->kind == TYPE_UNION \
102 || (x)->kind == TYPE_STRUCT \
103 || (x)->kind == TYPE_LANG_STRUCT)
105 /* The one and only TYPE_STRING. */
106 extern struct type string_type
;
108 /* Variables used to communicate between the lexer and the parser. */
109 extern int lexer_toplevel_done
;
110 extern struct fileloc lexer_line
;
112 /* Print an error message. */
113 extern void error_at_line
114 (struct fileloc
*pos
, const char *msg
, ...) ATTRIBUTE_PRINTF_2
;
116 /* Combines xmalloc() and vasprintf(). */
117 extern int xvasprintf (char **, const char *, va_list)
118 ATTRIBUTE_PRINTF (2, 0);
119 /* Like the above, but more convenient for quick coding. */
120 extern char * xasprintf (const char *, ...)
123 /* Constructor routines for types. */
124 extern void do_typedef (const char *s
, type_p t
, struct fileloc
*pos
);
125 extern type_p
resolve_typedef (const char *s
, struct fileloc
*pos
);
126 extern void new_structure (const char *name
, int isunion
,
127 struct fileloc
*pos
, pair_p fields
,
129 extern type_p
find_structure (const char *s
, int isunion
);
130 extern type_p
create_scalar_type (const char *name
, size_t name_len
);
131 extern type_p
create_pointer (type_p t
);
132 extern type_p
create_array (type_p t
, const char *len
);
133 extern options_p
create_option (const char *name
, void *info
);
134 extern type_p
adjust_field_type (type_p
, options_p
);
135 extern void note_variable (const char *s
, type_p t
, options_p o
,
136 struct fileloc
*pos
);
137 extern void note_yacc_type (options_p o
, pair_p fields
,
138 pair_p typeinfo
, struct fileloc
*pos
);
140 /* Lexer and parser routines, most automatically generated. */
141 extern int yylex (void);
142 extern void yyerror (const char *);
143 extern int yyparse (void);
144 extern void parse_file (const char *name
);
146 /* Output file handling. */
148 /* Structure representing an output file. */
158 typedef struct outf
* outf_p
;
160 /* An output file, suitable for definitions, that can see declarations
161 made in INPUT_FILE and is linked into every language that uses
163 extern outf_p get_output_file_with_visibility
164 (const char *input_file
);
165 const char *get_output_file_name (const char *);
167 /* A list of output files suitable for definitions. There is one
168 BASE_FILES entry for each language. */
169 extern outf_p base_files
[];
171 /* A bitmap that specifies which of BASE_FILES should be used to
172 output a definition that is different for each language and must be
173 defined once in each language that uses INPUT_FILE. */
174 extern lang_bitmap
get_base_file_bitmap (const char *input_file
);
176 /* Print, like fprintf, to O. */
177 extern void oprintf (outf_p o
, const char *S
, ...)