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