diff options
Diffstat (limited to 'gcc-4.2.1-5666.3/gcc/gengtype.h')
-rw-r--r-- | gcc-4.2.1-5666.3/gcc/gengtype.h | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/gcc-4.2.1-5666.3/gcc/gengtype.h b/gcc-4.2.1-5666.3/gcc/gengtype.h new file mode 100644 index 000000000..cb44b97fc --- /dev/null +++ b/gcc-4.2.1-5666.3/gcc/gengtype.h @@ -0,0 +1,188 @@ +/* Process source files and output type information. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ + +/* A file position, mostly for error messages. + The FILE element may be compared using pointer equality. */ +struct fileloc { + const char *file; + int line; +}; + +/* Kinds of types we can understand. */ +enum typekind { + TYPE_SCALAR, + TYPE_STRING, + TYPE_STRUCT, + TYPE_UNION, + TYPE_POINTER, + TYPE_ARRAY, + TYPE_LANG_STRUCT, + TYPE_PARAM_STRUCT +}; + +typedef struct pair *pair_p; +typedef struct type *type_p; +typedef unsigned lang_bitmap; + +/* Option data for the 'nested_ptr' option. */ +struct nested_ptr_data { + type_p type; + const char *convert_to; + const char *convert_from; +}; + +/* A way to pass data through to the output end. */ +typedef struct options { + struct options *next; + const char *name; + const char *info; +} *options_p; + +/* A name and a type. */ +struct pair { + pair_p next; + const char *name; + type_p type; + struct fileloc line; + options_p opt; +}; + +#define NUM_PARAM 10 + +/* A description of a type. */ +enum gc_used_enum + { + GC_UNUSED = 0, + GC_USED, + GC_MAYBE_POINTED_TO, + GC_POINTED_TO + }; + +struct type { + enum typekind kind; + type_p next; + type_p pointer_to; + enum gc_used_enum gc_used; + union { + type_p p; + struct { + const char *tag; + struct fileloc line; + pair_p fields; + options_p opt; + lang_bitmap bitmap; + type_p lang_struct; + } s; + char *sc; + struct { + type_p p; + const char *len; + } a; + struct { + type_p stru; + type_p param[NUM_PARAM]; + struct fileloc line; + } param_struct; + } u; +}; + +#define UNION_P(x) \ + ((x)->kind == TYPE_UNION || \ + ((x)->kind == TYPE_LANG_STRUCT \ + && (x)->u.s.lang_struct->kind == TYPE_UNION)) +#define UNION_OR_STRUCT_P(x) \ + ((x)->kind == TYPE_UNION \ + || (x)->kind == TYPE_STRUCT \ + || (x)->kind == TYPE_LANG_STRUCT) + +/* The one and only TYPE_STRING. */ +extern struct type string_type; + +/* Variables used to communicate between the lexer and the parser. */ +extern int lexer_toplevel_done; +extern struct fileloc lexer_line; + +/* Print an error message. */ +extern void error_at_line + (struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2; + +/* Combines xmalloc() and vasprintf(). */ +extern int xvasprintf (char **, const char *, va_list) + ATTRIBUTE_PRINTF (2, 0); +/* Like the above, but more convenient for quick coding. */ +extern char * xasprintf (const char *, ...) + ATTRIBUTE_PRINTF_1; + +/* Constructor routines for types. */ +extern void do_typedef (const char *s, type_p t, struct fileloc *pos); +extern type_p resolve_typedef (const char *s, struct fileloc *pos); +extern type_p new_structure (const char *name, int isunion, + struct fileloc *pos, pair_p fields, + options_p o); +extern type_p find_structure (const char *s, int isunion); +extern type_p create_scalar_type (const char *name, size_t name_len); +extern type_p create_pointer (type_p t); +extern type_p create_array (type_p t, const char *len); +extern options_p create_option (options_p, const char *name, const void *info); +extern type_p adjust_field_type (type_p, options_p); +extern void note_variable (const char *s, type_p t, options_p o, + struct fileloc *pos); +extern void note_yacc_type (options_p o, pair_p fields, + pair_p typeinfo, struct fileloc *pos); + +/* Lexer and parser routines, most automatically generated. */ +extern int yylex (void); +extern void yyerror (const char *); +extern int yyparse (void); +extern void parse_file (const char *name); + +/* Output file handling. */ + +/* Structure representing an output file. */ +struct outf +{ + struct outf *next; + const char *name; + size_t buflength; + size_t bufused; + char *buf; +}; + +typedef struct outf * outf_p; + +/* An output file, suitable for definitions, that can see declarations + made in INPUT_FILE and is linked into every language that uses + INPUT_FILE. */ +extern outf_p get_output_file_with_visibility + (const char *input_file); +const char *get_output_file_name (const char *); + +/* A list of output files suitable for definitions. There is one + BASE_FILES entry for each language. */ +extern outf_p base_files[]; + +/* A bitmap that specifies which of BASE_FILES should be used to + output a definition that is different for each language and must be + defined once in each language that uses INPUT_FILE. */ +extern lang_bitmap get_base_file_bitmap (const char *input_file); + +/* Print, like fprintf, to O. */ +extern void oprintf (outf_p o, const char *S, ...) + ATTRIBUTE_PRINTF_2; |