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