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