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