Make copy_name return std::string
[deliverable/binutils-gdb.git] / gdb / parse.c
CommitLineData
c906108c 1/* Parse expressions for GDB.
c4a172b5 2
42a4f53d 3 Copyright (C) 1986-2019 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>
e3ad2841 53#include "common/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
TT
76
77/* Non-zero if an expression parser should set yydebug. */
78int parser_debug;
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
74ea4be4 184void
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
PH
764{
765 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
766 oplenp, argsp);
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:
820 case OP_F77_UNDETERMINED_ARGLIST:
821 oplen = 3;
822 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
823 break;
824
072bba3b 825 case TYPE_INSTANCE:
3693fdb3 826 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
072bba3b
KS
827 args = 1;
828 break;
829
0df8b418 830 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
53c551b7
AF
831 oplen = 4;
832 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
833 break;
834
c906108c
SS
835 case UNOP_MAX:
836 case UNOP_MIN:
837 oplen = 3;
838 break;
839
9eaf6705 840 case UNOP_CAST_TYPE:
4e8f195d
TT
841 case UNOP_DYNAMIC_CAST:
842 case UNOP_REINTERPRET_CAST:
9eaf6705
TT
843 case UNOP_MEMVAL_TYPE:
844 oplen = 1;
845 args = 2;
846 break;
847
848 case BINOP_VAL:
849 case UNOP_CAST:
c5aa993b 850 case UNOP_MEMVAL:
c906108c
SS
851 oplen = 3;
852 args = 1;
853 break;
854
855 case UNOP_ABS:
856 case UNOP_CAP:
857 case UNOP_CHR:
858 case UNOP_FLOAT:
859 case UNOP_HIGH:
4d00f5d8 860 case UNOP_KIND:
c906108c
SS
861 case UNOP_ODD:
862 case UNOP_ORD:
863 case UNOP_TRUNC:
608b4967
TT
864 case OP_TYPEOF:
865 case OP_DECLTYPE:
6e72ca20 866 case OP_TYPEID:
c906108c
SS
867 oplen = 1;
868 args = 1;
869 break;
870
7322dca9
SW
871 case OP_ADL_FUNC:
872 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
873 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
874 oplen++;
875 oplen++;
876 break;
877
c906108c
SS
878 case STRUCTOP_STRUCT:
879 case STRUCTOP_PTR:
880 args = 1;
881 /* fall through */
67f3407f 882 case OP_REGISTER:
c906108c
SS
883 case OP_M2_STRING:
884 case OP_STRING:
3e43a32a 885 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
0df8b418
MS
886 NSString constant. */
887 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
c906108c 888 case OP_NAME:
c906108c
SS
889 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
890 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
891 break;
892
c906108c
SS
893 case OP_ARRAY:
894 oplen = 4;
895 args = longest_to_int (expr->elts[endpos - 2].longconst);
896 args -= longest_to_int (expr->elts[endpos - 3].longconst);
897 args += 1;
898 break;
899
900 case TERNOP_COND:
901 case TERNOP_SLICE:
c906108c
SS
902 args = 3;
903 break;
904
905 /* Modula-2 */
c5aa993b 906 case MULTI_SUBSCRIPT:
c906108c 907 oplen = 3;
c5aa993b 908 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
c906108c
SS
909 break;
910
911 case BINOP_ASSIGN_MODIFY:
912 oplen = 3;
913 args = 2;
914 break;
915
916 /* C++ */
917 case OP_THIS:
918 oplen = 2;
919 break;
920
01739a3b 921 case OP_RANGE:
0b4e1325 922 oplen = 3;
01739a3b 923 range_type = (enum range_type)
aead7601 924 longest_to_int (expr->elts[endpos - 2].longconst);
0b4e1325 925
0b4e1325
WZ
926 switch (range_type)
927 {
928 case LOW_BOUND_DEFAULT:
6873858b 929 case LOW_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
930 case HIGH_BOUND_DEFAULT:
931 args = 1;
932 break;
933 case BOTH_BOUND_DEFAULT:
934 args = 0;
935 break;
936 case NONE_BOUND_DEFAULT:
6873858b 937 case NONE_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
938 args = 2;
939 break;
940 }
941
942 break;
943
c906108c
SS
944 default:
945 args = 1 + (i < (int) BINOP_END);
946 }
947
24daaebc
PH
948 *oplenp = oplen;
949 *argsp = args;
c906108c
SS
950}
951
952/* Copy the subexpression ending just before index INEND in INEXPR
953 into OUTEXPR, starting at index OUTBEG.
65d12d83 954 In the process, convert it from suffix to prefix form.
2a612529 955 If LAST_STRUCT is -1, then this function always returns -1.
65d12d83 956 Otherwise, it returns the index of the subexpression which is the
2a612529 957 left-hand-side of the expression at LAST_STRUCT. */
c906108c 958
65d12d83 959static int
f86f5ca3 960prefixify_subexp (struct expression *inexpr,
2a612529
TT
961 struct expression *outexpr, int inend, int outbeg,
962 int last_struct)
c906108c 963{
24daaebc
PH
964 int oplen;
965 int args;
f86f5ca3 966 int i;
c906108c 967 int *arglens;
65d12d83 968 int result = -1;
c906108c 969
24daaebc 970 operator_length (inexpr, inend, &oplen, &args);
c906108c
SS
971
972 /* Copy the final operator itself, from the end of the input
973 to the beginning of the output. */
974 inend -= oplen;
975 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
976 EXP_ELEM_TO_BYTES (oplen));
977 outbeg += oplen;
978
2a612529 979 if (last_struct == inend)
65d12d83
TT
980 result = outbeg - oplen;
981
c906108c
SS
982 /* Find the lengths of the arg subexpressions. */
983 arglens = (int *) alloca (args * sizeof (int));
984 for (i = args - 1; i >= 0; i--)
985 {
986 oplen = length_of_subexp (inexpr, inend);
987 arglens[i] = oplen;
988 inend -= oplen;
989 }
990
991 /* Now copy each subexpression, preserving the order of
992 the subexpressions, but prefixifying each one.
993 In this loop, inend starts at the beginning of
994 the expression this level is working on
995 and marches forward over the arguments.
996 outbeg does similarly in the output. */
997 for (i = 0; i < args; i++)
998 {
65d12d83 999 int r;
ad3bbd48 1000
c906108c
SS
1001 oplen = arglens[i];
1002 inend += oplen;
2a612529 1003 r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
65d12d83
TT
1004 if (r != -1)
1005 {
1006 /* Return immediately. We probably have only parsed a
1007 partial expression, so we don't want to try to reverse
1008 the other operands. */
1009 return r;
1010 }
c906108c
SS
1011 outbeg += oplen;
1012 }
65d12d83
TT
1013
1014 return result;
c906108c
SS
1015}
1016\f
c906108c 1017/* Read an expression from the string *STRINGPTR points to,
ae0c443d 1018 parse it, and return a pointer to a struct expression that we malloc.
c906108c
SS
1019 Use block BLOCK as the lexical context for variable names;
1020 if BLOCK is zero, use the block of the selected stack frame.
1021 Meanwhile, advance *STRINGPTR to point after the expression,
1022 at the first nonwhite character that is not part of the expression
1023 (possibly a null character).
1024
1025 If COMMA is nonzero, stop if a comma is reached. */
1026
4d01a485 1027expression_up
bbc13ae3 1028parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
699bd4cf 1029 int comma, innermost_block_tracker *tracker)
6f937416 1030{
7ad417dd 1031 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
699bd4cf 1032 tracker, nullptr);
e85c3284
PH
1033}
1034
1035/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
65d12d83
TT
1036 no value is expected from the expression.
1037 OUT_SUBEXP is set when attempting to complete a field name; in this
1038 case it is set to the index of the subexpression on the
1039 left-hand-side of the struct op. If not doing such completion, it
1040 is left untouched. */
e85c3284 1041
4d01a485 1042static expression_up
7ad417dd
TT
1043parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1044 const struct block *block,
1045 int comma, int void_context_p, int *out_subexp,
699bd4cf 1046 innermost_block_tracker *tracker,
2a612529 1047 expr_completion_state *cstate)
c906108c 1048{
0cce5bd9 1049 const struct language_defn *lang = NULL;
65d12d83 1050 int subexp;
c906108c 1051
5776fca3 1052 if (*stringptr == 0 || **stringptr == 0)
e2e0b3e5 1053 error_no_arg (_("expression to compute"));
c906108c 1054
1e58a4a4
TT
1055 const struct block *expression_context_block = block;
1056 CORE_ADDR expression_context_pc = 0;
59f92a09 1057
699bd4cf
TT
1058 innermost_block_tracker local_tracker;
1059 if (tracker == nullptr)
1060 tracker = &local_tracker;
1061
d705c43c
PA
1062 /* If no context specified, try using the current frame, if any. */
1063 if (!expression_context_block)
1064 expression_context_block = get_selected_block (&expression_context_pc);
1bb9788d 1065 else if (pc == 0)
2b1ffcfd 1066 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1bb9788d
TT
1067 else
1068 expression_context_pc = pc;
59f92a09 1069
d705c43c 1070 /* Fall back to using the current source static context, if any. */
59f92a09 1071
d705c43c 1072 if (!expression_context_block)
59f92a09
FF
1073 {
1074 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1075 if (cursal.symtab)
d705c43c 1076 expression_context_block
439247b6
DE
1077 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1078 STATIC_BLOCK);
d705c43c 1079 if (expression_context_block)
2b1ffcfd 1080 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
84f0252a 1081 }
c906108c 1082
0cce5bd9
JB
1083 if (language_mode == language_mode_auto && block != NULL)
1084 {
1085 /* Find the language associated to the given context block.
1086 Default to the current language if it can not be determined.
1087
1088 Note that using the language corresponding to the current frame
1089 can sometimes give unexpected results. For instance, this
1090 routine is often called several times during the inferior
1091 startup phase to re-parse breakpoint expressions after
1092 a new shared library has been loaded. The language associated
1093 to the current frame at this moment is not relevant for
0df8b418 1094 the breakpoint. Using it would therefore be silly, so it seems
0cce5bd9 1095 better to rely on the current language rather than relying on
0df8b418 1096 the current frame language to parse the expression. That's why
0cce5bd9
JB
1097 we do the following language detection only if the context block
1098 has been specifically provided. */
1099 struct symbol *func = block_linkage_function (block);
1100
1101 if (func != NULL)
1102 lang = language_def (SYMBOL_LANGUAGE (func));
1103 if (lang == NULL || lang->la_language == language_unknown)
1104 lang = current_language;
1105 }
1106 else
1107 lang = current_language;
1108
5b12a61c
JK
1109 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1110 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1111 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1112 to the value matching SELECTED_FRAME as set by get_current_arch. */
410a0ff2 1113
1e58a4a4 1114 parser_state ps (lang, get_current_arch (), expression_context_block,
2a612529 1115 expression_context_pc, comma, *stringptr,
699bd4cf 1116 cstate != nullptr, tracker);
e3ad2841
TT
1117
1118 scoped_restore_current_language lang_saver;
5b12a61c 1119 set_language (lang->la_language);
c906108c 1120
a70b8144 1121 try
65d12d83 1122 {
69d340c6 1123 lang->la_parser (&ps);
65d12d83 1124 }
230d2906 1125 catch (const gdb_exception &except)
65d12d83 1126 {
5e70ee09
TT
1127 /* If parsing for completion, allow this to succeed; but if no
1128 expression elements have been written, then there's nothing
1129 to do, so fail. */
2a612529 1130 if (! ps.parse_completion || ps.expout_ptr == 0)
eedc3f4f 1131 throw;
65d12d83 1132 }
c906108c 1133
e9d9f57e
TT
1134 /* We have to operate on an "expression *", due to la_post_parser,
1135 which explains this funny-looking double release. */
1136 expression_up result = ps.release ();
c906108c
SS
1137
1138 /* Convert expression from postfix form as generated by yacc
0df8b418 1139 parser, to a prefix form. */
c906108c 1140
c906108c 1141 if (expressiondebug)
e9d9f57e 1142 dump_raw_expression (result.get (), gdb_stdlog,
24daaebc 1143 "before conversion to prefix form");
c906108c 1144
2a612529
TT
1145 subexp = prefixify_expression (result.get (),
1146 ps.m_completion_state.expout_last_struct);
65d12d83
TT
1147 if (out_subexp)
1148 *out_subexp = subexp;
c906108c 1149
699bd4cf
TT
1150 lang->la_post_parser (&result, void_context_p, ps.parse_completion,
1151 tracker);
e85c3284 1152
c906108c 1153 if (expressiondebug)
e9d9f57e 1154 dump_prefix_expression (result.get (), gdb_stdlog);
c906108c 1155
2a612529
TT
1156 if (cstate != nullptr)
1157 *cstate = std::move (ps.m_completion_state);
5776fca3 1158 *stringptr = ps.lexptr;
e9d9f57e 1159 return result;
c906108c
SS
1160}
1161
1162/* Parse STRING as an expression, and complain if this fails
1163 to use up all of the contents of STRING. */
1164
4d01a485 1165expression_up
699bd4cf 1166parse_expression (const char *string, innermost_block_tracker *tracker)
c906108c 1167{
699bd4cf 1168 expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
c906108c 1169 if (*string)
8a3fe4f8 1170 error (_("Junk after end of expression."));
c906108c
SS
1171 return exp;
1172}
e85c3284 1173
429e1e81
JB
1174/* Same as parse_expression, but using the given language (LANG)
1175 to parse the expression. */
1176
4d01a485 1177expression_up
429e1e81
JB
1178parse_expression_with_language (const char *string, enum language lang)
1179{
e3ad2841 1180 gdb::optional<scoped_restore_current_language> lang_saver;
429e1e81
JB
1181 if (current_language->la_language != lang)
1182 {
e3ad2841 1183 lang_saver.emplace ();
429e1e81
JB
1184 set_language (lang);
1185 }
1186
e3ad2841 1187 return parse_expression (string);
429e1e81
JB
1188}
1189
65d12d83
TT
1190/* Parse STRING as an expression. If parsing ends in the middle of a
1191 field reference, return the type of the left-hand-side of the
1192 reference; furthermore, if the parsing ends in the field name,
c92817ce
TT
1193 return the field name in *NAME. If the parsing ends in the middle
1194 of a field reference, but the reference is somehow invalid, throw
3eac2b65 1195 an exception. In all other cases, return NULL. */
65d12d83
TT
1196
1197struct type *
3eac2b65
TT
1198parse_expression_for_completion (const char *string,
1199 gdb::unique_xmalloc_ptr<char> *name,
2f68a895 1200 enum type_code *code)
65d12d83 1201{
4d01a485 1202 expression_up exp;
65d12d83
TT
1203 struct value *val;
1204 int subexp;
2a612529 1205 expr_completion_state cstate;
65d12d83 1206
a70b8144 1207 try
65d12d83 1208 {
7ad417dd 1209 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
699bd4cf 1210 nullptr, &cstate);
65d12d83 1211 }
230d2906 1212 catch (const gdb_exception_error &except)
7556d4a4
PA
1213 {
1214 /* Nothing, EXP remains NULL. */
1215 }
1216
7556d4a4 1217 if (exp == NULL)
65d12d83 1218 return NULL;
2f68a895 1219
2a612529 1220 if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
2f68a895 1221 {
2a612529
TT
1222 *code = cstate.expout_tag_completion_type;
1223 *name = std::move (cstate.expout_completion_name);
2f68a895
TT
1224 return NULL;
1225 }
1226
2a612529 1227 if (cstate.expout_last_struct == -1)
4d01a485 1228 return NULL;
65d12d83 1229
3eac2b65
TT
1230 const char *fieldname = extract_field_op (exp.get (), &subexp);
1231 if (fieldname == NULL)
1232 {
1233 name->reset ();
1234 return NULL;
1235 }
a0b7aece 1236
3eac2b65 1237 name->reset (xstrdup (fieldname));
c92817ce
TT
1238 /* This might throw an exception. If so, we want to let it
1239 propagate. */
4d01a485 1240 val = evaluate_subexpression_type (exp.get (), subexp);
65d12d83
TT
1241
1242 return value_type (val);
1243}
1244
0df8b418 1245/* A post-parser that does nothing. */
e85c3284 1246
e85c3284 1247void
699bd4cf
TT
1248null_post_parser (expression_up *exp, int void_context_p, int completin,
1249 innermost_block_tracker *tracker)
e85c3284
PH
1250{
1251}
d30f5e1f
DE
1252
1253/* Parse floating point value P of length LEN.
edd079d9
UW
1254 Return false if invalid, true if valid.
1255 The successfully parsed number is stored in DATA in
1256 target format for floating-point type TYPE.
d30f5e1f
DE
1257
1258 NOTE: This accepts the floating point syntax that sscanf accepts. */
1259
edd079d9
UW
1260bool
1261parse_float (const char *p, int len,
1262 const struct type *type, gdb_byte *data)
d30f5e1f 1263{
f69fdf9b 1264 return target_float_from_string (data, type, std::string (p, len));
d30f5e1f 1265}
c906108c 1266\f
f461f5cf
PM
1267/* This function avoids direct calls to fprintf
1268 in the parser generated debug code. */
1269void
1270parser_fprintf (FILE *x, const char *y, ...)
1271{
1272 va_list args;
ad3bbd48 1273
f461f5cf
PM
1274 va_start (args, y);
1275 if (x == stderr)
1276 vfprintf_unfiltered (gdb_stderr, y, args);
1277 else
1278 {
1279 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1280 vfprintf_unfiltered (gdb_stderr, y, args);
1281 }
1282 va_end (args);
1283}
1284
c0201579
JK
1285/* Implementation of the exp_descriptor method operator_check. */
1286
1287int
1288operator_check_standard (struct expression *exp, int pos,
1289 int (*objfile_func) (struct objfile *objfile,
1290 void *data),
1291 void *data)
1292{
1293 const union exp_element *const elts = exp->elts;
1294 struct type *type = NULL;
1295 struct objfile *objfile = NULL;
1296
1297 /* Extended operators should have been already handled by exp_descriptor
1298 iterate method of its specific language. */
1299 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1300
1301 /* Track the callers of write_exp_elt_type for this table. */
1302
1303 switch (elts[pos].opcode)
1304 {
1305 case BINOP_VAL:
1306 case OP_COMPLEX:
edd079d9 1307 case OP_FLOAT:
c0201579
JK
1308 case OP_LONG:
1309 case OP_SCOPE:
1310 case OP_TYPE:
1311 case UNOP_CAST:
c0201579
JK
1312 case UNOP_MAX:
1313 case UNOP_MEMVAL:
1314 case UNOP_MIN:
1315 type = elts[pos + 1].type;
1316 break;
1317
1318 case TYPE_INSTANCE:
1319 {
3693fdb3 1320 LONGEST arg, nargs = elts[pos + 2].longconst;
c0201579
JK
1321
1322 for (arg = 0; arg < nargs; arg++)
1323 {
b926417a
TT
1324 struct type *inst_type = elts[pos + 3 + arg].type;
1325 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
c0201579 1326
b926417a 1327 if (inst_objfile && (*objfile_func) (inst_objfile, data))
c0201579
JK
1328 return 1;
1329 }
1330 }
1331 break;
1332
c0201579
JK
1333 case OP_VAR_VALUE:
1334 {
1335 const struct block *const block = elts[pos + 1].block;
1336 const struct symbol *const symbol = elts[pos + 2].symbol;
1337
1338 /* Check objfile where the variable itself is placed.
1339 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
08be3fe3 1340 if ((*objfile_func) (symbol_objfile (symbol), data))
c0201579
JK
1341 return 1;
1342
1343 /* Check objfile where is placed the code touching the variable. */
1344 objfile = lookup_objfile_from_block (block);
1345
1346 type = SYMBOL_TYPE (symbol);
1347 }
1348 break;
74ea4be4
PA
1349 case OP_VAR_MSYM_VALUE:
1350 objfile = elts[pos + 1].objfile;
1351 break;
c0201579
JK
1352 }
1353
1354 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1355
1356 if (type && TYPE_OBJFILE (type)
1357 && (*objfile_func) (TYPE_OBJFILE (type), data))
1358 return 1;
1359 if (objfile && (*objfile_func) (objfile, data))
1360 return 1;
1361
1362 return 0;
1363}
1364
a1c7835a
YQ
1365/* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1366 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1367 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1368 returns non-zero value then (any other) non-zero value is immediately
1369 returned to the caller. Otherwise zero is returned after iterating
1370 through whole EXP. */
c0201579
JK
1371
1372static int
1373exp_iterate (struct expression *exp,
1374 int (*objfile_func) (struct objfile *objfile, void *data),
1375 void *data)
1376{
1377 int endpos;
c0201579
JK
1378
1379 for (endpos = exp->nelts; endpos > 0; )
1380 {
1381 int pos, args, oplen = 0;
1382
dc21167c 1383 operator_length (exp, endpos, &oplen, &args);
c0201579
JK
1384 gdb_assert (oplen > 0);
1385
1386 pos = endpos - oplen;
1387 if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1388 objfile_func, data))
1389 return 1;
1390
1391 endpos = pos;
1392 }
1393
1394 return 0;
1395}
1396
1397/* Helper for exp_uses_objfile. */
1398
1399static int
1400exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1401{
19ba03f4 1402 struct objfile *objfile = (struct objfile *) objfile_voidp;
c0201579
JK
1403
1404 if (exp_objfile->separate_debug_objfile_backlink)
1405 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1406
1407 return exp_objfile == objfile;
1408}
1409
1410/* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1411 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1412 file. */
1413
1414int
1415exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1416{
1417 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1418
1419 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1420}
1421
e3980ce2
TT
1422/* Reallocate the `expout' pointer inside PS so that it can accommodate
1423 at least LENELT expression elements. This function does nothing if
1424 there is enough room for the elements. */
410a0ff2 1425
e3980ce2 1426static void
37eedb39 1427increase_expout_size (struct expr_builder *ps, size_t lenelt)
410a0ff2
SDJ
1428{
1429 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1430 {
325fac50 1431 ps->expout_size = std::max (ps->expout_size * 2,
e9d9f57e
TT
1432 ps->expout_ptr + lenelt + 10);
1433 ps->expout.reset (XRESIZEVAR (expression,
1434 ps->expout.release (),
1435 (sizeof (struct expression)
1436 + EXP_ELEM_TO_BYTES (ps->expout_size))));
410a0ff2
SDJ
1437 }
1438}
1439
ac9a91a7 1440void
fba45db2 1441_initialize_parse (void)
ac9a91a7 1442{
ccce17b0
YQ
1443 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1444 &expressiondebug,
1445 _("Set expression debugging."),
1446 _("Show expression debugging."),
1447 _("When non-zero, the internal representation "
1448 "of expressions will be printed."),
1449 NULL,
1450 show_expressiondebug,
1451 &setdebuglist, &showdebuglist);
92981e24 1452 add_setshow_boolean_cmd ("parser", class_maintenance,
3e43a32a
MS
1453 &parser_debug,
1454 _("Set parser debugging."),
1455 _("Show parser debugging."),
1456 _("When non-zero, expression parser "
1457 "tracing will be enabled."),
92981e24
TT
1458 NULL,
1459 show_parserdebug,
1460 &setdebuglist, &showdebuglist);
c906108c 1461}
This page took 3.171623 seconds and 4 git commands to generate.