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