Fix build breakage on GNU/Linux AArch64
[deliverable/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
d16aafd8 26#include "doublest.h"
71918a86 27#include "vec.h"
74e5a346 28#include "expression.h"
d16aafd8 29
fe898f56 30struct block;
410a0ff2
SDJ
31struct language_defn;
32struct internalvar;
fe898f56 33
92981e24
TT
34extern int parser_debug;
35
410a0ff2
SDJ
36#define parse_gdbarch(ps) ((ps)->expout->gdbarch)
37#define parse_language(ps) ((ps)->expout->language_defn)
c906108c 38
410a0ff2
SDJ
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};
3e79cecf 54
c906108c
SS
55/* If this is nonzero, this block is used as the lexical context
56 for symbol names. */
57
270140bd 58extern const struct block *expression_context_block;
c906108c 59
84f0252a
JB
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. */
f7321c06 64extern CORE_ADDR expression_context_pc;
84f0252a 65
c906108c 66/* The innermost context required by the stack and register variables
0df8b418 67 we've encountered so far. */
270140bd 68extern const struct block *innermost_block;
c906108c 69
c906108c
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
0df8b418 74 used, for example, for the names of symbols. */
c906108c
SS
75
76struct stoken
77 {
0df8b418 78 /* Pointer to first byte of char-string or first bit of bit-string. */
d7561cbb 79 const char *ptr;
0df8b418 80 /* Length of string in bytes for char-string or bits for bit-string. */
c906108c
SS
81 int length;
82 };
83
6c7a06a3
TT
84struct typed_stoken
85 {
86 /* A language-specific type field. */
87 int type;
0df8b418 88 /* Pointer to first byte of char-string or first bit of bit-string. */
6c7a06a3 89 char *ptr;
0df8b418 90 /* Length of string in bytes for char-string or bits for bit-string. */
6c7a06a3
TT
91 int length;
92 };
93
94struct stoken_vector
95 {
96 int len;
97 struct typed_stoken *tokens;
98 };
99
c906108c
SS
100struct ttype
101 {
102 struct stoken stoken;
103 struct type *type;
104 };
105
106struct symtoken
107 {
108 struct stoken stoken;
d12307c1 109 struct block_symbol sym;
c906108c
SS
110 int is_a_field_of_this;
111 };
112
379b85df
AF
113struct objc_class_str
114 {
115 struct stoken stoken;
116 struct type *type;
fe978cb0 117 int theclass;
379b85df
AF
118 };
119
71918a86
TT
120typedef struct type *type_ptr;
121DEF_VEC_P (type_ptr);
379b85df 122
c906108c
SS
123/* For parsing of complicated types.
124 An array should be preceded in the list by the size of the array. */
125enum type_pieces
c5aa993b 126 {
2e2394a0
MS
127 tp_end = -1,
128 tp_pointer,
129 tp_reference,
53cc15f5 130 tp_rvalue_reference,
2e2394a0 131 tp_array,
71918a86
TT
132 tp_function,
133 tp_function_with_arguments,
2e2394a0 134 tp_const,
47663de5 135 tp_volatile,
fcde5961
TT
136 tp_space_identifier,
137 tp_type_stack
c5aa993b 138 };
c906108c 139/* The stack can contain either an enum type_pieces or an int. */
c5aa993b
JM
140union type_stack_elt
141 {
142 enum type_pieces piece;
143 int int_val;
fcde5961 144 struct type_stack *stack_val;
71918a86 145 VEC (type_ptr) *typelist_val;
c5aa993b 146 };
1a7d0ce4
TT
147
148/* The type stack is an instance of this structure. */
149
150struct type_stack
151{
152 /* Elements on the stack. */
153 union type_stack_elt *elements;
154 /* Current stack depth. */
155 int depth;
156 /* Allocated size of stack. */
157 int size;
158};
c906108c 159
55aa24fb 160/* Helper function to initialize the expout, expout_size, expout_ptr
410a0ff2
SDJ
161 trio inside PS before it is used to store expression elements created
162 during the parsing of an expression. INITIAL_SIZE is the initial size of
55aa24fb
SDJ
163 the expout array. LANG is the language used to parse the expression.
164 And GDBARCH is the gdbarch to use during parsing. */
165
410a0ff2
SDJ
166extern void initialize_expout (struct parser_state *ps,
167 size_t initial_size,
168 const struct language_defn *lang,
169 struct gdbarch *gdbarch);
55aa24fb 170
410a0ff2
SDJ
171/* Helper function that reallocates the EXPOUT inside PS in order to
172 eliminate any unused space. It is generally used when the expression
173 has just been parsed and created. */
55aa24fb 174
410a0ff2 175extern void reallocate_expout (struct parser_state *ps);
55aa24fb
SDJ
176
177/* Reverse an expression from suffix form (in which it is constructed)
178 to prefix form (in which we can conveniently print or execute it).
179 Ordinarily this always returns -1. However, if EXPOUT_LAST_STRUCT
180 is not -1 (i.e., we are trying to complete a field name), it will
181 return the index of the subexpression which is the left-hand-side
182 of the struct operation at EXPOUT_LAST_STRUCT. */
183
184extern int prefixify_expression (struct expression *expr);
185
410a0ff2 186extern void write_exp_elt_opcode (struct parser_state *, enum exp_opcode);
c906108c 187
410a0ff2 188extern void write_exp_elt_sym (struct parser_state *, struct symbol *);
c906108c 189
410a0ff2 190extern void write_exp_elt_longcst (struct parser_state *, LONGEST);
c906108c 191
410a0ff2 192extern void write_exp_elt_dblcst (struct parser_state *, DOUBLEST);
c906108c 193
410a0ff2 194extern void write_exp_elt_decfloatcst (struct parser_state *, gdb_byte *);
27bc4d80 195
410a0ff2 196extern void write_exp_elt_type (struct parser_state *, struct type *);
c906108c 197
410a0ff2 198extern void write_exp_elt_intern (struct parser_state *, struct internalvar *);
c906108c 199
410a0ff2 200extern void write_exp_string (struct parser_state *, struct stoken);
c906108c 201
410a0ff2
SDJ
202void write_exp_string_vector (struct parser_state *, int type,
203 struct stoken_vector *vec);
6c7a06a3 204
410a0ff2 205extern void write_exp_bitstring (struct parser_state *, struct stoken);
c906108c 206
410a0ff2 207extern void write_exp_elt_block (struct parser_state *, const struct block *);
c906108c 208
410a0ff2
SDJ
209extern void write_exp_elt_objfile (struct parser_state *,
210 struct objfile *objfile);
9e35dae4 211
410a0ff2
SDJ
212extern void write_exp_msymbol (struct parser_state *,
213 struct bound_minimal_symbol);
c906108c 214
410a0ff2 215extern void write_dollar_variable (struct parser_state *, struct stoken str);
c906108c 216
410a0ff2 217extern void mark_struct_expression (struct parser_state *);
65d12d83 218
d7561cbb 219extern const char *find_template_name_end (const char *);
c906108c 220
a14ed312 221extern void start_arglist (void);
c906108c 222
a14ed312 223extern int end_arglist (void);
c906108c 224
a14ed312 225extern char *copy_name (struct stoken);
c906108c 226
95c391b6
TT
227extern void insert_type (enum type_pieces);
228
a14ed312 229extern void push_type (enum type_pieces);
c906108c 230
a14ed312 231extern void push_type_int (int);
c906108c 232
410a0ff2 233extern void insert_type_address_space (struct parser_state *, char *);
47663de5 234
a14ed312 235extern enum type_pieces pop_type (void);
c906108c 236
a14ed312 237extern int pop_type_int (void);
c906108c 238
fcde5961
TT
239extern struct type_stack *get_type_stack (void);
240
241extern struct type_stack *append_type_stack (struct type_stack *to,
242 struct type_stack *from);
243
244extern void push_type_stack (struct type_stack *stack);
245
246extern void type_stack_cleanup (void *arg);
247
71918a86
TT
248extern void push_typelist (VEC (type_ptr) *typelist);
249
5f9769d1
PH
250extern int dump_subexp (struct expression *, struct ui_file *, int);
251
252extern int dump_subexp_body_standard (struct expression *,
253 struct ui_file *, int);
254
554794dc 255extern void operator_length (const struct expression *, int, int *, int *);
24daaebc 256
554794dc
SDJ
257extern void operator_length_standard (const struct expression *, int, int *,
258 int *);
5f9769d1 259
c0201579
JK
260extern int operator_check_standard (struct expression *exp, int pos,
261 int (*objfile_func)
262 (struct objfile *objfile, void *data),
263 void *data);
264
a121b7c1 265extern const char *op_name_standard (enum exp_opcode);
5f9769d1 266
a14ed312 267extern struct type *follow_types (struct type *);
c906108c 268
3693fdb3
PA
269extern type_instance_flags follow_type_instance_flags ();
270
e85c3284
PH
271extern void null_post_parser (struct expression **, int);
272
d30f5e1f
DE
273extern int parse_float (const char *p, int len, DOUBLEST *d,
274 const char **suffix);
275
276extern int parse_c_float (struct gdbarch *gdbarch, const char *p, int len,
277 DOUBLEST *d, struct type **t);
278
c906108c
SS
279/* During parsing of a C expression, the pointer to the next character
280 is in this variable. */
281
d7561cbb 282extern const char *lexptr;
c906108c 283
0df8b418 284/* After a token has been recognized, this variable points to it.
665132f9 285 Currently used only for error reporting. */
d7561cbb 286extern const char *prev_lexptr;
665132f9 287
c906108c
SS
288/* Current depth in parentheses within the expression. */
289
290extern int paren_depth;
291
292/* Nonzero means stop parsing on first comma (if not within parentheses). */
293
294extern int comma_terminates;
295\f
296/* These codes indicate operator precedences for expression printing,
297 least tightly binding first. */
298/* Adding 1 to a precedence value is done for binary operators,
299 on the operand which is more tightly bound, so that operators
300 of equal precedence within that operand will get parentheses. */
301/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
302 they are used as the "surrounding precedence" to force
303 various kinds of things to be parenthesized. */
304enum precedence
c5aa993b
JM
305 {
306 PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
307 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
308 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
309 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
310 };
c906108c
SS
311
312/* Table mapping opcodes into strings for printing operators
313 and precedences of the operators. */
314
315struct op_print
c5aa993b 316 {
a121b7c1 317 const char *string;
c5aa993b
JM
318 enum exp_opcode opcode;
319 /* Precedence of operator. These values are used only by comparisons. */
320 enum precedence precedence;
321
322 /* For a binary operator: 1 iff right associate.
0df8b418 323 For a unary operator: 1 iff postfix. */
c5aa993b
JM
324 int right_assoc;
325 };
c906108c 326
5f9769d1
PH
327/* Information needed to print, prefixify, and evaluate expressions for
328 a given language. */
329
330struct exp_descriptor
331 {
332 /* Print subexpression. */
333 void (*print_subexp) (struct expression *, int *, struct ui_file *,
334 enum precedence);
335
336 /* Returns number of exp_elements needed to represent an operator and
337 the number of subexpressions it takes. */
554794dc 338 void (*operator_length) (const struct expression*, int, int*, int *);
5f9769d1 339
a1c7835a
YQ
340 /* Call OBJFILE_FUNC for any objfile found being referenced by the
341 single operator of EXP at position POS. Operator parameters are
342 located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
343 should never be called with NULL OBJFILE. OBJFILE_FUNC should
344 get passed an arbitrary caller supplied DATA pointer. If it
345 returns non-zero value then (any other) non-zero value should be
346 immediately returned to the caller. Otherwise zero should be
347 returned. */
c0201579
JK
348 int (*operator_check) (struct expression *exp, int pos,
349 int (*objfile_func) (struct objfile *objfile,
350 void *data),
351 void *data);
352
a5b12627
JB
353 /* Name of this operator for dumping purposes.
354 The returned value should never be NULL, even if EXP_OPCODE is
355 an unknown opcode (a string containing an image of the numeric
356 value of the opcode can be returned, for instance). */
a121b7c1 357 const char *(*op_name) (enum exp_opcode);
5f9769d1
PH
358
359 /* Dump the rest of this (prefix) expression after the operator
360 itself has been printed. See dump_subexp_body_standard in
361 (expprint.c). */
362 int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
363
364 /* Evaluate an expression. */
365 struct value *(*evaluate_exp) (struct type *, struct expression *,
366 int *, enum noside);
367 };
368
369
370/* Default descriptor containing standard definitions of all
371 elements. */
372extern const struct exp_descriptor exp_descriptor_standard;
373
374/* Functions used by language-specific extended operators to (recursively)
375 print/dump subexpressions. */
376
377extern void print_subexp (struct expression *, int *, struct ui_file *,
378 enum precedence);
379
380extern void print_subexp_standard (struct expression *, int *,
381 struct ui_file *, enum precedence);
382
f461f5cf
PM
383/* Function used to avoid direct calls to fprintf
384 in the code generated by the bison parser. */
385
a0b31db1 386extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
f461f5cf 387
c0201579
JK
388extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
389
2f68a895
TT
390extern void mark_completion_tag (enum type_code, const char *ptr,
391 int length);
392
410a0ff2
SDJ
393/* Reallocate the `expout' pointer inside PS so that it can accommodate
394 at least LENELT expression elements. This function does nothing if
395 there is enough room for the elements. */
396
397extern void increase_expout_size (struct parser_state *ps, size_t lenelt);
398
c5aa993b 399#endif /* PARSER_DEFS_H */
2f68a895 400
This page took 2.48166 seconds and 4 git commands to generate.