GDB (xrefs)
/tmp/gdb-8.1/gdb/parse.c
Go to the documentation of this file.
1 /* Parse expressions for GDB.
2 
3  Copyright (C) 1986-2018 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 "common/gdb_optional.h"
54 
55 /* Standard set of definitions for printing, dumping, prefixifying,
56  * and evaluating expressions. */
57 
59  {
66  };
67 
68 /* Global variables declared in parser-defs.h (and commented there). */
71 const struct block *innermost_block;
73 static struct type_stack type_stack;
74 const char *lexptr;
75 const char *prev_lexptr;
78 
79 /* True if parsing an expression to attempt completion. */
81 
82 /* The index of the last struct expression directly before a '.' or
83  '->'. This is set when parsing and is only used when completing a
84  field name. It is -1 if no dereference operation was found. */
85 static int expout_last_struct = -1;
86 
87 /* If we are completing a tagged type name, this will be nonzero. */
89 
90 /* The token for tagged type name completion. */
92 
93 
94 static unsigned int expressiondebug = 0;
95 static void
96 show_expressiondebug (struct ui_file *file, int from_tty,
97  struct cmd_list_element *c, const char *value)
98 {
99  fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
100 }
101 
102 
103 /* Non-zero if an expression parser should set yydebug. */
105 
106 static void
107 show_parserdebug (struct ui_file *file, int from_tty,
108  struct cmd_list_element *c, const char *value)
109 {
110  fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
111 }
112 
113 
114 static int prefixify_subexp (struct expression *, struct expression *, int,
115  int);
116 
117 static expression_up parse_exp_in_context (const char **, CORE_ADDR,
118  const struct block *, int,
119  int, int *);
120 static expression_up parse_exp_in_context_1 (const char **, CORE_ADDR,
121  const struct block *, int,
122  int, int *);
123 
124 /* Data structure for saving values of arglist_len for function calls whose
125  arguments contain other function calls. */
126 
127 static std::vector<int> *funcall_chain;
128 
129 /* Begin counting arguments for a function call,
130  saving the data about any containing call. */
131 
132 void
134 {
135  funcall_chain->push_back (arglist_len);
136  arglist_len = 0;
137 }
138 
139 /* Return the number of arguments in a function call just terminated,
140  and restore the data for the containing function call. */
141 
142 int
144 {
145  int val = arglist_len;
146  arglist_len = funcall_chain->back ();
147  funcall_chain->pop_back ();
148  return val;
149 }
150 
151 
152 
153 /* See definition in parser-defs.h. */
154 
155 parser_state::parser_state (size_t initial_size,
156  const struct language_defn *lang,
157  struct gdbarch *gdbarch)
158  : expout_size (initial_size),
159  expout (XNEWVAR (expression,
160  (sizeof (expression)
161  + EXP_ELEM_TO_BYTES (expout_size)))),
162  expout_ptr (0)
163 {
164  expout->language_defn = lang;
165  expout->gdbarch = gdbarch;
166 }
167 
170 {
171  /* Record the actual number of expression elements, and then
172  reallocate the expression memory so that we free up any
173  excess elements. */
174 
175  expout->nelts = expout_ptr;
176  expout.reset (XRESIZEVAR (expression, expout.release (),
177  (sizeof (expression)
179 
180  return std::move (expout);
181 }
182 
183 /* This page contains the functions for adding data to the struct expression
184  being constructed. */
185 
186 /* Add one element to the end of the expression. */
187 
188 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
189  a register through here. */
190 
191 static void
192 write_exp_elt (struct parser_state *ps, const union exp_element *expelt)
193 {
194  if (ps->expout_ptr >= ps->expout_size)
195  {
196  ps->expout_size *= 2;
197  ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
198  (sizeof (expression)
199  + EXP_ELEM_TO_BYTES (ps->expout_size))));
200  }
201  ps->expout->elts[ps->expout_ptr++] = *expelt;
202 }
203 
204 void
206 {
207  union exp_element tmp;
208 
209  memset (&tmp, 0, sizeof (union exp_element));
210  tmp.opcode = expelt;
211  write_exp_elt (ps, &tmp);
212 }
213 
214 void
215 write_exp_elt_sym (struct parser_state *ps, struct symbol *expelt)
216 {
217  union exp_element tmp;
218 
219  memset (&tmp, 0, sizeof (union exp_element));
220  tmp.symbol = expelt;
221  write_exp_elt (ps, &tmp);
222 }
223 
224 void
226 {
227  union exp_element tmp;
228 
229  memset (&tmp, 0, sizeof (union exp_element));
230  tmp.msymbol = expelt;
231  write_exp_elt (ps, &tmp);
232 }
233 
234 void
235 write_exp_elt_block (struct parser_state *ps, const struct block *b)
236 {
237  union exp_element tmp;
238 
239  memset (&tmp, 0, sizeof (union exp_element));
240  tmp.block = b;
241  write_exp_elt (ps, &tmp);
242 }
243 
244 void
246 {
247  union exp_element tmp;
248 
249  memset (&tmp, 0, sizeof (union exp_element));
250  tmp.objfile = objfile;
251  write_exp_elt (ps, &tmp);
252 }
253 
254 void
256 {
257  union exp_element tmp;
258 
259  memset (&tmp, 0, sizeof (union exp_element));
260  tmp.longconst = expelt;
261  write_exp_elt (ps, &tmp);
262 }
263 
264 void
265 write_exp_elt_floatcst (struct parser_state *ps, const gdb_byte expelt[16])
266 {
267  union exp_element tmp;
268  int index;
269 
270  for (index = 0; index < 16; index++)
271  tmp.floatconst[index] = expelt[index];
272 
273  write_exp_elt (ps, &tmp);
274 }
275 
276 void
277 write_exp_elt_type (struct parser_state *ps, struct type *expelt)
278 {
279  union exp_element tmp;
280 
281  memset (&tmp, 0, sizeof (union exp_element));
282  tmp.type = expelt;
283  write_exp_elt (ps, &tmp);
284 }
285 
286 void
288 {
289  union exp_element tmp;
290 
291  memset (&tmp, 0, sizeof (union exp_element));
292  tmp.internalvar = expelt;
293  write_exp_elt (ps, &tmp);
294 }
295 
296 /* Add a string constant to the end of the expression.
297 
298  String constants are stored by first writing an expression element
299  that contains the length of the string, then stuffing the string
300  constant itself into however many expression elements are needed
301  to hold it, and then writing another expression element that contains
302  the length of the string. I.e. an expression element at each end of
303  the string records the string length, so you can skip over the
304  expression elements containing the actual string bytes from either
305  end of the string. Note that this also allows gdb to handle
306  strings with embedded null bytes, as is required for some languages.
307 
308  Don't be fooled by the fact that the string is null byte terminated,
309  this is strictly for the convenience of debugging gdb itself.
310  Gdb does not depend up the string being null terminated, since the
311  actual length is recorded in expression elements at each end of the
312  string. The null byte is taken into consideration when computing how
313  many expression elements are required to hold the string constant, of
314  course. */
315 
316 
317 void
318 write_exp_string (struct parser_state *ps, struct stoken str)
319 {
320  int len = str.length;
321  size_t lenelt;
322  char *strdata;
323 
324  /* Compute the number of expression elements required to hold the string
325  (including a null byte terminator), along with one expression element
326  at each end to record the actual string length (not including the
327  null byte terminator). */
328 
329  lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
330 
331  increase_expout_size (ps, lenelt);
332 
333  /* Write the leading length expression element (which advances the current
334  expression element index), then write the string constant followed by a
335  terminating null byte, and then write the trailing length expression
336  element. */
337 
339  strdata = (char *) &ps->expout->elts[ps->expout_ptr];
340  memcpy (strdata, str.ptr, len);
341  *(strdata + len) = '\0';
342  ps->expout_ptr += lenelt - 2;
344 }
345 
346 /* Add a vector of string constants to the end of the expression.
347 
348  This adds an OP_STRING operation, but encodes the contents
349  differently from write_exp_string. The language is expected to
350  handle evaluation of this expression itself.
351 
352  After the usual OP_STRING header, TYPE is written into the
353  expression as a long constant. The interpretation of this field is
354  up to the language evaluator.
355 
356  Next, each string in VEC is written. The length is written as a
357  long constant, followed by the contents of the string. */
358 
359 void
361  struct stoken_vector *vec)
362 {
363  int i, len;
364  size_t n_slots;
365 
366  /* Compute the size. We compute the size in number of slots to
367  avoid issues with string padding. */
368  n_slots = 0;
369  for (i = 0; i < vec->len; ++i)
370  {
371  /* One slot for the length of this element, plus the number of
372  slots needed for this string. */
373  n_slots += 1 + BYTES_TO_EXP_ELEM (vec->tokens[i].length);
374  }
375 
376  /* One more slot for the type of the string. */
377  ++n_slots;
378 
379  /* Now compute a phony string length. */
380  len = EXP_ELEM_TO_BYTES (n_slots) - 1;
381 
382  n_slots += 4;
383  increase_expout_size (ps, n_slots);
384 
385  write_exp_elt_opcode (ps, OP_STRING);
386  write_exp_elt_longcst (ps, len);
388 
389  for (i = 0; i < vec->len; ++i)
390  {
392  memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
393  vec->tokens[i].length);
394  ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
395  }
396 
397  write_exp_elt_longcst (ps, len);
398  write_exp_elt_opcode (ps, OP_STRING);
399 }
400 
401 /* Add a bitstring constant to the end of the expression.
402 
403  Bitstring constants are stored by first writing an expression element
404  that contains the length of the bitstring (in bits), then stuffing the
405  bitstring constant itself into however many expression elements are
406  needed to hold it, and then writing another expression element that
407  contains the length of the bitstring. I.e. an expression element at
408  each end of the bitstring records the bitstring length, so you can skip
409  over the expression elements containing the actual bitstring bytes from
410  either end of the bitstring. */
411 
412 void
414 {
415  int bits = str.length; /* length in bits */
416  int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
417  size_t lenelt;
418  char *strdata;
419 
420  /* Compute the number of expression elements required to hold the bitstring,
421  along with one expression element at each end to record the actual
422  bitstring length in bits. */
423 
424  lenelt = 2 + BYTES_TO_EXP_ELEM (len);
425 
426  increase_expout_size (ps, lenelt);
427 
428  /* Write the leading length expression element (which advances the current
429  expression element index), then write the bitstring constant, and then
430  write the trailing length expression element. */
431 
433  strdata = (char *) &ps->expout->elts[ps->expout_ptr];
434  memcpy (strdata, str.ptr, len);
435  ps->expout_ptr += lenelt - 2;
437 }
438 
439 /* Return the type of MSYMBOL, a minimal symbol of OBJFILE. If
440  ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
441  address. */
442 
443 type *
445  struct objfile *objfile,
446  CORE_ADDR *address_p)
447 {
448  bound_minimal_symbol bound_msym = {msymbol, objfile};
450  struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
451  enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
452  CORE_ADDR pc;
453 
454  bool is_tls = (section != NULL
455  && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
456 
457  /* Addresses of TLS symbols are really offsets into a
458  per-objfile/per-thread storage block. */
459  CORE_ADDR addr = (is_tls
460  ? MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym)
461  : BMSYMBOL_VALUE_ADDRESS (bound_msym));
462 
463  /* The minimal symbol might point to a function descriptor;
464  resolve it to the actual code address instead. */
466  if (pc != addr)
467  {
468  struct bound_minimal_symbol ifunc_msym = lookup_minimal_symbol_by_pc (pc);
469 
470  /* In this case, assume we have a code symbol instead of
471  a data symbol. */
472 
473  if (ifunc_msym.minsym != NULL
474  && MSYMBOL_TYPE (ifunc_msym.minsym) == mst_text_gnu_ifunc
475  && BMSYMBOL_VALUE_ADDRESS (ifunc_msym) == pc)
476  {
477  /* A function descriptor has been resolved but PC is still in the
478  STT_GNU_IFUNC resolver body (such as because inferior does not
479  run to be able to call it). */
480 
482  }
483  else
484  type = mst_text;
485  section = NULL;
486  addr = pc;
487  }
488 
489  if (overlay_debugging)
490  addr = symbol_overlayed_address (addr, section);
491 
492  if (is_tls)
493  {
494  /* Skip translation if caller does not need the address. */
495  if (address_p != NULL)
496  *address_p = target_translate_tls_address (objfile, addr);
498  }
499 
500  if (address_p != NULL)
501  *address_p = addr;
502 
503  switch (type)
504  {
505  case mst_text:
506  case mst_file_text:
509 
510  case mst_text_gnu_ifunc:
512 
513  case mst_data:
514  case mst_file_data:
515  case mst_bss:
516  case mst_file_bss:
518 
519  case mst_slot_got_plt:
521 
522  default:
524  }
525 }
526 
527 /* Add the appropriate elements for a minimal symbol to the end of
528  the expression. */
529 
530 void
532  struct bound_minimal_symbol bound_msym)
533 {
534  write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
535  write_exp_elt_objfile (ps, bound_msym.objfile);
536  write_exp_elt_msym (ps, bound_msym.minsym);
537  write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
538 }
539 
540 /* Mark the current index as the starting location of a structure
541  expression. This is used when completing on field names. */
542 
543 void
545 {
548  expout_last_struct = ps->expout_ptr;
549 }
550 
551 /* Indicate that the current parser invocation is completing a tag.
552  TAG is the type code of the tag, and PTR and LENGTH represent the
553  start of the tag name. */
554 
555 void
556 mark_completion_tag (enum type_code tag, const char *ptr, int length)
557 {
560  && expout_completion_name == NULL
561  && expout_last_struct == -1);
563  || tag == TYPE_CODE_STRUCT
564  || tag == TYPE_CODE_ENUM);
566  expout_completion_name = (char *) xmalloc (length + 1);
567  memcpy (expout_completion_name, ptr, length);
568  expout_completion_name[length] = '\0';
569 }
570 
571 
572 /* Recognize tokens that start with '$'. These include:
573 
574  $regname A native register name or a "standard
575  register name".
576 
577  $variable A convenience variable with a name chosen
578  by the user.
579 
580  $digits Value history with index <digits>, starting
581  from the first value which has index 1.
582 
583  $$digits Value history with index <digits> relative
584  to the last value. I.e. $$0 is the last
585  value, $$1 is the one previous to that, $$2
586  is the one previous to $$1, etc.
587 
588  $ | $0 | $$0 The last value in the value history.
589 
590  $$ An abbreviation for the second to the last
591  value in the value history, I.e. $$1 */
592 
593 void
595 {
596  struct block_symbol sym;
597  struct bound_minimal_symbol msym;
598  struct internalvar *isym = NULL;
599 
600  /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
601  and $$digits (equivalent to $<-digits> if you could type that). */
602 
603  int negate = 0;
604  int i = 1;
605  /* Double dollar means negate the number and add -1 as well.
606  Thus $$ alone means -1. */
607  if (str.length >= 2 && str.ptr[1] == '$')
608  {
609  negate = 1;
610  i = 2;
611  }
612  if (i == str.length)
613  {
614  /* Just dollars (one or two). */
615  i = -negate;
616  goto handle_last;
617  }
618  /* Is the rest of the token digits? */
619  for (; i < str.length; i++)
620  if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
621  break;
622  if (i == str.length)
623  {
624  i = atoi (str.ptr + 1 + negate);
625  if (negate)
626  i = -i;
627  goto handle_last;
628  }
629 
630  /* Handle tokens that refer to machine registers:
631  $ followed by a register name. */
633  str.ptr + 1, str.length - 1);
634  if (i >= 0)
635  goto handle_register;
636 
637  /* Any names starting with $ are probably debugger internal variables. */
638 
639  isym = lookup_only_internalvar (copy_name (str) + 1);
640  if (isym)
641  {
642  write_exp_elt_opcode (ps, OP_INTERNALVAR);
643  write_exp_elt_intern (ps, isym);
644  write_exp_elt_opcode (ps, OP_INTERNALVAR);
645  return;
646  }
647 
648  /* On some systems, such as HP-UX and hppa-linux, certain system routines
649  have names beginning with $ or $$. Check for those, first. */
650 
651  sym = lookup_symbol (copy_name (str), (struct block *) NULL,
652  VAR_DOMAIN, NULL);
653  if (sym.symbol)
654  {
655  write_exp_elt_opcode (ps, OP_VAR_VALUE);
657  write_exp_elt_sym (ps, sym.symbol);
658  write_exp_elt_opcode (ps, OP_VAR_VALUE);
659  return;
660  }
661  msym = lookup_bound_minimal_symbol (copy_name (str));
662  if (msym.minsym)
663  {
664  write_exp_msymbol (ps, msym);
665  return;
666  }
667 
668  /* Any other names are assumed to be debugger internal variables. */
669 
670  write_exp_elt_opcode (ps, OP_INTERNALVAR);
672  write_exp_elt_opcode (ps, OP_INTERNALVAR);
673  return;
674 handle_last:
675  write_exp_elt_opcode (ps, OP_LAST);
677  write_exp_elt_opcode (ps, OP_LAST);
678  return;
679 handle_register:
680  write_exp_elt_opcode (ps, OP_REGISTER);
681  str.length--;
682  str.ptr++;
683  write_exp_string (ps, str);
684  write_exp_elt_opcode (ps, OP_REGISTER);
685  return;
686 }
687 
688 
689 const char *
690 find_template_name_end (const char *p)
691 {
692  int depth = 1;
693  int just_seen_right = 0;
694  int just_seen_colon = 0;
695  int just_seen_space = 0;
696 
697  if (!p || (*p != '<'))
698  return 0;
699 
700  while (*++p)
701  {
702  switch (*p)
703  {
704  case '\'':
705  case '\"':
706  case '{':
707  case '}':
708  /* In future, may want to allow these?? */
709  return 0;
710  case '<':
711  depth++; /* start nested template */
712  if (just_seen_colon || just_seen_right || just_seen_space)
713  return 0; /* but not after : or :: or > or space */
714  break;
715  case '>':
716  if (just_seen_colon || just_seen_right)
717  return 0; /* end a (nested?) template */
718  just_seen_right = 1; /* but not after : or :: */
719  if (--depth == 0) /* also disallow >>, insist on > > */
720  return ++p; /* if outermost ended, return */
721  break;
722  case ':':
723  if (just_seen_space || (just_seen_colon > 1))
724  return 0; /* nested class spec coming up */
725  just_seen_colon++; /* we allow :: but not :::: */
726  break;
727  case ' ':
728  break;
729  default:
730  if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
731  (*p >= 'A' && *p <= 'Z') ||
732  (*p >= '0' && *p <= '9') ||
733  (*p == '_') || (*p == ',') || /* commas for template args */
734  (*p == '&') || (*p == '*') || /* pointer and ref types */
735  (*p == '(') || (*p == ')') || /* function types */
736  (*p == '[') || (*p == ']'))) /* array types */
737  return 0;
738  }
739  if (*p != ' ')
740  just_seen_space = 0;
741  if (*p != ':')
742  just_seen_colon = 0;
743  if (*p != '>')
744  just_seen_right = 0;
745  }
746  return 0;
747 }
748 
749 
750 /* Return a null-terminated temporary copy of the name of a string token.
751 
752  Tokens that refer to names do so with explicit pointer and length,
753  so they can share the storage that lexptr is parsing.
754  When it is necessary to pass a name to a function that expects
755  a null-terminated string, the substring is copied out
756  into a separate block of storage.
757 
758  N.B. A single buffer is reused on each call. */
759 
760 char *
762 {
763  /* A temporary buffer for identifiers, so we can null-terminate them.
764  We allocate this with xrealloc. parse_exp_1 used to allocate with
765  alloca, using the size of the whole expression as a conservative
766  estimate of the space needed. However, macro expansion can
767  introduce names longer than the original expression; there's no
768  practical way to know beforehand how large that might be. */
769  static char *namecopy;
770  static size_t namecopy_size;
771 
772  /* Make sure there's enough space for the token. */
773  if (namecopy_size < token.length + 1)
774  {
775  namecopy_size = token.length + 1;
776  namecopy = (char *) xrealloc (namecopy, token.length + 1);
777  }
778 
779  memcpy (namecopy, token.ptr, token.length);
780  namecopy[token.length] = 0;
781 
782  return namecopy;
783 }
784 
785 
786 /* See comments on parser-defs.h. */
787 
788 int
790 {
791  int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
792  struct expression *temp;
793  int inpos = expr->nelts, outpos = 0;
794 
795  temp = (struct expression *) alloca (len);
796 
797  /* Copy the original expression into temp. */
798  memcpy (temp, expr, len);
799 
800  return prefixify_subexp (temp, expr, inpos, outpos);
801 }
802 
803 /* Return the number of exp_elements in the postfix subexpression
804  of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
805 
806 static int
807 length_of_subexp (struct expression *expr, int endpos)
808 {
809  int oplen, args;
810 
811  operator_length (expr, endpos, &oplen, &args);
812 
813  while (args > 0)
814  {
815  oplen += length_of_subexp (expr, endpos - oplen);
816  args--;
817  }
818 
819  return oplen;
820 }
821 
822 /* Sets *OPLENP to the length of the operator whose (last) index is
823  ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
824  operator takes. */
825 
826 void
827 operator_length (const struct expression *expr, int endpos, int *oplenp,
828  int *argsp)
829 {
830  expr->language_defn->la_exp_desc->operator_length (expr, endpos,
831  oplenp, argsp);
832 }
833 
834 /* Default value for operator_length in exp_descriptor vectors. */
835 
836 void
837 operator_length_standard (const struct expression *expr, int endpos,
838  int *oplenp, int *argsp)
839 {
840  int oplen = 1;
841  int args = 0;
842  enum range_type range_type;
843  int i;
844 
845  if (endpos < 1)
846  error (_("?error in operator_length_standard"));
847 
848  i = (int) expr->elts[endpos - 1].opcode;
849 
850  switch (i)
851  {
852  /* C++ */
853  case OP_SCOPE:
854  oplen = longest_to_int (expr->elts[endpos - 2].longconst);
855  oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
856  break;
857 
858  case OP_LONG:
859  case OP_FLOAT:
860  case OP_VAR_VALUE:
861  case OP_VAR_MSYM_VALUE:
862  oplen = 4;
863  break;
864 
865  case OP_FUNC_STATIC_VAR:
866  oplen = longest_to_int (expr->elts[endpos - 2].longconst);
867  oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
868  args = 1;
869  break;
870 
871  case OP_TYPE:
872  case OP_BOOL:
873  case OP_LAST:
874  case OP_INTERNALVAR:
875  case OP_VAR_ENTRY_VALUE:
876  oplen = 3;
877  break;
878 
879  case OP_COMPLEX:
880  oplen = 3;
881  args = 2;
882  break;
883 
884  case OP_FUNCALL:
885  case OP_F77_UNDETERMINED_ARGLIST:
886  oplen = 3;
887  args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
888  break;
889 
890  case TYPE_INSTANCE:
891  oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
892  args = 1;
893  break;
894 
895  case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
896  oplen = 4;
897  args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
898  break;
899 
900  case UNOP_MAX:
901  case UNOP_MIN:
902  oplen = 3;
903  break;
904 
905  case UNOP_CAST_TYPE:
906  case UNOP_DYNAMIC_CAST:
907  case UNOP_REINTERPRET_CAST:
908  case UNOP_MEMVAL_TYPE:
909  oplen = 1;
910  args = 2;
911  break;
912 
913  case BINOP_VAL:
914  case UNOP_CAST:
915  case UNOP_MEMVAL:
916  oplen = 3;
917  args = 1;
918  break;
919 
920  case UNOP_ABS:
921  case UNOP_CAP:
922  case UNOP_CHR:
923  case UNOP_FLOAT:
924  case UNOP_HIGH:
925  case UNOP_ODD:
926  case UNOP_ORD:
927  case UNOP_TRUNC:
928  case OP_TYPEOF:
929  case OP_DECLTYPE:
930  case OP_TYPEID:
931  oplen = 1;
932  args = 1;
933  break;
934 
935  case OP_ADL_FUNC:
936  oplen = longest_to_int (expr->elts[endpos - 2].longconst);
937  oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
938  oplen++;
939  oplen++;
940  break;
941 
942  case STRUCTOP_STRUCT:
943  case STRUCTOP_PTR:
944  args = 1;
945  /* fall through */
946  case OP_REGISTER:
947  case OP_M2_STRING:
948  case OP_STRING:
949  case OP_OBJC_NSSTRING: /* Objective C Foundation Class
950  NSString constant. */
951  case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
952  case OP_NAME:
953  oplen = longest_to_int (expr->elts[endpos - 2].longconst);
954  oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
955  break;
956 
957  case OP_ARRAY:
958  oplen = 4;
959  args = longest_to_int (expr->elts[endpos - 2].longconst);
960  args -= longest_to_int (expr->elts[endpos - 3].longconst);
961  args += 1;
962  break;
963 
964  case TERNOP_COND:
965  case TERNOP_SLICE:
966  args = 3;
967  break;
968 
969  /* Modula-2 */
970  case MULTI_SUBSCRIPT:
971  oplen = 3;
972  args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
973  break;
974 
975  case BINOP_ASSIGN_MODIFY:
976  oplen = 3;
977  args = 2;
978  break;
979 
980  /* C++ */
981  case OP_THIS:
982  oplen = 2;
983  break;
984 
985  case OP_RANGE:
986  oplen = 3;
987  range_type = (enum range_type)
988  longest_to_int (expr->elts[endpos - 2].longconst);
989 
990  switch (range_type)
991  {
992  case LOW_BOUND_DEFAULT:
993  case HIGH_BOUND_DEFAULT:
994  args = 1;
995  break;
996  case BOTH_BOUND_DEFAULT:
997  args = 0;
998  break;
999  case NONE_BOUND_DEFAULT:
1000  args = 2;
1001  break;
1002  }
1003 
1004  break;
1005 
1006  default:
1007  args = 1 + (i < (int) BINOP_END);
1008  }
1009 
1010  *oplenp = oplen;
1011  *argsp = args;
1012 }
1013 
1014 /* Copy the subexpression ending just before index INEND in INEXPR
1015  into OUTEXPR, starting at index OUTBEG.
1016  In the process, convert it from suffix to prefix form.
1017  If EXPOUT_LAST_STRUCT is -1, then this function always returns -1.
1018  Otherwise, it returns the index of the subexpression which is the
1019  left-hand-side of the expression at EXPOUT_LAST_STRUCT. */
1020 
1021 static int
1023  struct expression *outexpr, int inend, int outbeg)
1024 {
1025  int oplen;
1026  int args;
1027  int i;
1028  int *arglens;
1029  int result = -1;
1030 
1031  operator_length (inexpr, inend, &oplen, &args);
1032 
1033  /* Copy the final operator itself, from the end of the input
1034  to the beginning of the output. */
1035  inend -= oplen;
1036  memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
1037  EXP_ELEM_TO_BYTES (oplen));
1038  outbeg += oplen;
1039 
1040  if (expout_last_struct == inend)
1041  result = outbeg - oplen;
1042 
1043  /* Find the lengths of the arg subexpressions. */
1044  arglens = (int *) alloca (args * sizeof (int));
1045  for (i = args - 1; i >= 0; i--)
1046  {
1047  oplen = length_of_subexp (inexpr, inend);
1048  arglens[i] = oplen;
1049  inend -= oplen;
1050  }
1051 
1052  /* Now copy each subexpression, preserving the order of
1053  the subexpressions, but prefixifying each one.
1054  In this loop, inend starts at the beginning of
1055  the expression this level is working on
1056  and marches forward over the arguments.
1057  outbeg does similarly in the output. */
1058  for (i = 0; i < args; i++)
1059  {
1060  int r;
1061 
1062  oplen = arglens[i];
1063  inend += oplen;
1064  r = prefixify_subexp (inexpr, outexpr, inend, outbeg);
1065  if (r != -1)
1066  {
1067  /* Return immediately. We probably have only parsed a
1068  partial expression, so we don't want to try to reverse
1069  the other operands. */
1070  return r;
1071  }
1072  outbeg += oplen;
1073  }
1074 
1075  return result;
1076 }
1077 
1078 /* Read an expression from the string *STRINGPTR points to,
1079  parse it, and return a pointer to a struct expression that we malloc.
1080  Use block BLOCK as the lexical context for variable names;
1081  if BLOCK is zero, use the block of the selected stack frame.
1082  Meanwhile, advance *STRINGPTR to point after the expression,
1083  at the first nonwhite character that is not part of the expression
1084  (possibly a null character).
1085 
1086  If COMMA is nonzero, stop if a comma is reached. */
1087 
1089 parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
1090  int comma)
1091 {
1092  return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL);
1093 }
1094 
1095 static expression_up
1096 parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1097  const struct block *block,
1098  int comma, int void_context_p, int *out_subexp)
1099 {
1100  return parse_exp_in_context_1 (stringptr, pc, block, comma,
1101  void_context_p, out_subexp);
1102 }
1103 
1104 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1105  no value is expected from the expression.
1106  OUT_SUBEXP is set when attempting to complete a field name; in this
1107  case it is set to the index of the subexpression on the
1108  left-hand-side of the struct op. If not doing such completion, it
1109  is left untouched. */
1110 
1111 static expression_up
1112 parse_exp_in_context_1 (const char **stringptr, CORE_ADDR pc,
1113  const struct block *block,
1114  int comma, int void_context_p, int *out_subexp)
1115 {
1116  const struct language_defn *lang = NULL;
1117  int subexp;
1118 
1119  lexptr = *stringptr;
1120  prev_lexptr = NULL;
1121 
1122  paren_depth = 0;
1123  type_stack.depth = 0;
1124  expout_last_struct = -1;
1127  expout_completion_name = NULL;
1128 
1129  comma_terminates = comma;
1130 
1131  if (lexptr == 0 || *lexptr == 0)
1132  error_no_arg (_("expression to compute"));
1133 
1134  std::vector<int> funcalls;
1135  scoped_restore save_funcall_chain = make_scoped_restore (&funcall_chain,
1136  &funcalls);
1137 
1139 
1140  /* If no context specified, try using the current frame, if any. */
1143  else if (pc == 0)
1145  else
1146  expression_context_pc = pc;
1147 
1148  /* Fall back to using the current source static context, if any. */
1149 
1151  {
1153  if (cursal.symtab)
1156  STATIC_BLOCK);
1159  }
1160 
1161  if (language_mode == language_mode_auto && block != NULL)
1162  {
1163  /* Find the language associated to the given context block.
1164  Default to the current language if it can not be determined.
1165 
1166  Note that using the language corresponding to the current frame
1167  can sometimes give unexpected results. For instance, this
1168  routine is often called several times during the inferior
1169  startup phase to re-parse breakpoint expressions after
1170  a new shared library has been loaded. The language associated
1171  to the current frame at this moment is not relevant for
1172  the breakpoint. Using it would therefore be silly, so it seems
1173  better to rely on the current language rather than relying on
1174  the current frame language to parse the expression. That's why
1175  we do the following language detection only if the context block
1176  has been specifically provided. */
1178 
1179  if (func != NULL)
1180  lang = language_def (SYMBOL_LANGUAGE (func));
1181  if (lang == NULL || lang->la_language == language_unknown)
1182  lang = current_language;
1183  }
1184  else
1185  lang = current_language;
1186 
1187  /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1188  While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1189  and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1190  to the value matching SELECTED_FRAME as set by get_current_arch. */
1191 
1192  parser_state ps (10, lang, get_current_arch ());
1193 
1195  set_language (lang->la_language);
1196 
1197  TRY
1198  {
1199  if (lang->la_parser (&ps))
1200  lang->la_error (NULL);
1201  }
1202  CATCH (except, RETURN_MASK_ALL)
1203  {
1204  if (! parse_completion)
1205  throw_exception (except);
1206  }
1207  END_CATCH
1208 
1209  /* We have to operate on an "expression *", due to la_post_parser,
1210  which explains this funny-looking double release. */
1211  expression_up result = ps.release ();
1212 
1213  /* Convert expression from postfix form as generated by yacc
1214  parser, to a prefix form. */
1215 
1216  if (expressiondebug)
1217  dump_raw_expression (result.get (), gdb_stdlog,
1218  "before conversion to prefix form");
1219 
1220  subexp = prefixify_expression (result.get ());
1221  if (out_subexp)
1222  *out_subexp = subexp;
1223 
1224  lang->la_post_parser (&result, void_context_p);
1225 
1226  if (expressiondebug)
1227  dump_prefix_expression (result.get (), gdb_stdlog);
1228 
1229  *stringptr = lexptr;
1230  return result;
1231 }
1232 
1233 /* Parse STRING as an expression, and complain if this fails
1234  to use up all of the contents of STRING. */
1235 
1237 parse_expression (const char *string)
1238 {
1239  expression_up exp = parse_exp_1 (&string, 0, 0, 0);
1240  if (*string)
1241  error (_("Junk after end of expression."));
1242  return exp;
1243 }
1244 
1245 /* Same as parse_expression, but using the given language (LANG)
1246  to parse the expression. */
1247 
1249 parse_expression_with_language (const char *string, enum language lang)
1250 {
1252  if (current_language->la_language != lang)
1253  {
1254  lang_saver.emplace ();
1255  set_language (lang);
1256  }
1257 
1258  return parse_expression (string);
1259 }
1260 
1261 /* Parse STRING as an expression. If parsing ends in the middle of a
1262  field reference, return the type of the left-hand-side of the
1263  reference; furthermore, if the parsing ends in the field name,
1264  return the field name in *NAME. If the parsing ends in the middle
1265  of a field reference, but the reference is somehow invalid, throw
1266  an exception. In all other cases, return NULL. Returned non-NULL
1267  *NAME must be freed by the caller. */
1268 
1269 struct type *
1270 parse_expression_for_completion (const char *string, char **name,
1271  enum type_code *code)
1272 {
1273  expression_up exp;
1274  struct value *val;
1275  int subexp;
1276 
1277  TRY
1278  {
1279  parse_completion = 1;
1280  exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp);
1281  }
1282  CATCH (except, RETURN_MASK_ERROR)
1283  {
1284  /* Nothing, EXP remains NULL. */
1285  }
1286  END_CATCH
1287 
1288  parse_completion = 0;
1289  if (exp == NULL)
1290  return NULL;
1291 
1293  {
1296  expout_completion_name = NULL;
1297  return NULL;
1298  }
1299 
1300  if (expout_last_struct == -1)
1301  return NULL;
1302 
1303  *name = extract_field_op (exp.get (), &subexp);
1304  if (!*name)
1305  return NULL;
1306 
1307  /* This might throw an exception. If so, we want to let it
1308  propagate. */
1309  val = evaluate_subexpression_type (exp.get (), subexp);
1310  /* (*NAME) is a part of the EXP memory block freed below. */
1311  *name = xstrdup (*name);
1312 
1313  return value_type (val);
1314 }
1315 
1316 /* A post-parser that does nothing. */
1317 
1318 void
1319 null_post_parser (expression_up *exp, int void_context_p)
1320 {
1321 }
1322 
1323 /* Parse floating point value P of length LEN.
1324  Return false if invalid, true if valid.
1325  The successfully parsed number is stored in DATA in
1326  target format for floating-point type TYPE.
1327 
1328  NOTE: This accepts the floating point syntax that sscanf accepts. */
1329 
1330 bool
1331 parse_float (const char *p, int len,
1332  const struct type *type, gdb_byte *data)
1333 {
1334  return target_float_from_string (data, type, std::string (p, len));
1335 }
1336 
1337 /* Stuff for maintaining a stack of types. Currently just used by C, but
1338  probably useful for any language which declares its types "backwards". */
1339 
1340 /* Ensure that there are HOWMUCH open slots on the type stack STACK. */
1341 
1342 static void
1343 type_stack_reserve (struct type_stack *stack, int howmuch)
1344 {
1345  if (stack->depth + howmuch >= stack->size)
1346  {
1347  stack->size *= 2;
1348  if (stack->size < howmuch)
1349  stack->size = howmuch;
1350  stack->elements = XRESIZEVEC (union type_stack_elt, stack->elements,
1351  stack->size);
1352  }
1353 }
1354 
1355 /* Ensure that there is a single open slot in the global type stack. */
1356 
1357 static void
1359 {
1361 }
1362 
1363 /* A helper function for insert_type and insert_type_address_space.
1364  This does work of expanding the type stack and inserting the new
1365  element, ELEMENT, into the stack at location SLOT. */
1366 
1367 static void
1368 insert_into_type_stack (int slot, union type_stack_elt element)
1369 {
1371 
1372  if (slot < type_stack.depth)
1373  memmove (&type_stack.elements[slot + 1], &type_stack.elements[slot],
1374  (type_stack.depth - slot) * sizeof (union type_stack_elt));
1375  type_stack.elements[slot] = element;
1376  ++type_stack.depth;
1377 }
1378 
1379 /* Insert a new type, TP, at the bottom of the type stack. If TP is
1380  tp_pointer, tp_reference or tp_rvalue_reference, it is inserted at the
1381  bottom. If TP is a qualifier, it is inserted at slot 1 (just above a
1382  previous tp_pointer) if there is anything on the stack, or simply pushed
1383  if the stack is empty. Other values for TP are invalid. */
1384 
1385 void
1387 {
1388  union type_stack_elt element;
1389  int slot;
1390 
1391  gdb_assert (tp == tp_pointer || tp == tp_reference
1392  || tp == tp_rvalue_reference || tp == tp_const
1393  || tp == tp_volatile);
1394 
1395  /* If there is anything on the stack (we know it will be a
1396  tp_pointer), insert the qualifier above it. Otherwise, simply
1397  push this on the top of the stack. */
1398  if (type_stack.depth && (tp == tp_const || tp == tp_volatile))
1399  slot = 1;
1400  else
1401  slot = 0;
1402 
1403  element.piece = tp;
1404  insert_into_type_stack (slot, element);
1405 }
1406 
1407 void
1409 {
1412 }
1413 
1414 void
1416 {
1419 }
1420 
1421 /* Insert a tp_space_identifier and the corresponding address space
1422  value into the stack. STRING is the name of an address space, as
1423  recognized by address_space_name_to_int. If the stack is empty,
1424  the new elements are simply pushed. If the stack is not empty,
1425  this function assumes that the first item on the stack is a
1426  tp_pointer, and the new values are inserted above the first
1427  item. */
1428 
1429 void
1431 {
1432  union type_stack_elt element;
1433  int slot;
1434 
1435  /* If there is anything on the stack (we know it will be a
1436  tp_pointer), insert the address space qualifier above it.
1437  Otherwise, simply push this on the top of the stack. */
1438  if (type_stack.depth)
1439  slot = 1;
1440  else
1441  slot = 0;
1442 
1443  element.piece = tp_space_identifier;
1444  insert_into_type_stack (slot, element);
1446  string);
1447  insert_into_type_stack (slot, element);
1448 }
1449 
1450 enum type_pieces
1451 pop_type (void)
1452 {
1453  if (type_stack.depth)
1455  return tp_end;
1456 }
1457 
1458 int
1460 {
1461  if (type_stack.depth)
1463  /* "Can't happen". */
1464  return 0;
1465 }
1466 
1467 /* Pop a type list element from the global type stack. */
1468 
1469 static VEC (type_ptr) *
1470 pop_typelist (void)
1471 {
1473  return type_stack.elements[--type_stack.depth].typelist_val;
1474 }
1475 
1476 /* Pop a type_stack element from the global type stack. */
1477 
1478 static struct type_stack *
1480 {
1483 }
1484 
1485 /* Append the elements of the type stack FROM to the type stack TO.
1486  Always returns TO. */
1487 
1488 struct type_stack *
1489 append_type_stack (struct type_stack *to, struct type_stack *from)
1490 {
1491  type_stack_reserve (to, from->depth);
1492 
1493  memcpy (&to->elements[to->depth], &from->elements[0],
1494  from->depth * sizeof (union type_stack_elt));
1495  to->depth += from->depth;
1496 
1497  return to;
1498 }
1499 
1500 /* Push the type stack STACK as an element on the global type stack. */
1501 
1502 void
1504 {
1508 }
1509 
1510 /* Copy the global type stack into a newly allocated type stack and
1511  return it. The global stack is cleared. The returned type stack
1512  must be freed with type_stack_cleanup. */
1513 
1514 struct type_stack *
1516 {
1517  struct type_stack *result = XNEW (struct type_stack);
1518 
1519  *result = type_stack;
1520  type_stack.depth = 0;
1521  type_stack.size = 0;
1522  type_stack.elements = NULL;
1523 
1524  return result;
1525 }
1526 
1527 /* A cleanup function that destroys a single type stack. */
1528 
1529 void
1531 {
1532  struct type_stack *stack = (struct type_stack *) arg;
1533 
1534  xfree (stack->elements);
1535  xfree (stack);
1536 }
1537 
1538 /* Push a function type with arguments onto the global type stack.
1539  LIST holds the argument types. If the final item in LIST is NULL,
1540  then the function will be varargs. */
1541 
1542 void
1544 {
1546  type_stack.elements[type_stack.depth++].typelist_val = list;
1548 }
1549 
1550 /* Pop the type stack and return a type_instance_flags that
1551  corresponds the const/volatile qualifiers on the stack. This is
1552  called by the C++ parser when parsing methods types, and as such no
1553  other kind of type in the type stack is expected. */
1554 
1555 type_instance_flags
1557 {
1558  type_instance_flags flags = 0;
1559 
1560  for (;;)
1561  switch (pop_type ())
1562  {
1563  case tp_end:
1564  return flags;
1565  case tp_const:
1567  break;
1568  case tp_volatile:
1570  break;
1571  default:
1572  gdb_assert_not_reached ("unrecognized tp_ value in follow_types");
1573  }
1574 }
1575 
1576 
1577 /* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1578  as modified by all the stuff on the stack. */
1579 struct type *
1580 follow_types (struct type *follow_type)
1581 {
1582  int done = 0;
1583  int make_const = 0;
1584  int make_volatile = 0;
1585  int make_addr_space = 0;
1586  int array_size;
1587 
1588  while (!done)
1589  switch (pop_type ())
1590  {
1591  case tp_end:
1592  done = 1;
1593  if (make_const)
1594  follow_type = make_cv_type (make_const,
1595  TYPE_VOLATILE (follow_type),
1596  follow_type, 0);
1597  if (make_volatile)
1598  follow_type = make_cv_type (TYPE_CONST (follow_type),
1599  make_volatile,
1600  follow_type, 0);
1601  if (make_addr_space)
1602  follow_type = make_type_with_address_space (follow_type,
1603  make_addr_space);
1604  make_const = make_volatile = 0;
1605  make_addr_space = 0;
1606  break;
1607  case tp_const:
1608  make_const = 1;
1609  break;
1610  case tp_volatile:
1611  make_volatile = 1;
1612  break;
1613  case tp_space_identifier:
1614  make_addr_space = pop_type_int ();
1615  break;
1616  case tp_pointer:
1617  follow_type = lookup_pointer_type (follow_type);
1618  if (make_const)
1619  follow_type = make_cv_type (make_const,
1620  TYPE_VOLATILE (follow_type),
1621  follow_type, 0);
1622  if (make_volatile)
1623  follow_type = make_cv_type (TYPE_CONST (follow_type),
1624  make_volatile,
1625  follow_type, 0);
1626  if (make_addr_space)
1627  follow_type = make_type_with_address_space (follow_type,
1628  make_addr_space);
1629  make_const = make_volatile = 0;
1630  make_addr_space = 0;
1631  break;
1632  case tp_reference:
1633  follow_type = lookup_lvalue_reference_type (follow_type);
1634  goto process_reference;
1635  case tp_rvalue_reference:
1636  follow_type = lookup_rvalue_reference_type (follow_type);
1638  if (make_const)
1639  follow_type = make_cv_type (make_const,
1640  TYPE_VOLATILE (follow_type),
1641  follow_type, 0);
1642  if (make_volatile)
1643  follow_type = make_cv_type (TYPE_CONST (follow_type),
1644  make_volatile,
1645  follow_type, 0);
1646  if (make_addr_space)
1647  follow_type = make_type_with_address_space (follow_type,
1648  make_addr_space);
1649  make_const = make_volatile = 0;
1650  make_addr_space = 0;
1651  break;
1652  case tp_array:
1653  array_size = pop_type_int ();
1654  /* FIXME-type-allocation: need a way to free this type when we are
1655  done with it. */
1656  follow_type =
1657  lookup_array_range_type (follow_type,
1658  0, array_size >= 0 ? array_size - 1 : 0);
1659  if (array_size < 0)
1660  TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (follow_type))
1661  = PROP_UNDEFINED;
1662  break;
1663  case tp_function:
1664  /* FIXME-type-allocation: need a way to free this type when we are
1665  done with it. */
1666  follow_type = lookup_function_type (follow_type);
1667  break;
1668 
1670  {
1671  VEC (type_ptr) *args = pop_typelist ();
1672 
1673  follow_type
1674  = lookup_function_type_with_arguments (follow_type,
1675  VEC_length (type_ptr, args),
1677  args));
1678  VEC_free (type_ptr, args);
1679  }
1680  break;
1681 
1682  case tp_type_stack:
1683  {
1684  struct type_stack *stack = pop_type_stack ();
1685  /* Sort of ugly, but not really much worse than the
1686  alternatives. */
1687  struct type_stack save = type_stack;
1688 
1689  type_stack = *stack;
1690  follow_type = follow_types (follow_type);
1691  gdb_assert (type_stack.depth == 0);
1692 
1693  type_stack = save;
1694  }
1695  break;
1696  default:
1697  gdb_assert_not_reached ("unrecognized tp_ value in follow_types");
1698  }
1699  return follow_type;
1700 }
1701 
1702 /* This function avoids direct calls to fprintf
1703  in the parser generated debug code. */
1704 void
1705 parser_fprintf (FILE *x, const char *y, ...)
1706 {
1707  va_list args;
1708 
1709  va_start (args, y);
1710  if (x == stderr)
1711  vfprintf_unfiltered (gdb_stderr, y, args);
1712  else
1713  {
1714  fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1715  vfprintf_unfiltered (gdb_stderr, y, args);
1716  }
1717  va_end (args);
1718 }
1719 
1720 /* Implementation of the exp_descriptor method operator_check. */
1721 
1722 int
1723 operator_check_standard (struct expression *exp, int pos,
1724  int (*objfile_func) (struct objfile *objfile,
1725  void *data),
1726  void *data)
1727 {
1728  const union exp_element *const elts = exp->elts;
1729  struct type *type = NULL;
1730  struct objfile *objfile = NULL;
1731 
1732  /* Extended operators should have been already handled by exp_descriptor
1733  iterate method of its specific language. */
1734  gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1735 
1736  /* Track the callers of write_exp_elt_type for this table. */
1737 
1738  switch (elts[pos].opcode)
1739  {
1740  case BINOP_VAL:
1741  case OP_COMPLEX:
1742  case OP_FLOAT:
1743  case OP_LONG:
1744  case OP_SCOPE:
1745  case OP_TYPE:
1746  case UNOP_CAST:
1747  case UNOP_MAX:
1748  case UNOP_MEMVAL:
1749  case UNOP_MIN:
1750  type = elts[pos + 1].type;
1751  break;
1752 
1753  case TYPE_INSTANCE:
1754  {
1755  LONGEST arg, nargs = elts[pos + 2].longconst;
1756 
1757  for (arg = 0; arg < nargs; arg++)
1758  {
1759  struct type *type = elts[pos + 3 + arg].type;
1760  struct objfile *objfile = TYPE_OBJFILE (type);
1761 
1762  if (objfile && (*objfile_func) (objfile, data))
1763  return 1;
1764  }
1765  }
1766  break;
1767 
1768  case OP_VAR_VALUE:
1769  {
1770  const struct block *const block = elts[pos + 1].block;
1771  const struct symbol *const symbol = elts[pos + 2].symbol;
1772 
1773  /* Check objfile where the variable itself is placed.
1774  SYMBOL_OBJ_SECTION (symbol) may be NULL. */
1775  if ((*objfile_func) (symbol_objfile (symbol), data))
1776  return 1;
1777 
1778  /* Check objfile where is placed the code touching the variable. */
1780 
1781  type = SYMBOL_TYPE (symbol);
1782  }
1783  break;
1784  case OP_VAR_MSYM_VALUE:
1785  objfile = elts[pos + 1].objfile;
1786  break;
1787  }
1788 
1789  /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1790 
1791  if (type && TYPE_OBJFILE (type)
1792  && (*objfile_func) (TYPE_OBJFILE (type), data))
1793  return 1;
1794  if (objfile && (*objfile_func) (objfile, data))
1795  return 1;
1796 
1797  return 0;
1798 }
1799 
1800 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1801  OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1802  passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1803  returns non-zero value then (any other) non-zero value is immediately
1804  returned to the caller. Otherwise zero is returned after iterating
1805  through whole EXP. */
1806 
1807 static int
1809  int (*objfile_func) (struct objfile *objfile, void *data),
1810  void *data)
1811 {
1812  int endpos;
1813 
1814  for (endpos = exp->nelts; endpos > 0; )
1815  {
1816  int pos, args, oplen = 0;
1817 
1818  operator_length (exp, endpos, &oplen, &args);
1819  gdb_assert (oplen > 0);
1820 
1821  pos = endpos - oplen;
1822  if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1823  objfile_func, data))
1824  return 1;
1825 
1826  endpos = pos;
1827  }
1828 
1829  return 0;
1830 }
1831 
1832 /* Helper for exp_uses_objfile. */
1833 
1834 static int
1835 exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1836 {
1837  struct objfile *objfile = (struct objfile *) objfile_voidp;
1838 
1839  if (exp_objfile->separate_debug_objfile_backlink)
1840  exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1841 
1842  return exp_objfile == objfile;
1843 }
1844 
1845 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1846  is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1847  file. */
1848 
1849 int
1851 {
1853 
1854  return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1855 }
1856 
1857 /* See definition in parser-defs.h. */
1858 
1859 void
1860 increase_expout_size (struct parser_state *ps, size_t lenelt)
1861 {
1862  if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1863  {
1864  ps->expout_size = std::max (ps->expout_size * 2,
1865  ps->expout_ptr + lenelt + 10);
1866  ps->expout.reset (XRESIZEVAR (expression,
1867  ps->expout.release (),
1868  (sizeof (struct expression)
1869  + EXP_ELEM_TO_BYTES (ps->expout_size))));
1870  }
1871 }
1872 
1873 void
1875 {
1876  type_stack.size = 0;
1877  type_stack.depth = 0;
1878  type_stack.elements = NULL;
1879 
1881  &expressiondebug,
1882  _("Set expression debugging."),
1883  _("Show expression debugging."),
1884  _("When non-zero, the internal representation "
1885  "of expressions will be printed."),
1886  NULL,
1890  &parser_debug,
1891  _("Set parser debugging."),
1892  _("Show parser debugging."),
1893  _("When non-zero, expression parser "
1894  "tracing will be enabled."),
1895  NULL,
1898 }
void error_no_arg(const char *why)
Definition: cli-cmds.c:185
#define TYPE_HIGH_BOUND_KIND(range_type)
Definition: gdbtypes.h:1252
const char * string
Definition: signals.c:50
int(* operator_check)(struct expression *exp, int pos, int(*objfile_func)(struct objfile *objfile, void *data), void *data)
Definition: parser-defs.h:338
union exp_element elts[1]
Definition: expression.h:84
type_instance_flags follow_type_instance_flags()
Definition: parse.c:1556
type_code
Definition: gdbtypes.h:80
int address_space_name_to_int(struct gdbarch *gdbarch, char *space_identifier)
Definition: gdbtypes.c:568
struct type * lookup_array_range_type(struct type *element_type, LONGEST low_bound, LONGEST high_bound)
Definition: gdbtypes.c:1232
struct internalvar * create_internalvar(const char *name)
Definition: value.c:2158
struct value * evaluate_subexpression_type(struct expression *exp, int subexp)
Definition: eval.c:166
int exp_uses_objfile(struct expression *exp, struct objfile *objfile)
Definition: parse.c:1850
void write_exp_elt_sym(struct parser_state *ps, struct symbol *expelt)
Definition: parse.c:215
const struct block * innermost_block
Definition: parse.c:71
enum exp_opcode opcode
Definition: expression.h:64
void push_type_stack(struct type_stack *stack)
Definition: parse.c:1503
bfd_vma CORE_ADDR
Definition: common-types.h:41
#define parse_gdbarch(ps)
Definition: parser-defs.h:35
bool parse_float(const char *p, int len, const struct type *type, gdb_byte *data)
Definition: parse.c:1331
void type_stack_cleanup(void *arg)
Definition: parse.c:1530
static expression_up parse_exp_in_context_1(const char **, CORE_ADDR, const struct block *, int, int, int *)
Definition: parse.c:1112
enum type_pieces pop_type(void)
Definition: parse.c:1451
gdb::unique_xmalloc_ptr< expression > expression_up
Definition: expression.h:87
const char * ptr
Definition: parser-defs.h:91
#define XNEWVAR(T, S)
Definition: poison.h:193
void xfree(void *)
struct objfile * separate_debug_objfile_backlink
Definition: objfiles.h:441
CORE_ADDR expression_context_pc
Definition: parse.c:70
static int process_reference(const char **string)
Definition: stabsread.c:567
int comma_terminates
Definition: parse.c:77
#define TYPE_OBJFILE(t)
Definition: gdbtypes.h:291
static void show_parserdebug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: parse.c:107
void(* func)(char *)
struct bfd_section * the_bfd_section
Definition: objfiles.h:126
#define BMSYMBOL_VALUE_ADDRESS(symbol)
Definition: symtab.h:691
struct type_stack * stack_val
Definition: parser-defs.h:156
static void write_exp_elt(struct parser_state *ps, const union exp_element *expelt)
Definition: parse.c:192
struct internalvar * lookup_only_internalvar(const char *name)
Definition: value.c:2123
expression_up parse_expression(const char *string)
Definition: parse.c:1237
#define TYPE_VOLATILE(t)
Definition: gdbtypes.h:315
enum language set_language(enum language lang)
Definition: language.c:379
void(* la_error)(const char *)
Definition: language.h:177
parser_state(size_t initial_size, const struct language_defn *lang, struct gdbarch *gdbarch)
Definition: parse.c:155
struct symtab_and_line get_current_source_symtab_and_line(void)
Definition: source.c:171
static std::vector< int > * funcall_chain
Definition: parse.c:127
static int exp_uses_objfile_iter(struct objfile *exp_objfile, void *objfile_voidp)
Definition: parse.c:1835
int end_arglist(void)
Definition: parse.c:143
int arglist_len
Definition: parse.c:72
const struct objfile_type * objfile_type(struct objfile *objfile)
Definition: gdbtypes.c:5363
void * memset(T *s, int c, size_t n)=delete
static struct type_stack * pop_type_stack(void)
Definition: parse.c:1479
const struct language_defn * language_defn
Definition: expression.h:80
const struct language_defn * language_def(enum language lang)
Definition: language.c:494
struct type * parse_expression_for_completion(const char *string, char **name, enum type_code *code)
Definition: parse.c:1270
int operator_check_standard(struct expression *exp, int pos, int(*objfile_func)(struct objfile *objfile, void *data), void *data)
Definition: parse.c:1723
struct symbol * block_linkage_function(const struct block *bl)
Definition: block.c:100
enum language la_language
Definition: language.h:144
Definition: c-exp.c:4864
struct type * nodebug_data_symbol
Definition: gdbtypes.h:1618
int parse_completion
Definition: parse.c:80
#define BLOCKVECTOR_BLOCK(blocklist, n)
Definition: block.h:125
struct block_symbol lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
Definition: symtab.c:1893
void push_type(enum type_pieces tp)
Definition: parse.c:1408
static int length_of_subexp(struct expression *expr, int endpos)
Definition: parse.c:807
static int expout_last_struct
Definition: parse.c:85
#define _(String)
Definition: gdb_locale.h:35
expression_up parse_expression_with_language(const char *string, enum language lang)
Definition: parse.c:1249
#define BLOCK_START(bl)
Definition: block.h:105
#define bits(obj, st, fn)
Definition: aarch64-tdep.c:64
#define BYTES_TO_EXP_ELEM(bytes)
Definition: expression.h:94
#define END_CATCH
struct objfile * symbol_objfile(const struct symbol *symbol)
Definition: symtab.c:5784
enum type_pieces piece
Definition: parser-defs.h:154
int longest_to_int(LONGEST)
Definition: valprint.c:1341
struct internalvar * internalvar
Definition: expression.h:73
struct symbol * symbol
Definition: expression.h:65
#define XNEW(T)
Definition: poison.h:109
struct type * type
Definition: expression.h:72
struct type * nodebug_text_gnu_ifunc_symbol
Definition: gdbtypes.h:1616
scoped_restore_tmpl< T > make_scoped_restore(T *var)
void push_type_int(int n)
Definition: parse.c:1415
#define MSYMBOL_OBJ_SECTION(objfile, symbol)
Definition: symtab.h:700
void add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:792
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
const char * lexptr
Definition: parse.c:74
#define TRY
const struct block * block
Definition: expression.h:74
#define MSYMBOL_VALUE_RAW_ADDRESS(symbol)
Definition: symtab.h:684
const char *const name
Definition: aarch64-tdep.c:76
void write_exp_elt_block(struct parser_state *ps, const struct block *b)
Definition: parse.c:235
#define SYMTAB_BLOCKVECTOR(symtab)
Definition: symtab.h:1334
const struct exp_descriptor * la_exp_desc
Definition: language.h:169
void write_exp_elt_longcst(struct parser_state *ps, LONGEST expelt)
Definition: parse.c:255
void dump_raw_expression(struct expression *exp, struct ui_file *stream, const char *note)
Definition: expprint.c:718
static unsigned int expressiondebug
Definition: parse.c:94
union type_stack_elt * elements
Definition: parser-defs.h:165
void insert_type(enum type_pieces tp)
Definition: parse.c:1386
#define CATCH(EXCEPTION, MASK)
struct type * lookup_rvalue_reference_type(struct type *type)
Definition: gdbtypes.c:478
void increase_expout_size(struct parser_state *ps, size_t lenelt)
Definition: parse.c:1860
type_pieces
Definition: parser-defs.h:137
static char * expout_completion_name
Definition: parse.c:91
struct target_ops current_target
struct type * follow_types(struct type *follow_type)
Definition: parse.c:1580
static struct parser_state * pstate
Definition: ada-exp.c:98
void dump_prefix_expression(struct expression *exp, struct ui_file *stream)
Definition: expprint.c:1139
objfile(bfd *, const char *, objfile_flags)
Definition: objfiles.c:373
int prefixify_expression(struct expression *expr)
Definition: parse.c:789
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
const struct block * block
Definition: symtab.h:1140
int pop_type_int(void)
Definition: parse.c:1459
void push_typelist(VEC(type_ptr) *list)
Definition: parse.c:1543
CORE_ADDR gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: gdbarch.c:3191
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2018
void vfprintf_unfiltered(struct ui_file *stream, const char *format, va_list args)
Definition: utils.c:1969
#define gdb_assert_not_reached(message)
Definition: gdb_assert.h:55
struct type * nodebug_tls_symbol
Definition: gdbtypes.h:1620
#define VEC_length(T, V)
Definition: vec.h:140
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
Definition: objfiles.c:445
expression_up parse_exp_1(const char **stringptr, CORE_ADDR pc, const struct block *block, int comma)
Definition: parse.c:1089
Definition: gdbtypes.h:749
bool target_float_from_string(gdb_byte *addr, const struct type *type, const std::string &string)
CORE_ADDR symbol_overlayed_address(CORE_ADDR address, struct obj_section *section)
Definition: symfile.c:3143
void write_dollar_variable(struct parser_state *ps, struct stoken str)
Definition: parse.c:594
struct gdbarch * get_current_arch(void)
Definition: arch-utils.c:798
const char * find_template_name_end(const char *p)
Definition: parse.c:690
int dump_subexp_body_standard(struct expression *exp, struct ui_file *stream, int elt)
Definition: expprint.c:795
void mark_struct_expression(struct parser_state *ps)
Definition: parse.c:544
void null_post_parser(expression_up *exp, int void_context_p)
Definition: parse.c:1319
struct type_stack * get_type_stack(void)
Definition: parse.c:1515
struct type * nodebug_got_plt_symbol
Definition: gdbtypes.h:1617
int(* la_parser)(struct parser_state *)
Definition: language.h:173
language_mode
Definition: language.h:468
gdb_byte floatconst[16]
Definition: expression.h:68
type * find_minsym_type_and_address(minimal_symbol *msymbol, struct objfile *objfile, CORE_ADDR *address_p)
Definition: parse.c:444
struct cmd_list_element * setdebuglist
Definition: cli-cmds.c:153
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
Definition: user-regs.c:130
void * xmalloc(YYSIZE_T)
#define XRESIZEVEC(T, P, N)
Definition: poison.h:169
struct symtab * symtab
Definition: symtab.h:1751
static void type_stack_reserve(struct type_stack *stack, int howmuch)
Definition: parse.c:1343
int parser_debug
Definition: parse.c:104
#define EXP_ELEM_TO_BYTES(elements)
Definition: expression.h:92
void write_exp_msymbol(struct parser_state *ps, struct bound_minimal_symbol bound_msym)
Definition: parse.c:531
int paren_depth
Definition: parse.c:76
static struct type_stack type_stack
Definition: parse.c:73
struct symbol * symbol
Definition: symtab.h:1136
#define gdb_assert(expr)
Definition: gdb_assert.h:32
static int prefixify_subexp(struct expression *, struct expression *, int, int)
Definition: parse.c:1022
Definition: block.h:60
Definition: value.c:169
expression_up release()
Definition: parse.c:169
char * extract_field_op(struct expression *exp, int *subexp)
Definition: eval.c:276
struct minimal_symbol * msymbol
Definition: expression.h:66
PTR xrealloc(PTR ptr, size_t size)
Definition: common-utils.c:52
struct type * nodebug_unknown_symbol
Definition: gdbtypes.h:1619
void write_exp_elt_opcode(struct parser_state *ps, enum exp_opcode expelt)
Definition: parse.c:205
void throw_exception(struct gdb_exception exception)
bfd_byte gdb_byte
Definition: common-types.h:38
void write_exp_elt_objfile(struct parser_state *ps, struct objfile *objfile)
Definition: parse.c:245
void insert_type_address_space(struct parser_state *pstate, char *string)
Definition: parse.c:1430
#define MSYMBOL_TYPE(msymbol)
Definition: symtab.h:680
struct type * make_cv_type(int cnst, int voltl, struct type *type, struct type **typeptr)
Definition: gdbtypes.c:691
T & emplace(Args &&... args)
Definition: gdb_optional.h:152
const struct language_defn * current_language
Definition: language.c:81
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
Definition: minsyms.c:928
void operator_length(const struct expression *expr, int endpos, int *oplenp, int *argsp)
Definition: parse.c:827
static void insert_into_type_stack(int slot, union type_stack_elt element)
Definition: parse.c:1368
void print_subexp_standard(struct expression *exp, int *pos, struct ui_file *stream, enum precedence prec)
Definition: expprint.c:58
CORE_ADDR target_translate_tls_address(struct objfile *objfile, CORE_ADDR offset)
Definition: target.c:801
static void check_type_stack_depth(void)
Definition: parse.c:1358
#define gdb_stderr
Definition: utils.h:344
static int exp_iterate(struct expression *exp, int(*objfile_func)(struct objfile *objfile, void *data), void *data)
Definition: parse.c:1808
void(* operator_length)(const struct expression *, int, int *, int *)
Definition: parser-defs.h:328
#define TYPE_INDEX_TYPE(type)
Definition: gdbtypes.h:1242
struct minimal_symbol * minsym
Definition: minsyms.h:34
void parser_fprintf(FILE *x, const char *y,...)
Definition: parse.c:1705
const char * prev_lexptr
Definition: parse.c:75
const struct exp_descriptor exp_descriptor_standard
Definition: parse.c:58
static enum type_code expout_tag_completion_type
Definition: parse.c:88
expression_up expout
Definition: parser-defs.h:59
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:569
struct bound_minimal_symbol lookup_bound_minimal_symbol(const char *name)
Definition: minsyms.c:430
int code
Definition: ser-unix.c:239
unsigned int stack
Definition: value.c:199
#define VEC_free(T, V)
Definition: vec.h:196
#define XRESIZEVAR(T, P, S)
Definition: poison.h:217
struct type * make_type_with_address_space(struct type *type, int space_flag)
Definition: gdbtypes.c:667
#define SYMBOL_LANGUAGE(symbol)
Definition: symtab.h:469
exp_opcode
Definition: expression.h:42
static expression_up parse_exp_in_context(const char **, CORE_ADDR, const struct block *, int, int, int *)
Definition: parse.c:1096
#define VEC_address(T, V)
Definition: vec.h:385
struct type_stack * append_type_stack(struct type_stack *to, struct type_stack *from)
Definition: parse.c:1489
struct objfile * objfile
Definition: expression.h:75
struct value * evaluate_subexp_standard(struct type *expect_type, struct expression *exp, int *pos, enum noside noside)
Definition: eval.c:1240
struct type * nodebug_text_symbol
Definition: gdbtypes.h:1615
void write_exp_elt_msym(struct parser_state *ps, minimal_symbol *expelt)
Definition: parse.c:225
LONGEST longconst
Definition: expression.h:67
void operator_length_standard(const struct expression *expr, int endpos, int *oplenp, int *argsp)
Definition: parse.c:837
const char * op_name_standard(enum exp_opcode opcode)
Definition: expprint.c:695
const struct block * get_selected_block(CORE_ADDR *addr_in_block)
Definition: stack.c:2216
const struct block * expression_context_block
Definition: parse.c:69
enum overlay_debugging_state overlay_debugging
Definition: symfile.c:2970
struct typed_stoken * tokens
Definition: parser-defs.h:109
static void show_expressiondebug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: parse.c:96
language
Definition: defs.h:203
struct objfile * lookup_objfile_from_block(const struct block *block)
Definition: symtab.c:2164
#define gdb_stdlog
Definition: utils.h:349
struct type * lookup_function_type_with_arguments(struct type *type, int nparams, struct type **param_types)
Definition: gdbtypes.c:529
struct type * value_type(const struct value *value)
Definition: value.c:1095
range_type
Definition: expression.h:161
#define SYMBOL_TYPE(symbol)
Definition: symtab.h:1161
struct cmd_list_element * showdebuglist
Definition: cli-cmds.c:155
void mark_completion_tag(enum type_code tag, const char *ptr, int length)
Definition: parse.c:556
void start_arglist(void)
Definition: parse.c:133
struct objfile * objfile
Definition: minsyms.h:39
#define HOST_CHAR_BIT
Definition: host-defs.h:40
void _initialize_parse(void)
Definition: parse.c:1874
minimal_symbol_type
Definition: symtab.h:579
void write_exp_elt_intern(struct parser_state *ps, struct internalvar *expelt)
Definition: parse.c:287
static VEC(type_ptr)
Definition: parse.c:1469
void write_exp_elt_floatcst(struct parser_state *ps, const gdb_byte expelt[16])
Definition: parse.c:265
#define TYPE_CONST(t)
Definition: gdbtypes.h:310
void write_exp_string(struct parser_state *ps, struct stoken str)
Definition: parse.c:318
void write_exp_elt_type(struct parser_state *ps, struct type *expelt)
Definition: parse.c:277
struct type * lookup_lvalue_reference_type(struct type *type)
Definition: gdbtypes.c:470
void write_exp_bitstring(struct parser_state *ps, struct stoken str)
Definition: parse.c:413
void error(const char *fmt,...)
Definition: errors.c:38
void write_exp_string_vector(struct parser_state *ps, int type, struct stoken_vector *vec)
Definition: parse.c:360
struct type * lookup_pointer_type(struct type *type)
Definition: gdbtypes.c:381
void(* la_post_parser)(expression_up *expp, int void_context_p)
Definition: language.h:185
long long LONGEST
Definition: common-types.h:52
size_t expout_ptr
Definition: parser-defs.h:64
struct type * lookup_function_type(struct type *type)
Definition: gdbtypes.c:519
int length
Definition: parser-defs.h:93
char * copy_name(struct stoken token)
Definition: parse.c:761