Use gdb_bfd_sections in get_stap_base_address
[deliverable/binutils-gdb.git] / gdb / parse.c
CommitLineData
c906108c 1/* Parse expressions for GDB.
c4a172b5 2
b811d2c2 3 Copyright (C) 1986-2020 Free Software Foundation, Inc.
c4a172b5 4
c906108c
SS
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo, 1991.
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/* Parse an expression from text in a string,
ae0c443d 24 and return the result as a struct expression pointer.
c906108c
SS
25 That structure contains arithmetic operations in reverse polish,
26 with constants represented by operations that are followed by special data.
27 See expression.h for the details of the format.
28 What is important here is that it can be built up sequentially
29 during the process of parsing; the lower levels of the tree always
30 come first in the result. */
c5aa993b 31
c906108c 32#include "defs.h"
12c89474 33#include <ctype.h>
e17c207e 34#include "arch-utils.h"
c906108c
SS
35#include "symtab.h"
36#include "gdbtypes.h"
37#include "frame.h"
38#include "expression.h"
39#include "value.h"
40#include "command.h"
41#include "language.h"
0b4e1325 42#include "f-lang.h"
c906108c
SS
43#include "parser-defs.h"
44#include "gdbcmd.h"
c5aa993b 45#include "symfile.h" /* for overlay functions */
f57d151a 46#include "inferior.h"
f69fdf9b 47#include "target-float.h"
fe898f56 48#include "block.h"
59f92a09 49#include "source.h"
9e35dae4 50#include "objfiles.h"
029a67e4 51#include "user-regs.h"
325fac50 52#include <algorithm>
268a13a5 53#include "gdbsupport/gdb_optional.h"
e2305d34 54
5f9769d1
PH
55/* Standard set of definitions for printing, dumping, prefixifying,
56 * and evaluating expressions. */
57
58const struct exp_descriptor exp_descriptor_standard =
59 {
60 print_subexp_standard,
61 operator_length_standard,
c0201579 62 operator_check_standard,
5f9769d1
PH
63 op_name_standard,
64 dump_subexp_body_standard,
65 evaluate_subexp_standard
66 };
c906108c 67\f
ccce17b0 68static unsigned int expressiondebug = 0;
920d2a44
AC
69static void
70show_expressiondebug (struct ui_file *file, int from_tty,
71 struct cmd_list_element *c, const char *value)
72{
73 fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
74}
c906108c 75
92981e24 76
491144b5
CB
77/* True if an expression parser should set yydebug. */
78bool parser_debug;
92981e24
TT
79
80static void
81show_parserdebug (struct ui_file *file, int from_tty,
82 struct cmd_list_element *c, const char *value)
83{
84 fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
85}
86
87
65d12d83 88static int prefixify_subexp (struct expression *, struct expression *, int,
2a612529 89 int, int);
c906108c 90
4d01a485
PA
91static expression_up parse_exp_in_context (const char **, CORE_ADDR,
92 const struct block *, int,
7ad417dd 93 int, int *,
699bd4cf 94 innermost_block_tracker *,
2a612529 95 expr_completion_state *);
e85c3284 96
37eedb39 97static void increase_expout_size (struct expr_builder *ps, size_t lenelt);
e3980ce2
TT
98
99
aee1fcdf
AB
100/* Documented at it's declaration. */
101
102void
ae451627
AB
103innermost_block_tracker::update (const struct block *b,
104 innermost_block_tracker_types t)
aee1fcdf 105{
ae451627
AB
106 if ((m_types & t) != 0
107 && (m_innermost_block == NULL
108 || contained_in (b, m_innermost_block)))
aee1fcdf
AB
109 m_innermost_block = b;
110}
111
c906108c 112\f
c906108c 113
55aa24fb 114/* See definition in parser-defs.h. */
2dbca4d6 115
37eedb39 116expr_builder::expr_builder (const struct language_defn *lang,
e9d9f57e 117 struct gdbarch *gdbarch)
1201a264 118 : expout_size (10),
e9d9f57e
TT
119 expout (XNEWVAR (expression,
120 (sizeof (expression)
121 + EXP_ELEM_TO_BYTES (expout_size)))),
122 expout_ptr (0)
2dbca4d6 123{
e9d9f57e
TT
124 expout->language_defn = lang;
125 expout->gdbarch = gdbarch;
2dbca4d6
SDJ
126}
127
e9d9f57e 128expression_up
37eedb39 129expr_builder::release ()
2dbca4d6
SDJ
130{
131 /* Record the actual number of expression elements, and then
132 reallocate the expression memory so that we free up any
133 excess elements. */
134
e9d9f57e
TT
135 expout->nelts = expout_ptr;
136 expout.reset (XRESIZEVAR (expression, expout.release (),
137 (sizeof (expression)
138 + EXP_ELEM_TO_BYTES (expout_ptr))));
139
140 return std::move (expout);
2dbca4d6
SDJ
141}
142
410a0ff2
SDJ
143/* This page contains the functions for adding data to the struct expression
144 being constructed. */
145
c906108c
SS
146/* Add one element to the end of the expression. */
147
148/* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
0df8b418 149 a register through here. */
c906108c 150
ae0c443d 151static void
37eedb39 152write_exp_elt (struct expr_builder *ps, const union exp_element *expelt)
c906108c 153{
410a0ff2 154 if (ps->expout_ptr >= ps->expout_size)
c906108c 155 {
410a0ff2 156 ps->expout_size *= 2;
e9d9f57e
TT
157 ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
158 (sizeof (expression)
159 + EXP_ELEM_TO_BYTES (ps->expout_size))));
c906108c 160 }
410a0ff2 161 ps->expout->elts[ps->expout_ptr++] = *expelt;
c906108c
SS
162}
163
164void
37eedb39 165write_exp_elt_opcode (struct expr_builder *ps, enum exp_opcode expelt)
c906108c
SS
166{
167 union exp_element tmp;
168
ad3bbd48 169 memset (&tmp, 0, sizeof (union exp_element));
c906108c 170 tmp.opcode = expelt;
410a0ff2 171 write_exp_elt (ps, &tmp);
c906108c
SS
172}
173
174void
37eedb39 175write_exp_elt_sym (struct expr_builder *ps, struct symbol *expelt)
c906108c
SS
176{
177 union exp_element tmp;
178
ad3bbd48 179 memset (&tmp, 0, sizeof (union exp_element));
c906108c 180 tmp.symbol = expelt;
410a0ff2 181 write_exp_elt (ps, &tmp);
c906108c
SS
182}
183
cb8c24b6 184static void
37eedb39 185write_exp_elt_msym (struct expr_builder *ps, minimal_symbol *expelt)
74ea4be4
PA
186{
187 union exp_element tmp;
188
189 memset (&tmp, 0, sizeof (union exp_element));
190 tmp.msymbol = expelt;
191 write_exp_elt (ps, &tmp);
192}
193
c906108c 194void
37eedb39 195write_exp_elt_block (struct expr_builder *ps, const struct block *b)
c906108c
SS
196{
197 union exp_element tmp;
ad3bbd48 198
09153d55 199 memset (&tmp, 0, sizeof (union exp_element));
c906108c 200 tmp.block = b;
410a0ff2 201 write_exp_elt (ps, &tmp);
c906108c
SS
202}
203
9e35dae4 204void
37eedb39 205write_exp_elt_objfile (struct expr_builder *ps, struct objfile *objfile)
9e35dae4
DJ
206{
207 union exp_element tmp;
ad3bbd48 208
9e35dae4
DJ
209 memset (&tmp, 0, sizeof (union exp_element));
210 tmp.objfile = objfile;
410a0ff2 211 write_exp_elt (ps, &tmp);
9e35dae4
DJ
212}
213
c906108c 214void
37eedb39 215write_exp_elt_longcst (struct expr_builder *ps, LONGEST expelt)
c906108c
SS
216{
217 union exp_element tmp;
218
ad3bbd48 219 memset (&tmp, 0, sizeof (union exp_element));
c906108c 220 tmp.longconst = expelt;
410a0ff2 221 write_exp_elt (ps, &tmp);
c906108c
SS
222}
223
224void
37eedb39 225write_exp_elt_floatcst (struct expr_builder *ps, const gdb_byte expelt[16])
27bc4d80
TJB
226{
227 union exp_element tmp;
228 int index;
229
230 for (index = 0; index < 16; index++)
edd079d9 231 tmp.floatconst[index] = expelt[index];
27bc4d80 232
410a0ff2 233 write_exp_elt (ps, &tmp);
27bc4d80
TJB
234}
235
c906108c 236void
37eedb39 237write_exp_elt_type (struct expr_builder *ps, struct type *expelt)
c906108c
SS
238{
239 union exp_element tmp;
240
ad3bbd48 241 memset (&tmp, 0, sizeof (union exp_element));
c906108c 242 tmp.type = expelt;
410a0ff2 243 write_exp_elt (ps, &tmp);
c906108c
SS
244}
245
246void
37eedb39 247write_exp_elt_intern (struct expr_builder *ps, struct internalvar *expelt)
c906108c
SS
248{
249 union exp_element tmp;
250
ad3bbd48 251 memset (&tmp, 0, sizeof (union exp_element));
c906108c 252 tmp.internalvar = expelt;
410a0ff2 253 write_exp_elt (ps, &tmp);
c906108c
SS
254}
255
256/* Add a string constant to the end of the expression.
257
258 String constants are stored by first writing an expression element
259 that contains the length of the string, then stuffing the string
260 constant itself into however many expression elements are needed
261 to hold it, and then writing another expression element that contains
0df8b418 262 the length of the string. I.e. an expression element at each end of
c906108c
SS
263 the string records the string length, so you can skip over the
264 expression elements containing the actual string bytes from either
265 end of the string. Note that this also allows gdb to handle
266 strings with embedded null bytes, as is required for some languages.
267
268 Don't be fooled by the fact that the string is null byte terminated,
bc3b79fd 269 this is strictly for the convenience of debugging gdb itself.
c906108c
SS
270 Gdb does not depend up the string being null terminated, since the
271 actual length is recorded in expression elements at each end of the
272 string. The null byte is taken into consideration when computing how
273 many expression elements are required to hold the string constant, of
0df8b418 274 course. */
c906108c
SS
275
276
277void
37eedb39 278write_exp_string (struct expr_builder *ps, struct stoken str)
c906108c 279{
f86f5ca3 280 int len = str.length;
410a0ff2 281 size_t lenelt;
f86f5ca3 282 char *strdata;
c906108c
SS
283
284 /* Compute the number of expression elements required to hold the string
285 (including a null byte terminator), along with one expression element
286 at each end to record the actual string length (not including the
0df8b418 287 null byte terminator). */
c906108c
SS
288
289 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
290
410a0ff2 291 increase_expout_size (ps, lenelt);
c906108c
SS
292
293 /* Write the leading length expression element (which advances the current
294 expression element index), then write the string constant followed by a
295 terminating null byte, and then write the trailing length expression
0df8b418 296 element. */
c906108c 297
410a0ff2
SDJ
298 write_exp_elt_longcst (ps, (LONGEST) len);
299 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
c906108c
SS
300 memcpy (strdata, str.ptr, len);
301 *(strdata + len) = '\0';
410a0ff2
SDJ
302 ps->expout_ptr += lenelt - 2;
303 write_exp_elt_longcst (ps, (LONGEST) len);
c906108c
SS
304}
305
6c7a06a3
TT
306/* Add a vector of string constants to the end of the expression.
307
308 This adds an OP_STRING operation, but encodes the contents
309 differently from write_exp_string. The language is expected to
310 handle evaluation of this expression itself.
311
312 After the usual OP_STRING header, TYPE is written into the
313 expression as a long constant. The interpretation of this field is
314 up to the language evaluator.
315
316 Next, each string in VEC is written. The length is written as a
317 long constant, followed by the contents of the string. */
318
319void
37eedb39 320write_exp_string_vector (struct expr_builder *ps, int type,
410a0ff2 321 struct stoken_vector *vec)
6c7a06a3 322{
410a0ff2
SDJ
323 int i, len;
324 size_t n_slots;
6c7a06a3
TT
325
326 /* Compute the size. We compute the size in number of slots to
327 avoid issues with string padding. */
328 n_slots = 0;
329 for (i = 0; i < vec->len; ++i)
330 {
331 /* One slot for the length of this element, plus the number of
332 slots needed for this string. */
333 n_slots += 1 + BYTES_TO_EXP_ELEM (vec->tokens[i].length);
334 }
335
336 /* One more slot for the type of the string. */
337 ++n_slots;
338
339 /* Now compute a phony string length. */
340 len = EXP_ELEM_TO_BYTES (n_slots) - 1;
341
342 n_slots += 4;
410a0ff2 343 increase_expout_size (ps, n_slots);
6c7a06a3 344
410a0ff2
SDJ
345 write_exp_elt_opcode (ps, OP_STRING);
346 write_exp_elt_longcst (ps, len);
347 write_exp_elt_longcst (ps, type);
6c7a06a3
TT
348
349 for (i = 0; i < vec->len; ++i)
350 {
410a0ff2
SDJ
351 write_exp_elt_longcst (ps, vec->tokens[i].length);
352 memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
6c7a06a3 353 vec->tokens[i].length);
410a0ff2 354 ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
6c7a06a3
TT
355 }
356
410a0ff2
SDJ
357 write_exp_elt_longcst (ps, len);
358 write_exp_elt_opcode (ps, OP_STRING);
6c7a06a3
TT
359}
360
c906108c
SS
361/* Add a bitstring constant to the end of the expression.
362
363 Bitstring constants are stored by first writing an expression element
364 that contains the length of the bitstring (in bits), then stuffing the
365 bitstring constant itself into however many expression elements are
366 needed to hold it, and then writing another expression element that
0df8b418 367 contains the length of the bitstring. I.e. an expression element at
c906108c
SS
368 each end of the bitstring records the bitstring length, so you can skip
369 over the expression elements containing the actual bitstring bytes from
0df8b418 370 either end of the bitstring. */
c906108c
SS
371
372void
37eedb39 373write_exp_bitstring (struct expr_builder *ps, struct stoken str)
c906108c 374{
f86f5ca3
PH
375 int bits = str.length; /* length in bits */
376 int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
410a0ff2 377 size_t lenelt;
f86f5ca3 378 char *strdata;
c906108c
SS
379
380 /* Compute the number of expression elements required to hold the bitstring,
381 along with one expression element at each end to record the actual
0df8b418 382 bitstring length in bits. */
c906108c
SS
383
384 lenelt = 2 + BYTES_TO_EXP_ELEM (len);
385
410a0ff2 386 increase_expout_size (ps, lenelt);
c906108c
SS
387
388 /* Write the leading length expression element (which advances the current
389 expression element index), then write the bitstring constant, and then
0df8b418 390 write the trailing length expression element. */
c906108c 391
410a0ff2
SDJ
392 write_exp_elt_longcst (ps, (LONGEST) bits);
393 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
c906108c 394 memcpy (strdata, str.ptr, len);
410a0ff2
SDJ
395 ps->expout_ptr += lenelt - 2;
396 write_exp_elt_longcst (ps, (LONGEST) bits);
c906108c
SS
397}
398
74ea4be4
PA
399/* Return the type of MSYMBOL, a minimal symbol of OBJFILE. If
400 ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
401 address. */
c906108c 402
74ea4be4
PA
403type *
404find_minsym_type_and_address (minimal_symbol *msymbol,
405 struct objfile *objfile,
406 CORE_ADDR *address_p)
c906108c 407{
74ea4be4 408 bound_minimal_symbol bound_msym = {msymbol, objfile};
efd66ac6 409 struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
712f90be 410 enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
bccdca4a 411
fbd1b771
JK
412 bool is_tls = (section != NULL
413 && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
414
bccdca4a
UW
415 /* The minimal symbol might point to a function descriptor;
416 resolve it to the actual code address instead. */
f50776aa
PA
417 CORE_ADDR addr;
418 if (is_tls)
bccdca4a 419 {
f50776aa
PA
420 /* Addresses of TLS symbols are really offsets into a
421 per-objfile/per-thread storage block. */
422 addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym);
423 }
424 else if (msymbol_is_function (objfile, msymbol, &addr))
425 {
426 if (addr != BMSYMBOL_VALUE_ADDRESS (bound_msym))
0875794a 427 {
f50776aa
PA
428 /* This means we resolved a function descriptor, and we now
429 have an address for a code/text symbol instead of a data
430 symbol. */
431 if (MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
432 type = mst_text_gnu_ifunc;
433 else
434 type = mst_text;
435 section = NULL;
0875794a 436 }
bccdca4a 437 }
f50776aa
PA
438 else
439 addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
bccdca4a
UW
440
441 if (overlay_debugging)
714835d5 442 addr = symbol_overlayed_address (addr, section);
c906108c 443
fbd1b771 444 if (is_tls)
9e35dae4 445 {
74ea4be4
PA
446 /* Skip translation if caller does not need the address. */
447 if (address_p != NULL)
448 *address_p = target_translate_tls_address (objfile, addr);
449 return objfile_type (objfile)->nodebug_tls_symbol;
9e35dae4
DJ
450 }
451
74ea4be4
PA
452 if (address_p != NULL)
453 *address_p = addr;
454
bccdca4a 455 switch (type)
c906108c
SS
456 {
457 case mst_text:
458 case mst_file_text:
459 case mst_solib_trampoline:
74ea4be4 460 return objfile_type (objfile)->nodebug_text_symbol;
c906108c 461
0875794a 462 case mst_text_gnu_ifunc:
74ea4be4 463 return objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
0875794a 464
c906108c
SS
465 case mst_data:
466 case mst_file_data:
467 case mst_bss:
468 case mst_file_bss:
74ea4be4 469 return objfile_type (objfile)->nodebug_data_symbol;
c906108c 470
0875794a 471 case mst_slot_got_plt:
74ea4be4 472 return objfile_type (objfile)->nodebug_got_plt_symbol;
0875794a 473
c906108c 474 default:
74ea4be4 475 return objfile_type (objfile)->nodebug_unknown_symbol;
c906108c 476 }
74ea4be4
PA
477}
478
479/* Add the appropriate elements for a minimal symbol to the end of
480 the expression. */
481
482void
37eedb39 483write_exp_msymbol (struct expr_builder *ps,
74ea4be4
PA
484 struct bound_minimal_symbol bound_msym)
485{
486 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
487 write_exp_elt_objfile (ps, bound_msym.objfile);
488 write_exp_elt_msym (ps, bound_msym.minsym);
489 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
c906108c 490}
65d12d83 491
2a612529 492/* See parser-defs.h. */
65d12d83
TT
493
494void
2a612529 495parser_state::mark_struct_expression ()
65d12d83 496{
2f68a895 497 gdb_assert (parse_completion
2a612529
TT
498 && (m_completion_state.expout_tag_completion_type
499 == TYPE_CODE_UNDEF));
500 m_completion_state.expout_last_struct = expout_ptr;
65d12d83
TT
501}
502
2f68a895
TT
503/* Indicate that the current parser invocation is completing a tag.
504 TAG is the type code of the tag, and PTR and LENGTH represent the
505 start of the tag name. */
506
507void
2a612529
TT
508parser_state::mark_completion_tag (enum type_code tag, const char *ptr,
509 int length)
2f68a895
TT
510{
511 gdb_assert (parse_completion
2a612529
TT
512 && (m_completion_state.expout_tag_completion_type
513 == TYPE_CODE_UNDEF)
514 && m_completion_state.expout_completion_name == NULL
515 && m_completion_state.expout_last_struct == -1);
2f68a895
TT
516 gdb_assert (tag == TYPE_CODE_UNION
517 || tag == TYPE_CODE_STRUCT
2f68a895 518 || tag == TYPE_CODE_ENUM);
2a612529
TT
519 m_completion_state.expout_tag_completion_type = tag;
520 m_completion_state.expout_completion_name.reset (xstrndup (ptr, length));
2f68a895
TT
521}
522
c906108c
SS
523\f
524/* Recognize tokens that start with '$'. These include:
525
c5aa993b
JM
526 $regname A native register name or a "standard
527 register name".
c906108c 528
c5aa993b
JM
529 $variable A convenience variable with a name chosen
530 by the user.
c906108c 531
c5aa993b
JM
532 $digits Value history with index <digits>, starting
533 from the first value which has index 1.
c906108c 534
c5aa993b 535 $$digits Value history with index <digits> relative
0df8b418 536 to the last value. I.e. $$0 is the last
c5aa993b
JM
537 value, $$1 is the one previous to that, $$2
538 is the one previous to $$1, etc.
c906108c 539
c5aa993b 540 $ | $0 | $$0 The last value in the value history.
c906108c 541
c5aa993b 542 $$ An abbreviation for the second to the last
0df8b418 543 value in the value history, I.e. $$1 */
c906108c
SS
544
545void
1e58a4a4 546write_dollar_variable (struct parser_state *ps, struct stoken str)
c906108c 547{
d12307c1 548 struct block_symbol sym;
7c7b6655 549 struct bound_minimal_symbol msym;
c4a3d09a 550 struct internalvar *isym = NULL;
61f4b350 551 std::string copy;
d7318818 552
c906108c 553 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
0df8b418 554 and $$digits (equivalent to $<-digits> if you could type that). */
c906108c 555
c906108c
SS
556 int negate = 0;
557 int i = 1;
558 /* Double dollar means negate the number and add -1 as well.
559 Thus $$ alone means -1. */
560 if (str.length >= 2 && str.ptr[1] == '$')
561 {
562 negate = 1;
563 i = 2;
564 }
565 if (i == str.length)
566 {
0df8b418 567 /* Just dollars (one or two). */
c5aa993b 568 i = -negate;
c906108c
SS
569 goto handle_last;
570 }
571 /* Is the rest of the token digits? */
572 for (; i < str.length; i++)
573 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
574 break;
575 if (i == str.length)
576 {
577 i = atoi (str.ptr + 1 + negate);
578 if (negate)
c5aa993b 579 i = -i;
c906108c
SS
580 goto handle_last;
581 }
c5aa993b 582
c906108c
SS
583 /* Handle tokens that refer to machine registers:
584 $ followed by a register name. */
fa9f5be6 585 i = user_reg_map_name_to_regnum (ps->gdbarch (),
029a67e4 586 str.ptr + 1, str.length - 1);
c5aa993b 587 if (i >= 0)
c906108c
SS
588 goto handle_register;
589
c4a3d09a
MF
590 /* Any names starting with $ are probably debugger internal variables. */
591
61f4b350
TT
592 copy = copy_name (str);
593 isym = lookup_only_internalvar (copy.c_str () + 1);
c4a3d09a
MF
594 if (isym)
595 {
410a0ff2
SDJ
596 write_exp_elt_opcode (ps, OP_INTERNALVAR);
597 write_exp_elt_intern (ps, isym);
598 write_exp_elt_opcode (ps, OP_INTERNALVAR);
c4a3d09a
MF
599 return;
600 }
601
d7318818 602 /* On some systems, such as HP-UX and hppa-linux, certain system routines
0df8b418 603 have names beginning with $ or $$. Check for those, first. */
d7318818 604
61f4b350 605 sym = lookup_symbol (copy.c_str (), NULL, VAR_DOMAIN, NULL);
d12307c1 606 if (sym.symbol)
d7318818 607 {
410a0ff2 608 write_exp_elt_opcode (ps, OP_VAR_VALUE);
d12307c1
PMR
609 write_exp_elt_block (ps, sym.block);
610 write_exp_elt_sym (ps, sym.symbol);
410a0ff2 611 write_exp_elt_opcode (ps, OP_VAR_VALUE);
d7318818
RC
612 return;
613 }
61f4b350 614 msym = lookup_bound_minimal_symbol (copy.c_str ());
7c7b6655 615 if (msym.minsym)
c906108c 616 {
410a0ff2 617 write_exp_msymbol (ps, msym);
d7318818 618 return;
c906108c 619 }
c5aa993b 620
c4a3d09a 621 /* Any other names are assumed to be debugger internal variables. */
c906108c 622
410a0ff2 623 write_exp_elt_opcode (ps, OP_INTERNALVAR);
61f4b350 624 write_exp_elt_intern (ps, create_internalvar (copy.c_str () + 1));
410a0ff2 625 write_exp_elt_opcode (ps, OP_INTERNALVAR);
c906108c 626 return;
c5aa993b 627handle_last:
410a0ff2
SDJ
628 write_exp_elt_opcode (ps, OP_LAST);
629 write_exp_elt_longcst (ps, (LONGEST) i);
630 write_exp_elt_opcode (ps, OP_LAST);
c906108c 631 return;
c5aa993b 632handle_register:
410a0ff2 633 write_exp_elt_opcode (ps, OP_REGISTER);
67f3407f
DJ
634 str.length--;
635 str.ptr++;
410a0ff2
SDJ
636 write_exp_string (ps, str);
637 write_exp_elt_opcode (ps, OP_REGISTER);
699bd4cf
TT
638 ps->block_tracker->update (ps->expression_context_block,
639 INNERMOST_BLOCK_FOR_REGISTERS);
c906108c
SS
640 return;
641}
642
643
d7561cbb
KS
644const char *
645find_template_name_end (const char *p)
c906108c
SS
646{
647 int depth = 1;
648 int just_seen_right = 0;
649 int just_seen_colon = 0;
650 int just_seen_space = 0;
c5aa993b 651
c906108c
SS
652 if (!p || (*p != '<'))
653 return 0;
654
655 while (*++p)
656 {
657 switch (*p)
c5aa993b
JM
658 {
659 case '\'':
660 case '\"':
661 case '{':
662 case '}':
0df8b418 663 /* In future, may want to allow these?? */
c5aa993b
JM
664 return 0;
665 case '<':
666 depth++; /* start nested template */
667 if (just_seen_colon || just_seen_right || just_seen_space)
668 return 0; /* but not after : or :: or > or space */
669 break;
670 case '>':
671 if (just_seen_colon || just_seen_right)
672 return 0; /* end a (nested?) template */
673 just_seen_right = 1; /* but not after : or :: */
674 if (--depth == 0) /* also disallow >>, insist on > > */
675 return ++p; /* if outermost ended, return */
676 break;
677 case ':':
678 if (just_seen_space || (just_seen_colon > 1))
679 return 0; /* nested class spec coming up */
680 just_seen_colon++; /* we allow :: but not :::: */
681 break;
682 case ' ':
683 break;
684 default:
685 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
686 (*p >= 'A' && *p <= 'Z') ||
687 (*p >= '0' && *p <= '9') ||
688 (*p == '_') || (*p == ',') || /* commas for template args */
689 (*p == '&') || (*p == '*') || /* pointer and ref types */
690 (*p == '(') || (*p == ')') || /* function types */
691 (*p == '[') || (*p == ']'))) /* array types */
692 return 0;
693 }
c906108c 694 if (*p != ' ')
c5aa993b 695 just_seen_space = 0;
c906108c 696 if (*p != ':')
c5aa993b 697 just_seen_colon = 0;
c906108c 698 if (*p != '>')
c5aa993b 699 just_seen_right = 0;
c906108c
SS
700 }
701 return 0;
702}
c5aa993b 703\f
c906108c 704
1a4eeb98 705/* Return a null-terminated temporary copy of the name of a string token.
c906108c 706
1a4eeb98
DE
707 Tokens that refer to names do so with explicit pointer and length,
708 so they can share the storage that lexptr is parsing.
709 When it is necessary to pass a name to a function that expects
710 a null-terminated string, the substring is copied out
61f4b350 711 into a separate block of storage. */
1a4eeb98 712
61f4b350 713std::string
fba45db2 714copy_name (struct stoken token)
c906108c 715{
61f4b350 716 return std::string (token.ptr, token.length);
c906108c
SS
717}
718\f
55aa24fb
SDJ
719
720/* See comments on parser-defs.h. */
721
722int
2a612529 723prefixify_expression (struct expression *expr, int last_struct)
c906108c 724{
5e70ee09 725 gdb_assert (expr->nelts > 0);
df2a60d0 726 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
f86f5ca3
PH
727 struct expression *temp;
728 int inpos = expr->nelts, outpos = 0;
c906108c
SS
729
730 temp = (struct expression *) alloca (len);
731
732 /* Copy the original expression into temp. */
733 memcpy (temp, expr, len);
734
2a612529 735 return prefixify_subexp (temp, expr, inpos, outpos, last_struct);
c906108c
SS
736}
737
24daaebc
PH
738/* Return the number of exp_elements in the postfix subexpression
739 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
c906108c 740
cf81cf60 741static int
f86f5ca3 742length_of_subexp (struct expression *expr, int endpos)
24daaebc 743{
6b4398f7 744 int oplen, args;
24daaebc
PH
745
746 operator_length (expr, endpos, &oplen, &args);
747
748 while (args > 0)
749 {
750 oplen += length_of_subexp (expr, endpos - oplen);
751 args--;
752 }
753
754 return oplen;
755}
756
757/* Sets *OPLENP to the length of the operator whose (last) index is
758 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
759 operator takes. */
760
761void
554794dc
SDJ
762operator_length (const struct expression *expr, int endpos, int *oplenp,
763 int *argsp)
5f9769d1 764{
5aba6ebe
AB
765 expr->language_defn->expression_ops ()->operator_length (expr, endpos,
766 oplenp, argsp);
5f9769d1
PH
767}
768
769/* Default value for operator_length in exp_descriptor vectors. */
770
771void
554794dc 772operator_length_standard (const struct expression *expr, int endpos,
5f9769d1 773 int *oplenp, int *argsp)
c906108c 774{
f86f5ca3
PH
775 int oplen = 1;
776 int args = 0;
01739a3b 777 enum range_type range_type;
f86f5ca3 778 int i;
c906108c
SS
779
780 if (endpos < 1)
8a3fe4f8 781 error (_("?error in operator_length_standard"));
c906108c
SS
782
783 i = (int) expr->elts[endpos - 1].opcode;
784
785 switch (i)
786 {
787 /* C++ */
788 case OP_SCOPE:
789 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
790 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
791 break;
792
793 case OP_LONG:
edd079d9 794 case OP_FLOAT:
c906108c 795 case OP_VAR_VALUE:
74ea4be4 796 case OP_VAR_MSYM_VALUE:
c906108c
SS
797 oplen = 4;
798 break;
799
858be34c
PA
800 case OP_FUNC_STATIC_VAR:
801 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
802 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
803 args = 1;
804 break;
805
c906108c
SS
806 case OP_TYPE:
807 case OP_BOOL:
808 case OP_LAST:
c906108c 809 case OP_INTERNALVAR:
36b11add 810 case OP_VAR_ENTRY_VALUE:
c906108c
SS
811 oplen = 3;
812 break;
813
814 case OP_COMPLEX:
c806c55a 815 oplen = 3;
c906108c 816 args = 2;
c5aa993b 817 break;
c906108c
SS
818
819 case OP_FUNCALL:
c906108c
SS
820 oplen = 3;
821 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
822 break;
823
072bba3b 824 case TYPE_INSTANCE:
3693fdb3 825 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
072bba3b
KS
826 args = 1;
827 break;
828
0df8b418 829 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
53c551b7
AF
830 oplen = 4;
831 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
832 break;
833
c906108c
SS
834 case UNOP_MAX:
835 case UNOP_MIN:
836 oplen = 3;
837 break;
838
9eaf6705 839 case UNOP_CAST_TYPE:
4e8f195d
TT
840 case UNOP_DYNAMIC_CAST:
841 case UNOP_REINTERPRET_CAST:
9eaf6705
TT
842 case UNOP_MEMVAL_TYPE:
843 oplen = 1;
844 args = 2;
845 break;
846
847 case BINOP_VAL:
848 case UNOP_CAST:
c5aa993b 849 case UNOP_MEMVAL:
c906108c
SS
850 oplen = 3;
851 args = 1;
852 break;
853
854 case UNOP_ABS:
855 case UNOP_CAP:
856 case UNOP_CHR:
857 case UNOP_FLOAT:
858 case UNOP_HIGH:
859 case UNOP_ODD:
860 case UNOP_ORD:
861 case UNOP_TRUNC:
608b4967
TT
862 case OP_TYPEOF:
863 case OP_DECLTYPE:
6e72ca20 864 case OP_TYPEID:
c906108c
SS
865 oplen = 1;
866 args = 1;
867 break;
868
7322dca9
SW
869 case OP_ADL_FUNC:
870 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
871 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
872 oplen++;
873 oplen++;
874 break;
875
c906108c
SS
876 case STRUCTOP_STRUCT:
877 case STRUCTOP_PTR:
878 args = 1;
879 /* fall through */
67f3407f 880 case OP_REGISTER:
c906108c
SS
881 case OP_M2_STRING:
882 case OP_STRING:
3e43a32a 883 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
0df8b418
MS
884 NSString constant. */
885 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
c906108c 886 case OP_NAME:
c906108c
SS
887 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
888 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
889 break;
890
c906108c
SS
891 case OP_ARRAY:
892 oplen = 4;
893 args = longest_to_int (expr->elts[endpos - 2].longconst);
894 args -= longest_to_int (expr->elts[endpos - 3].longconst);
895 args += 1;
896 break;
897
898 case TERNOP_COND:
899 case TERNOP_SLICE:
c906108c
SS
900 args = 3;
901 break;
902
903 /* Modula-2 */
c5aa993b 904 case MULTI_SUBSCRIPT:
c906108c 905 oplen = 3;
c5aa993b 906 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
c906108c
SS
907 break;
908
909 case BINOP_ASSIGN_MODIFY:
910 oplen = 3;
911 args = 2;
912 break;
913
914 /* C++ */
915 case OP_THIS:
916 oplen = 2;
917 break;
918
01739a3b 919 case OP_RANGE:
0b4e1325 920 oplen = 3;
01739a3b 921 range_type = (enum range_type)
aead7601 922 longest_to_int (expr->elts[endpos - 2].longconst);
0b4e1325 923
0b4e1325
WZ
924 switch (range_type)
925 {
926 case LOW_BOUND_DEFAULT:
6873858b 927 case LOW_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
928 case HIGH_BOUND_DEFAULT:
929 args = 1;
930 break;
931 case BOTH_BOUND_DEFAULT:
932 args = 0;
933 break;
934 case NONE_BOUND_DEFAULT:
6873858b 935 case NONE_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
936 args = 2;
937 break;
938 }
939
940 break;
941
c906108c
SS
942 default:
943 args = 1 + (i < (int) BINOP_END);
944 }
945
24daaebc
PH
946 *oplenp = oplen;
947 *argsp = args;
c906108c
SS
948}
949
950/* Copy the subexpression ending just before index INEND in INEXPR
951 into OUTEXPR, starting at index OUTBEG.
65d12d83 952 In the process, convert it from suffix to prefix form.
2a612529 953 If LAST_STRUCT is -1, then this function always returns -1.
65d12d83 954 Otherwise, it returns the index of the subexpression which is the
2a612529 955 left-hand-side of the expression at LAST_STRUCT. */
c906108c 956
65d12d83 957static int
f86f5ca3 958prefixify_subexp (struct expression *inexpr,
2a612529
TT
959 struct expression *outexpr, int inend, int outbeg,
960 int last_struct)
c906108c 961{
24daaebc
PH
962 int oplen;
963 int args;
f86f5ca3 964 int i;
c906108c 965 int *arglens;
65d12d83 966 int result = -1;
c906108c 967
24daaebc 968 operator_length (inexpr, inend, &oplen, &args);
c906108c
SS
969
970 /* Copy the final operator itself, from the end of the input
971 to the beginning of the output. */
972 inend -= oplen;
973 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
974 EXP_ELEM_TO_BYTES (oplen));
975 outbeg += oplen;
976
2a612529 977 if (last_struct == inend)
65d12d83
TT
978 result = outbeg - oplen;
979
c906108c
SS
980 /* Find the lengths of the arg subexpressions. */
981 arglens = (int *) alloca (args * sizeof (int));
982 for (i = args - 1; i >= 0; i--)
983 {
984 oplen = length_of_subexp (inexpr, inend);
985 arglens[i] = oplen;
986 inend -= oplen;
987 }
988
989 /* Now copy each subexpression, preserving the order of
990 the subexpressions, but prefixifying each one.
991 In this loop, inend starts at the beginning of
992 the expression this level is working on
993 and marches forward over the arguments.
994 outbeg does similarly in the output. */
995 for (i = 0; i < args; i++)
996 {
65d12d83 997 int r;
ad3bbd48 998
c906108c
SS
999 oplen = arglens[i];
1000 inend += oplen;
2a612529 1001 r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
65d12d83
TT
1002 if (r != -1)
1003 {
1004 /* Return immediately. We probably have only parsed a
1005 partial expression, so we don't want to try to reverse
1006 the other operands. */
1007 return r;
1008 }
c906108c
SS
1009 outbeg += oplen;
1010 }
65d12d83
TT
1011
1012 return result;
c906108c
SS
1013}
1014\f
c906108c 1015/* Read an expression from the string *STRINGPTR points to,
ae0c443d 1016 parse it, and return a pointer to a struct expression that we malloc.
c906108c
SS
1017 Use block BLOCK as the lexical context for variable names;
1018 if BLOCK is zero, use the block of the selected stack frame.
1019 Meanwhile, advance *STRINGPTR to point after the expression,
1020 at the first nonwhite character that is not part of the expression
1021 (possibly a null character).
1022
1023 If COMMA is nonzero, stop if a comma is reached. */
1024
4d01a485 1025expression_up
bbc13ae3 1026parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
699bd4cf 1027 int comma, innermost_block_tracker *tracker)
6f937416 1028{
7ad417dd 1029 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
699bd4cf 1030 tracker, nullptr);
e85c3284
PH
1031}
1032
1033/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
65d12d83
TT
1034 no value is expected from the expression.
1035 OUT_SUBEXP is set when attempting to complete a field name; in this
1036 case it is set to the index of the subexpression on the
1037 left-hand-side of the struct op. If not doing such completion, it
1038 is left untouched. */
e85c3284 1039
4d01a485 1040static expression_up
7ad417dd
TT
1041parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1042 const struct block *block,
1043 int comma, int void_context_p, int *out_subexp,
699bd4cf 1044 innermost_block_tracker *tracker,
2a612529 1045 expr_completion_state *cstate)
c906108c 1046{
0cce5bd9 1047 const struct language_defn *lang = NULL;
65d12d83 1048 int subexp;
c906108c 1049
5776fca3 1050 if (*stringptr == 0 || **stringptr == 0)
e2e0b3e5 1051 error_no_arg (_("expression to compute"));
c906108c 1052
1e58a4a4
TT
1053 const struct block *expression_context_block = block;
1054 CORE_ADDR expression_context_pc = 0;
59f92a09 1055
699bd4cf
TT
1056 innermost_block_tracker local_tracker;
1057 if (tracker == nullptr)
1058 tracker = &local_tracker;
1059
d705c43c
PA
1060 /* If no context specified, try using the current frame, if any. */
1061 if (!expression_context_block)
1062 expression_context_block = get_selected_block (&expression_context_pc);
1bb9788d 1063 else if (pc == 0)
2b1ffcfd 1064 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1bb9788d
TT
1065 else
1066 expression_context_pc = pc;
59f92a09 1067
d705c43c 1068 /* Fall back to using the current source static context, if any. */
59f92a09 1069
d705c43c 1070 if (!expression_context_block)
59f92a09
FF
1071 {
1072 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1073 if (cursal.symtab)
d705c43c 1074 expression_context_block
439247b6
DE
1075 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1076 STATIC_BLOCK);
d705c43c 1077 if (expression_context_block)
2b1ffcfd 1078 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
84f0252a 1079 }
c906108c 1080
0cce5bd9
JB
1081 if (language_mode == language_mode_auto && block != NULL)
1082 {
1083 /* Find the language associated to the given context block.
1084 Default to the current language if it can not be determined.
1085
1086 Note that using the language corresponding to the current frame
1087 can sometimes give unexpected results. For instance, this
1088 routine is often called several times during the inferior
1089 startup phase to re-parse breakpoint expressions after
1090 a new shared library has been loaded. The language associated
1091 to the current frame at this moment is not relevant for
0df8b418 1092 the breakpoint. Using it would therefore be silly, so it seems
0cce5bd9 1093 better to rely on the current language rather than relying on
0df8b418 1094 the current frame language to parse the expression. That's why
0cce5bd9
JB
1095 we do the following language detection only if the context block
1096 has been specifically provided. */
1097 struct symbol *func = block_linkage_function (block);
1098
1099 if (func != NULL)
c1b5c1eb 1100 lang = language_def (func->language ());
0cce5bd9
JB
1101 if (lang == NULL || lang->la_language == language_unknown)
1102 lang = current_language;
1103 }
1104 else
1105 lang = current_language;
1106
5b12a61c
JK
1107 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1108 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1109 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1110 to the value matching SELECTED_FRAME as set by get_current_arch. */
410a0ff2 1111
1e58a4a4 1112 parser_state ps (lang, get_current_arch (), expression_context_block,
2a612529 1113 expression_context_pc, comma, *stringptr,
699bd4cf 1114 cstate != nullptr, tracker);
e3ad2841
TT
1115
1116 scoped_restore_current_language lang_saver;
5b12a61c 1117 set_language (lang->la_language);
c906108c 1118
a70b8144 1119 try
65d12d83 1120 {
87afa652 1121 lang->parser (&ps);
65d12d83 1122 }
230d2906 1123 catch (const gdb_exception &except)
65d12d83 1124 {
5e70ee09
TT
1125 /* If parsing for completion, allow this to succeed; but if no
1126 expression elements have been written, then there's nothing
1127 to do, so fail. */
2a612529 1128 if (! ps.parse_completion || ps.expout_ptr == 0)
eedc3f4f 1129 throw;
65d12d83 1130 }
c906108c 1131
e9d9f57e
TT
1132 /* We have to operate on an "expression *", due to la_post_parser,
1133 which explains this funny-looking double release. */
1134 expression_up result = ps.release ();
c906108c
SS
1135
1136 /* Convert expression from postfix form as generated by yacc
0df8b418 1137 parser, to a prefix form. */
c906108c 1138
c906108c 1139 if (expressiondebug)
e9d9f57e 1140 dump_raw_expression (result.get (), gdb_stdlog,
24daaebc 1141 "before conversion to prefix form");
c906108c 1142
2a612529
TT
1143 subexp = prefixify_expression (result.get (),
1144 ps.m_completion_state.expout_last_struct);
65d12d83
TT
1145 if (out_subexp)
1146 *out_subexp = subexp;
c906108c 1147
1bf9c363 1148 lang->post_parser (&result, void_context_p, ps.parse_completion, tracker);
e85c3284 1149
c906108c 1150 if (expressiondebug)
e9d9f57e 1151 dump_prefix_expression (result.get (), gdb_stdlog);
c906108c 1152
2a612529
TT
1153 if (cstate != nullptr)
1154 *cstate = std::move (ps.m_completion_state);
5776fca3 1155 *stringptr = ps.lexptr;
e9d9f57e 1156 return result;
c906108c
SS
1157}
1158
1159/* Parse STRING as an expression, and complain if this fails
1160 to use up all of the contents of STRING. */
1161
4d01a485 1162expression_up
699bd4cf 1163parse_expression (const char *string, innermost_block_tracker *tracker)
c906108c 1164{
699bd4cf 1165 expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
c906108c 1166 if (*string)
8a3fe4f8 1167 error (_("Junk after end of expression."));
c906108c
SS
1168 return exp;
1169}
e85c3284 1170
429e1e81
JB
1171/* Same as parse_expression, but using the given language (LANG)
1172 to parse the expression. */
1173
4d01a485 1174expression_up
429e1e81
JB
1175parse_expression_with_language (const char *string, enum language lang)
1176{
e3ad2841 1177 gdb::optional<scoped_restore_current_language> lang_saver;
429e1e81
JB
1178 if (current_language->la_language != lang)
1179 {
e3ad2841 1180 lang_saver.emplace ();
429e1e81
JB
1181 set_language (lang);
1182 }
1183
e3ad2841 1184 return parse_expression (string);
429e1e81
JB
1185}
1186
65d12d83
TT
1187/* Parse STRING as an expression. If parsing ends in the middle of a
1188 field reference, return the type of the left-hand-side of the
1189 reference; furthermore, if the parsing ends in the field name,
c92817ce
TT
1190 return the field name in *NAME. If the parsing ends in the middle
1191 of a field reference, but the reference is somehow invalid, throw
3eac2b65 1192 an exception. In all other cases, return NULL. */
65d12d83
TT
1193
1194struct type *
3eac2b65
TT
1195parse_expression_for_completion (const char *string,
1196 gdb::unique_xmalloc_ptr<char> *name,
2f68a895 1197 enum type_code *code)
65d12d83 1198{
4d01a485 1199 expression_up exp;
65d12d83
TT
1200 struct value *val;
1201 int subexp;
2a612529 1202 expr_completion_state cstate;
65d12d83 1203
a70b8144 1204 try
65d12d83 1205 {
7ad417dd 1206 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
699bd4cf 1207 nullptr, &cstate);
65d12d83 1208 }
230d2906 1209 catch (const gdb_exception_error &except)
7556d4a4
PA
1210 {
1211 /* Nothing, EXP remains NULL. */
1212 }
1213
7556d4a4 1214 if (exp == NULL)
65d12d83 1215 return NULL;
2f68a895 1216
2a612529 1217 if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
2f68a895 1218 {
2a612529
TT
1219 *code = cstate.expout_tag_completion_type;
1220 *name = std::move (cstate.expout_completion_name);
2f68a895
TT
1221 return NULL;
1222 }
1223
2a612529 1224 if (cstate.expout_last_struct == -1)
4d01a485 1225 return NULL;
65d12d83 1226
3eac2b65
TT
1227 const char *fieldname = extract_field_op (exp.get (), &subexp);
1228 if (fieldname == NULL)
1229 {
1230 name->reset ();
1231 return NULL;
1232 }
a0b7aece 1233
3eac2b65 1234 name->reset (xstrdup (fieldname));
c92817ce
TT
1235 /* This might throw an exception. If so, we want to let it
1236 propagate. */
4d01a485 1237 val = evaluate_subexpression_type (exp.get (), subexp);
65d12d83
TT
1238
1239 return value_type (val);
1240}
1241
d30f5e1f 1242/* Parse floating point value P of length LEN.
edd079d9
UW
1243 Return false if invalid, true if valid.
1244 The successfully parsed number is stored in DATA in
1245 target format for floating-point type TYPE.
d30f5e1f
DE
1246
1247 NOTE: This accepts the floating point syntax that sscanf accepts. */
1248
edd079d9
UW
1249bool
1250parse_float (const char *p, int len,
1251 const struct type *type, gdb_byte *data)
d30f5e1f 1252{
f69fdf9b 1253 return target_float_from_string (data, type, std::string (p, len));
d30f5e1f 1254}
c906108c 1255\f
f461f5cf
PM
1256/* This function avoids direct calls to fprintf
1257 in the parser generated debug code. */
1258void
1259parser_fprintf (FILE *x, const char *y, ...)
1260{
1261 va_list args;
ad3bbd48 1262
f461f5cf
PM
1263 va_start (args, y);
1264 if (x == stderr)
1265 vfprintf_unfiltered (gdb_stderr, y, args);
1266 else
1267 {
1268 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1269 vfprintf_unfiltered (gdb_stderr, y, args);
1270 }
1271 va_end (args);
1272}
1273
c0201579
JK
1274/* Implementation of the exp_descriptor method operator_check. */
1275
1276int
1277operator_check_standard (struct expression *exp, int pos,
1278 int (*objfile_func) (struct objfile *objfile,
1279 void *data),
1280 void *data)
1281{
1282 const union exp_element *const elts = exp->elts;
1283 struct type *type = NULL;
1284 struct objfile *objfile = NULL;
1285
1286 /* Extended operators should have been already handled by exp_descriptor
1287 iterate method of its specific language. */
1288 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1289
1290 /* Track the callers of write_exp_elt_type for this table. */
1291
1292 switch (elts[pos].opcode)
1293 {
1294 case BINOP_VAL:
1295 case OP_COMPLEX:
edd079d9 1296 case OP_FLOAT:
c0201579
JK
1297 case OP_LONG:
1298 case OP_SCOPE:
1299 case OP_TYPE:
1300 case UNOP_CAST:
c0201579
JK
1301 case UNOP_MAX:
1302 case UNOP_MEMVAL:
1303 case UNOP_MIN:
1304 type = elts[pos + 1].type;
1305 break;
1306
1307 case TYPE_INSTANCE:
1308 {
3693fdb3 1309 LONGEST arg, nargs = elts[pos + 2].longconst;
c0201579
JK
1310
1311 for (arg = 0; arg < nargs; arg++)
1312 {
b926417a
TT
1313 struct type *inst_type = elts[pos + 3 + arg].type;
1314 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
c0201579 1315
b926417a 1316 if (inst_objfile && (*objfile_func) (inst_objfile, data))
c0201579
JK
1317 return 1;
1318 }
1319 }
1320 break;
1321
c0201579
JK
1322 case OP_VAR_VALUE:
1323 {
1324 const struct block *const block = elts[pos + 1].block;
1325 const struct symbol *const symbol = elts[pos + 2].symbol;
1326
1327 /* Check objfile where the variable itself is placed.
1328 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
08be3fe3 1329 if ((*objfile_func) (symbol_objfile (symbol), data))
c0201579
JK
1330 return 1;
1331
1332 /* Check objfile where is placed the code touching the variable. */
d6bc0792 1333 objfile = block_objfile (block);
c0201579
JK
1334
1335 type = SYMBOL_TYPE (symbol);
1336 }
1337 break;
74ea4be4
PA
1338 case OP_VAR_MSYM_VALUE:
1339 objfile = elts[pos + 1].objfile;
1340 break;
c0201579
JK
1341 }
1342
1343 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1344
1345 if (type && TYPE_OBJFILE (type)
1346 && (*objfile_func) (TYPE_OBJFILE (type), data))
1347 return 1;
1348 if (objfile && (*objfile_func) (objfile, data))
1349 return 1;
1350
1351 return 0;
1352}
1353
a1c7835a
YQ
1354/* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1355 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1356 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1357 returns non-zero value then (any other) non-zero value is immediately
1358 returned to the caller. Otherwise zero is returned after iterating
1359 through whole EXP. */
c0201579
JK
1360
1361static int
1362exp_iterate (struct expression *exp,
1363 int (*objfile_func) (struct objfile *objfile, void *data),
1364 void *data)
1365{
1366 int endpos;
c0201579
JK
1367
1368 for (endpos = exp->nelts; endpos > 0; )
1369 {
1370 int pos, args, oplen = 0;
1371
dc21167c 1372 operator_length (exp, endpos, &oplen, &args);
c0201579
JK
1373 gdb_assert (oplen > 0);
1374
1375 pos = endpos - oplen;
5aba6ebe
AB
1376 if (exp->language_defn->expression_ops ()->operator_check (exp, pos,
1377 objfile_func,
1378 data))
c0201579
JK
1379 return 1;
1380
1381 endpos = pos;
1382 }
1383
1384 return 0;
1385}
1386
1387/* Helper for exp_uses_objfile. */
1388
1389static int
1390exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1391{
19ba03f4 1392 struct objfile *objfile = (struct objfile *) objfile_voidp;
c0201579
JK
1393
1394 if (exp_objfile->separate_debug_objfile_backlink)
1395 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1396
1397 return exp_objfile == objfile;
1398}
1399
1400/* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1401 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1402 file. */
1403
1404int
1405exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1406{
1407 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1408
1409 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1410}
1411
e3980ce2
TT
1412/* Reallocate the `expout' pointer inside PS so that it can accommodate
1413 at least LENELT expression elements. This function does nothing if
1414 there is enough room for the elements. */
410a0ff2 1415
e3980ce2 1416static void
37eedb39 1417increase_expout_size (struct expr_builder *ps, size_t lenelt)
410a0ff2
SDJ
1418{
1419 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1420 {
325fac50 1421 ps->expout_size = std::max (ps->expout_size * 2,
e9d9f57e
TT
1422 ps->expout_ptr + lenelt + 10);
1423 ps->expout.reset (XRESIZEVAR (expression,
1424 ps->expout.release (),
1425 (sizeof (struct expression)
1426 + EXP_ELEM_TO_BYTES (ps->expout_size))));
410a0ff2
SDJ
1427 }
1428}
1429
6c265988 1430void _initialize_parse ();
ac9a91a7 1431void
6c265988 1432_initialize_parse ()
ac9a91a7 1433{
ccce17b0
YQ
1434 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1435 &expressiondebug,
1436 _("Set expression debugging."),
1437 _("Show expression debugging."),
1438 _("When non-zero, the internal representation "
1439 "of expressions will be printed."),
1440 NULL,
1441 show_expressiondebug,
1442 &setdebuglist, &showdebuglist);
92981e24 1443 add_setshow_boolean_cmd ("parser", class_maintenance,
3e43a32a
MS
1444 &parser_debug,
1445 _("Set parser debugging."),
1446 _("Show parser debugging."),
1447 _("When non-zero, expression parser "
1448 "tracing will be enabled."),
92981e24
TT
1449 NULL,
1450 show_parserdebug,
1451 &setdebuglist, &showdebuglist);
c906108c 1452}
This page took 1.999354 seconds and 4 git commands to generate.