]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/expression.h
[gdb/testsuite] Use support_displaced_stepping in gdb.arch/amd64-disp-step-avx.exp
[thirdparty/binutils-gdb.git] / gdb / expression.h
CommitLineData
c906108c 1/* Definitions for expressions stored in reversed prefix form, for GDB.
1bac305b 2
d01e8234 3 Copyright (C) 1986-2025 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
cc709640
TT
20#ifndef GDB_EXPRESSION_H
21#define GDB_EXPRESSION_H
c906108c 22
0d12e84c 23#include "gdbtypes.h"
562db568 24#include "symtab.h"
0d12e84c 25
7ad417dd
TT
26/* While parsing expressions we need to track the innermost lexical block
27 that we encounter. In some situations we need to track the innermost
28 block just for symbols, and in other situations we want to track the
29 innermost block for symbols and registers. These flags are used by the
30 innermost block tracker to control which blocks we consider for the
31 innermost block. These flags can be combined together as needed. */
32
33enum innermost_block_tracker_type
34{
35 /* Track the innermost block for symbols within an expression. */
36 INNERMOST_BLOCK_FOR_SYMBOLS = (1 << 0),
37
38 /* Track the innermost block for registers within an expression. */
39 INNERMOST_BLOCK_FOR_REGISTERS = (1 << 1)
40};
41DEF_ENUM_FLAGS_TYPE (enum innermost_block_tracker_type,
42 innermost_block_tracker_types);
c906108c 43
1dffa580 44enum exp_opcode : uint8_t
c5aa993b 45 {
56c12414 46#define OP(name) name ,
c906108c 47
56c12414 48#include "std-operator.def"
c906108c 49
56c12414 50#undef OP
c5aa993b 51 };
c906108c 52
6c078f0b
TT
53/* Values of NOSIDE argument to eval_subexp. */
54
55enum noside
56 {
57 EVAL_NORMAL,
6c078f0b
TT
58 EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or
59 call any functions. The value
60 returned will have the correct
61 type, and will have an
62 approximately correct lvalue
63 type (inaccuracy: anything that is
64 listed as being in a register in
65 the function in which it was
66 declared will be lval_register).
67 Ideally this would not even read
68 target memory, but currently it
69 does in many situations. */
70 };
71
e2803273
TT
72struct expression;
73struct agent_expr;
74struct axs_value;
75struct type;
76struct ui_file;
77
78namespace expr
79{
80
81class operation;
82typedef std::unique_ptr<operation> operation_up;
83
84/* Base class for an operation. An operation is a single component of
85 an expression. */
86
87class operation
88{
89protected:
90
91 operation () = default;
92 DISABLE_COPY_AND_ASSIGN (operation);
93
94public:
95
96 virtual ~operation () = default;
97
98 /* Evaluate this operation. */
99 virtual value *evaluate (struct type *expect_type,
100 struct expression *exp,
101 enum noside noside) = 0;
102
103 /* Evaluate this operation in a context where C-like coercion is
104 needed. */
105 virtual value *evaluate_with_coercion (struct expression *exp,
106 enum noside noside)
107 {
108 return evaluate (nullptr, exp, noside);
109 }
110
111 /* Evaluate this expression in the context of a cast to
112 EXPECT_TYPE. */
113 virtual value *evaluate_for_cast (struct type *expect_type,
114 struct expression *exp,
115 enum noside noside);
116
117 /* Evaluate this expression in the context of a sizeof
118 operation. */
119 virtual value *evaluate_for_sizeof (struct expression *exp,
120 enum noside noside);
121
122 /* Evaluate this expression in the context of an address-of
123 operation. Must return the address. */
124 virtual value *evaluate_for_address (struct expression *exp,
125 enum noside noside);
126
a00b7254
TT
127 /* Evaluate a function call, with this object as the callee.
128 EXPECT_TYPE, EXP, and NOSIDE have the same meaning as in
129 'evaluate'. ARGS holds the operations that should be evaluated
130 to get the arguments to the call. */
131 virtual value *evaluate_funcall (struct type *expect_type,
132 struct expression *exp,
133 enum noside noside,
134 const std::vector<operation_up> &args)
135 {
136 /* Defer to the helper overload. */
137 return evaluate_funcall (expect_type, exp, noside, nullptr, args);
138 }
139
e2803273
TT
140 /* True if this is a constant expression. */
141 virtual bool constant_p () const
142 { return false; }
143
144 /* Return true if this operation uses OBJFILE (and will become
145 dangling when OBJFILE is unloaded), otherwise return false.
146 OBJFILE must not be a separate debug info file. */
147 virtual bool uses_objfile (struct objfile *objfile) const
148 { return false; }
149
1ce23123
TT
150 /* Some expression nodes represent a type, not a value. This method
151 should be overridden to return 'true' in these situations. */
152 virtual bool type_p () const
153 { return false; }
154
e2803273
TT
155 /* Generate agent expression bytecodes for this operation. */
156 void generate_ax (struct expression *exp, struct agent_expr *ax,
157 struct axs_value *value,
158 struct type *cast_type = nullptr);
159
160 /* Return the opcode that is implemented by this operation. */
161 virtual enum exp_opcode opcode () const = 0;
162
163 /* Print this operation to STREAM. */
164 virtual void dump (struct ui_file *stream, int depth) const = 0;
165
0c8effa3
TT
166 /* Call to indicate that this is the outermost operation in the
167 expression. This should almost never be overridden. */
168 virtual void set_outermost () { }
169
e2803273
TT
170protected:
171
a00b7254
TT
172 /* A helper overload that wraps evaluate_subexp_do_call. */
173 value *evaluate_funcall (struct type *expect_type,
174 struct expression *exp,
175 enum noside noside,
176 const char *function_name,
177 const std::vector<operation_up> &args);
178
e2803273
TT
179 /* Called by generate_ax to do the work for this particular
180 operation. */
181 virtual void do_generate_ax (struct expression *exp,
182 struct agent_expr *ax,
183 struct axs_value *value,
184 struct type *cast_type)
185 {
186 error (_("Cannot translate to agent expression"));
187 }
188};
189
190/* A helper function for creating an operation_up, given a type. */
191template<typename T, typename... Arg>
192operation_up
193make_operation (Arg... args)
194{
195 return operation_up (new T (std::forward<Arg> (args)...));
196}
197
198}
199
c906108c 200struct expression
77bf7e99 201{
b9d06571
TT
202 expression (const struct language_defn *lang, struct gdbarch *arch)
203 : language_defn (lang),
204 gdbarch (arch)
205 {
206 }
207
77bf7e99
TT
208 DISABLE_COPY_AND_ASSIGN (expression);
209
2adab65c
TT
210 /* Return the opcode for the outermost sub-expression of this
211 expression. */
212 enum exp_opcode first_opcode () const
213 {
1eaebe02 214 return op->opcode ();
2adab65c
TT
215 }
216
19707310
TT
217 /* Dump the expression to STREAM. */
218 void dump (struct ui_file *stream)
219 {
220 op->dump (stream, 0);
221 }
222
1ce23123
TT
223 /* Call the type_p method on the outermost sub-expression of this
224 expression, and return the result. */
225 bool type_p () const
226 { return op->type_p (); }
227
aa9bd445
TT
228 /* Return true if this expression uses OBJFILE (and will become
229 dangling when OBJFILE is unloaded), otherwise return false.
230 OBJFILE must not be a separate debug info file. */
231 bool uses_objfile (struct objfile *objfile) const;
232
26f53cd3
TT
233 /* Evaluate the expression. EXPECT_TYPE is the context type of the
234 expression; normally this should be nullptr. NOSIDE controls how
235 evaluation is performed. */
43048e46
TT
236 struct value *evaluate (struct type *expect_type = nullptr,
237 enum noside noside = EVAL_NORMAL);
26f53cd3 238
ba71385e
TT
239 /* Evaluate an expression, avoiding all memory references
240 and getting a value whose type alone is correct. */
241 struct value *evaluate_type ()
242 { return evaluate (nullptr, EVAL_AVOID_SIDE_EFFECTS); }
243
77bf7e99
TT
244 /* Language it was entered in. */
245 const struct language_defn *language_defn;
246 /* Architecture it was parsed in. */
247 struct gdbarch *gdbarch;
413403fc 248 expr::operation_up op;
77bf7e99 249};
c906108c 250
77bf7e99 251typedef std::unique_ptr<expression> expression_up;
4d01a485 252
562db568
TT
253/* When parsing expressions we track the innermost block that was
254 referenced. */
255
256class innermost_block_tracker
257{
258public:
259 innermost_block_tracker (innermost_block_tracker_types types
260 = INNERMOST_BLOCK_FOR_SYMBOLS)
261 : m_types (types),
262 m_innermost_block (NULL)
263 { /* Nothing. */ }
264
265 /* Update the stored innermost block if the new block B is more inner
266 than the currently stored block, or if no block is stored yet. The
267 type T tells us whether the block B was for a symbol or for a
268 register. The stored innermost block is only updated if the type T is
269 a type we are interested in, the types we are interested in are held
270 in M_TYPES and set during RESET. */
271 void update (const struct block *b, innermost_block_tracker_types t);
272
273 /* Overload of main UPDATE method which extracts the block from BS. */
274 void update (const struct block_symbol &bs)
275 {
276 update (bs.block, INNERMOST_BLOCK_FOR_SYMBOLS);
277 }
278
279 /* Return the stored innermost block. Can be nullptr if no symbols or
280 registers were found during an expression parse, and so no innermost
281 block was defined. */
282 const struct block *block () const
283 {
284 return m_innermost_block;
285 }
286
287private:
288 /* The type of innermost block being looked for. */
289 innermost_block_tracker_types m_types;
290
291 /* The currently stored innermost block found while parsing an
292 expression. */
293 const struct block *m_innermost_block;
294};
295
b8c03634
TT
296/* Flags that can affect the parsers. */
297
298enum parser_flag
299{
300 /* This flag is set if the expression is being evaluated in a
301 context where a 'void' result type is expected. Parsers are free
302 to ignore this, or to use it to help with overload resolution
303 decisions. */
304 PARSER_VOID_CONTEXT = (1 << 0),
305
306 /* This flag is set if a top-level comma terminates the
307 expression. */
308 PARSER_COMMA_TERMINATES = (1 << 1),
e360af5a
TT
309
310 /* This flag is set if the parser should print debugging output as
311 it parses. For yacc-based parsers, this translates to setting
312 yydebug. */
313 PARSER_DEBUG = (1 << 2),
87b647cf
TT
314
315 /* Normally the expression-parsing functions like parse_exp_1 will
316 attempt to find a context block if one is not passed in. If set,
317 this flag suppresses this search and uses a null context for the
318 parse. */
319 PARSER_LEAVE_BLOCK_ALONE = (1 << 3),
b8c03634
TT
320};
321DEF_ENUM_FLAGS_TYPE (enum parser_flag, parser_flags);
322
c906108c
SS
323/* From parse.c */
324
699bd4cf 325extern expression_up parse_expression (const char *,
8fc48b79 326 innermost_block_tracker * = nullptr,
b8c03634 327 parser_flags flags = 0);
c906108c 328
4d01a485
PA
329extern expression_up parse_expression_with_language (const char *string,
330 enum language lang);
429e1e81 331
1e237aba
TT
332
333class completion_tracker;
334
335/* Base class for expression completion. An instance of this
336 represents a completion request from the parser. */
337struct expr_completion_base
338{
339 /* Perform this object's completion. EXP is the expression in which
340 the completion occurs. TRACKER is the tracker to update with the
341 results. Return true if completion was possible (even if no
342 completions were found), false to fall back to ordinary
343 expression completion (i.e., symbol names). */
344 virtual bool complete (struct expression *exp,
345 completion_tracker &tracker) = 0;
346
347 virtual ~expr_completion_base () = default;
348};
349
350extern expression_up parse_expression_for_completion
351 (const char *, std::unique_ptr<expr_completion_base> *completer);
65d12d83 352
4d01a485 353extern expression_up parse_exp_1 (const char **, CORE_ADDR pc,
b8c03634
TT
354 const struct block *,
355 parser_flags flags,
699bd4cf 356 innermost_block_tracker * = nullptr);
c906108c 357
c906108c
SS
358/* From eval.c */
359
1ab8280d
TT
360/* Evaluate a function call. The function to be called is in CALLEE and
361 the arguments passed to the function are in ARGVEC.
6d816919
AB
362 FUNCTION_NAME is the name of the function, if known.
363 DEFAULT_RETURN_TYPE is used as the function's return type if the return
364 type is unknown. */
365
366extern struct value *evaluate_subexp_do_call (expression *exp,
367 enum noside noside,
1ab8280d
TT
368 value *callee,
369 gdb::array_view<value *> argvec,
6d816919
AB
370 const char *function_name,
371 type *default_return_type);
372
01739a3b
TT
373/* In an OP_RANGE expression, either bound could be empty, indicating
374 that its value is by default that of the corresponding bound of the
6873858b
TT
375 array or string. Also, the upper end of the range can be exclusive
376 or inclusive. So we have six sorts of subrange. This enumeration
377 type is to identify this. */
378
f2d8e4c5 379enum range_flag : unsigned
6873858b 380{
2f1b18db
AB
381 /* This is a standard range. Both the lower and upper bounds are
382 defined, and the bounds are inclusive. */
383 RANGE_STANDARD = 0,
384
385 /* The low bound was not given. */
386 RANGE_LOW_BOUND_DEFAULT = 1 << 0,
387
388 /* The high bound was not given. */
389 RANGE_HIGH_BOUND_DEFAULT = 1 << 1,
390
391 /* The high bound of this range is exclusive. */
392 RANGE_HIGH_BOUND_EXCLUSIVE = 1 << 2,
6b4c676c
AB
393
394 /* The range has a stride. */
395 RANGE_HAS_STRIDE = 1 << 3,
6873858b 396};
01739a3b 397
f2d8e4c5 398DEF_ENUM_FLAGS_TYPE (enum range_flag, range_flags);
2f1b18db 399
cc709640 400#endif /* GDB_EXPRESSION_H */