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