OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [parser-defs.h] - Blame information for rev 517

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

Line No. Rev Author Line
1 330 jeremybenn
/* Parser definitions for GDB.
2
 
3
   Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4
   1998, 1999, 2000, 2002, 2007, 2008, 2009, 2010
5
   Free Software Foundation, Inc.
6
 
7
   Modified from expread.y by the Department of Computer Science at the
8
   State University of New York at Buffalo.
9
 
10
   This file is part of GDB.
11
 
12
   This program is free software; you can redistribute it and/or modify
13
   it under the terms of the GNU General Public License as published by
14
   the Free Software Foundation; either version 3 of the License, or
15
   (at your option) any later version.
16
 
17
   This program is distributed in the hope that it will be useful,
18
   but WITHOUT ANY WARRANTY; without even the implied warranty of
19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
   GNU General Public License for more details.
21
 
22
   You should have received a copy of the GNU General Public License
23
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
24
 
25
#if !defined (PARSER_DEFS_H)
26
#define PARSER_DEFS_H 1
27
 
28
#include "doublest.h"
29
 
30
struct block;
31
 
32
extern int parser_debug;
33
 
34
extern struct expression *expout;
35
extern int expout_size;
36
extern int expout_ptr;
37
 
38
#define parse_gdbarch (expout->gdbarch)
39
#define parse_language (expout->language_defn)
40
 
41
/* If this is nonzero, this block is used as the lexical context
42
   for symbol names.  */
43
 
44
extern struct block *expression_context_block;
45
 
46
/* If expression_context_block is non-zero, then this is the PC within
47
   the block that we want to evaluate expressions at.  When debugging
48
   C or C++ code, we use this to find the exact line we're at, and
49
   then look up the macro definitions active at that point.  */
50
extern CORE_ADDR expression_context_pc;
51
 
52
/* The innermost context required by the stack and register variables
53
   we've encountered so far. */
54
extern struct block *innermost_block;
55
 
56
/* The block in which the most recently discovered symbol was found.
57
   FIXME: Should be declared along with lookup_symbol in symtab.h; is not
58
   related specifically to parsing.  */
59
extern struct block *block_found;
60
 
61
/* Number of arguments seen so far in innermost function call.  */
62
extern int arglist_len;
63
 
64
/* A string token, either a char-string or bit-string.  Char-strings are
65
   used, for example, for the names of symbols. */
66
 
67
struct stoken
68
  {
69
    /* Pointer to first byte of char-string or first bit of bit-string */
70
    char *ptr;
71
    /* Length of string in bytes for char-string or bits for bit-string */
72
    int length;
73
  };
74
 
75
struct typed_stoken
76
  {
77
    /* A language-specific type field.  */
78
    int type;
79
    /* Pointer to first byte of char-string or first bit of bit-string */
80
    char *ptr;
81
    /* Length of string in bytes for char-string or bits for bit-string */
82
    int length;
83
  };
84
 
85
struct stoken_vector
86
  {
87
    int len;
88
    struct typed_stoken *tokens;
89
  };
90
 
91
struct ttype
92
  {
93
    struct stoken stoken;
94
    struct type *type;
95
  };
96
 
97
struct symtoken
98
  {
99
    struct stoken stoken;
100
    struct symbol *sym;
101
    int is_a_field_of_this;
102
  };
103
 
104
struct objc_class_str
105
  {
106
    struct stoken stoken;
107
    struct type *type;
108
    int class;
109
  };
110
 
111
 
112
/* For parsing of complicated types.
113
   An array should be preceded in the list by the size of the array.  */
114
enum type_pieces
115
  {
116
    tp_end = -1,
117
    tp_pointer,
118
    tp_reference,
119
    tp_array,
120
    tp_function,
121
    tp_const,
122
    tp_volatile,
123
    tp_space_identifier
124
  };
125
/* The stack can contain either an enum type_pieces or an int.  */
126
union type_stack_elt
127
  {
128
    enum type_pieces piece;
129
    int int_val;
130
  };
131
extern union type_stack_elt *type_stack;
132
extern int type_stack_depth, type_stack_size;
133
 
134
extern void write_exp_elt (union exp_element);
135
 
136
extern void write_exp_elt_opcode (enum exp_opcode);
137
 
138
extern void write_exp_elt_sym (struct symbol *);
139
 
140
extern void write_exp_elt_longcst (LONGEST);
141
 
142
extern void write_exp_elt_dblcst (DOUBLEST);
143
 
144
extern void write_exp_elt_decfloatcst (gdb_byte *);
145
 
146
extern void write_exp_elt_type (struct type *);
147
 
148
extern void write_exp_elt_intern (struct internalvar *);
149
 
150
extern void write_exp_string (struct stoken);
151
 
152
void write_exp_string_vector (int type, struct stoken_vector *vec);
153
 
154
extern void write_exp_bitstring (struct stoken);
155
 
156
extern void write_exp_elt_block (struct block *);
157
 
158
extern void write_exp_elt_objfile (struct objfile *objfile);
159
 
160
extern void write_exp_msymbol (struct minimal_symbol *);
161
 
162
extern void write_dollar_variable (struct stoken str);
163
 
164
extern void mark_struct_expression (void);
165
 
166
extern char *find_template_name_end (char *);
167
 
168
extern void start_arglist (void);
169
 
170
extern int end_arglist (void);
171
 
172
extern char *copy_name (struct stoken);
173
 
174
extern void push_type (enum type_pieces);
175
 
176
extern void push_type_int (int);
177
 
178
extern void push_type_address_space (char *);
179
 
180
extern enum type_pieces pop_type (void);
181
 
182
extern int pop_type_int (void);
183
 
184
extern int length_of_subexp (struct expression *, int);
185
 
186
extern int dump_subexp (struct expression *, struct ui_file *, int);
187
 
188
extern int dump_subexp_body_standard (struct expression *,
189
                                      struct ui_file *, int);
190
 
191
extern void operator_length (const struct expression *, int, int *, int *);
192
 
193
extern void operator_length_standard (const struct expression *, int, int *,
194
                                      int *);
195
 
196
extern int operator_check_standard (struct expression *exp, int pos,
197
                                    int (*objfile_func)
198
                                      (struct objfile *objfile, void *data),
199
                                    void *data);
200
 
201
extern char *op_name_standard (enum exp_opcode);
202
 
203
extern struct type *follow_types (struct type *);
204
 
205
extern void null_post_parser (struct expression **, int);
206
 
207
/* During parsing of a C expression, the pointer to the next character
208
   is in this variable.  */
209
 
210
extern char *lexptr;
211
 
212
/* After a token has been recognized, this variable points to it.
213
   Currently used only for error reporting.  */
214
extern char *prev_lexptr;
215
 
216
/* Tokens that refer to names do so with explicit pointer and length,
217
   so they can share the storage that lexptr is parsing.
218
 
219
   When it is necessary to pass a name to a function that expects
220
   a null-terminated string, the substring is copied out
221
   into a block of storage that namecopy points to.
222
 
223
   namecopy is allocated once, guaranteed big enough, for each parsing.  */
224
 
225
extern char *namecopy;
226
 
227
/* Current depth in parentheses within the expression.  */
228
 
229
extern int paren_depth;
230
 
231
/* Nonzero means stop parsing on first comma (if not within parentheses).  */
232
 
233
extern int comma_terminates;
234
 
235
/* These codes indicate operator precedences for expression printing,
236
   least tightly binding first.  */
237
/* Adding 1 to a precedence value is done for binary operators,
238
   on the operand which is more tightly bound, so that operators
239
   of equal precedence within that operand will get parentheses.  */
240
/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
241
   they are used as the "surrounding precedence" to force
242
   various kinds of things to be parenthesized.  */
243
enum precedence
244
  {
245
    PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
246
    PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
247
    PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
248
    PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
249
  };
250
 
251
/* Table mapping opcodes into strings for printing operators
252
   and precedences of the operators.  */
253
 
254
struct op_print
255
  {
256
    char *string;
257
    enum exp_opcode opcode;
258
    /* Precedence of operator.  These values are used only by comparisons.  */
259
    enum precedence precedence;
260
 
261
    /* For a binary operator:  1 iff right associate.
262
       For a unary operator:  1 iff postfix. */
263
    int right_assoc;
264
  };
265
 
266
/* Information needed to print, prefixify, and evaluate expressions for
267
   a given language.  */
268
 
269
struct exp_descriptor
270
  {
271
    /* Print subexpression.  */
272
    void (*print_subexp) (struct expression *, int *, struct ui_file *,
273
                          enum precedence);
274
 
275
    /* Returns number of exp_elements needed to represent an operator and
276
       the number of subexpressions it takes.  */
277
    void (*operator_length) (const struct expression*, int, int*, int *);
278
 
279
    /* Call TYPE_FUNC and OBJFILE_FUNC for any TYPE and OBJFILE found being
280
       referenced by the single operator of EXP at position POS.  Operator
281
       parameters are located at positive (POS + number) offsets in EXP.
282
       The functions should never be called with NULL TYPE or NULL OBJFILE.
283
       Functions should get passed an arbitrary caller supplied DATA pointer.
284
       If any of the functions returns non-zero value then (any other) non-zero
285
       value should be immediately returned to the caller.  Otherwise zero
286
       should be returned.  */
287
    int (*operator_check) (struct expression *exp, int pos,
288
                           int (*objfile_func) (struct objfile *objfile,
289
                                                void *data),
290
                           void *data);
291
 
292
    /* Name of this operator for dumping purposes.  */
293
    char *(*op_name) (enum exp_opcode);
294
 
295
    /* Dump the rest of this (prefix) expression after the operator
296
       itself has been printed.  See dump_subexp_body_standard in
297
       (expprint.c).  */
298
    int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
299
 
300
    /* Evaluate an expression.  */
301
    struct value *(*evaluate_exp) (struct type *, struct expression *,
302
                                   int *, enum noside);
303
  };
304
 
305
 
306
/* Default descriptor containing standard definitions of all
307
   elements.  */
308
extern const struct exp_descriptor exp_descriptor_standard;
309
 
310
/* Functions used by language-specific extended operators to (recursively)
311
   print/dump subexpressions.  */
312
 
313
extern void print_subexp (struct expression *, int *, struct ui_file *,
314
                          enum precedence);
315
 
316
extern void print_subexp_standard (struct expression *, int *,
317
                                   struct ui_file *, enum precedence);
318
 
319
/* Function used to avoid direct calls to fprintf
320
   in the code generated by the bison parser.  */
321
 
322
extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
323
 
324
extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
325
 
326
#endif /* PARSER_DEFS_H */

powered by: WebSVN 2.1.0

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