xref: /freebsd-12.1/contrib/gdb/gdb/parse.c (revision 6b926c8f)
1 /* Parse expressions for GDB.
2    Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3    1998, 1999, 2000, 2001 Free Software Foundation, Inc.
4    Modified from expread.y by the Department of Computer Science at the
5    State University of New York at Buffalo, 1991.
6 
7    This file is part of GDB.
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23 
24 /* Parse an expression from text in a string,
25    and return the result as a  struct expression  pointer.
26    That structure contains arithmetic operations in reverse polish,
27    with constants represented by operations that are followed by special data.
28    See expression.h for the details of the format.
29    What is important here is that it can be built up sequentially
30    during the process of parsing; the lower levels of the tree always
31    come first in the result.  */
32 
33 #include <ctype.h>
34 
35 #include "defs.h"
36 #include "gdb_string.h"
37 #include "symtab.h"
38 #include "gdbtypes.h"
39 #include "frame.h"
40 #include "expression.h"
41 #include "value.h"
42 #include "command.h"
43 #include "language.h"
44 #include "parser-defs.h"
45 #include "gdbcmd.h"
46 #include "symfile.h"		/* for overlay functions */
47 #include "inferior.h"		/* for NUM_PSEUDO_REGS.  NOTE: replace
48 				   with "gdbarch.h" when appropriate.  */
49 #include "doublest.h"
50 #include "gdb_assert.h"
51 #include "block.h"
52 
53 /* Standard set of definitions for printing, dumping, prefixifying,
54  * and evaluating expressions.  */
55 
56 const struct exp_descriptor exp_descriptor_standard =
57   {
58     print_subexp_standard,
59     operator_length_standard,
60     op_name_standard,
61     dump_subexp_body_standard,
62     evaluate_subexp_standard
63   };
64 
65 /* Symbols which architectures can redefine.  */
66 
67 /* Some systems have routines whose names start with `$'.  Giving this
68    macro a non-zero value tells GDB's expression parser to check for
69    such routines when parsing tokens that begin with `$'.
70 
71    On HP-UX, certain system routines (millicode) have names beginning
72    with `$' or `$$'.  For example, `$$dyncall' is a millicode routine
73    that handles inter-space procedure calls on PA-RISC.  */
74 #ifndef SYMBOLS_CAN_START_WITH_DOLLAR
75 #define SYMBOLS_CAN_START_WITH_DOLLAR (0)
76 #endif
77 
78 
79 
80 /* Global variables declared in parser-defs.h (and commented there).  */
81 struct expression *expout;
82 int expout_size;
83 int expout_ptr;
84 struct block *expression_context_block;
85 CORE_ADDR expression_context_pc;
86 struct block *innermost_block;
87 int arglist_len;
88 union type_stack_elt *type_stack;
89 int type_stack_depth, type_stack_size;
90 char *lexptr;
91 char *prev_lexptr;
92 char *namecopy;
93 int paren_depth;
94 int comma_terminates;
95 
96 static int expressiondebug = 0;
97 
98 extern int hp_som_som_object_present;
99 
100 static void free_funcalls (void *ignore);
101 
102 static void prefixify_expression (struct expression *);
103 
104 static void prefixify_subexp (struct expression *, struct expression *, int,
105 			      int);
106 
107 void _initialize_parse (void);
108 
109 /* Data structure for saving values of arglist_len for function calls whose
110    arguments contain other function calls.  */
111 
112 struct funcall
113   {
114     struct funcall *next;
115     int arglist_len;
116   };
117 
118 static struct funcall *funcall_chain;
119 
120 /* Begin counting arguments for a function call,
121    saving the data about any containing call.  */
122 
123 void
start_arglist(void)124 start_arglist (void)
125 {
126   struct funcall *new;
127 
128   new = (struct funcall *) xmalloc (sizeof (struct funcall));
129   new->next = funcall_chain;
130   new->arglist_len = arglist_len;
131   arglist_len = 0;
132   funcall_chain = new;
133 }
134 
135 /* Return the number of arguments in a function call just terminated,
136    and restore the data for the containing function call.  */
137 
138 int
end_arglist(void)139 end_arglist (void)
140 {
141   int val = arglist_len;
142   struct funcall *call = funcall_chain;
143   funcall_chain = call->next;
144   arglist_len = call->arglist_len;
145   xfree (call);
146   return val;
147 }
148 
149 /* Free everything in the funcall chain.
150    Used when there is an error inside parsing.  */
151 
152 static void
free_funcalls(void * ignore)153 free_funcalls (void *ignore)
154 {
155   struct funcall *call, *next;
156 
157   for (call = funcall_chain; call; call = next)
158     {
159       next = call->next;
160       xfree (call);
161     }
162 }
163 
164 /* This page contains the functions for adding data to the  struct expression
165    being constructed.  */
166 
167 /* Add one element to the end of the expression.  */
168 
169 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
170    a register through here */
171 
172 void
write_exp_elt(union exp_element expelt)173 write_exp_elt (union exp_element expelt)
174 {
175   if (expout_ptr >= expout_size)
176     {
177       expout_size *= 2;
178       expout = (struct expression *)
179 	xrealloc ((char *) expout, sizeof (struct expression)
180 		  + EXP_ELEM_TO_BYTES (expout_size));
181     }
182   expout->elts[expout_ptr++] = expelt;
183 }
184 
185 void
write_exp_elt_opcode(enum exp_opcode expelt)186 write_exp_elt_opcode (enum exp_opcode expelt)
187 {
188   union exp_element tmp;
189 
190   tmp.opcode = expelt;
191 
192   write_exp_elt (tmp);
193 }
194 
195 void
write_exp_elt_sym(struct symbol * expelt)196 write_exp_elt_sym (struct symbol *expelt)
197 {
198   union exp_element tmp;
199 
200   tmp.symbol = expelt;
201 
202   write_exp_elt (tmp);
203 }
204 
205 void
write_exp_elt_block(struct block * b)206 write_exp_elt_block (struct block *b)
207 {
208   union exp_element tmp;
209   tmp.block = b;
210   write_exp_elt (tmp);
211 }
212 
213 void
write_exp_elt_longcst(LONGEST expelt)214 write_exp_elt_longcst (LONGEST expelt)
215 {
216   union exp_element tmp;
217 
218   tmp.longconst = expelt;
219 
220   write_exp_elt (tmp);
221 }
222 
223 void
write_exp_elt_dblcst(DOUBLEST expelt)224 write_exp_elt_dblcst (DOUBLEST expelt)
225 {
226   union exp_element tmp;
227 
228   tmp.doubleconst = expelt;
229 
230   write_exp_elt (tmp);
231 }
232 
233 void
write_exp_elt_type(struct type * expelt)234 write_exp_elt_type (struct type *expelt)
235 {
236   union exp_element tmp;
237 
238   tmp.type = expelt;
239 
240   write_exp_elt (tmp);
241 }
242 
243 void
write_exp_elt_intern(struct internalvar * expelt)244 write_exp_elt_intern (struct internalvar *expelt)
245 {
246   union exp_element tmp;
247 
248   tmp.internalvar = expelt;
249 
250   write_exp_elt (tmp);
251 }
252 
253 /* Add a string constant to the end of the expression.
254 
255    String constants are stored by first writing an expression element
256    that contains the length of the string, then stuffing the string
257    constant itself into however many expression elements are needed
258    to hold it, and then writing another expression element that contains
259    the length of the string.  I.E. an expression element at each end of
260    the string records the string length, so you can skip over the
261    expression elements containing the actual string bytes from either
262    end of the string.  Note that this also allows gdb to handle
263    strings with embedded null bytes, as is required for some languages.
264 
265    Don't be fooled by the fact that the string is null byte terminated,
266    this is strictly for the convenience of debugging gdb itself.  Gdb
267    Gdb does not depend up the string being null terminated, since the
268    actual length is recorded in expression elements at each end of the
269    string.  The null byte is taken into consideration when computing how
270    many expression elements are required to hold the string constant, of
271    course. */
272 
273 
274 void
write_exp_string(struct stoken str)275 write_exp_string (struct stoken str)
276 {
277   int len = str.length;
278   int lenelt;
279   char *strdata;
280 
281   /* Compute the number of expression elements required to hold the string
282      (including a null byte terminator), along with one expression element
283      at each end to record the actual string length (not including the
284      null byte terminator). */
285 
286   lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
287 
288   /* Ensure that we have enough available expression elements to store
289      everything. */
290 
291   if ((expout_ptr + lenelt) >= expout_size)
292     {
293       expout_size = max (expout_size * 2, expout_ptr + lenelt + 10);
294       expout = (struct expression *)
295 	xrealloc ((char *) expout, (sizeof (struct expression)
296 				    + EXP_ELEM_TO_BYTES (expout_size)));
297     }
298 
299   /* Write the leading length expression element (which advances the current
300      expression element index), then write the string constant followed by a
301      terminating null byte, and then write the trailing length expression
302      element. */
303 
304   write_exp_elt_longcst ((LONGEST) len);
305   strdata = (char *) &expout->elts[expout_ptr];
306   memcpy (strdata, str.ptr, len);
307   *(strdata + len) = '\0';
308   expout_ptr += lenelt - 2;
309   write_exp_elt_longcst ((LONGEST) len);
310 }
311 
312 /* Add a bitstring constant to the end of the expression.
313 
314    Bitstring constants are stored by first writing an expression element
315    that contains the length of the bitstring (in bits), then stuffing the
316    bitstring constant itself into however many expression elements are
317    needed to hold it, and then writing another expression element that
318    contains the length of the bitstring.  I.E. an expression element at
319    each end of the bitstring records the bitstring length, so you can skip
320    over the expression elements containing the actual bitstring bytes from
321    either end of the bitstring. */
322 
323 void
write_exp_bitstring(struct stoken str)324 write_exp_bitstring (struct stoken str)
325 {
326   int bits = str.length;	/* length in bits */
327   int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
328   int lenelt;
329   char *strdata;
330 
331   /* Compute the number of expression elements required to hold the bitstring,
332      along with one expression element at each end to record the actual
333      bitstring length in bits. */
334 
335   lenelt = 2 + BYTES_TO_EXP_ELEM (len);
336 
337   /* Ensure that we have enough available expression elements to store
338      everything. */
339 
340   if ((expout_ptr + lenelt) >= expout_size)
341     {
342       expout_size = max (expout_size * 2, expout_ptr + lenelt + 10);
343       expout = (struct expression *)
344 	xrealloc ((char *) expout, (sizeof (struct expression)
345 				    + EXP_ELEM_TO_BYTES (expout_size)));
346     }
347 
348   /* Write the leading length expression element (which advances the current
349      expression element index), then write the bitstring constant, and then
350      write the trailing length expression element. */
351 
352   write_exp_elt_longcst ((LONGEST) bits);
353   strdata = (char *) &expout->elts[expout_ptr];
354   memcpy (strdata, str.ptr, len);
355   expout_ptr += lenelt - 2;
356   write_exp_elt_longcst ((LONGEST) bits);
357 }
358 
359 /* Add the appropriate elements for a minimal symbol to the end of
360    the expression.  The rationale behind passing in text_symbol_type and
361    data_symbol_type was so that Modula-2 could pass in WORD for
362    data_symbol_type.  Perhaps it still is useful to have those types vary
363    based on the language, but they no longer have names like "int", so
364    the initial rationale is gone.  */
365 
366 static struct type *msym_text_symbol_type;
367 static struct type *msym_data_symbol_type;
368 static struct type *msym_unknown_symbol_type;
369 
370 void
write_exp_msymbol(struct minimal_symbol * msymbol,struct type * text_symbol_type,struct type * data_symbol_type)371 write_exp_msymbol (struct minimal_symbol *msymbol,
372 		   struct type *text_symbol_type,
373 		   struct type *data_symbol_type)
374 {
375   CORE_ADDR addr;
376 
377   write_exp_elt_opcode (OP_LONG);
378   /* Let's make the type big enough to hold a 64-bit address.  */
379   write_exp_elt_type (builtin_type_CORE_ADDR);
380 
381   addr = SYMBOL_VALUE_ADDRESS (msymbol);
382   if (overlay_debugging)
383     addr = symbol_overlayed_address (addr, SYMBOL_BFD_SECTION (msymbol));
384   write_exp_elt_longcst ((LONGEST) addr);
385 
386   write_exp_elt_opcode (OP_LONG);
387 
388   write_exp_elt_opcode (UNOP_MEMVAL);
389   switch (msymbol->type)
390     {
391     case mst_text:
392     case mst_file_text:
393     case mst_solib_trampoline:
394       write_exp_elt_type (msym_text_symbol_type);
395       break;
396 
397     case mst_data:
398     case mst_file_data:
399     case mst_bss:
400     case mst_file_bss:
401       write_exp_elt_type (msym_data_symbol_type);
402       break;
403 
404     default:
405       write_exp_elt_type (msym_unknown_symbol_type);
406       break;
407     }
408   write_exp_elt_opcode (UNOP_MEMVAL);
409 }
410 
411 /* Recognize tokens that start with '$'.  These include:
412 
413    $regname     A native register name or a "standard
414    register name".
415 
416    $variable    A convenience variable with a name chosen
417    by the user.
418 
419    $digits              Value history with index <digits>, starting
420    from the first value which has index 1.
421 
422    $$digits     Value history with index <digits> relative
423    to the last value.  I.E. $$0 is the last
424    value, $$1 is the one previous to that, $$2
425    is the one previous to $$1, etc.
426 
427    $ | $0 | $$0 The last value in the value history.
428 
429    $$           An abbreviation for the second to the last
430    value in the value history, I.E. $$1
431 
432  */
433 
434 void
write_dollar_variable(struct stoken str)435 write_dollar_variable (struct stoken str)
436 {
437   /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
438      and $$digits (equivalent to $<-digits> if you could type that). */
439 
440   int negate = 0;
441   int i = 1;
442   /* Double dollar means negate the number and add -1 as well.
443      Thus $$ alone means -1.  */
444   if (str.length >= 2 && str.ptr[1] == '$')
445     {
446       negate = 1;
447       i = 2;
448     }
449   if (i == str.length)
450     {
451       /* Just dollars (one or two) */
452       i = -negate;
453       goto handle_last;
454     }
455   /* Is the rest of the token digits?  */
456   for (; i < str.length; i++)
457     if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
458       break;
459   if (i == str.length)
460     {
461       i = atoi (str.ptr + 1 + negate);
462       if (negate)
463 	i = -i;
464       goto handle_last;
465     }
466 
467   /* Handle tokens that refer to machine registers:
468      $ followed by a register name.  */
469   i = frame_map_name_to_regnum (deprecated_selected_frame,
470 				str.ptr + 1, str.length - 1);
471   if (i >= 0)
472     goto handle_register;
473 
474   if (SYMBOLS_CAN_START_WITH_DOLLAR)
475     {
476       struct symbol *sym = NULL;
477       struct minimal_symbol *msym = NULL;
478 
479       /* On HP-UX, certain system routines (millicode) have names beginning
480 	 with $ or $$, e.g. $$dyncall, which handles inter-space procedure
481 	 calls on PA-RISC. Check for those, first. */
482 
483       /* This code is not enabled on non HP-UX systems, since worst case
484 	 symbol table lookup performance is awful, to put it mildly. */
485 
486       sym = lookup_symbol (copy_name (str), (struct block *) NULL,
487 			   VAR_DOMAIN, (int *) NULL, (struct symtab **) NULL);
488       if (sym)
489 	{
490 	  write_exp_elt_opcode (OP_VAR_VALUE);
491 	  write_exp_elt_block (block_found);	/* set by lookup_symbol */
492 	  write_exp_elt_sym (sym);
493 	  write_exp_elt_opcode (OP_VAR_VALUE);
494 	  return;
495 	}
496       msym = lookup_minimal_symbol (copy_name (str), NULL, NULL);
497       if (msym)
498 	{
499 	  write_exp_msymbol (msym,
500 			     lookup_function_type (builtin_type_int),
501 			     builtin_type_int);
502 	  return;
503 	}
504     }
505 
506   /* Any other names starting in $ are debugger internal variables.  */
507 
508   write_exp_elt_opcode (OP_INTERNALVAR);
509   write_exp_elt_intern (lookup_internalvar (copy_name (str) + 1));
510   write_exp_elt_opcode (OP_INTERNALVAR);
511   return;
512 handle_last:
513   write_exp_elt_opcode (OP_LAST);
514   write_exp_elt_longcst ((LONGEST) i);
515   write_exp_elt_opcode (OP_LAST);
516   return;
517 handle_register:
518   write_exp_elt_opcode (OP_REGISTER);
519   write_exp_elt_longcst (i);
520   write_exp_elt_opcode (OP_REGISTER);
521   return;
522 }
523 
524 
525 /* Parse a string that is possibly a namespace / nested class
526    specification, i.e., something of the form A::B::C::x.  Input
527    (NAME) is the entire string; LEN is the current valid length; the
528    output is a string, TOKEN, which points to the largest recognized
529    prefix which is a series of namespaces or classes.  CLASS_PREFIX is
530    another output, which records whether a nested class spec was
531    recognized (= 1) or a fully qualified variable name was found (=
532    0).  ARGPTR is side-effected (if non-NULL) to point to beyond the
533    string recognized and consumed by this routine.
534 
535    The return value is a pointer to the symbol for the base class or
536    variable if found, or NULL if not found.  Callers must check this
537    first -- if NULL, the outputs may not be correct.
538 
539    This function is used c-exp.y.  This is used specifically to get
540    around HP aCC (and possibly other compilers), which insists on
541    generating names with embedded colons for namespace or nested class
542    members.
543 
544    (Argument LEN is currently unused. 1997-08-27)
545 
546    Callers must free memory allocated for the output string TOKEN.  */
547 
548 static const char coloncolon[2] =
549 {':', ':'};
550 
551 struct symbol *
parse_nested_classes_for_hpacc(char * name,int len,char ** token,int * class_prefix,char ** argptr)552 parse_nested_classes_for_hpacc (char *name, int len, char **token,
553 				int *class_prefix, char **argptr)
554 {
555   /* Comment below comes from decode_line_1 which has very similar
556      code, which is called for "break" command parsing. */
557 
558   /* We have what looks like a class or namespace
559      scope specification (A::B), possibly with many
560      levels of namespaces or classes (A::B::C::D).
561 
562      Some versions of the HP ANSI C++ compiler (as also possibly
563      other compilers) generate class/function/member names with
564      embedded double-colons if they are inside namespaces. To
565      handle this, we loop a few times, considering larger and
566      larger prefixes of the string as though they were single
567      symbols.  So, if the initially supplied string is
568      A::B::C::D::foo, we have to look up "A", then "A::B",
569      then "A::B::C", then "A::B::C::D", and finally
570      "A::B::C::D::foo" as single, monolithic symbols, because
571      A, B, C or D may be namespaces.
572 
573      Note that namespaces can nest only inside other
574      namespaces, and not inside classes.  So we need only
575      consider *prefixes* of the string; there is no need to look up
576      "B::C" separately as a symbol in the previous example. */
577 
578   char *p;
579   char *start, *end;
580   char *prefix = NULL;
581   char *tmp;
582   struct symbol *sym_class = NULL;
583   struct symbol *sym_var = NULL;
584   struct type *t;
585   int prefix_len = 0;
586   int done = 0;
587   char *q;
588 
589   /* Check for HP-compiled executable -- in other cases
590      return NULL, and caller must default to standard GDB
591      behaviour. */
592 
593   if (!hp_som_som_object_present)
594     return (struct symbol *) NULL;
595 
596   p = name;
597 
598   /* Skip over whitespace and possible global "::" */
599   while (*p && (*p == ' ' || *p == '\t'))
600     p++;
601   if (p[0] == ':' && p[1] == ':')
602     p += 2;
603   while (*p && (*p == ' ' || *p == '\t'))
604     p++;
605 
606   while (1)
607     {
608       /* Get to the end of the next namespace or class spec. */
609       /* If we're looking at some non-token, fail immediately */
610       start = p;
611       if (!(isalpha (*p) || *p == '$' || *p == '_'))
612 	return (struct symbol *) NULL;
613       p++;
614       while (*p && (isalnum (*p) || *p == '$' || *p == '_'))
615 	p++;
616 
617       if (*p == '<')
618 	{
619 	  /* If we have the start of a template specification,
620 	     scan right ahead to its end */
621 	  q = find_template_name_end (p);
622 	  if (q)
623 	    p = q;
624 	}
625 
626       end = p;
627 
628       /* Skip over "::" and whitespace for next time around */
629       while (*p && (*p == ' ' || *p == '\t'))
630 	p++;
631       if (p[0] == ':' && p[1] == ':')
632 	p += 2;
633       while (*p && (*p == ' ' || *p == '\t'))
634 	p++;
635 
636       /* Done with tokens? */
637       if (!*p || !(isalpha (*p) || *p == '$' || *p == '_'))
638 	done = 1;
639 
640       tmp = (char *) alloca (prefix_len + end - start + 3);
641       if (prefix)
642 	{
643 	  memcpy (tmp, prefix, prefix_len);
644 	  memcpy (tmp + prefix_len, coloncolon, 2);
645 	  memcpy (tmp + prefix_len + 2, start, end - start);
646 	  tmp[prefix_len + 2 + end - start] = '\000';
647 	}
648       else
649 	{
650 	  memcpy (tmp, start, end - start);
651 	  tmp[end - start] = '\000';
652 	}
653 
654       prefix = tmp;
655       prefix_len = strlen (prefix);
656 
657       /* See if the prefix we have now is something we know about */
658 
659       if (!done)
660 	{
661 	  /* More tokens to process, so this must be a class/namespace */
662 	  sym_class = lookup_symbol (prefix, 0, STRUCT_DOMAIN,
663 				     0, (struct symtab **) NULL);
664 	}
665       else
666 	{
667 	  /* No more tokens, so try as a variable first */
668 	  sym_var = lookup_symbol (prefix, 0, VAR_DOMAIN,
669 				   0, (struct symtab **) NULL);
670 	  /* If failed, try as class/namespace */
671 	  if (!sym_var)
672 	    sym_class = lookup_symbol (prefix, 0, STRUCT_DOMAIN,
673 				       0, (struct symtab **) NULL);
674 	}
675 
676       if (sym_var ||
677 	  (sym_class &&
678 	   (t = check_typedef (SYMBOL_TYPE (sym_class)),
679 	    (TYPE_CODE (t) == TYPE_CODE_STRUCT
680 	     || TYPE_CODE (t) == TYPE_CODE_UNION))))
681 	{
682 	  /* We found a valid token */
683 	  *token = (char *) xmalloc (prefix_len + 1);
684 	  memcpy (*token, prefix, prefix_len);
685 	  (*token)[prefix_len] = '\000';
686 	  break;
687 	}
688 
689       /* No variable or class/namespace found, no more tokens */
690       if (done)
691 	return (struct symbol *) NULL;
692     }
693 
694   /* Out of loop, so we must have found a valid token */
695   if (sym_var)
696     *class_prefix = 0;
697   else
698     *class_prefix = 1;
699 
700   if (argptr)
701     *argptr = done ? p : end;
702 
703   return sym_var ? sym_var : sym_class;		/* found */
704 }
705 
706 char *
find_template_name_end(char * p)707 find_template_name_end (char *p)
708 {
709   int depth = 1;
710   int just_seen_right = 0;
711   int just_seen_colon = 0;
712   int just_seen_space = 0;
713 
714   if (!p || (*p != '<'))
715     return 0;
716 
717   while (*++p)
718     {
719       switch (*p)
720 	{
721 	case '\'':
722 	case '\"':
723 	case '{':
724 	case '}':
725 	  /* In future, may want to allow these?? */
726 	  return 0;
727 	case '<':
728 	  depth++;		/* start nested template */
729 	  if (just_seen_colon || just_seen_right || just_seen_space)
730 	    return 0;		/* but not after : or :: or > or space */
731 	  break;
732 	case '>':
733 	  if (just_seen_colon || just_seen_right)
734 	    return 0;		/* end a (nested?) template */
735 	  just_seen_right = 1;	/* but not after : or :: */
736 	  if (--depth == 0)	/* also disallow >>, insist on > > */
737 	    return ++p;		/* if outermost ended, return */
738 	  break;
739 	case ':':
740 	  if (just_seen_space || (just_seen_colon > 1))
741 	    return 0;		/* nested class spec coming up */
742 	  just_seen_colon++;	/* we allow :: but not :::: */
743 	  break;
744 	case ' ':
745 	  break;
746 	default:
747 	  if (!((*p >= 'a' && *p <= 'z') ||	/* allow token chars */
748 		(*p >= 'A' && *p <= 'Z') ||
749 		(*p >= '0' && *p <= '9') ||
750 		(*p == '_') || (*p == ',') ||	/* commas for template args */
751 		(*p == '&') || (*p == '*') ||	/* pointer and ref types */
752 		(*p == '(') || (*p == ')') ||	/* function types */
753 		(*p == '[') || (*p == ']')))	/* array types */
754 	    return 0;
755 	}
756       if (*p != ' ')
757 	just_seen_space = 0;
758       if (*p != ':')
759 	just_seen_colon = 0;
760       if (*p != '>')
761 	just_seen_right = 0;
762     }
763   return 0;
764 }
765 
766 
767 
768 /* Return a null-terminated temporary copy of the name
769    of a string token.  */
770 
771 char *
copy_name(struct stoken token)772 copy_name (struct stoken token)
773 {
774   memcpy (namecopy, token.ptr, token.length);
775   namecopy[token.length] = 0;
776   return namecopy;
777 }
778 
779 /* Reverse an expression from suffix form (in which it is constructed)
780    to prefix form (in which we can conveniently print or execute it).  */
781 
782 static void
prefixify_expression(struct expression * expr)783 prefixify_expression (struct expression *expr)
784 {
785   int len =
786   sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
787   struct expression *temp;
788   int inpos = expr->nelts, outpos = 0;
789 
790   temp = (struct expression *) alloca (len);
791 
792   /* Copy the original expression into temp.  */
793   memcpy (temp, expr, len);
794 
795   prefixify_subexp (temp, expr, inpos, outpos);
796 }
797 
798 /* Return the number of exp_elements in the postfix subexpression
799    of EXPR whose operator is at index ENDPOS - 1 in EXPR.  */
800 
801 int
length_of_subexp(struct expression * expr,int endpos)802 length_of_subexp (struct expression *expr, int endpos)
803 {
804   int oplen, args, i;
805 
806   operator_length (expr, endpos, &oplen, &args);
807 
808   while (args > 0)
809     {
810       oplen += length_of_subexp (expr, endpos - oplen);
811       args--;
812     }
813 
814   return oplen;
815 }
816 
817 /* Sets *OPLENP to the length of the operator whose (last) index is
818    ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
819    operator takes.  */
820 
821 void
operator_length(struct expression * expr,int endpos,int * oplenp,int * argsp)822 operator_length (struct expression *expr, int endpos, int *oplenp, int *argsp)
823 {
824   expr->language_defn->la_exp_desc->operator_length (expr, endpos,
825 						     oplenp, argsp);
826 }
827 
828 /* Default value for operator_length in exp_descriptor vectors.  */
829 
830 void
operator_length_standard(struct expression * expr,int endpos,int * oplenp,int * argsp)831 operator_length_standard (struct expression *expr, int endpos,
832 			  int *oplenp, int *argsp)
833 {
834   int oplen = 1;
835   int args = 0;
836   int i;
837 
838   if (endpos < 1)
839     error ("?error in operator_length_standard");
840 
841   i = (int) expr->elts[endpos - 1].opcode;
842 
843   switch (i)
844     {
845       /* C++  */
846     case OP_SCOPE:
847       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
848       oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
849       break;
850 
851     case OP_LONG:
852     case OP_DOUBLE:
853     case OP_VAR_VALUE:
854       oplen = 4;
855       break;
856 
857     case OP_TYPE:
858     case OP_BOOL:
859     case OP_LAST:
860     case OP_REGISTER:
861     case OP_INTERNALVAR:
862       oplen = 3;
863       break;
864 
865     case OP_COMPLEX:
866       oplen = 1;
867       args = 2;
868       break;
869 
870     case OP_FUNCALL:
871     case OP_F77_UNDETERMINED_ARGLIST:
872       oplen = 3;
873       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
874       break;
875 
876     case OP_OBJC_MSGCALL:	/* Objective C message (method) call */
877       oplen = 4;
878       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
879       break;
880 
881     case UNOP_MAX:
882     case UNOP_MIN:
883       oplen = 3;
884       break;
885 
886     case BINOP_VAL:
887     case UNOP_CAST:
888     case UNOP_MEMVAL:
889       oplen = 3;
890       args = 1;
891       break;
892 
893     case UNOP_ABS:
894     case UNOP_CAP:
895     case UNOP_CHR:
896     case UNOP_FLOAT:
897     case UNOP_HIGH:
898     case UNOP_ODD:
899     case UNOP_ORD:
900     case UNOP_TRUNC:
901       oplen = 1;
902       args = 1;
903       break;
904 
905     case OP_LABELED:
906     case STRUCTOP_STRUCT:
907     case STRUCTOP_PTR:
908       args = 1;
909       /* fall through */
910     case OP_M2_STRING:
911     case OP_STRING:
912     case OP_OBJC_NSSTRING:	/* Objective C Foundation Class NSString constant */
913     case OP_OBJC_SELECTOR:	/* Objective C "@selector" pseudo-op */
914     case OP_NAME:
915     case OP_EXPRSTRING:
916       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
917       oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
918       break;
919 
920     case OP_BITSTRING:
921       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
922       oplen = (oplen + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
923       oplen = 4 + BYTES_TO_EXP_ELEM (oplen);
924       break;
925 
926     case OP_ARRAY:
927       oplen = 4;
928       args = longest_to_int (expr->elts[endpos - 2].longconst);
929       args -= longest_to_int (expr->elts[endpos - 3].longconst);
930       args += 1;
931       break;
932 
933     case TERNOP_COND:
934     case TERNOP_SLICE:
935     case TERNOP_SLICE_COUNT:
936       args = 3;
937       break;
938 
939       /* Modula-2 */
940     case MULTI_SUBSCRIPT:
941       oplen = 3;
942       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
943       break;
944 
945     case BINOP_ASSIGN_MODIFY:
946       oplen = 3;
947       args = 2;
948       break;
949 
950       /* C++ */
951     case OP_THIS:
952     case OP_OBJC_SELF:
953       oplen = 2;
954       break;
955 
956     default:
957       args = 1 + (i < (int) BINOP_END);
958     }
959 
960   *oplenp = oplen;
961   *argsp = args;
962 }
963 
964 /* Copy the subexpression ending just before index INEND in INEXPR
965    into OUTEXPR, starting at index OUTBEG.
966    In the process, convert it from suffix to prefix form.  */
967 
968 static void
prefixify_subexp(struct expression * inexpr,struct expression * outexpr,int inend,int outbeg)969 prefixify_subexp (struct expression *inexpr,
970 		  struct expression *outexpr, int inend, int outbeg)
971 {
972   int oplen;
973   int args;
974   int i;
975   int *arglens;
976   enum exp_opcode opcode;
977 
978   operator_length (inexpr, inend, &oplen, &args);
979 
980   /* Copy the final operator itself, from the end of the input
981      to the beginning of the output.  */
982   inend -= oplen;
983   memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
984 	  EXP_ELEM_TO_BYTES (oplen));
985   outbeg += oplen;
986 
987   /* Find the lengths of the arg subexpressions.  */
988   arglens = (int *) alloca (args * sizeof (int));
989   for (i = args - 1; i >= 0; i--)
990     {
991       oplen = length_of_subexp (inexpr, inend);
992       arglens[i] = oplen;
993       inend -= oplen;
994     }
995 
996   /* Now copy each subexpression, preserving the order of
997      the subexpressions, but prefixifying each one.
998      In this loop, inend starts at the beginning of
999      the expression this level is working on
1000      and marches forward over the arguments.
1001      outbeg does similarly in the output.  */
1002   for (i = 0; i < args; i++)
1003     {
1004       oplen = arglens[i];
1005       inend += oplen;
1006       prefixify_subexp (inexpr, outexpr, inend, outbeg);
1007       outbeg += oplen;
1008     }
1009 }
1010 
1011 /* This page contains the two entry points to this file.  */
1012 
1013 /* Read an expression from the string *STRINGPTR points to,
1014    parse it, and return a pointer to a  struct expression  that we malloc.
1015    Use block BLOCK as the lexical context for variable names;
1016    if BLOCK is zero, use the block of the selected stack frame.
1017    Meanwhile, advance *STRINGPTR to point after the expression,
1018    at the first nonwhite character that is not part of the expression
1019    (possibly a null character).
1020 
1021    If COMMA is nonzero, stop if a comma is reached.  */
1022 
1023 struct expression *
parse_exp_1(char ** stringptr,struct block * block,int comma)1024 parse_exp_1 (char **stringptr, struct block *block, int comma)
1025 {
1026   struct cleanup *old_chain;
1027 
1028   lexptr = *stringptr;
1029   prev_lexptr = NULL;
1030 
1031   paren_depth = 0;
1032   type_stack_depth = 0;
1033 
1034   comma_terminates = comma;
1035 
1036   if (lexptr == 0 || *lexptr == 0)
1037     error_no_arg ("expression to compute");
1038 
1039   old_chain = make_cleanup (free_funcalls, 0 /*ignore*/);
1040   funcall_chain = 0;
1041 
1042   if (block)
1043     {
1044       expression_context_block = block;
1045       expression_context_pc = BLOCK_START (block);
1046     }
1047   else
1048     expression_context_block = get_selected_block (&expression_context_pc);
1049 
1050   namecopy = (char *) alloca (strlen (lexptr) + 1);
1051   expout_size = 10;
1052   expout_ptr = 0;
1053   expout = (struct expression *)
1054     xmalloc (sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_size));
1055   expout->language_defn = current_language;
1056   make_cleanup (free_current_contents, &expout);
1057 
1058   if (current_language->la_parser ())
1059     current_language->la_error (NULL);
1060 
1061   discard_cleanups (old_chain);
1062 
1063   /* Record the actual number of expression elements, and then
1064      reallocate the expression memory so that we free up any
1065      excess elements. */
1066 
1067   expout->nelts = expout_ptr;
1068   expout = (struct expression *)
1069     xrealloc ((char *) expout,
1070 	      sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_ptr));;
1071 
1072   /* Convert expression from postfix form as generated by yacc
1073      parser, to a prefix form. */
1074 
1075   if (expressiondebug)
1076     dump_raw_expression (expout, gdb_stdlog,
1077 			 "before conversion to prefix form");
1078 
1079   prefixify_expression (expout);
1080 
1081   if (expressiondebug)
1082     dump_prefix_expression (expout, gdb_stdlog);
1083 
1084   *stringptr = lexptr;
1085   return expout;
1086 }
1087 
1088 /* Parse STRING as an expression, and complain if this fails
1089    to use up all of the contents of STRING.  */
1090 
1091 struct expression *
parse_expression(char * string)1092 parse_expression (char *string)
1093 {
1094   struct expression *exp;
1095   exp = parse_exp_1 (&string, 0, 0);
1096   if (*string)
1097     error ("Junk after end of expression.");
1098   return exp;
1099 }
1100 
1101 /* Stuff for maintaining a stack of types.  Currently just used by C, but
1102    probably useful for any language which declares its types "backwards".  */
1103 
1104 static void
check_type_stack_depth(void)1105 check_type_stack_depth (void)
1106 {
1107   if (type_stack_depth == type_stack_size)
1108     {
1109       type_stack_size *= 2;
1110       type_stack = (union type_stack_elt *)
1111 	xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
1112     }
1113 }
1114 
1115 void
push_type(enum type_pieces tp)1116 push_type (enum type_pieces tp)
1117 {
1118   check_type_stack_depth ();
1119   type_stack[type_stack_depth++].piece = tp;
1120 }
1121 
1122 void
push_type_int(int n)1123 push_type_int (int n)
1124 {
1125   check_type_stack_depth ();
1126   type_stack[type_stack_depth++].int_val = n;
1127 }
1128 
1129 void
push_type_address_space(char * string)1130 push_type_address_space (char *string)
1131 {
1132   push_type_int (address_space_name_to_int (string));
1133 }
1134 
1135 enum type_pieces
pop_type(void)1136 pop_type (void)
1137 {
1138   if (type_stack_depth)
1139     return type_stack[--type_stack_depth].piece;
1140   return tp_end;
1141 }
1142 
1143 int
pop_type_int(void)1144 pop_type_int (void)
1145 {
1146   if (type_stack_depth)
1147     return type_stack[--type_stack_depth].int_val;
1148   /* "Can't happen".  */
1149   return 0;
1150 }
1151 
1152 /* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1153    as modified by all the stuff on the stack.  */
1154 struct type *
follow_types(struct type * follow_type)1155 follow_types (struct type *follow_type)
1156 {
1157   int done = 0;
1158   int make_const = 0;
1159   int make_volatile = 0;
1160   int make_addr_space = 0;
1161   int array_size;
1162   struct type *range_type;
1163 
1164   while (!done)
1165     switch (pop_type ())
1166       {
1167       case tp_end:
1168 	done = 1;
1169 	if (make_const)
1170 	  follow_type = make_cvr_type (make_const,
1171 				       TYPE_VOLATILE (follow_type),
1172 				       TYPE_RESTRICT (follow_type),
1173 				       follow_type, 0);
1174 	if (make_volatile)
1175 	  follow_type = make_cvr_type (TYPE_CONST (follow_type),
1176 				       make_volatile,
1177 				       TYPE_RESTRICT (follow_type),
1178 				       follow_type, 0);
1179 	if (make_addr_space)
1180 	  follow_type = make_type_with_address_space (follow_type,
1181 						      make_addr_space);
1182 	make_const = make_volatile = 0;
1183 	make_addr_space = 0;
1184 	break;
1185       case tp_const:
1186 	make_const = 1;
1187 	break;
1188       case tp_volatile:
1189 	make_volatile = 1;
1190 	break;
1191       case tp_space_identifier:
1192 	make_addr_space = pop_type_int ();
1193 	break;
1194       case tp_pointer:
1195 	follow_type = lookup_pointer_type (follow_type);
1196 	if (make_const)
1197 	  follow_type = make_cvr_type (make_const,
1198 				       TYPE_VOLATILE (follow_type),
1199 				       TYPE_RESTRICT (follow_type),
1200 				       follow_type, 0);
1201 	if (make_volatile)
1202 	  follow_type = make_cvr_type (TYPE_CONST (follow_type),
1203 				       make_volatile,
1204 				       TYPE_RESTRICT (follow_type),
1205 				       follow_type, 0);
1206 	if (make_addr_space)
1207 	  follow_type = make_type_with_address_space (follow_type,
1208 						      make_addr_space);
1209 	make_const = make_volatile = 0;
1210 	make_addr_space = 0;
1211 	break;
1212       case tp_reference:
1213 	follow_type = lookup_reference_type (follow_type);
1214 	if (make_const)
1215 	  follow_type = make_cvr_type (make_const,
1216 				       TYPE_VOLATILE (follow_type),
1217 				       TYPE_RESTRICT (follow_type),
1218 				       follow_type, 0);
1219 	if (make_volatile)
1220 	  follow_type = make_cvr_type (TYPE_CONST (follow_type),
1221 				       make_volatile,
1222 				       TYPE_RESTRICT (follow_type),
1223 				       follow_type, 0);
1224 	if (make_addr_space)
1225 	  follow_type = make_type_with_address_space (follow_type,
1226 						      make_addr_space);
1227 	make_const = make_volatile = 0;
1228 	make_addr_space = 0;
1229 	break;
1230       case tp_array:
1231 	array_size = pop_type_int ();
1232 	/* FIXME-type-allocation: need a way to free this type when we are
1233 	   done with it.  */
1234 	range_type =
1235 	  create_range_type ((struct type *) NULL,
1236 			     builtin_type_int, 0,
1237 			     array_size >= 0 ? array_size - 1 : 0);
1238 	follow_type =
1239 	  create_array_type ((struct type *) NULL,
1240 			     follow_type, range_type);
1241 	if (array_size < 0)
1242 	  TYPE_ARRAY_UPPER_BOUND_TYPE (follow_type)
1243 	    = BOUND_CANNOT_BE_DETERMINED;
1244 	break;
1245       case tp_function:
1246 	/* FIXME-type-allocation: need a way to free this type when we are
1247 	   done with it.  */
1248 	follow_type = lookup_function_type (follow_type);
1249 	break;
1250       }
1251   return follow_type;
1252 }
1253 
1254 static void build_parse (void);
1255 static void
build_parse(void)1256 build_parse (void)
1257 {
1258   int i;
1259 
1260   msym_text_symbol_type =
1261     init_type (TYPE_CODE_FUNC, 1, 0, "<text variable, no debug info>", NULL);
1262   TYPE_TARGET_TYPE (msym_text_symbol_type) = builtin_type_int;
1263   msym_data_symbol_type =
1264     init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
1265 	       "<data variable, no debug info>", NULL);
1266   msym_unknown_symbol_type =
1267     init_type (TYPE_CODE_INT, 1, 0,
1268 	       "<variable (not text or data), no debug info>",
1269 	       NULL);
1270 }
1271 
1272 /* This function avoids direct calls to fprintf
1273    in the parser generated debug code.  */
1274 void
parser_fprintf(FILE * x,const char * y,...)1275 parser_fprintf (FILE *x, const char *y, ...)
1276 {
1277   va_list args;
1278   va_start (args, y);
1279   if (x == stderr)
1280     vfprintf_unfiltered (gdb_stderr, y, args);
1281   else
1282     {
1283       fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1284       vfprintf_unfiltered (gdb_stderr, y, args);
1285     }
1286   va_end (args);
1287 }
1288 
1289 void
_initialize_parse(void)1290 _initialize_parse (void)
1291 {
1292   type_stack_size = 80;
1293   type_stack_depth = 0;
1294   type_stack = (union type_stack_elt *)
1295     xmalloc (type_stack_size * sizeof (*type_stack));
1296 
1297   build_parse ();
1298 
1299   /* FIXME - For the moment, handle types by swapping them in and out.
1300      Should be using the per-architecture data-pointer and a large
1301      struct. */
1302   DEPRECATED_REGISTER_GDBARCH_SWAP (msym_text_symbol_type);
1303   DEPRECATED_REGISTER_GDBARCH_SWAP (msym_data_symbol_type);
1304   DEPRECATED_REGISTER_GDBARCH_SWAP (msym_unknown_symbol_type);
1305   deprecated_register_gdbarch_swap (NULL, 0, build_parse);
1306 
1307   add_show_from_set (
1308 	    add_set_cmd ("expression", class_maintenance, var_zinteger,
1309 			 (char *) &expressiondebug,
1310 			 "Set expression debugging.\n\
1311 When non-zero, the internal representation of expressions will be printed.",
1312 			 &setdebuglist),
1313 		      &showdebuglist);
1314 }
1315