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