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