1 /* Parse expressions for GDB.
3 Copyright (C) 1986-2019 Free Software Foundation, Inc.
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo, 1991.
8 This file is part of GDB.
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.
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.
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/>. */
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. */
34 #include "arch-utils.h"
38 #include "expression.h"
43 #include "parser-defs.h"
45 #include "symfile.h" /* for overlay functions */
47 #include "target-float.h"
51 #include "user-regs.h"
53 #include "common/gdb_optional.h"
55 /* Standard set of definitions for printing, dumping, prefixifying,
56 * and evaluating expressions. */
58 const struct exp_descriptor exp_descriptor_standard =
60 print_subexp_standard,
61 operator_length_standard,
62 operator_check_standard,
64 dump_subexp_body_standard,
65 evaluate_subexp_standard
68 /* Global variables declared in parser-defs.h (and commented there). */
69 innermost_block_tracker innermost_block;
72 static unsigned int expressiondebug = 0;
74 show_expressiondebug (struct ui_file *file, int from_tty,
75 struct cmd_list_element *c, const char *value)
77 fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
81 /* Non-zero if an expression parser should set yydebug. */
85 show_parserdebug (struct ui_file *file, int from_tty,
86 struct cmd_list_element *c, const char *value)
88 fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
92 static int prefixify_subexp (struct expression *, struct expression *, int,
95 static expression_up parse_exp_in_context (const char **, CORE_ADDR,
96 const struct block *, int,
98 innermost_block_tracker_types,
99 expr_completion_state *);
101 static void increase_expout_size (struct expr_builder *ps, size_t lenelt);
104 /* Documented at it's declaration. */
107 innermost_block_tracker::update (const struct block *b,
108 innermost_block_tracker_types t)
110 if ((m_types & t) != 0
111 && (m_innermost_block == NULL
112 || contained_in (b, m_innermost_block)))
113 m_innermost_block = b;
118 /* See definition in parser-defs.h. */
120 expr_builder::expr_builder (const struct language_defn *lang,
121 struct gdbarch *gdbarch)
123 expout (XNEWVAR (expression,
125 + EXP_ELEM_TO_BYTES (expout_size)))),
128 expout->language_defn = lang;
129 expout->gdbarch = gdbarch;
133 expr_builder::release ()
135 /* Record the actual number of expression elements, and then
136 reallocate the expression memory so that we free up any
139 expout->nelts = expout_ptr;
140 expout.reset (XRESIZEVAR (expression, expout.release (),
142 + EXP_ELEM_TO_BYTES (expout_ptr))));
144 return std::move (expout);
147 /* This page contains the functions for adding data to the struct expression
148 being constructed. */
150 /* Add one element to the end of the expression. */
152 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
153 a register through here. */
156 write_exp_elt (struct expr_builder *ps, const union exp_element *expelt)
158 if (ps->expout_ptr >= ps->expout_size)
160 ps->expout_size *= 2;
161 ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
163 + EXP_ELEM_TO_BYTES (ps->expout_size))));
165 ps->expout->elts[ps->expout_ptr++] = *expelt;
169 write_exp_elt_opcode (struct expr_builder *ps, enum exp_opcode expelt)
171 union exp_element tmp;
173 memset (&tmp, 0, sizeof (union exp_element));
175 write_exp_elt (ps, &tmp);
179 write_exp_elt_sym (struct expr_builder *ps, struct symbol *expelt)
181 union exp_element tmp;
183 memset (&tmp, 0, sizeof (union exp_element));
185 write_exp_elt (ps, &tmp);
189 write_exp_elt_msym (struct expr_builder *ps, minimal_symbol *expelt)
191 union exp_element tmp;
193 memset (&tmp, 0, sizeof (union exp_element));
194 tmp.msymbol = expelt;
195 write_exp_elt (ps, &tmp);
199 write_exp_elt_block (struct expr_builder *ps, const struct block *b)
201 union exp_element tmp;
203 memset (&tmp, 0, sizeof (union exp_element));
205 write_exp_elt (ps, &tmp);
209 write_exp_elt_objfile (struct expr_builder *ps, struct objfile *objfile)
211 union exp_element tmp;
213 memset (&tmp, 0, sizeof (union exp_element));
214 tmp.objfile = objfile;
215 write_exp_elt (ps, &tmp);
219 write_exp_elt_longcst (struct expr_builder *ps, LONGEST expelt)
221 union exp_element tmp;
223 memset (&tmp, 0, sizeof (union exp_element));
224 tmp.longconst = expelt;
225 write_exp_elt (ps, &tmp);
229 write_exp_elt_floatcst (struct expr_builder *ps, const gdb_byte expelt[16])
231 union exp_element tmp;
234 for (index = 0; index < 16; index++)
235 tmp.floatconst[index] = expelt[index];
237 write_exp_elt (ps, &tmp);
241 write_exp_elt_type (struct expr_builder *ps, struct type *expelt)
243 union exp_element tmp;
245 memset (&tmp, 0, sizeof (union exp_element));
247 write_exp_elt (ps, &tmp);
251 write_exp_elt_intern (struct expr_builder *ps, struct internalvar *expelt)
253 union exp_element tmp;
255 memset (&tmp, 0, sizeof (union exp_element));
256 tmp.internalvar = expelt;
257 write_exp_elt (ps, &tmp);
260 /* Add a string constant to the end of the expression.
262 String constants are stored by first writing an expression element
263 that contains the length of the string, then stuffing the string
264 constant itself into however many expression elements are needed
265 to hold it, and then writing another expression element that contains
266 the length of the string. I.e. an expression element at each end of
267 the string records the string length, so you can skip over the
268 expression elements containing the actual string bytes from either
269 end of the string. Note that this also allows gdb to handle
270 strings with embedded null bytes, as is required for some languages.
272 Don't be fooled by the fact that the string is null byte terminated,
273 this is strictly for the convenience of debugging gdb itself.
274 Gdb does not depend up the string being null terminated, since the
275 actual length is recorded in expression elements at each end of the
276 string. The null byte is taken into consideration when computing how
277 many expression elements are required to hold the string constant, of
282 write_exp_string (struct expr_builder *ps, struct stoken str)
284 int len = str.length;
288 /* Compute the number of expression elements required to hold the string
289 (including a null byte terminator), along with one expression element
290 at each end to record the actual string length (not including the
291 null byte terminator). */
293 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
295 increase_expout_size (ps, lenelt);
297 /* Write the leading length expression element (which advances the current
298 expression element index), then write the string constant followed by a
299 terminating null byte, and then write the trailing length expression
302 write_exp_elt_longcst (ps, (LONGEST) len);
303 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
304 memcpy (strdata, str.ptr, len);
305 *(strdata + len) = '\0';
306 ps->expout_ptr += lenelt - 2;
307 write_exp_elt_longcst (ps, (LONGEST) len);
310 /* Add a vector of string constants to the end of the expression.
312 This adds an OP_STRING operation, but encodes the contents
313 differently from write_exp_string. The language is expected to
314 handle evaluation of this expression itself.
316 After the usual OP_STRING header, TYPE is written into the
317 expression as a long constant. The interpretation of this field is
318 up to the language evaluator.
320 Next, each string in VEC is written. The length is written as a
321 long constant, followed by the contents of the string. */
324 write_exp_string_vector (struct expr_builder *ps, int type,
325 struct stoken_vector *vec)
330 /* Compute the size. We compute the size in number of slots to
331 avoid issues with string padding. */
333 for (i = 0; i < vec->len; ++i)
335 /* One slot for the length of this element, plus the number of
336 slots needed for this string. */
337 n_slots += 1 + BYTES_TO_EXP_ELEM (vec->tokens[i].length);
340 /* One more slot for the type of the string. */
343 /* Now compute a phony string length. */
344 len = EXP_ELEM_TO_BYTES (n_slots) - 1;
347 increase_expout_size (ps, n_slots);
349 write_exp_elt_opcode (ps, OP_STRING);
350 write_exp_elt_longcst (ps, len);
351 write_exp_elt_longcst (ps, type);
353 for (i = 0; i < vec->len; ++i)
355 write_exp_elt_longcst (ps, vec->tokens[i].length);
356 memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
357 vec->tokens[i].length);
358 ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
361 write_exp_elt_longcst (ps, len);
362 write_exp_elt_opcode (ps, OP_STRING);
365 /* Add a bitstring constant to the end of the expression.
367 Bitstring constants are stored by first writing an expression element
368 that contains the length of the bitstring (in bits), then stuffing the
369 bitstring constant itself into however many expression elements are
370 needed to hold it, and then writing another expression element that
371 contains the length of the bitstring. I.e. an expression element at
372 each end of the bitstring records the bitstring length, so you can skip
373 over the expression elements containing the actual bitstring bytes from
374 either end of the bitstring. */
377 write_exp_bitstring (struct expr_builder *ps, struct stoken str)
379 int bits = str.length; /* length in bits */
380 int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
384 /* Compute the number of expression elements required to hold the bitstring,
385 along with one expression element at each end to record the actual
386 bitstring length in bits. */
388 lenelt = 2 + BYTES_TO_EXP_ELEM (len);
390 increase_expout_size (ps, lenelt);
392 /* Write the leading length expression element (which advances the current
393 expression element index), then write the bitstring constant, and then
394 write the trailing length expression element. */
396 write_exp_elt_longcst (ps, (LONGEST) bits);
397 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
398 memcpy (strdata, str.ptr, len);
399 ps->expout_ptr += lenelt - 2;
400 write_exp_elt_longcst (ps, (LONGEST) bits);
403 /* Return the type of MSYMBOL, a minimal symbol of OBJFILE. If
404 ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
408 find_minsym_type_and_address (minimal_symbol *msymbol,
409 struct objfile *objfile,
410 CORE_ADDR *address_p)
412 bound_minimal_symbol bound_msym = {msymbol, objfile};
413 struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
414 enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
416 bool is_tls = (section != NULL
417 && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
419 /* The minimal symbol might point to a function descriptor;
420 resolve it to the actual code address instead. */
424 /* Addresses of TLS symbols are really offsets into a
425 per-objfile/per-thread storage block. */
426 addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym);
428 else if (msymbol_is_function (objfile, msymbol, &addr))
430 if (addr != BMSYMBOL_VALUE_ADDRESS (bound_msym))
432 /* This means we resolved a function descriptor, and we now
433 have an address for a code/text symbol instead of a data
435 if (MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
436 type = mst_text_gnu_ifunc;
443 addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
445 if (overlay_debugging)
446 addr = symbol_overlayed_address (addr, section);
450 /* Skip translation if caller does not need the address. */
451 if (address_p != NULL)
452 *address_p = target_translate_tls_address (objfile, addr);
453 return objfile_type (objfile)->nodebug_tls_symbol;
456 if (address_p != NULL)
463 case mst_solib_trampoline:
464 return objfile_type (objfile)->nodebug_text_symbol;
466 case mst_text_gnu_ifunc:
467 return objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
473 return objfile_type (objfile)->nodebug_data_symbol;
475 case mst_slot_got_plt:
476 return objfile_type (objfile)->nodebug_got_plt_symbol;
479 return objfile_type (objfile)->nodebug_unknown_symbol;
483 /* Add the appropriate elements for a minimal symbol to the end of
487 write_exp_msymbol (struct expr_builder *ps,
488 struct bound_minimal_symbol bound_msym)
490 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
491 write_exp_elt_objfile (ps, bound_msym.objfile);
492 write_exp_elt_msym (ps, bound_msym.minsym);
493 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
496 /* See parser-defs.h. */
499 parser_state::mark_struct_expression ()
501 gdb_assert (parse_completion
502 && (m_completion_state.expout_tag_completion_type
503 == TYPE_CODE_UNDEF));
504 m_completion_state.expout_last_struct = expout_ptr;
507 /* Indicate that the current parser invocation is completing a tag.
508 TAG is the type code of the tag, and PTR and LENGTH represent the
509 start of the tag name. */
512 parser_state::mark_completion_tag (enum type_code tag, const char *ptr,
515 gdb_assert (parse_completion
516 && (m_completion_state.expout_tag_completion_type
518 && m_completion_state.expout_completion_name == NULL
519 && m_completion_state.expout_last_struct == -1);
520 gdb_assert (tag == TYPE_CODE_UNION
521 || tag == TYPE_CODE_STRUCT
522 || tag == TYPE_CODE_ENUM);
523 m_completion_state.expout_tag_completion_type = tag;
524 m_completion_state.expout_completion_name.reset (xstrndup (ptr, length));
528 /* Recognize tokens that start with '$'. These include:
530 $regname A native register name or a "standard
533 $variable A convenience variable with a name chosen
536 $digits Value history with index <digits>, starting
537 from the first value which has index 1.
539 $$digits Value history with index <digits> relative
540 to the last value. I.e. $$0 is the last
541 value, $$1 is the one previous to that, $$2
542 is the one previous to $$1, etc.
544 $ | $0 | $$0 The last value in the value history.
546 $$ An abbreviation for the second to the last
547 value in the value history, I.e. $$1 */
550 write_dollar_variable (struct parser_state *ps, struct stoken str)
552 struct block_symbol sym;
553 struct bound_minimal_symbol msym;
554 struct internalvar *isym = NULL;
556 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
557 and $$digits (equivalent to $<-digits> if you could type that). */
561 /* Double dollar means negate the number and add -1 as well.
562 Thus $$ alone means -1. */
563 if (str.length >= 2 && str.ptr[1] == '$')
570 /* Just dollars (one or two). */
574 /* Is the rest of the token digits? */
575 for (; i < str.length; i++)
576 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
580 i = atoi (str.ptr + 1 + negate);
586 /* Handle tokens that refer to machine registers:
587 $ followed by a register name. */
588 i = user_reg_map_name_to_regnum (ps->gdbarch (),
589 str.ptr + 1, str.length - 1);
591 goto handle_register;
593 /* Any names starting with $ are probably debugger internal variables. */
595 isym = lookup_only_internalvar (copy_name (str) + 1);
598 write_exp_elt_opcode (ps, OP_INTERNALVAR);
599 write_exp_elt_intern (ps, isym);
600 write_exp_elt_opcode (ps, OP_INTERNALVAR);
604 /* On some systems, such as HP-UX and hppa-linux, certain system routines
605 have names beginning with $ or $$. Check for those, first. */
607 sym = lookup_symbol (copy_name (str), NULL, VAR_DOMAIN, NULL);
610 write_exp_elt_opcode (ps, OP_VAR_VALUE);
611 write_exp_elt_block (ps, sym.block);
612 write_exp_elt_sym (ps, sym.symbol);
613 write_exp_elt_opcode (ps, OP_VAR_VALUE);
616 msym = lookup_bound_minimal_symbol (copy_name (str));
619 write_exp_msymbol (ps, msym);
623 /* Any other names are assumed to be debugger internal variables. */
625 write_exp_elt_opcode (ps, OP_INTERNALVAR);
626 write_exp_elt_intern (ps, create_internalvar (copy_name (str) + 1));
627 write_exp_elt_opcode (ps, OP_INTERNALVAR);
630 write_exp_elt_opcode (ps, OP_LAST);
631 write_exp_elt_longcst (ps, (LONGEST) i);
632 write_exp_elt_opcode (ps, OP_LAST);
635 write_exp_elt_opcode (ps, OP_REGISTER);
638 write_exp_string (ps, str);
639 write_exp_elt_opcode (ps, OP_REGISTER);
640 innermost_block.update (ps->expression_context_block,
641 INNERMOST_BLOCK_FOR_REGISTERS);
647 find_template_name_end (const char *p)
650 int just_seen_right = 0;
651 int just_seen_colon = 0;
652 int just_seen_space = 0;
654 if (!p || (*p != '<'))
665 /* In future, may want to allow these?? */
668 depth++; /* start nested template */
669 if (just_seen_colon || just_seen_right || just_seen_space)
670 return 0; /* but not after : or :: or > or space */
673 if (just_seen_colon || just_seen_right)
674 return 0; /* end a (nested?) template */
675 just_seen_right = 1; /* but not after : or :: */
676 if (--depth == 0) /* also disallow >>, insist on > > */
677 return ++p; /* if outermost ended, return */
680 if (just_seen_space || (just_seen_colon > 1))
681 return 0; /* nested class spec coming up */
682 just_seen_colon++; /* we allow :: but not :::: */
687 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
688 (*p >= 'A' && *p <= 'Z') ||
689 (*p >= '0' && *p <= '9') ||
690 (*p == '_') || (*p == ',') || /* commas for template args */
691 (*p == '&') || (*p == '*') || /* pointer and ref types */
692 (*p == '(') || (*p == ')') || /* function types */
693 (*p == '[') || (*p == ']'))) /* array types */
707 /* Return a null-terminated temporary copy of the name of a string token.
709 Tokens that refer to names do so with explicit pointer and length,
710 so they can share the storage that lexptr is parsing.
711 When it is necessary to pass a name to a function that expects
712 a null-terminated string, the substring is copied out
713 into a separate block of storage.
715 N.B. A single buffer is reused on each call. */
718 copy_name (struct stoken token)
720 /* A temporary buffer for identifiers, so we can null-terminate them.
721 We allocate this with xrealloc. parse_exp_1 used to allocate with
722 alloca, using the size of the whole expression as a conservative
723 estimate of the space needed. However, macro expansion can
724 introduce names longer than the original expression; there's no
725 practical way to know beforehand how large that might be. */
726 static char *namecopy;
727 static size_t namecopy_size;
729 /* Make sure there's enough space for the token. */
730 if (namecopy_size < token.length + 1)
732 namecopy_size = token.length + 1;
733 namecopy = (char *) xrealloc (namecopy, token.length + 1);
736 memcpy (namecopy, token.ptr, token.length);
737 namecopy[token.length] = 0;
743 /* See comments on parser-defs.h. */
746 prefixify_expression (struct expression *expr, int last_struct)
748 gdb_assert (expr->nelts > 0);
749 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
750 struct expression *temp;
751 int inpos = expr->nelts, outpos = 0;
753 temp = (struct expression *) alloca (len);
755 /* Copy the original expression into temp. */
756 memcpy (temp, expr, len);
758 return prefixify_subexp (temp, expr, inpos, outpos, last_struct);
761 /* Return the number of exp_elements in the postfix subexpression
762 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
765 length_of_subexp (struct expression *expr, int endpos)
769 operator_length (expr, endpos, &oplen, &args);
773 oplen += length_of_subexp (expr, endpos - oplen);
780 /* Sets *OPLENP to the length of the operator whose (last) index is
781 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
785 operator_length (const struct expression *expr, int endpos, int *oplenp,
788 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
792 /* Default value for operator_length in exp_descriptor vectors. */
795 operator_length_standard (const struct expression *expr, int endpos,
796 int *oplenp, int *argsp)
800 enum range_type range_type;
804 error (_("?error in operator_length_standard"));
806 i = (int) expr->elts[endpos - 1].opcode;
812 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
813 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
819 case OP_VAR_MSYM_VALUE:
823 case OP_FUNC_STATIC_VAR:
824 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
825 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
833 case OP_VAR_ENTRY_VALUE:
843 case OP_F77_UNDETERMINED_ARGLIST:
845 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
849 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
853 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
855 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
864 case UNOP_DYNAMIC_CAST:
865 case UNOP_REINTERPRET_CAST:
866 case UNOP_MEMVAL_TYPE:
895 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
896 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
901 case STRUCTOP_STRUCT:
908 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
909 NSString constant. */
910 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
912 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
913 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
918 args = longest_to_int (expr->elts[endpos - 2].longconst);
919 args -= longest_to_int (expr->elts[endpos - 3].longconst);
929 case MULTI_SUBSCRIPT:
931 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
934 case BINOP_ASSIGN_MODIFY:
946 range_type = (enum range_type)
947 longest_to_int (expr->elts[endpos - 2].longconst);
951 case LOW_BOUND_DEFAULT:
952 case LOW_BOUND_DEFAULT_EXCLUSIVE:
953 case HIGH_BOUND_DEFAULT:
956 case BOTH_BOUND_DEFAULT:
959 case NONE_BOUND_DEFAULT:
960 case NONE_BOUND_DEFAULT_EXCLUSIVE:
968 args = 1 + (i < (int) BINOP_END);
975 /* Copy the subexpression ending just before index INEND in INEXPR
976 into OUTEXPR, starting at index OUTBEG.
977 In the process, convert it from suffix to prefix form.
978 If LAST_STRUCT is -1, then this function always returns -1.
979 Otherwise, it returns the index of the subexpression which is the
980 left-hand-side of the expression at LAST_STRUCT. */
983 prefixify_subexp (struct expression *inexpr,
984 struct expression *outexpr, int inend, int outbeg,
993 operator_length (inexpr, inend, &oplen, &args);
995 /* Copy the final operator itself, from the end of the input
996 to the beginning of the output. */
998 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
999 EXP_ELEM_TO_BYTES (oplen));
1002 if (last_struct == inend)
1003 result = outbeg - oplen;
1005 /* Find the lengths of the arg subexpressions. */
1006 arglens = (int *) alloca (args * sizeof (int));
1007 for (i = args - 1; i >= 0; i--)
1009 oplen = length_of_subexp (inexpr, inend);
1014 /* Now copy each subexpression, preserving the order of
1015 the subexpressions, but prefixifying each one.
1016 In this loop, inend starts at the beginning of
1017 the expression this level is working on
1018 and marches forward over the arguments.
1019 outbeg does similarly in the output. */
1020 for (i = 0; i < args; i++)
1026 r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
1029 /* Return immediately. We probably have only parsed a
1030 partial expression, so we don't want to try to reverse
1031 the other operands. */
1040 /* Read an expression from the string *STRINGPTR points to,
1041 parse it, and return a pointer to a struct expression that we malloc.
1042 Use block BLOCK as the lexical context for variable names;
1043 if BLOCK is zero, use the block of the selected stack frame.
1044 Meanwhile, advance *STRINGPTR to point after the expression,
1045 at the first nonwhite character that is not part of the expression
1046 (possibly a null character).
1048 If COMMA is nonzero, stop if a comma is reached. */
1051 parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
1052 int comma, innermost_block_tracker_types tracker_types)
1054 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
1055 tracker_types, nullptr);
1058 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1059 no value is expected from the expression.
1060 OUT_SUBEXP is set when attempting to complete a field name; in this
1061 case it is set to the index of the subexpression on the
1062 left-hand-side of the struct op. If not doing such completion, it
1063 is left untouched. */
1065 static expression_up
1066 parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1067 const struct block *block,
1068 int comma, int void_context_p, int *out_subexp,
1069 innermost_block_tracker_types tracker_types,
1070 expr_completion_state *cstate)
1072 const struct language_defn *lang = NULL;
1075 innermost_block.reset (tracker_types);
1077 if (*stringptr == 0 || **stringptr == 0)
1078 error_no_arg (_("expression to compute"));
1080 const struct block *expression_context_block = block;
1081 CORE_ADDR expression_context_pc = 0;
1083 /* If no context specified, try using the current frame, if any. */
1084 if (!expression_context_block)
1085 expression_context_block = get_selected_block (&expression_context_pc);
1087 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1089 expression_context_pc = pc;
1091 /* Fall back to using the current source static context, if any. */
1093 if (!expression_context_block)
1095 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1097 expression_context_block
1098 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1100 if (expression_context_block)
1101 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1104 if (language_mode == language_mode_auto && block != NULL)
1106 /* Find the language associated to the given context block.
1107 Default to the current language if it can not be determined.
1109 Note that using the language corresponding to the current frame
1110 can sometimes give unexpected results. For instance, this
1111 routine is often called several times during the inferior
1112 startup phase to re-parse breakpoint expressions after
1113 a new shared library has been loaded. The language associated
1114 to the current frame at this moment is not relevant for
1115 the breakpoint. Using it would therefore be silly, so it seems
1116 better to rely on the current language rather than relying on
1117 the current frame language to parse the expression. That's why
1118 we do the following language detection only if the context block
1119 has been specifically provided. */
1120 struct symbol *func = block_linkage_function (block);
1123 lang = language_def (SYMBOL_LANGUAGE (func));
1124 if (lang == NULL || lang->la_language == language_unknown)
1125 lang = current_language;
1128 lang = current_language;
1130 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1131 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1132 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1133 to the value matching SELECTED_FRAME as set by get_current_arch. */
1135 parser_state ps (lang, get_current_arch (), expression_context_block,
1136 expression_context_pc, comma, *stringptr,
1139 scoped_restore_current_language lang_saver;
1140 set_language (lang->la_language);
1144 lang->la_parser (&ps);
1146 CATCH (except, RETURN_MASK_ALL)
1148 /* If parsing for completion, allow this to succeed; but if no
1149 expression elements have been written, then there's nothing
1151 if (! ps.parse_completion || ps.expout_ptr == 0)
1152 throw_exception (except);
1156 /* We have to operate on an "expression *", due to la_post_parser,
1157 which explains this funny-looking double release. */
1158 expression_up result = ps.release ();
1160 /* Convert expression from postfix form as generated by yacc
1161 parser, to a prefix form. */
1163 if (expressiondebug)
1164 dump_raw_expression (result.get (), gdb_stdlog,
1165 "before conversion to prefix form");
1167 subexp = prefixify_expression (result.get (),
1168 ps.m_completion_state.expout_last_struct);
1170 *out_subexp = subexp;
1172 lang->la_post_parser (&result, void_context_p, ps.parse_completion);
1174 if (expressiondebug)
1175 dump_prefix_expression (result.get (), gdb_stdlog);
1177 if (cstate != nullptr)
1178 *cstate = std::move (ps.m_completion_state);
1179 *stringptr = ps.lexptr;
1183 /* Parse STRING as an expression, and complain if this fails
1184 to use up all of the contents of STRING. */
1187 parse_expression (const char *string)
1189 expression_up exp = parse_exp_1 (&string, 0, 0, 0);
1191 error (_("Junk after end of expression."));
1195 /* Same as parse_expression, but using the given language (LANG)
1196 to parse the expression. */
1199 parse_expression_with_language (const char *string, enum language lang)
1201 gdb::optional<scoped_restore_current_language> lang_saver;
1202 if (current_language->la_language != lang)
1204 lang_saver.emplace ();
1205 set_language (lang);
1208 return parse_expression (string);
1211 /* Parse STRING as an expression. If parsing ends in the middle of a
1212 field reference, return the type of the left-hand-side of the
1213 reference; furthermore, if the parsing ends in the field name,
1214 return the field name in *NAME. If the parsing ends in the middle
1215 of a field reference, but the reference is somehow invalid, throw
1216 an exception. In all other cases, return NULL. */
1219 parse_expression_for_completion (const char *string,
1220 gdb::unique_xmalloc_ptr<char> *name,
1221 enum type_code *code)
1226 expr_completion_state cstate;
1230 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
1231 INNERMOST_BLOCK_FOR_SYMBOLS, &cstate);
1233 CATCH (except, RETURN_MASK_ERROR)
1235 /* Nothing, EXP remains NULL. */
1242 if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
1244 *code = cstate.expout_tag_completion_type;
1245 *name = std::move (cstate.expout_completion_name);
1249 if (cstate.expout_last_struct == -1)
1252 const char *fieldname = extract_field_op (exp.get (), &subexp);
1253 if (fieldname == NULL)
1259 name->reset (xstrdup (fieldname));
1260 /* This might throw an exception. If so, we want to let it
1262 val = evaluate_subexpression_type (exp.get (), subexp);
1264 return value_type (val);
1267 /* A post-parser that does nothing. */
1270 null_post_parser (expression_up *exp, int void_context_p, int completin)
1274 /* Parse floating point value P of length LEN.
1275 Return false if invalid, true if valid.
1276 The successfully parsed number is stored in DATA in
1277 target format for floating-point type TYPE.
1279 NOTE: This accepts the floating point syntax that sscanf accepts. */
1282 parse_float (const char *p, int len,
1283 const struct type *type, gdb_byte *data)
1285 return target_float_from_string (data, type, std::string (p, len));
1288 /* This function avoids direct calls to fprintf
1289 in the parser generated debug code. */
1291 parser_fprintf (FILE *x, const char *y, ...)
1297 vfprintf_unfiltered (gdb_stderr, y, args);
1300 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1301 vfprintf_unfiltered (gdb_stderr, y, args);
1306 /* Implementation of the exp_descriptor method operator_check. */
1309 operator_check_standard (struct expression *exp, int pos,
1310 int (*objfile_func) (struct objfile *objfile,
1314 const union exp_element *const elts = exp->elts;
1315 struct type *type = NULL;
1316 struct objfile *objfile = NULL;
1318 /* Extended operators should have been already handled by exp_descriptor
1319 iterate method of its specific language. */
1320 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1322 /* Track the callers of write_exp_elt_type for this table. */
1324 switch (elts[pos].opcode)
1336 type = elts[pos + 1].type;
1341 LONGEST arg, nargs = elts[pos + 2].longconst;
1343 for (arg = 0; arg < nargs; arg++)
1345 struct type *inst_type = elts[pos + 3 + arg].type;
1346 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
1348 if (inst_objfile && (*objfile_func) (inst_objfile, data))
1356 const struct block *const block = elts[pos + 1].block;
1357 const struct symbol *const symbol = elts[pos + 2].symbol;
1359 /* Check objfile where the variable itself is placed.
1360 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
1361 if ((*objfile_func) (symbol_objfile (symbol), data))
1364 /* Check objfile where is placed the code touching the variable. */
1365 objfile = lookup_objfile_from_block (block);
1367 type = SYMBOL_TYPE (symbol);
1370 case OP_VAR_MSYM_VALUE:
1371 objfile = elts[pos + 1].objfile;
1375 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1377 if (type && TYPE_OBJFILE (type)
1378 && (*objfile_func) (TYPE_OBJFILE (type), data))
1380 if (objfile && (*objfile_func) (objfile, data))
1386 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1387 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1388 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1389 returns non-zero value then (any other) non-zero value is immediately
1390 returned to the caller. Otherwise zero is returned after iterating
1391 through whole EXP. */
1394 exp_iterate (struct expression *exp,
1395 int (*objfile_func) (struct objfile *objfile, void *data),
1400 for (endpos = exp->nelts; endpos > 0; )
1402 int pos, args, oplen = 0;
1404 operator_length (exp, endpos, &oplen, &args);
1405 gdb_assert (oplen > 0);
1407 pos = endpos - oplen;
1408 if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1409 objfile_func, data))
1418 /* Helper for exp_uses_objfile. */
1421 exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1423 struct objfile *objfile = (struct objfile *) objfile_voidp;
1425 if (exp_objfile->separate_debug_objfile_backlink)
1426 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1428 return exp_objfile == objfile;
1431 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1432 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1436 exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1438 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1440 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1443 /* Reallocate the `expout' pointer inside PS so that it can accommodate
1444 at least LENELT expression elements. This function does nothing if
1445 there is enough room for the elements. */
1448 increase_expout_size (struct expr_builder *ps, size_t lenelt)
1450 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1452 ps->expout_size = std::max (ps->expout_size * 2,
1453 ps->expout_ptr + lenelt + 10);
1454 ps->expout.reset (XRESIZEVAR (expression,
1455 ps->expout.release (),
1456 (sizeof (struct expression)
1457 + EXP_ELEM_TO_BYTES (ps->expout_size))));
1462 _initialize_parse (void)
1464 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1466 _("Set expression debugging."),
1467 _("Show expression debugging."),
1468 _("When non-zero, the internal representation "
1469 "of expressions will be printed."),
1471 show_expressiondebug,
1472 &setdebuglist, &showdebuglist);
1473 add_setshow_boolean_cmd ("parser", class_maintenance,
1475 _("Set parser debugging."),
1476 _("Show parser debugging."),
1477 _("When non-zero, expression parser "
1478 "tracing will be enabled."),
1481 &setdebuglist, &showdebuglist);