1/* Process source files and output type information. 2 Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify it under 7the terms of the GNU General Public License as published by the Free 8Software Foundation; either version 3, or (at your option) any later 9version. 10 11GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12WARRANTY; without even the implied warranty of MERCHANTABILITY or 13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14for more details. 15 16You should have received a copy of the GNU General Public License 17along with GCC; see the file COPYING3. If not see 18<http://www.gnu.org/licenses/>. */ 19 20#ifndef GCC_GENGTYPE_H 21#define GCC_GENGTYPE_H 22 23/* A file position, mostly for error messages. 24 The FILE element may be compared using pointer equality. */ 25struct fileloc { 26 const char *file; 27 int line; 28}; 29 30/* Data types handed around within, but opaque to, the lexer and parser. */ 31typedef struct pair *pair_p; 32typedef struct type *type_p; 33typedef const struct type *const_type_p; 34typedef struct options *options_p; 35 36/* Variables used to communicate between the lexer and the parser. */ 37extern int lexer_toplevel_done; 38extern struct fileloc lexer_line; 39 40/* Print an error message. */ 41extern void error_at_line 42 (struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2; 43 44/* Like asprintf, but calls fatal() on out of memory. */ 45extern char *xasprintf(const char *, ...) ATTRIBUTE_PRINTF_1; 46 47/* Constructor routines for types. */ 48extern void do_typedef (const char *s, type_p t, struct fileloc *pos); 49extern void do_scalar_typedef (const char *s, struct fileloc *pos); 50extern type_p resolve_typedef (const char *s, struct fileloc *pos); 51extern type_p new_structure (const char *name, int isunion, 52 struct fileloc *pos, pair_p fields, 53 options_p o); 54extern type_p find_structure (const char *s, int isunion); 55extern type_p create_scalar_type (const char *name); 56extern type_p create_pointer (type_p t); 57extern type_p create_array (type_p t, const char *len); 58extern options_p create_option (options_p, const char *name, const void *info); 59extern options_p create_nested_ptr_option (options_p, type_p t, 60 const char *from, const char *to); 61extern pair_p create_field_at (pair_p next, type_p type, const char *name, 62 options_p opt, struct fileloc *pos); 63extern pair_p nreverse_pairs (pair_p list); 64extern type_p adjust_field_type (type_p, options_p); 65extern void note_variable (const char *s, type_p t, options_p o, 66 struct fileloc *pos); 67extern void note_def_vec (const char *type_name, bool is_scalar, 68 struct fileloc *pos); 69extern void note_def_vec_alloc (const char *type, const char *astrat, 70 struct fileloc *pos); 71 72/* Lexer and parser routines. */ 73extern int yylex (const char **yylval); 74extern void yybegin (const char *fname); 75extern void yyend (void); 76extern void parse_file (const char *name); 77extern bool hit_error; 78 79/* Token codes. */ 80enum { 81 EOF_TOKEN = 0, 82 83 /* Per standard convention, codes in the range (0, UCHAR_MAX] 84 represent single characters with those character codes. */ 85 86 CHAR_TOKEN_OFFSET = UCHAR_MAX + 1, 87 GTY_TOKEN = CHAR_TOKEN_OFFSET, 88 TYPEDEF, 89 EXTERN, 90 STATIC, 91 UNION, 92 STRUCT, 93 ENUM, 94 VEC_TOKEN, 95 DEFVEC_OP, 96 DEFVEC_I, 97 DEFVEC_ALLOC, 98 ELLIPSIS, 99 PTR_ALIAS, 100 NESTED_PTR, 101 PARAM_IS, 102 NUM, 103 SCALAR, 104 ID, 105 STRING, 106 CHAR, 107 ARRAY, 108 109 /* print_token assumes that any token >= FIRST_TOKEN_WITH_VALUE may have 110 a meaningful value to be printed. */ 111 FIRST_TOKEN_WITH_VALUE = PARAM_IS 112}; 113#endif 114