Make exception throwing a bit more efficient
[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;
d7318818 551
c906108c 552 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
0df8b418 553 and $$digits (equivalent to $<-digits> if you could type that). */
c906108c 554
c906108c
SS
555 int negate = 0;
556 int i = 1;
557 /* Double dollar means negate the number and add -1 as well.
558 Thus $$ alone means -1. */
559 if (str.length >= 2 && str.ptr[1] == '$')
560 {
561 negate = 1;
562 i = 2;
563 }
564 if (i == str.length)
565 {
0df8b418 566 /* Just dollars (one or two). */
c5aa993b 567 i = -negate;
c906108c
SS
568 goto handle_last;
569 }
570 /* Is the rest of the token digits? */
571 for (; i < str.length; i++)
572 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
573 break;
574 if (i == str.length)
575 {
576 i = atoi (str.ptr + 1 + negate);
577 if (negate)
c5aa993b 578 i = -i;
c906108c
SS
579 goto handle_last;
580 }
c5aa993b 581
c906108c
SS
582 /* Handle tokens that refer to machine registers:
583 $ followed by a register name. */
fa9f5be6 584 i = user_reg_map_name_to_regnum (ps->gdbarch (),
029a67e4 585 str.ptr + 1, str.length - 1);
c5aa993b 586 if (i >= 0)
c906108c
SS
587 goto handle_register;
588
c4a3d09a
MF
589 /* Any names starting with $ are probably debugger internal variables. */
590
591 isym = lookup_only_internalvar (copy_name (str) + 1);
592 if (isym)
593 {
410a0ff2
SDJ
594 write_exp_elt_opcode (ps, OP_INTERNALVAR);
595 write_exp_elt_intern (ps, isym);
596 write_exp_elt_opcode (ps, OP_INTERNALVAR);
c4a3d09a
MF
597 return;
598 }
599
d7318818 600 /* On some systems, such as HP-UX and hppa-linux, certain system routines
0df8b418 601 have names beginning with $ or $$. Check for those, first. */
d7318818 602
582942f4 603 sym = lookup_symbol (copy_name (str), NULL, VAR_DOMAIN, NULL);
d12307c1 604 if (sym.symbol)
d7318818 605 {
410a0ff2 606 write_exp_elt_opcode (ps, OP_VAR_VALUE);
d12307c1
PMR
607 write_exp_elt_block (ps, sym.block);
608 write_exp_elt_sym (ps, sym.symbol);
410a0ff2 609 write_exp_elt_opcode (ps, OP_VAR_VALUE);
d7318818
RC
610 return;
611 }
7c7b6655
TT
612 msym = lookup_bound_minimal_symbol (copy_name (str));
613 if (msym.minsym)
c906108c 614 {
410a0ff2 615 write_exp_msymbol (ps, msym);
d7318818 616 return;
c906108c 617 }
c5aa993b 618
c4a3d09a 619 /* Any other names are assumed to be debugger internal variables. */
c906108c 620
410a0ff2
SDJ
621 write_exp_elt_opcode (ps, OP_INTERNALVAR);
622 write_exp_elt_intern (ps, create_internalvar (copy_name (str) + 1));
623 write_exp_elt_opcode (ps, OP_INTERNALVAR);
c906108c 624 return;
c5aa993b 625handle_last:
410a0ff2
SDJ
626 write_exp_elt_opcode (ps, OP_LAST);
627 write_exp_elt_longcst (ps, (LONGEST) i);
628 write_exp_elt_opcode (ps, OP_LAST);
c906108c 629 return;
c5aa993b 630handle_register:
410a0ff2 631 write_exp_elt_opcode (ps, OP_REGISTER);
67f3407f
DJ
632 str.length--;
633 str.ptr++;
410a0ff2
SDJ
634 write_exp_string (ps, str);
635 write_exp_elt_opcode (ps, OP_REGISTER);
699bd4cf
TT
636 ps->block_tracker->update (ps->expression_context_block,
637 INNERMOST_BLOCK_FOR_REGISTERS);
c906108c
SS
638 return;
639}
640
641
d7561cbb
KS
642const char *
643find_template_name_end (const char *p)
c906108c
SS
644{
645 int depth = 1;
646 int just_seen_right = 0;
647 int just_seen_colon = 0;
648 int just_seen_space = 0;
c5aa993b 649
c906108c
SS
650 if (!p || (*p != '<'))
651 return 0;
652
653 while (*++p)
654 {
655 switch (*p)
c5aa993b
JM
656 {
657 case '\'':
658 case '\"':
659 case '{':
660 case '}':
0df8b418 661 /* In future, may want to allow these?? */
c5aa993b
JM
662 return 0;
663 case '<':
664 depth++; /* start nested template */
665 if (just_seen_colon || just_seen_right || just_seen_space)
666 return 0; /* but not after : or :: or > or space */
667 break;
668 case '>':
669 if (just_seen_colon || just_seen_right)
670 return 0; /* end a (nested?) template */
671 just_seen_right = 1; /* but not after : or :: */
672 if (--depth == 0) /* also disallow >>, insist on > > */
673 return ++p; /* if outermost ended, return */
674 break;
675 case ':':
676 if (just_seen_space || (just_seen_colon > 1))
677 return 0; /* nested class spec coming up */
678 just_seen_colon++; /* we allow :: but not :::: */
679 break;
680 case ' ':
681 break;
682 default:
683 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
684 (*p >= 'A' && *p <= 'Z') ||
685 (*p >= '0' && *p <= '9') ||
686 (*p == '_') || (*p == ',') || /* commas for template args */
687 (*p == '&') || (*p == '*') || /* pointer and ref types */
688 (*p == '(') || (*p == ')') || /* function types */
689 (*p == '[') || (*p == ']'))) /* array types */
690 return 0;
691 }
c906108c 692 if (*p != ' ')
c5aa993b 693 just_seen_space = 0;
c906108c 694 if (*p != ':')
c5aa993b 695 just_seen_colon = 0;
c906108c 696 if (*p != '>')
c5aa993b 697 just_seen_right = 0;
c906108c
SS
698 }
699 return 0;
700}
c5aa993b 701\f
c906108c 702
1a4eeb98 703/* Return a null-terminated temporary copy of the name of a string token.
c906108c 704
1a4eeb98
DE
705 Tokens that refer to names do so with explicit pointer and length,
706 so they can share the storage that lexptr is parsing.
707 When it is necessary to pass a name to a function that expects
708 a null-terminated string, the substring is copied out
709 into a separate block of storage.
710
711 N.B. A single buffer is reused on each call. */
c906108c
SS
712
713char *
fba45db2 714copy_name (struct stoken token)
c906108c 715{
1a4eeb98
DE
716 /* A temporary buffer for identifiers, so we can null-terminate them.
717 We allocate this with xrealloc. parse_exp_1 used to allocate with
718 alloca, using the size of the whole expression as a conservative
719 estimate of the space needed. However, macro expansion can
720 introduce names longer than the original expression; there's no
721 practical way to know beforehand how large that might be. */
722 static char *namecopy;
723 static size_t namecopy_size;
724
3a913e29
JB
725 /* Make sure there's enough space for the token. */
726 if (namecopy_size < token.length + 1)
727 {
728 namecopy_size = token.length + 1;
224c3ddb 729 namecopy = (char *) xrealloc (namecopy, token.length + 1);
3a913e29
JB
730 }
731
c906108c
SS
732 memcpy (namecopy, token.ptr, token.length);
733 namecopy[token.length] = 0;
3a913e29 734
c906108c
SS
735 return namecopy;
736}
737\f
55aa24fb
SDJ
738
739/* See comments on parser-defs.h. */
740
741int
2a612529 742prefixify_expression (struct expression *expr, int last_struct)
c906108c 743{
5e70ee09 744 gdb_assert (expr->nelts > 0);
df2a60d0 745 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
f86f5ca3
PH
746 struct expression *temp;
747 int inpos = expr->nelts, outpos = 0;
c906108c
SS
748
749 temp = (struct expression *) alloca (len);
750
751 /* Copy the original expression into temp. */
752 memcpy (temp, expr, len);
753
2a612529 754 return prefixify_subexp (temp, expr, inpos, outpos, last_struct);
c906108c
SS
755}
756
24daaebc
PH
757/* Return the number of exp_elements in the postfix subexpression
758 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
c906108c 759
cf81cf60 760static int
f86f5ca3 761length_of_subexp (struct expression *expr, int endpos)
24daaebc 762{
6b4398f7 763 int oplen, args;
24daaebc
PH
764
765 operator_length (expr, endpos, &oplen, &args);
766
767 while (args > 0)
768 {
769 oplen += length_of_subexp (expr, endpos - oplen);
770 args--;
771 }
772
773 return oplen;
774}
775
776/* Sets *OPLENP to the length of the operator whose (last) index is
777 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
778 operator takes. */
779
780void
554794dc
SDJ
781operator_length (const struct expression *expr, int endpos, int *oplenp,
782 int *argsp)
5f9769d1
PH
783{
784 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
785 oplenp, argsp);
786}
787
788/* Default value for operator_length in exp_descriptor vectors. */
789
790void
554794dc 791operator_length_standard (const struct expression *expr, int endpos,
5f9769d1 792 int *oplenp, int *argsp)
c906108c 793{
f86f5ca3
PH
794 int oplen = 1;
795 int args = 0;
01739a3b 796 enum range_type range_type;
f86f5ca3 797 int i;
c906108c
SS
798
799 if (endpos < 1)
8a3fe4f8 800 error (_("?error in operator_length_standard"));
c906108c
SS
801
802 i = (int) expr->elts[endpos - 1].opcode;
803
804 switch (i)
805 {
806 /* C++ */
807 case OP_SCOPE:
808 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
809 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
810 break;
811
812 case OP_LONG:
edd079d9 813 case OP_FLOAT:
c906108c 814 case OP_VAR_VALUE:
74ea4be4 815 case OP_VAR_MSYM_VALUE:
c906108c
SS
816 oplen = 4;
817 break;
818
858be34c
PA
819 case OP_FUNC_STATIC_VAR:
820 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
821 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
822 args = 1;
823 break;
824
c906108c
SS
825 case OP_TYPE:
826 case OP_BOOL:
827 case OP_LAST:
c906108c 828 case OP_INTERNALVAR:
36b11add 829 case OP_VAR_ENTRY_VALUE:
c906108c
SS
830 oplen = 3;
831 break;
832
833 case OP_COMPLEX:
c806c55a 834 oplen = 3;
c906108c 835 args = 2;
c5aa993b 836 break;
c906108c
SS
837
838 case OP_FUNCALL:
839 case OP_F77_UNDETERMINED_ARGLIST:
840 oplen = 3;
841 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
842 break;
843
072bba3b 844 case TYPE_INSTANCE:
3693fdb3 845 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
072bba3b
KS
846 args = 1;
847 break;
848
0df8b418 849 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
53c551b7
AF
850 oplen = 4;
851 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
852 break;
853
c906108c
SS
854 case UNOP_MAX:
855 case UNOP_MIN:
856 oplen = 3;
857 break;
858
9eaf6705 859 case UNOP_CAST_TYPE:
4e8f195d
TT
860 case UNOP_DYNAMIC_CAST:
861 case UNOP_REINTERPRET_CAST:
9eaf6705
TT
862 case UNOP_MEMVAL_TYPE:
863 oplen = 1;
864 args = 2;
865 break;
866
867 case BINOP_VAL:
868 case UNOP_CAST:
c5aa993b 869 case UNOP_MEMVAL:
c906108c
SS
870 oplen = 3;
871 args = 1;
872 break;
873
874 case UNOP_ABS:
875 case UNOP_CAP:
876 case UNOP_CHR:
877 case UNOP_FLOAT:
878 case UNOP_HIGH:
4d00f5d8 879 case UNOP_KIND:
c906108c
SS
880 case UNOP_ODD:
881 case UNOP_ORD:
882 case UNOP_TRUNC:
608b4967
TT
883 case OP_TYPEOF:
884 case OP_DECLTYPE:
6e72ca20 885 case OP_TYPEID:
c906108c
SS
886 oplen = 1;
887 args = 1;
888 break;
889
7322dca9
SW
890 case OP_ADL_FUNC:
891 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
892 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
893 oplen++;
894 oplen++;
895 break;
896
c906108c
SS
897 case STRUCTOP_STRUCT:
898 case STRUCTOP_PTR:
899 args = 1;
900 /* fall through */
67f3407f 901 case OP_REGISTER:
c906108c
SS
902 case OP_M2_STRING:
903 case OP_STRING:
3e43a32a 904 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
0df8b418
MS
905 NSString constant. */
906 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
c906108c 907 case OP_NAME:
c906108c
SS
908 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
909 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
910 break;
911
c906108c
SS
912 case OP_ARRAY:
913 oplen = 4;
914 args = longest_to_int (expr->elts[endpos - 2].longconst);
915 args -= longest_to_int (expr->elts[endpos - 3].longconst);
916 args += 1;
917 break;
918
919 case TERNOP_COND:
920 case TERNOP_SLICE:
c906108c
SS
921 args = 3;
922 break;
923
924 /* Modula-2 */
c5aa993b 925 case MULTI_SUBSCRIPT:
c906108c 926 oplen = 3;
c5aa993b 927 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
c906108c
SS
928 break;
929
930 case BINOP_ASSIGN_MODIFY:
931 oplen = 3;
932 args = 2;
933 break;
934
935 /* C++ */
936 case OP_THIS:
937 oplen = 2;
938 break;
939
01739a3b 940 case OP_RANGE:
0b4e1325 941 oplen = 3;
01739a3b 942 range_type = (enum range_type)
aead7601 943 longest_to_int (expr->elts[endpos - 2].longconst);
0b4e1325 944
0b4e1325
WZ
945 switch (range_type)
946 {
947 case LOW_BOUND_DEFAULT:
6873858b 948 case LOW_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
949 case HIGH_BOUND_DEFAULT:
950 args = 1;
951 break;
952 case BOTH_BOUND_DEFAULT:
953 args = 0;
954 break;
955 case NONE_BOUND_DEFAULT:
6873858b 956 case NONE_BOUND_DEFAULT_EXCLUSIVE:
0b4e1325
WZ
957 args = 2;
958 break;
959 }
960
961 break;
962
c906108c
SS
963 default:
964 args = 1 + (i < (int) BINOP_END);
965 }
966
24daaebc
PH
967 *oplenp = oplen;
968 *argsp = args;
c906108c
SS
969}
970
971/* Copy the subexpression ending just before index INEND in INEXPR
972 into OUTEXPR, starting at index OUTBEG.
65d12d83 973 In the process, convert it from suffix to prefix form.
2a612529 974 If LAST_STRUCT is -1, then this function always returns -1.
65d12d83 975 Otherwise, it returns the index of the subexpression which is the
2a612529 976 left-hand-side of the expression at LAST_STRUCT. */
c906108c 977
65d12d83 978static int
f86f5ca3 979prefixify_subexp (struct expression *inexpr,
2a612529
TT
980 struct expression *outexpr, int inend, int outbeg,
981 int last_struct)
c906108c 982{
24daaebc
PH
983 int oplen;
984 int args;
f86f5ca3 985 int i;
c906108c 986 int *arglens;
65d12d83 987 int result = -1;
c906108c 988
24daaebc 989 operator_length (inexpr, inend, &oplen, &args);
c906108c
SS
990
991 /* Copy the final operator itself, from the end of the input
992 to the beginning of the output. */
993 inend -= oplen;
994 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
995 EXP_ELEM_TO_BYTES (oplen));
996 outbeg += oplen;
997
2a612529 998 if (last_struct == inend)
65d12d83
TT
999 result = outbeg - oplen;
1000
c906108c
SS
1001 /* Find the lengths of the arg subexpressions. */
1002 arglens = (int *) alloca (args * sizeof (int));
1003 for (i = args - 1; i >= 0; i--)
1004 {
1005 oplen = length_of_subexp (inexpr, inend);
1006 arglens[i] = oplen;
1007 inend -= oplen;
1008 }
1009
1010 /* Now copy each subexpression, preserving the order of
1011 the subexpressions, but prefixifying each one.
1012 In this loop, inend starts at the beginning of
1013 the expression this level is working on
1014 and marches forward over the arguments.
1015 outbeg does similarly in the output. */
1016 for (i = 0; i < args; i++)
1017 {
65d12d83 1018 int r;
ad3bbd48 1019
c906108c
SS
1020 oplen = arglens[i];
1021 inend += oplen;
2a612529 1022 r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
65d12d83
TT
1023 if (r != -1)
1024 {
1025 /* Return immediately. We probably have only parsed a
1026 partial expression, so we don't want to try to reverse
1027 the other operands. */
1028 return r;
1029 }
c906108c
SS
1030 outbeg += oplen;
1031 }
65d12d83
TT
1032
1033 return result;
c906108c
SS
1034}
1035\f
c906108c 1036/* Read an expression from the string *STRINGPTR points to,
ae0c443d 1037 parse it, and return a pointer to a struct expression that we malloc.
c906108c
SS
1038 Use block BLOCK as the lexical context for variable names;
1039 if BLOCK is zero, use the block of the selected stack frame.
1040 Meanwhile, advance *STRINGPTR to point after the expression,
1041 at the first nonwhite character that is not part of the expression
1042 (possibly a null character).
1043
1044 If COMMA is nonzero, stop if a comma is reached. */
1045
4d01a485 1046expression_up
bbc13ae3 1047parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
699bd4cf 1048 int comma, innermost_block_tracker *tracker)
6f937416 1049{
7ad417dd 1050 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
699bd4cf 1051 tracker, nullptr);
e85c3284
PH
1052}
1053
1054/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
65d12d83
TT
1055 no value is expected from the expression.
1056 OUT_SUBEXP is set when attempting to complete a field name; in this
1057 case it is set to the index of the subexpression on the
1058 left-hand-side of the struct op. If not doing such completion, it
1059 is left untouched. */
e85c3284 1060
4d01a485 1061static expression_up
7ad417dd
TT
1062parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1063 const struct block *block,
1064 int comma, int void_context_p, int *out_subexp,
699bd4cf 1065 innermost_block_tracker *tracker,
2a612529 1066 expr_completion_state *cstate)
c906108c 1067{
0cce5bd9 1068 const struct language_defn *lang = NULL;
65d12d83 1069 int subexp;
c906108c 1070
5776fca3 1071 if (*stringptr == 0 || **stringptr == 0)
e2e0b3e5 1072 error_no_arg (_("expression to compute"));
c906108c 1073
1e58a4a4
TT
1074 const struct block *expression_context_block = block;
1075 CORE_ADDR expression_context_pc = 0;
59f92a09 1076
699bd4cf
TT
1077 innermost_block_tracker local_tracker;
1078 if (tracker == nullptr)
1079 tracker = &local_tracker;
1080
d705c43c
PA
1081 /* If no context specified, try using the current frame, if any. */
1082 if (!expression_context_block)
1083 expression_context_block = get_selected_block (&expression_context_pc);
1bb9788d 1084 else if (pc == 0)
2b1ffcfd 1085 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1bb9788d
TT
1086 else
1087 expression_context_pc = pc;
59f92a09 1088
d705c43c 1089 /* Fall back to using the current source static context, if any. */
59f92a09 1090
d705c43c 1091 if (!expression_context_block)
59f92a09
FF
1092 {
1093 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1094 if (cursal.symtab)
d705c43c 1095 expression_context_block
439247b6
DE
1096 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1097 STATIC_BLOCK);
d705c43c 1098 if (expression_context_block)
2b1ffcfd 1099 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
84f0252a 1100 }
c906108c 1101
0cce5bd9
JB
1102 if (language_mode == language_mode_auto && block != NULL)
1103 {
1104 /* Find the language associated to the given context block.
1105 Default to the current language if it can not be determined.
1106
1107 Note that using the language corresponding to the current frame
1108 can sometimes give unexpected results. For instance, this
1109 routine is often called several times during the inferior
1110 startup phase to re-parse breakpoint expressions after
1111 a new shared library has been loaded. The language associated
1112 to the current frame at this moment is not relevant for
0df8b418 1113 the breakpoint. Using it would therefore be silly, so it seems
0cce5bd9 1114 better to rely on the current language rather than relying on
0df8b418 1115 the current frame language to parse the expression. That's why
0cce5bd9
JB
1116 we do the following language detection only if the context block
1117 has been specifically provided. */
1118 struct symbol *func = block_linkage_function (block);
1119
1120 if (func != NULL)
1121 lang = language_def (SYMBOL_LANGUAGE (func));
1122 if (lang == NULL || lang->la_language == language_unknown)
1123 lang = current_language;
1124 }
1125 else
1126 lang = current_language;
1127
5b12a61c
JK
1128 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1129 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1130 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1131 to the value matching SELECTED_FRAME as set by get_current_arch. */
410a0ff2 1132
1e58a4a4 1133 parser_state ps (lang, get_current_arch (), expression_context_block,
2a612529 1134 expression_context_pc, comma, *stringptr,
699bd4cf 1135 cstate != nullptr, tracker);
e3ad2841
TT
1136
1137 scoped_restore_current_language lang_saver;
5b12a61c 1138 set_language (lang->la_language);
c906108c 1139
a70b8144 1140 try
65d12d83 1141 {
69d340c6 1142 lang->la_parser (&ps);
65d12d83 1143 }
230d2906 1144 catch (const gdb_exception &except)
65d12d83 1145 {
5e70ee09
TT
1146 /* If parsing for completion, allow this to succeed; but if no
1147 expression elements have been written, then there's nothing
1148 to do, so fail. */
2a612529 1149 if (! ps.parse_completion || ps.expout_ptr == 0)
e9d9f57e 1150 throw_exception (except);
65d12d83 1151 }
c906108c 1152
e9d9f57e
TT
1153 /* We have to operate on an "expression *", due to la_post_parser,
1154 which explains this funny-looking double release. */
1155 expression_up result = ps.release ();
c906108c
SS
1156
1157 /* Convert expression from postfix form as generated by yacc
0df8b418 1158 parser, to a prefix form. */
c906108c 1159
c906108c 1160 if (expressiondebug)
e9d9f57e 1161 dump_raw_expression (result.get (), gdb_stdlog,
24daaebc 1162 "before conversion to prefix form");
c906108c 1163
2a612529
TT
1164 subexp = prefixify_expression (result.get (),
1165 ps.m_completion_state.expout_last_struct);
65d12d83
TT
1166 if (out_subexp)
1167 *out_subexp = subexp;
c906108c 1168
699bd4cf
TT
1169 lang->la_post_parser (&result, void_context_p, ps.parse_completion,
1170 tracker);
e85c3284 1171
c906108c 1172 if (expressiondebug)
e9d9f57e 1173 dump_prefix_expression (result.get (), gdb_stdlog);
c906108c 1174
2a612529
TT
1175 if (cstate != nullptr)
1176 *cstate = std::move (ps.m_completion_state);
5776fca3 1177 *stringptr = ps.lexptr;
e9d9f57e 1178 return result;
c906108c
SS
1179}
1180
1181/* Parse STRING as an expression, and complain if this fails
1182 to use up all of the contents of STRING. */
1183
4d01a485 1184expression_up
699bd4cf 1185parse_expression (const char *string, innermost_block_tracker *tracker)
c906108c 1186{
699bd4cf 1187 expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
c906108c 1188 if (*string)
8a3fe4f8 1189 error (_("Junk after end of expression."));
c906108c
SS
1190 return exp;
1191}
e85c3284 1192
429e1e81
JB
1193/* Same as parse_expression, but using the given language (LANG)
1194 to parse the expression. */
1195
4d01a485 1196expression_up
429e1e81
JB
1197parse_expression_with_language (const char *string, enum language lang)
1198{
e3ad2841 1199 gdb::optional<scoped_restore_current_language> lang_saver;
429e1e81
JB
1200 if (current_language->la_language != lang)
1201 {
e3ad2841 1202 lang_saver.emplace ();
429e1e81
JB
1203 set_language (lang);
1204 }
1205
e3ad2841 1206 return parse_expression (string);
429e1e81
JB
1207}
1208
65d12d83
TT
1209/* Parse STRING as an expression. If parsing ends in the middle of a
1210 field reference, return the type of the left-hand-side of the
1211 reference; furthermore, if the parsing ends in the field name,
c92817ce
TT
1212 return the field name in *NAME. If the parsing ends in the middle
1213 of a field reference, but the reference is somehow invalid, throw
3eac2b65 1214 an exception. In all other cases, return NULL. */
65d12d83
TT
1215
1216struct type *
3eac2b65
TT
1217parse_expression_for_completion (const char *string,
1218 gdb::unique_xmalloc_ptr<char> *name,
2f68a895 1219 enum type_code *code)
65d12d83 1220{
4d01a485 1221 expression_up exp;
65d12d83
TT
1222 struct value *val;
1223 int subexp;
2a612529 1224 expr_completion_state cstate;
65d12d83 1225
a70b8144 1226 try
65d12d83 1227 {
7ad417dd 1228 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
699bd4cf 1229 nullptr, &cstate);
65d12d83 1230 }
230d2906 1231 catch (const gdb_exception_error &except)
7556d4a4
PA
1232 {
1233 /* Nothing, EXP remains NULL. */
1234 }
1235
7556d4a4 1236 if (exp == NULL)
65d12d83 1237 return NULL;
2f68a895 1238
2a612529 1239 if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
2f68a895 1240 {
2a612529
TT
1241 *code = cstate.expout_tag_completion_type;
1242 *name = std::move (cstate.expout_completion_name);
2f68a895
TT
1243 return NULL;
1244 }
1245
2a612529 1246 if (cstate.expout_last_struct == -1)
4d01a485 1247 return NULL;
65d12d83 1248
3eac2b65
TT
1249 const char *fieldname = extract_field_op (exp.get (), &subexp);
1250 if (fieldname == NULL)
1251 {
1252 name->reset ();
1253 return NULL;
1254 }
a0b7aece 1255
3eac2b65 1256 name->reset (xstrdup (fieldname));
c92817ce
TT
1257 /* This might throw an exception. If so, we want to let it
1258 propagate. */
4d01a485 1259 val = evaluate_subexpression_type (exp.get (), subexp);
65d12d83
TT
1260
1261 return value_type (val);
1262}
1263
0df8b418 1264/* A post-parser that does nothing. */
e85c3284 1265
e85c3284 1266void
699bd4cf
TT
1267null_post_parser (expression_up *exp, int void_context_p, int completin,
1268 innermost_block_tracker *tracker)
e85c3284
PH
1269{
1270}
d30f5e1f
DE
1271
1272/* Parse floating point value P of length LEN.
edd079d9
UW
1273 Return false if invalid, true if valid.
1274 The successfully parsed number is stored in DATA in
1275 target format for floating-point type TYPE.
d30f5e1f
DE
1276
1277 NOTE: This accepts the floating point syntax that sscanf accepts. */
1278
edd079d9
UW
1279bool
1280parse_float (const char *p, int len,
1281 const struct type *type, gdb_byte *data)
d30f5e1f 1282{
f69fdf9b 1283 return target_float_from_string (data, type, std::string (p, len));
d30f5e1f 1284}
c906108c 1285\f
f461f5cf
PM
1286/* This function avoids direct calls to fprintf
1287 in the parser generated debug code. */
1288void
1289parser_fprintf (FILE *x, const char *y, ...)
1290{
1291 va_list args;
ad3bbd48 1292
f461f5cf
PM
1293 va_start (args, y);
1294 if (x == stderr)
1295 vfprintf_unfiltered (gdb_stderr, y, args);
1296 else
1297 {
1298 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1299 vfprintf_unfiltered (gdb_stderr, y, args);
1300 }
1301 va_end (args);
1302}
1303
c0201579
JK
1304/* Implementation of the exp_descriptor method operator_check. */
1305
1306int
1307operator_check_standard (struct expression *exp, int pos,
1308 int (*objfile_func) (struct objfile *objfile,
1309 void *data),
1310 void *data)
1311{
1312 const union exp_element *const elts = exp->elts;
1313 struct type *type = NULL;
1314 struct objfile *objfile = NULL;
1315
1316 /* Extended operators should have been already handled by exp_descriptor
1317 iterate method of its specific language. */
1318 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1319
1320 /* Track the callers of write_exp_elt_type for this table. */
1321
1322 switch (elts[pos].opcode)
1323 {
1324 case BINOP_VAL:
1325 case OP_COMPLEX:
edd079d9 1326 case OP_FLOAT:
c0201579
JK
1327 case OP_LONG:
1328 case OP_SCOPE:
1329 case OP_TYPE:
1330 case UNOP_CAST:
c0201579
JK
1331 case UNOP_MAX:
1332 case UNOP_MEMVAL:
1333 case UNOP_MIN:
1334 type = elts[pos + 1].type;
1335 break;
1336
1337 case TYPE_INSTANCE:
1338 {
3693fdb3 1339 LONGEST arg, nargs = elts[pos + 2].longconst;
c0201579
JK
1340
1341 for (arg = 0; arg < nargs; arg++)
1342 {
b926417a
TT
1343 struct type *inst_type = elts[pos + 3 + arg].type;
1344 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
c0201579 1345
b926417a 1346 if (inst_objfile && (*objfile_func) (inst_objfile, data))
c0201579
JK
1347 return 1;
1348 }
1349 }
1350 break;
1351
c0201579
JK
1352 case OP_VAR_VALUE:
1353 {
1354 const struct block *const block = elts[pos + 1].block;
1355 const struct symbol *const symbol = elts[pos + 2].symbol;
1356
1357 /* Check objfile where the variable itself is placed.
1358 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
08be3fe3 1359 if ((*objfile_func) (symbol_objfile (symbol), data))
c0201579
JK
1360 return 1;
1361
1362 /* Check objfile where is placed the code touching the variable. */
1363 objfile = lookup_objfile_from_block (block);
1364
1365 type = SYMBOL_TYPE (symbol);
1366 }
1367 break;
74ea4be4
PA
1368 case OP_VAR_MSYM_VALUE:
1369 objfile = elts[pos + 1].objfile;
1370 break;
c0201579
JK
1371 }
1372
1373 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1374
1375 if (type && TYPE_OBJFILE (type)
1376 && (*objfile_func) (TYPE_OBJFILE (type), data))
1377 return 1;
1378 if (objfile && (*objfile_func) (objfile, data))
1379 return 1;
1380
1381 return 0;
1382}
1383
a1c7835a
YQ
1384/* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1385 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1386 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1387 returns non-zero value then (any other) non-zero value is immediately
1388 returned to the caller. Otherwise zero is returned after iterating
1389 through whole EXP. */
c0201579
JK
1390
1391static int
1392exp_iterate (struct expression *exp,
1393 int (*objfile_func) (struct objfile *objfile, void *data),
1394 void *data)
1395{
1396 int endpos;
c0201579
JK
1397
1398 for (endpos = exp->nelts; endpos > 0; )
1399 {
1400 int pos, args, oplen = 0;
1401
dc21167c 1402 operator_length (exp, endpos, &oplen, &args);
c0201579
JK
1403 gdb_assert (oplen > 0);
1404
1405 pos = endpos - oplen;
1406 if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1407 objfile_func, data))
1408 return 1;
1409
1410 endpos = pos;
1411 }
1412
1413 return 0;
1414}
1415
1416/* Helper for exp_uses_objfile. */
1417
1418static int
1419exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1420{
19ba03f4 1421 struct objfile *objfile = (struct objfile *) objfile_voidp;
c0201579
JK
1422
1423 if (exp_objfile->separate_debug_objfile_backlink)
1424 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1425
1426 return exp_objfile == objfile;
1427}
1428
1429/* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1430 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1431 file. */
1432
1433int
1434exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1435{
1436 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1437
1438 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1439}
1440
e3980ce2
TT
1441/* Reallocate the `expout' pointer inside PS so that it can accommodate
1442 at least LENELT expression elements. This function does nothing if
1443 there is enough room for the elements. */
410a0ff2 1444
e3980ce2 1445static void
37eedb39 1446increase_expout_size (struct expr_builder *ps, size_t lenelt)
410a0ff2
SDJ
1447{
1448 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1449 {
325fac50 1450 ps->expout_size = std::max (ps->expout_size * 2,
e9d9f57e
TT
1451 ps->expout_ptr + lenelt + 10);
1452 ps->expout.reset (XRESIZEVAR (expression,
1453 ps->expout.release (),
1454 (sizeof (struct expression)
1455 + EXP_ELEM_TO_BYTES (ps->expout_size))));
410a0ff2
SDJ
1456 }
1457}
1458
ac9a91a7 1459void
fba45db2 1460_initialize_parse (void)
ac9a91a7 1461{
ccce17b0
YQ
1462 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1463 &expressiondebug,
1464 _("Set expression debugging."),
1465 _("Show expression debugging."),
1466 _("When non-zero, the internal representation "
1467 "of expressions will be printed."),
1468 NULL,
1469 show_expressiondebug,
1470 &setdebuglist, &showdebuglist);
92981e24 1471 add_setshow_boolean_cmd ("parser", class_maintenance,
3e43a32a
MS
1472 &parser_debug,
1473 _("Set parser debugging."),
1474 _("Show parser debugging."),
1475 _("When non-zero, expression parser "
1476 "tracing will be enabled."),
92981e24
TT
1477 NULL,
1478 show_parserdebug,
1479 &setdebuglist, &showdebuglist);
c906108c 1480}
This page took 1.870231 seconds and 4 git commands to generate.