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