OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [gengtype.h] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* Process source files and output type information.
2
   Copyright (C) 2002, 2003, 2004 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, 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301, 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
typedef struct pair *pair_p;
41
typedef struct type *type_p;
42
typedef unsigned lang_bitmap;
43
 
44
/* Option data for the 'nested_ptr' option.  */
45
struct nested_ptr_data {
46
  type_p type;
47
  const char *convert_to;
48
  const char *convert_from;
49
};
50
 
51
/* A way to pass data through to the output end.  */
52
typedef struct options {
53
  struct options *next;
54
  const char *name;
55
  const char *info;
56
} *options_p;
57
 
58
/* A name and a type.  */
59
struct pair {
60
  pair_p next;
61
  const char *name;
62
  type_p type;
63
  struct fileloc line;
64
  options_p opt;
65
};
66
 
67
#define NUM_PARAM 10
68
 
69
/* A description of a type.  */
70
enum gc_used_enum
71
  {
72
    GC_UNUSED = 0,
73
    GC_USED,
74
    GC_MAYBE_POINTED_TO,
75
    GC_POINTED_TO
76
  };
77
 
78
struct type {
79
  enum typekind kind;
80
  type_p next;
81
  type_p pointer_to;
82
  enum gc_used_enum gc_used;
83
  union {
84
    type_p p;
85
    struct {
86
      const char *tag;
87
      struct fileloc line;
88
      pair_p fields;
89
      options_p opt;
90
      lang_bitmap bitmap;
91
      type_p lang_struct;
92
    } s;
93
    char *sc;
94
    struct {
95
      type_p p;
96
      const char *len;
97
    } a;
98
    struct {
99
      type_p stru;
100
      type_p param[NUM_PARAM];
101
      struct fileloc line;
102
    } param_struct;
103
  } u;
104
};
105
 
106
#define UNION_P(x)                                      \
107
 ((x)->kind == TYPE_UNION ||                            \
108
  ((x)->kind == TYPE_LANG_STRUCT                        \
109
   && (x)->u.s.lang_struct->kind == TYPE_UNION))
110
#define UNION_OR_STRUCT_P(x)                    \
111
 ((x)->kind == TYPE_UNION                       \
112
  || (x)->kind == TYPE_STRUCT                   \
113
  || (x)->kind == TYPE_LANG_STRUCT)
114
 
115
/* The one and only TYPE_STRING.  */
116
extern struct type string_type;
117
 
118
/* Variables used to communicate between the lexer and the parser.  */
119
extern int lexer_toplevel_done;
120
extern struct fileloc lexer_line;
121
 
122
/* Print an error message.  */
123
extern void error_at_line
124
  (struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2;
125
 
126
/* Combines xmalloc() and vasprintf().  */
127
extern int xvasprintf (char **, const char *, va_list)
128
     ATTRIBUTE_PRINTF (2, 0);
129
/* Like the above, but more convenient for quick coding.  */
130
extern char * xasprintf (const char *, ...)
131
     ATTRIBUTE_PRINTF_1;
132
 
133
/* Constructor routines for types.  */
134
extern void do_typedef (const char *s, type_p t, struct fileloc *pos);
135
extern type_p resolve_typedef (const char *s, struct fileloc *pos);
136
extern void new_structure (const char *name, int isunion,
137
                           struct fileloc *pos, pair_p fields,
138
                           options_p o);
139
extern type_p find_structure (const char *s, int isunion);
140
extern type_p create_scalar_type (const char *name, size_t name_len);
141
extern type_p create_pointer (type_p t);
142
extern type_p create_array (type_p t, const char *len);
143
extern options_p create_option (const char *name, void *info);
144
extern type_p adjust_field_type (type_p, options_p);
145
extern void note_variable (const char *s, type_p t, options_p o,
146
                           struct fileloc *pos);
147
extern void note_yacc_type (options_p o, pair_p fields,
148
                            pair_p typeinfo, struct fileloc *pos);
149
 
150
/* Lexer and parser routines, most automatically generated.  */
151
extern int yylex (void);
152
extern void yyerror (const char *);
153
extern int yyparse (void);
154
extern void parse_file (const char *name);
155
 
156
/* Output file handling.  */
157
 
158
/* Structure representing an output file.  */
159
struct outf
160
{
161
  struct outf *next;
162
  const char *name;
163
  size_t buflength;
164
  size_t bufused;
165
  char *buf;
166
};
167
 
168
typedef struct outf * outf_p;
169
 
170
/* An output file, suitable for definitions, that can see declarations
171
   made in INPUT_FILE and is linked into every language that uses
172
   INPUT_FILE.  */
173
extern outf_p get_output_file_with_visibility
174
   (const char *input_file);
175
const char *get_output_file_name (const char *);
176
 
177
/* A list of output files suitable for definitions.  There is one
178
   BASE_FILES entry for each language.  */
179
extern outf_p base_files[];
180
 
181
/* A bitmap that specifies which of BASE_FILES should be used to
182
   output a definition that is different for each language and must be
183
   defined once in each language that uses INPUT_FILE.  */
184
extern lang_bitmap get_base_file_bitmap (const char *input_file);
185
 
186
/* Print, like fprintf, to O.  */
187
extern void oprintf (outf_p o, const char *S, ...)
188
     ATTRIBUTE_PRINTF_2;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.