gdb: rename 'enum range_type' to 'enum range_flag'
[deliverable/binutils-gdb.git] / gdb / parse.c
1 /* Parse expressions for GDB.
2
3 Copyright (C) 1986-2020 Free Software Foundation, Inc.
4
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo, 1991.
7
8 This file is part of GDB.
9
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
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
14
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.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
23 /* Parse an expression from text in a string,
24 and return the result as a struct expression pointer.
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. */
31
32 #include "defs.h"
33 #include <ctype.h>
34 #include "arch-utils.h"
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"
42 #include "f-lang.h"
43 #include "parser-defs.h"
44 #include "gdbcmd.h"
45 #include "symfile.h" /* for overlay functions */
46 #include "inferior.h"
47 #include "target-float.h"
48 #include "block.h"
49 #include "source.h"
50 #include "objfiles.h"
51 #include "user-regs.h"
52 #include <algorithm>
53 #include "gdbsupport/gdb_optional.h"
54
55 /* Standard set of definitions for printing, dumping, prefixifying,
56 * and evaluating expressions. */
57
58 const struct exp_descriptor exp_descriptor_standard =
59 {
60 print_subexp_standard,
61 operator_length_standard,
62 operator_check_standard,
63 op_name_standard,
64 dump_subexp_body_standard,
65 evaluate_subexp_standard
66 };
67 \f
68 static unsigned int expressiondebug = 0;
69 static void
70 show_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 }
75
76
77 /* True if an expression parser should set yydebug. */
78 bool parser_debug;
79
80 static void
81 show_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
88 static int prefixify_subexp (struct expression *, struct expression *, int,
89 int, int);
90
91 static expression_up parse_exp_in_context (const char **, CORE_ADDR,
92 const struct block *, int,
93 int, int *,
94 innermost_block_tracker *,
95 expr_completion_state *);
96
97 static void increase_expout_size (struct expr_builder *ps, size_t lenelt);
98
99
100 /* Documented at it's declaration. */
101
102 void
103 innermost_block_tracker::update (const struct block *b,
104 innermost_block_tracker_types t)
105 {
106 if ((m_types & t) != 0
107 && (m_innermost_block == NULL
108 || contained_in (b, m_innermost_block)))
109 m_innermost_block = b;
110 }
111
112 \f
113
114 /* See definition in parser-defs.h. */
115
116 expr_builder::expr_builder (const struct language_defn *lang,
117 struct gdbarch *gdbarch)
118 : expout_size (10),
119 expout (XNEWVAR (expression,
120 (sizeof (expression)
121 + EXP_ELEM_TO_BYTES (expout_size)))),
122 expout_ptr (0)
123 {
124 expout->language_defn = lang;
125 expout->gdbarch = gdbarch;
126 }
127
128 expression_up
129 expr_builder::release ()
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
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);
141 }
142
143 /* This page contains the functions for adding data to the struct expression
144 being constructed. */
145
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
149 a register through here. */
150
151 static void
152 write_exp_elt (struct expr_builder *ps, const union exp_element *expelt)
153 {
154 if (ps->expout_ptr >= ps->expout_size)
155 {
156 ps->expout_size *= 2;
157 ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
158 (sizeof (expression)
159 + EXP_ELEM_TO_BYTES (ps->expout_size))));
160 }
161 ps->expout->elts[ps->expout_ptr++] = *expelt;
162 }
163
164 void
165 write_exp_elt_opcode (struct expr_builder *ps, enum exp_opcode expelt)
166 {
167 union exp_element tmp;
168
169 memset (&tmp, 0, sizeof (union exp_element));
170 tmp.opcode = expelt;
171 write_exp_elt (ps, &tmp);
172 }
173
174 void
175 write_exp_elt_sym (struct expr_builder *ps, struct symbol *expelt)
176 {
177 union exp_element tmp;
178
179 memset (&tmp, 0, sizeof (union exp_element));
180 tmp.symbol = expelt;
181 write_exp_elt (ps, &tmp);
182 }
183
184 static void
185 write_exp_elt_msym (struct expr_builder *ps, minimal_symbol *expelt)
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
194 void
195 write_exp_elt_block (struct expr_builder *ps, const struct block *b)
196 {
197 union exp_element tmp;
198
199 memset (&tmp, 0, sizeof (union exp_element));
200 tmp.block = b;
201 write_exp_elt (ps, &tmp);
202 }
203
204 void
205 write_exp_elt_objfile (struct expr_builder *ps, struct objfile *objfile)
206 {
207 union exp_element tmp;
208
209 memset (&tmp, 0, sizeof (union exp_element));
210 tmp.objfile = objfile;
211 write_exp_elt (ps, &tmp);
212 }
213
214 void
215 write_exp_elt_longcst (struct expr_builder *ps, LONGEST expelt)
216 {
217 union exp_element tmp;
218
219 memset (&tmp, 0, sizeof (union exp_element));
220 tmp.longconst = expelt;
221 write_exp_elt (ps, &tmp);
222 }
223
224 void
225 write_exp_elt_floatcst (struct expr_builder *ps, const gdb_byte expelt[16])
226 {
227 union exp_element tmp;
228 int index;
229
230 for (index = 0; index < 16; index++)
231 tmp.floatconst[index] = expelt[index];
232
233 write_exp_elt (ps, &tmp);
234 }
235
236 void
237 write_exp_elt_type (struct expr_builder *ps, struct type *expelt)
238 {
239 union exp_element tmp;
240
241 memset (&tmp, 0, sizeof (union exp_element));
242 tmp.type = expelt;
243 write_exp_elt (ps, &tmp);
244 }
245
246 void
247 write_exp_elt_intern (struct expr_builder *ps, struct internalvar *expelt)
248 {
249 union exp_element tmp;
250
251 memset (&tmp, 0, sizeof (union exp_element));
252 tmp.internalvar = expelt;
253 write_exp_elt (ps, &tmp);
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
262 the length of the string. I.e. an expression element at each end of
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,
269 this is strictly for the convenience of debugging gdb itself.
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
274 course. */
275
276
277 void
278 write_exp_string (struct expr_builder *ps, struct stoken str)
279 {
280 int len = str.length;
281 size_t lenelt;
282 char *strdata;
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
287 null byte terminator). */
288
289 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
290
291 increase_expout_size (ps, lenelt);
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
296 element. */
297
298 write_exp_elt_longcst (ps, (LONGEST) len);
299 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
300 memcpy (strdata, str.ptr, len);
301 *(strdata + len) = '\0';
302 ps->expout_ptr += lenelt - 2;
303 write_exp_elt_longcst (ps, (LONGEST) len);
304 }
305
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
319 void
320 write_exp_string_vector (struct expr_builder *ps, int type,
321 struct stoken_vector *vec)
322 {
323 int i, len;
324 size_t n_slots;
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;
343 increase_expout_size (ps, n_slots);
344
345 write_exp_elt_opcode (ps, OP_STRING);
346 write_exp_elt_longcst (ps, len);
347 write_exp_elt_longcst (ps, type);
348
349 for (i = 0; i < vec->len; ++i)
350 {
351 write_exp_elt_longcst (ps, vec->tokens[i].length);
352 memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
353 vec->tokens[i].length);
354 ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
355 }
356
357 write_exp_elt_longcst (ps, len);
358 write_exp_elt_opcode (ps, OP_STRING);
359 }
360
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
367 contains the length of the bitstring. I.e. an expression element at
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
370 either end of the bitstring. */
371
372 void
373 write_exp_bitstring (struct expr_builder *ps, struct stoken str)
374 {
375 int bits = str.length; /* length in bits */
376 int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
377 size_t lenelt;
378 char *strdata;
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
382 bitstring length in bits. */
383
384 lenelt = 2 + BYTES_TO_EXP_ELEM (len);
385
386 increase_expout_size (ps, lenelt);
387
388 /* Write the leading length expression element (which advances the current
389 expression element index), then write the bitstring constant, and then
390 write the trailing length expression element. */
391
392 write_exp_elt_longcst (ps, (LONGEST) bits);
393 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
394 memcpy (strdata, str.ptr, len);
395 ps->expout_ptr += lenelt - 2;
396 write_exp_elt_longcst (ps, (LONGEST) bits);
397 }
398
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. */
402
403 type *
404 find_minsym_type_and_address (minimal_symbol *msymbol,
405 struct objfile *objfile,
406 CORE_ADDR *address_p)
407 {
408 bound_minimal_symbol bound_msym = {msymbol, objfile};
409 struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
410 enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
411
412 bool is_tls = (section != NULL
413 && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
414
415 /* The minimal symbol might point to a function descriptor;
416 resolve it to the actual code address instead. */
417 CORE_ADDR addr;
418 if (is_tls)
419 {
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))
427 {
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;
436 }
437 }
438 else
439 addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
440
441 if (overlay_debugging)
442 addr = symbol_overlayed_address (addr, section);
443
444 if (is_tls)
445 {
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;
450 }
451
452 if (address_p != NULL)
453 *address_p = addr;
454
455 switch (type)
456 {
457 case mst_text:
458 case mst_file_text:
459 case mst_solib_trampoline:
460 return objfile_type (objfile)->nodebug_text_symbol;
461
462 case mst_text_gnu_ifunc:
463 return objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
464
465 case mst_data:
466 case mst_file_data:
467 case mst_bss:
468 case mst_file_bss:
469 return objfile_type (objfile)->nodebug_data_symbol;
470
471 case mst_slot_got_plt:
472 return objfile_type (objfile)->nodebug_got_plt_symbol;
473
474 default:
475 return objfile_type (objfile)->nodebug_unknown_symbol;
476 }
477 }
478
479 /* Add the appropriate elements for a minimal symbol to the end of
480 the expression. */
481
482 void
483 write_exp_msymbol (struct expr_builder *ps,
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);
490 }
491
492 /* See parser-defs.h. */
493
494 void
495 parser_state::mark_struct_expression ()
496 {
497 gdb_assert (parse_completion
498 && (m_completion_state.expout_tag_completion_type
499 == TYPE_CODE_UNDEF));
500 m_completion_state.expout_last_struct = expout_ptr;
501 }
502
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
507 void
508 parser_state::mark_completion_tag (enum type_code tag, const char *ptr,
509 int length)
510 {
511 gdb_assert (parse_completion
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);
516 gdb_assert (tag == TYPE_CODE_UNION
517 || tag == TYPE_CODE_STRUCT
518 || tag == TYPE_CODE_ENUM);
519 m_completion_state.expout_tag_completion_type = tag;
520 m_completion_state.expout_completion_name.reset (xstrndup (ptr, length));
521 }
522
523 \f
524 /* Recognize tokens that start with '$'. These include:
525
526 $regname A native register name or a "standard
527 register name".
528
529 $variable A convenience variable with a name chosen
530 by the user.
531
532 $digits Value history with index <digits>, starting
533 from the first value which has index 1.
534
535 $$digits Value history with index <digits> relative
536 to the last value. I.e. $$0 is the last
537 value, $$1 is the one previous to that, $$2
538 is the one previous to $$1, etc.
539
540 $ | $0 | $$0 The last value in the value history.
541
542 $$ An abbreviation for the second to the last
543 value in the value history, I.e. $$1 */
544
545 void
546 write_dollar_variable (struct parser_state *ps, struct stoken str)
547 {
548 struct block_symbol sym;
549 struct bound_minimal_symbol msym;
550 struct internalvar *isym = NULL;
551 std::string copy;
552
553 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
554 and $$digits (equivalent to $<-digits> if you could type that). */
555
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 {
567 /* Just dollars (one or two). */
568 i = -negate;
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)
579 i = -i;
580 goto handle_last;
581 }
582
583 /* Handle tokens that refer to machine registers:
584 $ followed by a register name. */
585 i = user_reg_map_name_to_regnum (ps->gdbarch (),
586 str.ptr + 1, str.length - 1);
587 if (i >= 0)
588 goto handle_register;
589
590 /* Any names starting with $ are probably debugger internal variables. */
591
592 copy = copy_name (str);
593 isym = lookup_only_internalvar (copy.c_str () + 1);
594 if (isym)
595 {
596 write_exp_elt_opcode (ps, OP_INTERNALVAR);
597 write_exp_elt_intern (ps, isym);
598 write_exp_elt_opcode (ps, OP_INTERNALVAR);
599 return;
600 }
601
602 /* On some systems, such as HP-UX and hppa-linux, certain system routines
603 have names beginning with $ or $$. Check for those, first. */
604
605 sym = lookup_symbol (copy.c_str (), NULL, VAR_DOMAIN, NULL);
606 if (sym.symbol)
607 {
608 write_exp_elt_opcode (ps, OP_VAR_VALUE);
609 write_exp_elt_block (ps, sym.block);
610 write_exp_elt_sym (ps, sym.symbol);
611 write_exp_elt_opcode (ps, OP_VAR_VALUE);
612 return;
613 }
614 msym = lookup_bound_minimal_symbol (copy.c_str ());
615 if (msym.minsym)
616 {
617 write_exp_msymbol (ps, msym);
618 return;
619 }
620
621 /* Any other names are assumed to be debugger internal variables. */
622
623 write_exp_elt_opcode (ps, OP_INTERNALVAR);
624 write_exp_elt_intern (ps, create_internalvar (copy.c_str () + 1));
625 write_exp_elt_opcode (ps, OP_INTERNALVAR);
626 return;
627 handle_last:
628 write_exp_elt_opcode (ps, OP_LAST);
629 write_exp_elt_longcst (ps, (LONGEST) i);
630 write_exp_elt_opcode (ps, OP_LAST);
631 return;
632 handle_register:
633 write_exp_elt_opcode (ps, OP_REGISTER);
634 str.length--;
635 str.ptr++;
636 write_exp_string (ps, str);
637 write_exp_elt_opcode (ps, OP_REGISTER);
638 ps->block_tracker->update (ps->expression_context_block,
639 INNERMOST_BLOCK_FOR_REGISTERS);
640 return;
641 }
642
643
644 const char *
645 find_template_name_end (const char *p)
646 {
647 int depth = 1;
648 int just_seen_right = 0;
649 int just_seen_colon = 0;
650 int just_seen_space = 0;
651
652 if (!p || (*p != '<'))
653 return 0;
654
655 while (*++p)
656 {
657 switch (*p)
658 {
659 case '\'':
660 case '\"':
661 case '{':
662 case '}':
663 /* In future, may want to allow these?? */
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 }
694 if (*p != ' ')
695 just_seen_space = 0;
696 if (*p != ':')
697 just_seen_colon = 0;
698 if (*p != '>')
699 just_seen_right = 0;
700 }
701 return 0;
702 }
703 \f
704
705 /* Return a null-terminated temporary copy of the name of a string token.
706
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
711 into a separate block of storage. */
712
713 std::string
714 copy_name (struct stoken token)
715 {
716 return std::string (token.ptr, token.length);
717 }
718 \f
719
720 /* See comments on parser-defs.h. */
721
722 int
723 prefixify_expression (struct expression *expr, int last_struct)
724 {
725 gdb_assert (expr->nelts > 0);
726 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
727 struct expression *temp;
728 int inpos = expr->nelts, outpos = 0;
729
730 temp = (struct expression *) alloca (len);
731
732 /* Copy the original expression into temp. */
733 memcpy (temp, expr, len);
734
735 return prefixify_subexp (temp, expr, inpos, outpos, last_struct);
736 }
737
738 /* Return the number of exp_elements in the postfix subexpression
739 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
740
741 static int
742 length_of_subexp (struct expression *expr, int endpos)
743 {
744 int oplen, args;
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
761 void
762 operator_length (const struct expression *expr, int endpos, int *oplenp,
763 int *argsp)
764 {
765 expr->language_defn->expression_ops ()->operator_length (expr, endpos,
766 oplenp, argsp);
767 }
768
769 /* Default value for operator_length in exp_descriptor vectors. */
770
771 void
772 operator_length_standard (const struct expression *expr, int endpos,
773 int *oplenp, int *argsp)
774 {
775 int oplen = 1;
776 int args = 0;
777 enum range_flag range_flag;
778 int i;
779
780 if (endpos < 1)
781 error (_("?error in operator_length_standard"));
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:
794 case OP_FLOAT:
795 case OP_VAR_VALUE:
796 case OP_VAR_MSYM_VALUE:
797 oplen = 4;
798 break;
799
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
806 case OP_TYPE:
807 case OP_BOOL:
808 case OP_LAST:
809 case OP_INTERNALVAR:
810 case OP_VAR_ENTRY_VALUE:
811 oplen = 3;
812 break;
813
814 case OP_COMPLEX:
815 oplen = 3;
816 args = 2;
817 break;
818
819 case OP_FUNCALL:
820 oplen = 3;
821 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
822 break;
823
824 case TYPE_INSTANCE:
825 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
826 args = 1;
827 break;
828
829 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
830 oplen = 4;
831 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
832 break;
833
834 case UNOP_MAX:
835 case UNOP_MIN:
836 oplen = 3;
837 break;
838
839 case UNOP_CAST_TYPE:
840 case UNOP_DYNAMIC_CAST:
841 case UNOP_REINTERPRET_CAST:
842 case UNOP_MEMVAL_TYPE:
843 oplen = 1;
844 args = 2;
845 break;
846
847 case BINOP_VAL:
848 case UNOP_CAST:
849 case UNOP_MEMVAL:
850 oplen = 3;
851 args = 1;
852 break;
853
854 case UNOP_ABS:
855 case UNOP_CAP:
856 case UNOP_CHR:
857 case UNOP_FLOAT:
858 case UNOP_HIGH:
859 case UNOP_ODD:
860 case UNOP_ORD:
861 case UNOP_TRUNC:
862 case OP_TYPEOF:
863 case OP_DECLTYPE:
864 case OP_TYPEID:
865 oplen = 1;
866 args = 1;
867 break;
868
869 case OP_ADL_FUNC:
870 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
871 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
872 oplen++;
873 oplen++;
874 break;
875
876 case STRUCTOP_STRUCT:
877 case STRUCTOP_PTR:
878 args = 1;
879 /* fall through */
880 case OP_REGISTER:
881 case OP_M2_STRING:
882 case OP_STRING:
883 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
884 NSString constant. */
885 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
886 case OP_NAME:
887 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
888 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
889 break;
890
891 case OP_ARRAY:
892 oplen = 4;
893 args = longest_to_int (expr->elts[endpos - 2].longconst);
894 args -= longest_to_int (expr->elts[endpos - 3].longconst);
895 args += 1;
896 break;
897
898 case TERNOP_COND:
899 case TERNOP_SLICE:
900 args = 3;
901 break;
902
903 /* Modula-2 */
904 case MULTI_SUBSCRIPT:
905 oplen = 3;
906 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
907 break;
908
909 case BINOP_ASSIGN_MODIFY:
910 oplen = 3;
911 args = 2;
912 break;
913
914 /* C++ */
915 case OP_THIS:
916 oplen = 2;
917 break;
918
919 case OP_RANGE:
920 oplen = 3;
921 range_flag = (enum range_flag)
922 longest_to_int (expr->elts[endpos - 2].longconst);
923
924 /* Assume the range has 2 arguments (low bound and high bound), then
925 reduce the argument count if any bounds are set to default. */
926 args = 2;
927 if (range_flag & RANGE_LOW_BOUND_DEFAULT)
928 --args;
929 if (range_flag & RANGE_HIGH_BOUND_DEFAULT)
930 --args;
931
932 break;
933
934 default:
935 args = 1 + (i < (int) BINOP_END);
936 }
937
938 *oplenp = oplen;
939 *argsp = args;
940 }
941
942 /* Copy the subexpression ending just before index INEND in INEXPR
943 into OUTEXPR, starting at index OUTBEG.
944 In the process, convert it from suffix to prefix form.
945 If LAST_STRUCT is -1, then this function always returns -1.
946 Otherwise, it returns the index of the subexpression which is the
947 left-hand-side of the expression at LAST_STRUCT. */
948
949 static int
950 prefixify_subexp (struct expression *inexpr,
951 struct expression *outexpr, int inend, int outbeg,
952 int last_struct)
953 {
954 int oplen;
955 int args;
956 int i;
957 int *arglens;
958 int result = -1;
959
960 operator_length (inexpr, inend, &oplen, &args);
961
962 /* Copy the final operator itself, from the end of the input
963 to the beginning of the output. */
964 inend -= oplen;
965 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
966 EXP_ELEM_TO_BYTES (oplen));
967 outbeg += oplen;
968
969 if (last_struct == inend)
970 result = outbeg - oplen;
971
972 /* Find the lengths of the arg subexpressions. */
973 arglens = (int *) alloca (args * sizeof (int));
974 for (i = args - 1; i >= 0; i--)
975 {
976 oplen = length_of_subexp (inexpr, inend);
977 arglens[i] = oplen;
978 inend -= oplen;
979 }
980
981 /* Now copy each subexpression, preserving the order of
982 the subexpressions, but prefixifying each one.
983 In this loop, inend starts at the beginning of
984 the expression this level is working on
985 and marches forward over the arguments.
986 outbeg does similarly in the output. */
987 for (i = 0; i < args; i++)
988 {
989 int r;
990
991 oplen = arglens[i];
992 inend += oplen;
993 r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
994 if (r != -1)
995 {
996 /* Return immediately. We probably have only parsed a
997 partial expression, so we don't want to try to reverse
998 the other operands. */
999 return r;
1000 }
1001 outbeg += oplen;
1002 }
1003
1004 return result;
1005 }
1006 \f
1007 /* Read an expression from the string *STRINGPTR points to,
1008 parse it, and return a pointer to a struct expression that we malloc.
1009 Use block BLOCK as the lexical context for variable names;
1010 if BLOCK is zero, use the block of the selected stack frame.
1011 Meanwhile, advance *STRINGPTR to point after the expression,
1012 at the first nonwhite character that is not part of the expression
1013 (possibly a null character).
1014
1015 If COMMA is nonzero, stop if a comma is reached. */
1016
1017 expression_up
1018 parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
1019 int comma, innermost_block_tracker *tracker)
1020 {
1021 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
1022 tracker, nullptr);
1023 }
1024
1025 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1026 no value is expected from the expression.
1027 OUT_SUBEXP is set when attempting to complete a field name; in this
1028 case it is set to the index of the subexpression on the
1029 left-hand-side of the struct op. If not doing such completion, it
1030 is left untouched. */
1031
1032 static expression_up
1033 parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1034 const struct block *block,
1035 int comma, int void_context_p, int *out_subexp,
1036 innermost_block_tracker *tracker,
1037 expr_completion_state *cstate)
1038 {
1039 const struct language_defn *lang = NULL;
1040 int subexp;
1041
1042 if (*stringptr == 0 || **stringptr == 0)
1043 error_no_arg (_("expression to compute"));
1044
1045 const struct block *expression_context_block = block;
1046 CORE_ADDR expression_context_pc = 0;
1047
1048 innermost_block_tracker local_tracker;
1049 if (tracker == nullptr)
1050 tracker = &local_tracker;
1051
1052 /* If no context specified, try using the current frame, if any. */
1053 if (!expression_context_block)
1054 expression_context_block = get_selected_block (&expression_context_pc);
1055 else if (pc == 0)
1056 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1057 else
1058 expression_context_pc = pc;
1059
1060 /* Fall back to using the current source static context, if any. */
1061
1062 if (!expression_context_block)
1063 {
1064 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1065 if (cursal.symtab)
1066 expression_context_block
1067 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1068 STATIC_BLOCK);
1069 if (expression_context_block)
1070 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1071 }
1072
1073 if (language_mode == language_mode_auto && block != NULL)
1074 {
1075 /* Find the language associated to the given context block.
1076 Default to the current language if it can not be determined.
1077
1078 Note that using the language corresponding to the current frame
1079 can sometimes give unexpected results. For instance, this
1080 routine is often called several times during the inferior
1081 startup phase to re-parse breakpoint expressions after
1082 a new shared library has been loaded. The language associated
1083 to the current frame at this moment is not relevant for
1084 the breakpoint. Using it would therefore be silly, so it seems
1085 better to rely on the current language rather than relying on
1086 the current frame language to parse the expression. That's why
1087 we do the following language detection only if the context block
1088 has been specifically provided. */
1089 struct symbol *func = block_linkage_function (block);
1090
1091 if (func != NULL)
1092 lang = language_def (func->language ());
1093 if (lang == NULL || lang->la_language == language_unknown)
1094 lang = current_language;
1095 }
1096 else
1097 lang = current_language;
1098
1099 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1100 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1101 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1102 to the value matching SELECTED_FRAME as set by get_current_arch. */
1103
1104 parser_state ps (lang, get_current_arch (), expression_context_block,
1105 expression_context_pc, comma, *stringptr,
1106 cstate != nullptr, tracker);
1107
1108 scoped_restore_current_language lang_saver;
1109 set_language (lang->la_language);
1110
1111 try
1112 {
1113 lang->parser (&ps);
1114 }
1115 catch (const gdb_exception &except)
1116 {
1117 /* If parsing for completion, allow this to succeed; but if no
1118 expression elements have been written, then there's nothing
1119 to do, so fail. */
1120 if (! ps.parse_completion || ps.expout_ptr == 0)
1121 throw;
1122 }
1123
1124 /* We have to operate on an "expression *", due to la_post_parser,
1125 which explains this funny-looking double release. */
1126 expression_up result = ps.release ();
1127
1128 /* Convert expression from postfix form as generated by yacc
1129 parser, to a prefix form. */
1130
1131 if (expressiondebug)
1132 dump_raw_expression (result.get (), gdb_stdlog,
1133 "before conversion to prefix form");
1134
1135 subexp = prefixify_expression (result.get (),
1136 ps.m_completion_state.expout_last_struct);
1137 if (out_subexp)
1138 *out_subexp = subexp;
1139
1140 lang->post_parser (&result, void_context_p, ps.parse_completion, tracker);
1141
1142 if (expressiondebug)
1143 dump_prefix_expression (result.get (), gdb_stdlog);
1144
1145 if (cstate != nullptr)
1146 *cstate = std::move (ps.m_completion_state);
1147 *stringptr = ps.lexptr;
1148 return result;
1149 }
1150
1151 /* Parse STRING as an expression, and complain if this fails
1152 to use up all of the contents of STRING. */
1153
1154 expression_up
1155 parse_expression (const char *string, innermost_block_tracker *tracker)
1156 {
1157 expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
1158 if (*string)
1159 error (_("Junk after end of expression."));
1160 return exp;
1161 }
1162
1163 /* Same as parse_expression, but using the given language (LANG)
1164 to parse the expression. */
1165
1166 expression_up
1167 parse_expression_with_language (const char *string, enum language lang)
1168 {
1169 gdb::optional<scoped_restore_current_language> lang_saver;
1170 if (current_language->la_language != lang)
1171 {
1172 lang_saver.emplace ();
1173 set_language (lang);
1174 }
1175
1176 return parse_expression (string);
1177 }
1178
1179 /* Parse STRING as an expression. If parsing ends in the middle of a
1180 field reference, return the type of the left-hand-side of the
1181 reference; furthermore, if the parsing ends in the field name,
1182 return the field name in *NAME. If the parsing ends in the middle
1183 of a field reference, but the reference is somehow invalid, throw
1184 an exception. In all other cases, return NULL. */
1185
1186 struct type *
1187 parse_expression_for_completion (const char *string,
1188 gdb::unique_xmalloc_ptr<char> *name,
1189 enum type_code *code)
1190 {
1191 expression_up exp;
1192 struct value *val;
1193 int subexp;
1194 expr_completion_state cstate;
1195
1196 try
1197 {
1198 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
1199 nullptr, &cstate);
1200 }
1201 catch (const gdb_exception_error &except)
1202 {
1203 /* Nothing, EXP remains NULL. */
1204 }
1205
1206 if (exp == NULL)
1207 return NULL;
1208
1209 if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
1210 {
1211 *code = cstate.expout_tag_completion_type;
1212 *name = std::move (cstate.expout_completion_name);
1213 return NULL;
1214 }
1215
1216 if (cstate.expout_last_struct == -1)
1217 return NULL;
1218
1219 const char *fieldname = extract_field_op (exp.get (), &subexp);
1220 if (fieldname == NULL)
1221 {
1222 name->reset ();
1223 return NULL;
1224 }
1225
1226 name->reset (xstrdup (fieldname));
1227 /* This might throw an exception. If so, we want to let it
1228 propagate. */
1229 val = evaluate_subexpression_type (exp.get (), subexp);
1230
1231 return value_type (val);
1232 }
1233
1234 /* Parse floating point value P of length LEN.
1235 Return false if invalid, true if valid.
1236 The successfully parsed number is stored in DATA in
1237 target format for floating-point type TYPE.
1238
1239 NOTE: This accepts the floating point syntax that sscanf accepts. */
1240
1241 bool
1242 parse_float (const char *p, int len,
1243 const struct type *type, gdb_byte *data)
1244 {
1245 return target_float_from_string (data, type, std::string (p, len));
1246 }
1247 \f
1248 /* This function avoids direct calls to fprintf
1249 in the parser generated debug code. */
1250 void
1251 parser_fprintf (FILE *x, const char *y, ...)
1252 {
1253 va_list args;
1254
1255 va_start (args, y);
1256 if (x == stderr)
1257 vfprintf_unfiltered (gdb_stderr, y, args);
1258 else
1259 {
1260 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1261 vfprintf_unfiltered (gdb_stderr, y, args);
1262 }
1263 va_end (args);
1264 }
1265
1266 /* Implementation of the exp_descriptor method operator_check. */
1267
1268 int
1269 operator_check_standard (struct expression *exp, int pos,
1270 int (*objfile_func) (struct objfile *objfile,
1271 void *data),
1272 void *data)
1273 {
1274 const union exp_element *const elts = exp->elts;
1275 struct type *type = NULL;
1276 struct objfile *objfile = NULL;
1277
1278 /* Extended operators should have been already handled by exp_descriptor
1279 iterate method of its specific language. */
1280 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1281
1282 /* Track the callers of write_exp_elt_type for this table. */
1283
1284 switch (elts[pos].opcode)
1285 {
1286 case BINOP_VAL:
1287 case OP_COMPLEX:
1288 case OP_FLOAT:
1289 case OP_LONG:
1290 case OP_SCOPE:
1291 case OP_TYPE:
1292 case UNOP_CAST:
1293 case UNOP_MAX:
1294 case UNOP_MEMVAL:
1295 case UNOP_MIN:
1296 type = elts[pos + 1].type;
1297 break;
1298
1299 case TYPE_INSTANCE:
1300 {
1301 LONGEST arg, nargs = elts[pos + 2].longconst;
1302
1303 for (arg = 0; arg < nargs; arg++)
1304 {
1305 struct type *inst_type = elts[pos + 3 + arg].type;
1306 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
1307
1308 if (inst_objfile && (*objfile_func) (inst_objfile, data))
1309 return 1;
1310 }
1311 }
1312 break;
1313
1314 case OP_VAR_VALUE:
1315 {
1316 const struct block *const block = elts[pos + 1].block;
1317 const struct symbol *const symbol = elts[pos + 2].symbol;
1318
1319 /* Check objfile where the variable itself is placed.
1320 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
1321 if ((*objfile_func) (symbol_objfile (symbol), data))
1322 return 1;
1323
1324 /* Check objfile where is placed the code touching the variable. */
1325 objfile = block_objfile (block);
1326
1327 type = SYMBOL_TYPE (symbol);
1328 }
1329 break;
1330 case OP_VAR_MSYM_VALUE:
1331 objfile = elts[pos + 1].objfile;
1332 break;
1333 }
1334
1335 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1336
1337 if (type && TYPE_OBJFILE (type)
1338 && (*objfile_func) (TYPE_OBJFILE (type), data))
1339 return 1;
1340 if (objfile && (*objfile_func) (objfile, data))
1341 return 1;
1342
1343 return 0;
1344 }
1345
1346 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1347 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1348 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1349 returns non-zero value then (any other) non-zero value is immediately
1350 returned to the caller. Otherwise zero is returned after iterating
1351 through whole EXP. */
1352
1353 static int
1354 exp_iterate (struct expression *exp,
1355 int (*objfile_func) (struct objfile *objfile, void *data),
1356 void *data)
1357 {
1358 int endpos;
1359
1360 for (endpos = exp->nelts; endpos > 0; )
1361 {
1362 int pos, args, oplen = 0;
1363
1364 operator_length (exp, endpos, &oplen, &args);
1365 gdb_assert (oplen > 0);
1366
1367 pos = endpos - oplen;
1368 if (exp->language_defn->expression_ops ()->operator_check (exp, pos,
1369 objfile_func,
1370 data))
1371 return 1;
1372
1373 endpos = pos;
1374 }
1375
1376 return 0;
1377 }
1378
1379 /* Helper for exp_uses_objfile. */
1380
1381 static int
1382 exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1383 {
1384 struct objfile *objfile = (struct objfile *) objfile_voidp;
1385
1386 if (exp_objfile->separate_debug_objfile_backlink)
1387 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1388
1389 return exp_objfile == objfile;
1390 }
1391
1392 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1393 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1394 file. */
1395
1396 int
1397 exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1398 {
1399 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1400
1401 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1402 }
1403
1404 /* Reallocate the `expout' pointer inside PS so that it can accommodate
1405 at least LENELT expression elements. This function does nothing if
1406 there is enough room for the elements. */
1407
1408 static void
1409 increase_expout_size (struct expr_builder *ps, size_t lenelt)
1410 {
1411 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1412 {
1413 ps->expout_size = std::max (ps->expout_size * 2,
1414 ps->expout_ptr + lenelt + 10);
1415 ps->expout.reset (XRESIZEVAR (expression,
1416 ps->expout.release (),
1417 (sizeof (struct expression)
1418 + EXP_ELEM_TO_BYTES (ps->expout_size))));
1419 }
1420 }
1421
1422 void _initialize_parse ();
1423 void
1424 _initialize_parse ()
1425 {
1426 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1427 &expressiondebug,
1428 _("Set expression debugging."),
1429 _("Show expression debugging."),
1430 _("When non-zero, the internal representation "
1431 "of expressions will be printed."),
1432 NULL,
1433 show_expressiondebug,
1434 &setdebuglist, &showdebuglist);
1435 add_setshow_boolean_cmd ("parser", class_maintenance,
1436 &parser_debug,
1437 _("Set parser debugging."),
1438 _("Show parser debugging."),
1439 _("When non-zero, expression parser "
1440 "tracing will be enabled."),
1441 NULL,
1442 show_parserdebug,
1443 &setdebuglist, &showdebuglist);
1444 }
This page took 0.089186 seconds and 5 git commands to generate.