1 /* Parser definitions for GDB.
3 Copyright (C) 1986-2021 Free Software Foundation, Inc.
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo.
8 This file is part of GDB.
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
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
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.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #if !defined (PARSER_DEFS_H)
24 #define PARSER_DEFS_H 1
26 #include "expression.h"
33 class innermost_block_tracker
;
35 extern bool parser_debug
;
37 /* A class that can be used to build a "struct expression". */
41 /* Constructor. LANG is the language used to parse the expression.
42 And GDBARCH is the gdbarch to use during parsing. */
44 expr_builder (const struct language_defn
*lang
,
45 struct gdbarch
*gdbarch
);
47 DISABLE_COPY_AND_ASSIGN (expr_builder
);
49 /* Resize the allocated expression to the correct size, and return
50 it as an expression_up -- passing ownership to the caller. */
51 ATTRIBUTE_UNUSED_RESULT expression_up
release ();
53 /* Return the gdbarch that was passed to the constructor. */
55 struct gdbarch
*gdbarch ()
57 return expout
->gdbarch
;
60 /* Return the language that was passed to the constructor. */
62 const struct language_defn
*language ()
64 return expout
->language_defn
;
67 /* Set the root operation of the expression that is currently being
69 void set_operation (expr::operation_up
&&op
)
71 expout
->op
= std::move (op
);
74 /* The size of the expression above. */
78 /* The expression related to this parser state. */
82 /* The number of elements already in the expression. This is used
83 to know where to put new elements. */
88 /* This is used for expression completion. */
90 struct expr_completion_state
92 /* The index of the last struct expression directly before a '.' or
93 '->'. This is set when parsing and is only used when completing a
94 field name. It is -1 if no dereference operation was found. */
95 int expout_last_struct
= -1;
97 /* The last struct expression directly before a '.' or '->'. This
98 is set when parsing and is only used when completing a field
99 name. It is nullptr if no dereference operation was found. */
100 expr::structop_base_operation
*expout_last_op
= nullptr;
102 /* If we are completing a tagged type name, this will be nonzero. */
103 enum type_code expout_tag_completion_type
= TYPE_CODE_UNDEF
;
105 /* The token for tagged type name completion. */
106 gdb::unique_xmalloc_ptr
<char> expout_completion_name
;
109 /* An instance of this type is instantiated during expression parsing,
110 and passed to the appropriate parser. It holds both inputs to the
111 parser, and result. */
113 struct parser_state
: public expr_builder
115 /* Constructor. LANG is the language used to parse the expression.
116 And GDBARCH is the gdbarch to use during parsing. */
118 parser_state (const struct language_defn
*lang
,
119 struct gdbarch
*gdbarch
,
120 const struct block
*context_block
,
121 CORE_ADDR context_pc
,
125 innermost_block_tracker
*tracker
,
127 : expr_builder (lang
, gdbarch
),
128 expression_context_block (context_block
),
129 expression_context_pc (context_pc
),
130 comma_terminates (comma
),
132 parse_completion (completion
),
133 block_tracker (tracker
),
134 void_context_p (void_p
)
138 DISABLE_COPY_AND_ASSIGN (parser_state
);
140 /* Begin counting arguments for a function call,
141 saving the data about any containing call. */
143 void start_arglist ()
145 m_funcall_chain
.push_back (arglist_len
);
149 /* Return the number of arguments in a function call just terminated,
150 and restore the data for the containing function call. */
154 int val
= arglist_len
;
155 arglist_len
= m_funcall_chain
.back ();
156 m_funcall_chain
.pop_back ();
160 /* Mark the current index as the starting location of a structure
161 expression. This is used when completing on field names. */
163 void mark_struct_expression ();
165 /* Mark the given operation as the starting location of a structure
166 expression. This is used when completing on field names. */
168 void mark_struct_expression (expr::structop_base_operation
*op
);
170 /* Indicate that the current parser invocation is completing a tag.
171 TAG is the type code of the tag, and PTR and LENGTH represent the
172 start of the tag name. */
174 void mark_completion_tag (enum type_code tag
, const char *ptr
, int length
);
176 /* Push an operation on the stack. */
177 void push (expr::operation_up
&&op
)
179 m_operations
.push_back (std::move (op
));
182 /* Create a new operation and push it on the stack. */
183 template<typename T
, typename
... Arg
>
184 void push_new (Arg
... args
)
186 m_operations
.emplace_back (new T (std::forward
<Arg
> (args
)...));
189 /* Push a new C string operation. */
190 void push_c_string (int, struct stoken_vector
*vec
);
192 /* Push a symbol reference. If SYM is nullptr, look for a minimal
194 void push_symbol (const char *name
, block_symbol sym
);
196 /* Push a reference to $mumble. This may result in a convenience
197 variable, a history reference, or a register. */
198 void push_dollar (struct stoken str
);
200 /* Pop an operation from the stack. */
201 expr::operation_up
pop ()
203 expr::operation_up result
= std::move (m_operations
.back ());
204 m_operations
.pop_back ();
208 /* Pop N elements from the stack and return a vector. */
209 std::vector
<expr::operation_up
> pop_vector (int n
)
211 std::vector
<expr::operation_up
> result (n
);
212 for (int i
= 1; i
<= n
; ++i
)
213 result
[n
- i
] = pop ();
217 /* A helper that pops an operation, wraps it in some other
218 operation, and pushes it again. */
222 using namespace expr
;
223 operation_up v
= ::expr::make_operation
<T
> (pop ());
224 push (std::move (v
));
227 /* A helper that pops two operations, wraps them in some other
228 operation, and pushes the result. */
232 expr::operation_up rhs
= pop ();
233 expr::operation_up lhs
= pop ();
234 push (expr::make_operation
<T
> (std::move (lhs
), std::move (rhs
)));
237 /* If this is nonzero, this block is used as the lexical context for
240 const struct block
* const expression_context_block
;
242 /* If expression_context_block is non-zero, then this is the PC
243 within the block that we want to evaluate expressions at. When
244 debugging C or C++ code, we use this to find the exact line we're
245 at, and then look up the macro definitions active at that
247 const CORE_ADDR expression_context_pc
;
249 /* Nonzero means stop parsing on first comma (if not within parentheses). */
251 int comma_terminates
;
253 /* During parsing of a C expression, the pointer to the next character
254 is in this variable. */
258 /* After a token has been recognized, this variable points to it.
259 Currently used only for error reporting. */
260 const char *prev_lexptr
= nullptr;
262 /* Number of arguments seen so far in innermost function call. */
266 /* True if parsing an expression to attempt completion. */
267 int parse_completion
;
269 /* Completion state is updated here. */
270 expr_completion_state m_completion_state
;
272 /* The innermost block tracker. */
273 innermost_block_tracker
*block_tracker
;
275 /* True if no value is expected from the expression. */
280 /* Data structure for saving values of arglist_len for function calls whose
281 arguments contain other function calls. */
283 std::vector
<int> m_funcall_chain
;
285 /* Stack of operations. */
286 std::vector
<expr::operation_up
> m_operations
;
289 /* When parsing expressions we track the innermost block that was
292 class innermost_block_tracker
295 innermost_block_tracker (innermost_block_tracker_types types
296 = INNERMOST_BLOCK_FOR_SYMBOLS
)
298 m_innermost_block (NULL
)
301 /* Update the stored innermost block if the new block B is more inner
302 than the currently stored block, or if no block is stored yet. The
303 type T tells us whether the block B was for a symbol or for a
304 register. The stored innermost block is only updated if the type T is
305 a type we are interested in, the types we are interested in are held
306 in M_TYPES and set during RESET. */
307 void update (const struct block
*b
, innermost_block_tracker_types t
);
309 /* Overload of main UPDATE method which extracts the block from BS. */
310 void update (const struct block_symbol
&bs
)
312 update (bs
.block
, INNERMOST_BLOCK_FOR_SYMBOLS
);
315 /* Return the stored innermost block. Can be nullptr if no symbols or
316 registers were found during an expression parse, and so no innermost
317 block was defined. */
318 const struct block
*block () const
320 return m_innermost_block
;
324 /* The type of innermost block being looked for. */
325 innermost_block_tracker_types m_types
;
327 /* The currently stored innermost block found while parsing an
329 const struct block
*m_innermost_block
;
332 /* A string token, either a char-string or bit-string. Char-strings are
333 used, for example, for the names of symbols. */
337 /* Pointer to first byte of char-string or first bit of bit-string. */
339 /* Length of string in bytes for char-string or bits for bit-string. */
345 /* A language-specific type field. */
347 /* Pointer to first byte of char-string or first bit of bit-string. */
349 /* Length of string in bytes for char-string or bits for bit-string. */
356 struct typed_stoken
*tokens
;
361 struct stoken stoken
;
367 struct stoken stoken
;
368 struct block_symbol sym
;
369 int is_a_field_of_this
;
372 struct objc_class_str
374 struct stoken stoken
;
379 /* Reverse an expression from suffix form (in which it is constructed)
380 to prefix form (in which we can conveniently print or execute it).
381 Ordinarily this always returns -1. However, if LAST_STRUCT
382 is not -1 (i.e., we are trying to complete a field name), it will
383 return the index of the subexpression which is the left-hand-side
384 of the struct operation at LAST_STRUCT. */
386 extern int prefixify_expression (struct expression
*expr
,
387 int last_struct
= -1);
389 extern void write_exp_elt_opcode (struct expr_builder
*, enum exp_opcode
);
391 extern void write_exp_elt_sym (struct expr_builder
*, struct symbol
*);
393 extern void write_exp_elt_longcst (struct expr_builder
*, LONGEST
);
395 extern void write_exp_elt_floatcst (struct expr_builder
*, const gdb_byte
*);
397 extern void write_exp_elt_type (struct expr_builder
*, struct type
*);
399 extern void write_exp_elt_intern (struct expr_builder
*, struct internalvar
*);
401 extern void write_exp_string (struct expr_builder
*, struct stoken
);
403 void write_exp_string_vector (struct expr_builder
*, int type
,
404 struct stoken_vector
*vec
);
406 extern void write_exp_bitstring (struct expr_builder
*, struct stoken
);
408 extern void write_exp_elt_block (struct expr_builder
*, const struct block
*);
410 extern void write_exp_elt_objfile (struct expr_builder
*,
411 struct objfile
*objfile
);
413 extern void write_exp_msymbol (struct expr_builder
*,
414 struct bound_minimal_symbol
);
416 extern void write_dollar_variable (struct parser_state
*, struct stoken str
);
418 /* Write a reference to a symbol to the expression being built in PS.
419 NAME is the name of the symbol to write; SYM is the symbol. If SYM
420 is nullptr (meaning the 'symbol' member), a minimal symbol will be
421 searched for and used if available. Throws an exception if SYM is
422 nullptr and no minimal symbol can be found. */
424 extern void write_exp_symbol_reference (struct parser_state
*ps
,
426 struct block_symbol sym
);
428 extern const char *find_template_name_end (const char *);
430 extern std::string
copy_name (struct stoken
);
432 extern int dump_subexp (struct expression
*, struct ui_file
*, int);
434 extern int dump_subexp_body_standard (struct expression
*,
435 struct ui_file
*, int);
437 /* Dump (to STREAM) a function call like expression at position ELT in the
438 expression array EXP. Return a new value for ELT just after the
439 function call expression. */
441 extern int dump_subexp_body_funcall (struct expression
*exp
,
442 struct ui_file
*stream
, int elt
);
444 extern void operator_length (const struct expression
*, int, int *, int *);
446 extern void operator_length_standard (const struct expression
*, int, int *,
449 extern int operator_check_standard (struct expression
*exp
, int pos
,
451 (struct objfile
*objfile
, void *data
),
454 extern bool parse_float (const char *p
, int len
,
455 const struct type
*type
, gdb_byte
*data
);
457 /* These codes indicate operator precedences for expression printing,
458 least tightly binding first. */
459 /* Adding 1 to a precedence value is done for binary operators,
460 on the operand which is more tightly bound, so that operators
461 of equal precedence within that operand will get parentheses. */
462 /* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
463 they are used as the "surrounding precedence" to force
464 various kinds of things to be parenthesized. */
467 PREC_NULL
, PREC_COMMA
, PREC_ABOVE_COMMA
, PREC_ASSIGN
, PREC_LOGICAL_OR
,
468 PREC_LOGICAL_AND
, PREC_BITWISE_IOR
, PREC_BITWISE_AND
, PREC_BITWISE_XOR
,
469 PREC_EQUAL
, PREC_ORDER
, PREC_SHIFT
, PREC_ADD
, PREC_MUL
, PREC_REPEAT
,
470 PREC_HYPER
, PREC_PREFIX
, PREC_SUFFIX
, PREC_BUILTIN_FUNCTION
473 /* Table mapping opcodes into strings for printing operators
474 and precedences of the operators. */
479 enum exp_opcode opcode
;
480 /* Precedence of operator. These values are used only by comparisons. */
481 enum precedence precedence
;
483 /* For a binary operator: 1 iff right associate.
484 For a unary operator: 1 iff postfix. */
488 /* Information needed to print, prefixify, and evaluate expressions for
491 struct exp_descriptor
493 /* Print subexpression. */
494 void (*print_subexp
) (struct expression
*, int *, struct ui_file
*,
497 /* Returns number of exp_elements needed to represent an operator and
498 the number of subexpressions it takes. */
499 void (*operator_length
) (const struct expression
*, int, int*, int *);
501 /* Call OBJFILE_FUNC for any objfile found being referenced by the
502 single operator of EXP at position POS. Operator parameters are
503 located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
504 should never be called with NULL OBJFILE. OBJFILE_FUNC should
505 get passed an arbitrary caller supplied DATA pointer. If it
506 returns non-zero value then (any other) non-zero value should be
507 immediately returned to the caller. Otherwise zero should be
509 int (*operator_check
) (struct expression
*exp
, int pos
,
510 int (*objfile_func
) (struct objfile
*objfile
,
514 /* Dump the rest of this (prefix) expression after the operator
515 itself has been printed. See dump_subexp_body_standard in
517 int (*dump_subexp_body
) (struct expression
*, struct ui_file
*, int);
519 /* Evaluate an expression. */
520 struct value
*(*evaluate_exp
) (struct type
*, struct expression
*,
525 /* Default descriptor containing standard definitions of all
527 extern const struct exp_descriptor exp_descriptor_standard
;
529 /* Functions used by language-specific extended operators to (recursively)
530 print/dump subexpressions. */
532 extern void print_subexp (struct expression
*, int *, struct ui_file
*,
535 extern void print_subexp_standard (struct expression
*, int *,
536 struct ui_file
*, enum precedence
);
538 /* Print a function call like expression to STREAM. This is called as a
539 helper function by which point the expression node identifying this as a
540 function call has already been stripped off and POS should point to the
541 number of function call arguments. EXP is the object containing the
542 list of expression elements. */
544 extern void print_subexp_funcall (struct expression
*exp
, int *pos
,
545 struct ui_file
*stream
);
547 /* Function used to avoid direct calls to fprintf
548 in the code generated by the bison parser. */
550 extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
552 extern int exp_uses_objfile (struct expression
*exp
, struct objfile
*objfile
);
554 #endif /* PARSER_DEFS_H */