1 /* Process source files and output type information.
2 Copyright (C) 2002, 2003, 2004, 2007 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 3, 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 COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #ifndef GCC_GENGTYPE_H
21 #define GCC_GENGTYPE_H
23 /* A file position, mostly for error messages.
24 The FILE element may be compared using pointer equality. */
30 /* Data types handed around within, but opaque to, the lexer and parser. */
31 typedef struct pair
*pair_p
;
32 typedef struct type
*type_p
;
33 typedef const struct type
*const_type_p
;
34 typedef struct options
*options_p
;
36 /* Variables used to communicate between the lexer and the parser. */
37 extern int lexer_toplevel_done
;
38 extern struct fileloc lexer_line
;
40 /* Print an error message. */
41 extern void error_at_line
42 (struct fileloc
*pos
, const char *msg
, ...) ATTRIBUTE_PRINTF_2
;
44 /* Like asprintf, but calls fatal() on out of memory. */
45 extern char *xasprintf(const char *, ...) ATTRIBUTE_PRINTF_1
;
47 /* Constructor routines for types. */
48 extern void do_typedef (const char *s
, type_p t
, struct fileloc
*pos
);
49 extern void do_scalar_typedef (const char *s
, struct fileloc
*pos
);
50 extern type_p
resolve_typedef (const char *s
, struct fileloc
*pos
);
51 extern type_p
new_structure (const char *name
, int isunion
,
52 struct fileloc
*pos
, pair_p fields
,
54 extern type_p
find_structure (const char *s
, int isunion
);
55 extern type_p
create_scalar_type (const char *name
);
56 extern type_p
create_pointer (type_p t
);
57 extern type_p
create_array (type_p t
, const char *len
);
58 extern options_p
create_option (options_p
, const char *name
, const void *info
);
59 extern options_p
create_nested_ptr_option (options_p
, type_p t
,
60 const char *from
, const char *to
);
61 extern pair_p
create_field_at (pair_p next
, type_p type
, const char *name
,
62 options_p opt
, struct fileloc
*pos
);
63 extern pair_p
nreverse_pairs (pair_p list
);
64 extern type_p
adjust_field_type (type_p
, options_p
);
65 extern void note_variable (const char *s
, type_p t
, options_p o
,
67 extern void note_def_vec (const char *typename
, bool is_scalar
,
69 extern void note_def_vec_alloc (const char *type
, const char *astrat
,
72 /* Lexer and parser routines. */
73 extern int yylex (const char **yylval
);
74 extern void yybegin (const char *fname
);
75 extern void yyend (void);
76 extern void parse_file (const char *name
);
77 extern bool hit_error
;
83 /* Per standard convention, codes in the range (0, UCHAR_MAX]
84 represent single characters with those character codes. */
86 CHAR_TOKEN_OFFSET
= UCHAR_MAX
+ 1,
87 GTY_TOKEN
= CHAR_TOKEN_OFFSET
,
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