gdb - Local mods (compile)
[dragonfly.git] / contrib / gdb-7 / gdb / parser-defs.h
CommitLineData
5796c8dc
SS
1/* Parser definitions for GDB.
2
25e4902b 3 Copyright (C) 1986-2015 Free Software Foundation, Inc.
5796c8dc
SS
4
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
23#if !defined (PARSER_DEFS_H)
24#define PARSER_DEFS_H 1
25
26#include "doublest.h"
ef5ccd6c 27#include "vec.h"
25e4902b 28#include "expression.h"
5796c8dc
SS
29
30struct block;
25e4902b
AHJ
31struct language_defn;
32struct internalvar;
5796c8dc 33
cf7f2e2d
JM
34extern int parser_debug;
35
25e4902b
AHJ
36#define parse_gdbarch(ps) ((ps)->expout->gdbarch)
37#define parse_language(ps) ((ps)->expout->language_defn)
5796c8dc 38
25e4902b
AHJ
39struct parser_state
40{
41 /* The expression related to this parser state. */
42
43 struct expression *expout;
44
45 /* The size of the expression above. */
46
47 size_t expout_size;
48
49 /* The number of elements already in the expression. This is used
50 to know where to put new elements. */
51
52 size_t expout_ptr;
53};
5796c8dc
SS
54
55/* If this is nonzero, this block is used as the lexical context
56 for symbol names. */
57
ef5ccd6c 58extern const struct block *expression_context_block;
5796c8dc
SS
59
60/* If expression_context_block is non-zero, then this is the PC within
61 the block that we want to evaluate expressions at. When debugging
62 C or C++ code, we use this to find the exact line we're at, and
63 then look up the macro definitions active at that point. */
64extern CORE_ADDR expression_context_pc;
65
66/* The innermost context required by the stack and register variables
c50c785c 67 we've encountered so far. */
ef5ccd6c 68extern const struct block *innermost_block;
5796c8dc 69
5796c8dc
SS
70/* Number of arguments seen so far in innermost function call. */
71extern int arglist_len;
72
73/* A string token, either a char-string or bit-string. Char-strings are
c50c785c 74 used, for example, for the names of symbols. */
5796c8dc
SS
75
76struct stoken
77 {
c50c785c 78 /* Pointer to first byte of char-string or first bit of bit-string. */
25e4902b 79 const char *ptr;
c50c785c 80 /* Length of string in bytes for char-string or bits for bit-string. */
5796c8dc
SS
81 int length;
82 };
83
84struct typed_stoken
85 {
86 /* A language-specific type field. */
87 int type;
c50c785c 88 /* Pointer to first byte of char-string or first bit of bit-string. */
5796c8dc 89 char *ptr;
c50c785c 90 /* Length of string in bytes for char-string or bits for bit-string. */
5796c8dc
SS
91 int length;
92 };
93
94struct stoken_vector
95 {
96 int len;
97 struct typed_stoken *tokens;
98 };
99
100struct ttype
101 {
102 struct stoken stoken;
103 struct type *type;
104 };
105
106struct symtoken
107 {
108 struct stoken stoken;
109 struct symbol *sym;
110 int is_a_field_of_this;
111 };
112
113struct objc_class_str
114 {
115 struct stoken stoken;
116 struct type *type;
25e4902b 117 int theclass;
5796c8dc
SS
118 };
119
ef5ccd6c
JM
120typedef struct type *type_ptr;
121DEF_VEC_P (type_ptr);
5796c8dc
SS
122
123/* For parsing of complicated types.
124 An array should be preceded in the list by the size of the array. */
125enum type_pieces
126 {
127 tp_end = -1,
128 tp_pointer,
129 tp_reference,
130 tp_array,
ef5ccd6c
JM
131 tp_function,
132 tp_function_with_arguments,
5796c8dc
SS
133 tp_const,
134 tp_volatile,
ef5ccd6c
JM
135 tp_space_identifier,
136 tp_type_stack
5796c8dc
SS
137 };
138/* The stack can contain either an enum type_pieces or an int. */
139union type_stack_elt
140 {
141 enum type_pieces piece;
142 int int_val;
ef5ccd6c
JM
143 struct type_stack *stack_val;
144 VEC (type_ptr) *typelist_val;
5796c8dc 145 };
ef5ccd6c
JM
146
147/* The type stack is an instance of this structure. */
148
149struct type_stack
150{
151 /* Elements on the stack. */
152 union type_stack_elt *elements;
153 /* Current stack depth. */
154 int depth;
155 /* Allocated size of stack. */
156 int size;
157};
158
159/* Helper function to initialize the expout, expout_size, expout_ptr
25e4902b
AHJ
160 trio inside PS before it is used to store expression elements created
161 during the parsing of an expression. INITIAL_SIZE is the initial size of
ef5ccd6c
JM
162 the expout array. LANG is the language used to parse the expression.
163 And GDBARCH is the gdbarch to use during parsing. */
164
25e4902b
AHJ
165extern void initialize_expout (struct parser_state *ps,
166 size_t initial_size,
167 const struct language_defn *lang,
168 struct gdbarch *gdbarch);
ef5ccd6c 169
25e4902b
AHJ
170/* Helper function that reallocates the EXPOUT inside PS in order to
171 eliminate any unused space. It is generally used when the expression
172 has just been parsed and created. */
ef5ccd6c 173
25e4902b 174extern void reallocate_expout (struct parser_state *ps);
ef5ccd6c
JM
175
176/* Reverse an expression from suffix form (in which it is constructed)
177 to prefix form (in which we can conveniently print or execute it).
178 Ordinarily this always returns -1. However, if EXPOUT_LAST_STRUCT
179 is not -1 (i.e., we are trying to complete a field name), it will
180 return the index of the subexpression which is the left-hand-side
181 of the struct operation at EXPOUT_LAST_STRUCT. */
182
183extern int prefixify_expression (struct expression *expr);
5796c8dc 184
25e4902b 185extern void write_exp_elt_opcode (struct parser_state *, enum exp_opcode);
5796c8dc 186
25e4902b 187extern void write_exp_elt_sym (struct parser_state *, struct symbol *);
5796c8dc 188
25e4902b 189extern void write_exp_elt_longcst (struct parser_state *, LONGEST);
5796c8dc 190
25e4902b 191extern void write_exp_elt_dblcst (struct parser_state *, DOUBLEST);
5796c8dc 192
25e4902b 193extern void write_exp_elt_decfloatcst (struct parser_state *, gdb_byte *);
5796c8dc 194
25e4902b 195extern void write_exp_elt_type (struct parser_state *, struct type *);
5796c8dc 196
25e4902b 197extern void write_exp_elt_intern (struct parser_state *, struct internalvar *);
5796c8dc 198
25e4902b 199extern void write_exp_string (struct parser_state *, struct stoken);
5796c8dc 200
25e4902b
AHJ
201void write_exp_string_vector (struct parser_state *, int type,
202 struct stoken_vector *vec);
5796c8dc 203
25e4902b 204extern void write_exp_bitstring (struct parser_state *, struct stoken);
5796c8dc 205
25e4902b 206extern void write_exp_elt_block (struct parser_state *, const struct block *);
5796c8dc 207
25e4902b
AHJ
208extern void write_exp_elt_objfile (struct parser_state *,
209 struct objfile *objfile);
5796c8dc 210
25e4902b
AHJ
211extern void write_exp_msymbol (struct parser_state *,
212 struct bound_minimal_symbol);
5796c8dc 213
25e4902b 214extern void write_dollar_variable (struct parser_state *, struct stoken str);
5796c8dc 215
25e4902b 216extern void mark_struct_expression (struct parser_state *);
5796c8dc 217
25e4902b 218extern const char *find_template_name_end (const char *);
5796c8dc
SS
219
220extern void start_arglist (void);
221
222extern int end_arglist (void);
223
224extern char *copy_name (struct stoken);
225
ef5ccd6c
JM
226extern void insert_type (enum type_pieces);
227
5796c8dc
SS
228extern void push_type (enum type_pieces);
229
230extern void push_type_int (int);
231
25e4902b 232extern void insert_type_address_space (struct parser_state *, char *);
5796c8dc
SS
233
234extern enum type_pieces pop_type (void);
235
236extern int pop_type_int (void);
237
ef5ccd6c
JM
238extern struct type_stack *get_type_stack (void);
239
240extern struct type_stack *append_type_stack (struct type_stack *to,
241 struct type_stack *from);
242
243extern void push_type_stack (struct type_stack *stack);
244
245extern void type_stack_cleanup (void *arg);
246
247extern void push_typelist (VEC (type_ptr) *typelist);
248
5796c8dc
SS
249extern int length_of_subexp (struct expression *, int);
250
251extern int dump_subexp (struct expression *, struct ui_file *, int);
252
253extern int dump_subexp_body_standard (struct expression *,
254 struct ui_file *, int);
255
cf7f2e2d
JM
256extern void operator_length (const struct expression *, int, int *, int *);
257
258extern void operator_length_standard (const struct expression *, int, int *,
259 int *);
5796c8dc 260
cf7f2e2d
JM
261extern int operator_check_standard (struct expression *exp, int pos,
262 int (*objfile_func)
263 (struct objfile *objfile, void *data),
264 void *data);
5796c8dc
SS
265
266extern char *op_name_standard (enum exp_opcode);
267
268extern struct type *follow_types (struct type *);
269
270extern void null_post_parser (struct expression **, int);
271
c50c785c
JM
272extern int parse_float (const char *p, int len, DOUBLEST *d,
273 const char **suffix);
274
275extern int parse_c_float (struct gdbarch *gdbarch, const char *p, int len,
276 DOUBLEST *d, struct type **t);
277
5796c8dc
SS
278/* During parsing of a C expression, the pointer to the next character
279 is in this variable. */
280
25e4902b 281extern const char *lexptr;
5796c8dc 282
c50c785c 283/* After a token has been recognized, this variable points to it.
5796c8dc 284 Currently used only for error reporting. */
25e4902b 285extern const char *prev_lexptr;
5796c8dc 286
5796c8dc
SS
287/* Current depth in parentheses within the expression. */
288
289extern int paren_depth;
290
291/* Nonzero means stop parsing on first comma (if not within parentheses). */
292
293extern int comma_terminates;
294\f
295/* These codes indicate operator precedences for expression printing,
296 least tightly binding first. */
297/* Adding 1 to a precedence value is done for binary operators,
298 on the operand which is more tightly bound, so that operators
299 of equal precedence within that operand will get parentheses. */
300/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
301 they are used as the "surrounding precedence" to force
302 various kinds of things to be parenthesized. */
303enum precedence
304 {
305 PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
306 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
307 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
308 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
309 };
310
311/* Table mapping opcodes into strings for printing operators
312 and precedences of the operators. */
313
314struct op_print
315 {
316 char *string;
317 enum exp_opcode opcode;
318 /* Precedence of operator. These values are used only by comparisons. */
319 enum precedence precedence;
320
321 /* For a binary operator: 1 iff right associate.
c50c785c 322 For a unary operator: 1 iff postfix. */
5796c8dc
SS
323 int right_assoc;
324 };
325
326/* Information needed to print, prefixify, and evaluate expressions for
327 a given language. */
328
329struct exp_descriptor
330 {
331 /* Print subexpression. */
332 void (*print_subexp) (struct expression *, int *, struct ui_file *,
333 enum precedence);
334
335 /* Returns number of exp_elements needed to represent an operator and
336 the number of subexpressions it takes. */
cf7f2e2d
JM
337 void (*operator_length) (const struct expression*, int, int*, int *);
338
25e4902b
AHJ
339 /* Call OBJFILE_FUNC for any objfile found being referenced by the
340 single operator of EXP at position POS. Operator parameters are
341 located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
342 should never be called with NULL OBJFILE. OBJFILE_FUNC should
343 get passed an arbitrary caller supplied DATA pointer. If it
344 returns non-zero value then (any other) non-zero value should be
345 immediately returned to the caller. Otherwise zero should be
346 returned. */
cf7f2e2d
JM
347 int (*operator_check) (struct expression *exp, int pos,
348 int (*objfile_func) (struct objfile *objfile,
349 void *data),
350 void *data);
5796c8dc 351
ef5ccd6c
JM
352 /* Name of this operator for dumping purposes.
353 The returned value should never be NULL, even if EXP_OPCODE is
354 an unknown opcode (a string containing an image of the numeric
355 value of the opcode can be returned, for instance). */
5796c8dc
SS
356 char *(*op_name) (enum exp_opcode);
357
358 /* Dump the rest of this (prefix) expression after the operator
359 itself has been printed. See dump_subexp_body_standard in
360 (expprint.c). */
361 int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
362
363 /* Evaluate an expression. */
364 struct value *(*evaluate_exp) (struct type *, struct expression *,
365 int *, enum noside);
366 };
367
368
369/* Default descriptor containing standard definitions of all
370 elements. */
371extern const struct exp_descriptor exp_descriptor_standard;
372
373/* Functions used by language-specific extended operators to (recursively)
374 print/dump subexpressions. */
375
376extern void print_subexp (struct expression *, int *, struct ui_file *,
377 enum precedence);
378
379extern void print_subexp_standard (struct expression *, int *,
380 struct ui_file *, enum precedence);
381
382/* Function used to avoid direct calls to fprintf
383 in the code generated by the bison parser. */
384
cf7f2e2d
JM
385extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
386
387extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
5796c8dc 388
ef5ccd6c
JM
389extern void mark_completion_tag (enum type_code, const char *ptr,
390 int length);
391
25e4902b
AHJ
392/* Reallocate the `expout' pointer inside PS so that it can accommodate
393 at least LENELT expression elements. This function does nothing if
394 there is enough room for the elements. */
395
396extern void increase_expout_size (struct parser_state *ps, size_t lenelt);
397
5796c8dc 398#endif /* PARSER_DEFS_H */
ef5ccd6c 399