Implement Ada min and max operations
[deliverable/binutils-gdb.git] / gdb / parser-defs.h
CommitLineData
c906108c 1/* Parser definitions for GDB.
96cb11df 2
3666a048 3 Copyright (C) 1986-2021 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
74e5a346 26#include "expression.h"
0d12e84c 27#include "symtab.h"
d16aafd8 28
fe898f56 29struct block;
410a0ff2
SDJ
30struct language_defn;
31struct internalvar;
699bd4cf 32class innermost_block_tracker;
fe898f56 33
491144b5 34extern bool parser_debug;
92981e24 35
37eedb39
TT
36/* A class that can be used to build a "struct expression". */
37
38struct expr_builder
410a0ff2 39{
1201a264
TT
40 /* Constructor. LANG is the language used to parse the expression.
41 And GDBARCH is the gdbarch to use during parsing. */
e9d9f57e 42
37eedb39 43 expr_builder (const struct language_defn *lang,
e9d9f57e
TT
44 struct gdbarch *gdbarch);
45
37eedb39 46 DISABLE_COPY_AND_ASSIGN (expr_builder);
410a0ff2 47
e9d9f57e
TT
48 /* Resize the allocated expression to the correct size, and return
49 it as an expression_up -- passing ownership to the caller. */
41e3300a 50 ATTRIBUTE_UNUSED_RESULT expression_up release ();
410a0ff2 51
fa9f5be6
TT
52 /* Return the gdbarch that was passed to the constructor. */
53
54 struct gdbarch *gdbarch ()
55 {
56 return expout->gdbarch;
57 }
58
73923d7e
TT
59 /* Return the language that was passed to the constructor. */
60
61 const struct language_defn *language ()
62 {
63 return expout->language_defn;
64 }
65
410a0ff2
SDJ
66 /* The size of the expression above. */
67
68 size_t expout_size;
69
e9d9f57e
TT
70 /* The expression related to this parser state. */
71
72 expression_up expout;
73
410a0ff2
SDJ
74 /* The number of elements already in the expression. This is used
75 to know where to put new elements. */
76
77 size_t expout_ptr;
78};
3e79cecf 79
2a612529
TT
80/* This is used for expression completion. */
81
82struct expr_completion_state
83{
84 /* The index of the last struct expression directly before a '.' or
85 '->'. This is set when parsing and is only used when completing a
86 field name. It is -1 if no dereference operation was found. */
87 int expout_last_struct = -1;
88
89 /* If we are completing a tagged type name, this will be nonzero. */
90 enum type_code expout_tag_completion_type = TYPE_CODE_UNDEF;
91
92 /* The token for tagged type name completion. */
93 gdb::unique_xmalloc_ptr<char> expout_completion_name;
94};
95
37eedb39
TT
96/* An instance of this type is instantiated during expression parsing,
97 and passed to the appropriate parser. It holds both inputs to the
98 parser, and result. */
99
100struct parser_state : public expr_builder
101{
102 /* Constructor. LANG is the language used to parse the expression.
103 And GDBARCH is the gdbarch to use during parsing. */
104
105 parser_state (const struct language_defn *lang,
1e58a4a4
TT
106 struct gdbarch *gdbarch,
107 const struct block *context_block,
8621b685 108 CORE_ADDR context_pc,
5776fca3 109 int comma,
2a612529 110 const char *input,
699bd4cf 111 int completion,
c5c41205
TT
112 innermost_block_tracker *tracker,
113 bool void_p)
1e58a4a4
TT
114 : expr_builder (lang, gdbarch),
115 expression_context_block (context_block),
8621b685 116 expression_context_pc (context_pc),
5776fca3 117 comma_terminates (comma),
2a612529 118 lexptr (input),
699bd4cf 119 parse_completion (completion),
c5c41205
TT
120 block_tracker (tracker),
121 void_context_p (void_p)
37eedb39
TT
122 {
123 }
124
125 DISABLE_COPY_AND_ASSIGN (parser_state);
37eedb39 126
43476f0b
TT
127 /* Begin counting arguments for a function call,
128 saving the data about any containing call. */
129
130 void start_arglist ()
131 {
132 m_funcall_chain.push_back (arglist_len);
133 arglist_len = 0;
134 }
135
136 /* Return the number of arguments in a function call just terminated,
137 and restore the data for the containing function call. */
138
139 int end_arglist ()
140 {
141 int val = arglist_len;
142 arglist_len = m_funcall_chain.back ();
143 m_funcall_chain.pop_back ();
144 return val;
145 }
146
2a612529
TT
147 /* Mark the current index as the starting location of a structure
148 expression. This is used when completing on field names. */
149
150 void mark_struct_expression ();
151
152 /* Indicate that the current parser invocation is completing a tag.
153 TAG is the type code of the tag, and PTR and LENGTH represent the
154 start of the tag name. */
155
156 void mark_completion_tag (enum type_code tag, const char *ptr, int length);
157
43476f0b 158
1e58a4a4
TT
159 /* If this is nonzero, this block is used as the lexical context for
160 symbol names. */
c906108c 161
1e58a4a4 162 const struct block * const expression_context_block;
c906108c 163
1e58a4a4
TT
164 /* If expression_context_block is non-zero, then this is the PC
165 within the block that we want to evaluate expressions at. When
166 debugging C or C++ code, we use this to find the exact line we're
167 at, and then look up the macro definitions active at that
168 point. */
169 const CORE_ADDR expression_context_pc;
8621b685
TT
170
171 /* Nonzero means stop parsing on first comma (if not within parentheses). */
172
173 int comma_terminates;
5776fca3
TT
174
175 /* During parsing of a C expression, the pointer to the next character
176 is in this variable. */
177
178 const char *lexptr;
179
180 /* After a token has been recognized, this variable points to it.
181 Currently used only for error reporting. */
182 const char *prev_lexptr = nullptr;
43476f0b
TT
183
184 /* Number of arguments seen so far in innermost function call. */
185
186 int arglist_len = 0;
187
2a612529
TT
188 /* True if parsing an expression to attempt completion. */
189 int parse_completion;
190
191 /* Completion state is updated here. */
192 expr_completion_state m_completion_state;
193
699bd4cf
TT
194 /* The innermost block tracker. */
195 innermost_block_tracker *block_tracker;
196
c5c41205
TT
197 /* True if no value is expected from the expression. */
198 bool void_context_p;
199
43476f0b
TT
200private:
201
202 /* Data structure for saving values of arglist_len for function calls whose
203 arguments contain other function calls. */
204
205 std::vector<int> m_funcall_chain;
1e58a4a4 206};
84f0252a 207
aee1fcdf
AB
208/* When parsing expressions we track the innermost block that was
209 referenced. */
210
211class innermost_block_tracker
212{
213public:
699bd4cf
TT
214 innermost_block_tracker (innermost_block_tracker_types types
215 = INNERMOST_BLOCK_FOR_SYMBOLS)
216 : m_types (types),
ae451627 217 m_innermost_block (NULL)
aee1fcdf
AB
218 { /* Nothing. */ }
219
aee1fcdf 220 /* Update the stored innermost block if the new block B is more inner
ae451627
AB
221 than the currently stored block, or if no block is stored yet. The
222 type T tells us whether the block B was for a symbol or for a
223 register. The stored innermost block is only updated if the type T is
224 a type we are interested in, the types we are interested in are held
225 in M_TYPES and set during RESET. */
226 void update (const struct block *b, innermost_block_tracker_types t);
aee1fcdf
AB
227
228 /* Overload of main UPDATE method which extracts the block from BS. */
229 void update (const struct block_symbol &bs)
230 {
ae451627 231 update (bs.block, INNERMOST_BLOCK_FOR_SYMBOLS);
aee1fcdf
AB
232 }
233
234 /* Return the stored innermost block. Can be nullptr if no symbols or
235 registers were found during an expression parse, and so no innermost
236 block was defined. */
237 const struct block *block () const
238 {
239 return m_innermost_block;
240 }
241
242private:
ae451627
AB
243 /* The type of innermost block being looked for. */
244 innermost_block_tracker_types m_types;
245
aee1fcdf
AB
246 /* The currently stored innermost block found while parsing an
247 expression. */
248 const struct block *m_innermost_block;
249};
250
c906108c 251/* A string token, either a char-string or bit-string. Char-strings are
0df8b418 252 used, for example, for the names of symbols. */
c906108c
SS
253
254struct stoken
255 {
0df8b418 256 /* Pointer to first byte of char-string or first bit of bit-string. */
d7561cbb 257 const char *ptr;
0df8b418 258 /* Length of string in bytes for char-string or bits for bit-string. */
c906108c
SS
259 int length;
260 };
261
6c7a06a3
TT
262struct typed_stoken
263 {
264 /* A language-specific type field. */
265 int type;
0df8b418 266 /* Pointer to first byte of char-string or first bit of bit-string. */
6c7a06a3 267 char *ptr;
0df8b418 268 /* Length of string in bytes for char-string or bits for bit-string. */
6c7a06a3
TT
269 int length;
270 };
271
272struct stoken_vector
273 {
274 int len;
275 struct typed_stoken *tokens;
276 };
277
c906108c
SS
278struct ttype
279 {
280 struct stoken stoken;
281 struct type *type;
282 };
283
284struct symtoken
285 {
286 struct stoken stoken;
d12307c1 287 struct block_symbol sym;
c906108c
SS
288 int is_a_field_of_this;
289 };
290
379b85df
AF
291struct objc_class_str
292 {
293 struct stoken stoken;
294 struct type *type;
fe978cb0 295 int theclass;
379b85df
AF
296 };
297
55aa24fb
SDJ
298/* Reverse an expression from suffix form (in which it is constructed)
299 to prefix form (in which we can conveniently print or execute it).
2a612529 300 Ordinarily this always returns -1. However, if LAST_STRUCT
55aa24fb
SDJ
301 is not -1 (i.e., we are trying to complete a field name), it will
302 return the index of the subexpression which is the left-hand-side
2a612529 303 of the struct operation at LAST_STRUCT. */
55aa24fb 304
2a612529
TT
305extern int prefixify_expression (struct expression *expr,
306 int last_struct = -1);
55aa24fb 307
37eedb39 308extern void write_exp_elt_opcode (struct expr_builder *, enum exp_opcode);
c906108c 309
37eedb39 310extern void write_exp_elt_sym (struct expr_builder *, struct symbol *);
c906108c 311
37eedb39 312extern void write_exp_elt_longcst (struct expr_builder *, LONGEST);
c906108c 313
37eedb39 314extern void write_exp_elt_floatcst (struct expr_builder *, const gdb_byte *);
27bc4d80 315
37eedb39 316extern void write_exp_elt_type (struct expr_builder *, struct type *);
c906108c 317
37eedb39 318extern void write_exp_elt_intern (struct expr_builder *, struct internalvar *);
c906108c 319
37eedb39 320extern void write_exp_string (struct expr_builder *, struct stoken);
c906108c 321
37eedb39 322void write_exp_string_vector (struct expr_builder *, int type,
410a0ff2 323 struct stoken_vector *vec);
6c7a06a3 324
37eedb39 325extern void write_exp_bitstring (struct expr_builder *, struct stoken);
c906108c 326
37eedb39 327extern void write_exp_elt_block (struct expr_builder *, const struct block *);
c906108c 328
37eedb39 329extern void write_exp_elt_objfile (struct expr_builder *,
410a0ff2 330 struct objfile *objfile);
9e35dae4 331
37eedb39 332extern void write_exp_msymbol (struct expr_builder *,
410a0ff2 333 struct bound_minimal_symbol);
c906108c 334
1e58a4a4 335extern void write_dollar_variable (struct parser_state *, struct stoken str);
c906108c 336
1b30f421
TT
337/* Write a reference to a symbol to the expression being built in PS.
338 NAME is the name of the symbol to write; SYM is the symbol. If SYM
339 is nullptr (meaning the 'symbol' member), a minimal symbol will be
340 searched for and used if available. Throws an exception if SYM is
341 nullptr and no minimal symbol can be found. */
342
343extern void write_exp_symbol_reference (struct parser_state *ps,
344 const char *name,
345 struct block_symbol sym);
346
d7561cbb 347extern const char *find_template_name_end (const char *);
c906108c 348
61f4b350 349extern std::string copy_name (struct stoken);
c906108c 350
5f9769d1
PH
351extern int dump_subexp (struct expression *, struct ui_file *, int);
352
353extern int dump_subexp_body_standard (struct expression *,
354 struct ui_file *, int);
355
6d816919
AB
356/* Dump (to STREAM) a function call like expression at position ELT in the
357 expression array EXP. Return a new value for ELT just after the
358 function call expression. */
359
360extern int dump_subexp_body_funcall (struct expression *exp,
361 struct ui_file *stream, int elt);
362
554794dc 363extern void operator_length (const struct expression *, int, int *, int *);
24daaebc 364
554794dc
SDJ
365extern void operator_length_standard (const struct expression *, int, int *,
366 int *);
5f9769d1 367
c0201579
JK
368extern int operator_check_standard (struct expression *exp, int pos,
369 int (*objfile_func)
370 (struct objfile *objfile, void *data),
371 void *data);
372
edd079d9
UW
373extern bool parse_float (const char *p, int len,
374 const struct type *type, gdb_byte *data);
c906108c
SS
375\f
376/* These codes indicate operator precedences for expression printing,
377 least tightly binding first. */
378/* Adding 1 to a precedence value is done for binary operators,
379 on the operand which is more tightly bound, so that operators
380 of equal precedence within that operand will get parentheses. */
381/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
382 they are used as the "surrounding precedence" to force
383 various kinds of things to be parenthesized. */
384enum precedence
c5aa993b
JM
385 {
386 PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
387 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
388 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
389 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
390 };
c906108c
SS
391
392/* Table mapping opcodes into strings for printing operators
393 and precedences of the operators. */
394
395struct op_print
c5aa993b 396 {
a121b7c1 397 const char *string;
c5aa993b
JM
398 enum exp_opcode opcode;
399 /* Precedence of operator. These values are used only by comparisons. */
400 enum precedence precedence;
401
402 /* For a binary operator: 1 iff right associate.
0df8b418 403 For a unary operator: 1 iff postfix. */
c5aa993b
JM
404 int right_assoc;
405 };
c906108c 406
5f9769d1
PH
407/* Information needed to print, prefixify, and evaluate expressions for
408 a given language. */
409
410struct exp_descriptor
411 {
412 /* Print subexpression. */
413 void (*print_subexp) (struct expression *, int *, struct ui_file *,
414 enum precedence);
415
416 /* Returns number of exp_elements needed to represent an operator and
417 the number of subexpressions it takes. */
554794dc 418 void (*operator_length) (const struct expression*, int, int*, int *);
5f9769d1 419
a1c7835a
YQ
420 /* Call OBJFILE_FUNC for any objfile found being referenced by the
421 single operator of EXP at position POS. Operator parameters are
422 located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
423 should never be called with NULL OBJFILE. OBJFILE_FUNC should
424 get passed an arbitrary caller supplied DATA pointer. If it
425 returns non-zero value then (any other) non-zero value should be
426 immediately returned to the caller. Otherwise zero should be
427 returned. */
c0201579
JK
428 int (*operator_check) (struct expression *exp, int pos,
429 int (*objfile_func) (struct objfile *objfile,
430 void *data),
431 void *data);
432
5f9769d1
PH
433 /* Dump the rest of this (prefix) expression after the operator
434 itself has been printed. See dump_subexp_body_standard in
435 (expprint.c). */
436 int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
437
438 /* Evaluate an expression. */
439 struct value *(*evaluate_exp) (struct type *, struct expression *,
440 int *, enum noside);
441 };
442
443
444/* Default descriptor containing standard definitions of all
445 elements. */
446extern const struct exp_descriptor exp_descriptor_standard;
447
448/* Functions used by language-specific extended operators to (recursively)
449 print/dump subexpressions. */
450
451extern void print_subexp (struct expression *, int *, struct ui_file *,
452 enum precedence);
453
454extern void print_subexp_standard (struct expression *, int *,
455 struct ui_file *, enum precedence);
456
6d816919
AB
457/* Print a function call like expression to STREAM. This is called as a
458 helper function by which point the expression node identifying this as a
459 function call has already been stripped off and POS should point to the
460 number of function call arguments. EXP is the object containing the
461 list of expression elements. */
462
463extern void print_subexp_funcall (struct expression *exp, int *pos,
464 struct ui_file *stream);
465
f461f5cf
PM
466/* Function used to avoid direct calls to fprintf
467 in the code generated by the bison parser. */
468
a0b31db1 469extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
f461f5cf 470
c0201579
JK
471extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
472
c5aa993b 473#endif /* PARSER_DEFS_H */
2f68a895 474
This page took 2.190984 seconds and 4 git commands to generate.