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