1999-01-19 Fernando Nasser <fnasser@totem.to.cygnus.com>
[deliverable/binutils-gdb.git] / gdb / parse.c
CommitLineData
3d6b6a90 1/* Parse expressions for GDB.
ad3b8c4a 2 Copyright (C) 1986, 89, 90, 91, 94, 1998 Free Software Foundation, Inc.
3d6b6a90
JG
3 Modified from expread.y by the Department of Computer Science at the
4 State University of New York at Buffalo, 1991.
5
6This file is part of GDB.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
6c9638b4 20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
3d6b6a90
JG
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
3d6b6a90 31#include "defs.h"
2b576293 32#include "gdb_string.h"
3d6b6a90 33#include "symtab.h"
1ab3bf1b 34#include "gdbtypes.h"
3d6b6a90
JG
35#include "frame.h"
36#include "expression.h"
37#include "value.h"
38#include "command.h"
39#include "language.h"
40#include "parser-defs.h"
433732f2 41#include "gdbcmd.h"
36297ff3 42#include "symfile.h" /* for overlay functions */
79448221
JK
43\f
44/* Global variables declared in parser-defs.h (and commented there). */
45struct expression *expout;
46int expout_size;
47int expout_ptr;
48struct block *expression_context_block;
49struct block *innermost_block;
79448221
JK
50int arglist_len;
51union type_stack_elt *type_stack;
52int type_stack_depth, type_stack_size;
53char *lexptr;
54char *namecopy;
55int paren_depth;
56int comma_terminates;
57\f
433732f2
SG
58#ifdef MAINTENANCE_CMDS
59static int expressiondebug = 0;
60#endif
61
65b07ddc
DT
62extern int hp_som_som_object_present;
63
9da75ad3
FF
64static void
65free_funcalls PARAMS ((void));
66
1ab3bf1b
JG
67static void
68prefixify_expression PARAMS ((struct expression *));
69
1ab3bf1b
JG
70static void
71prefixify_subexp PARAMS ((struct expression *, struct expression *, int, int));
72
9da75ad3
FF
73/* Data structure for saving values of arglist_len for function calls whose
74 arguments contain other function calls. */
75
76struct funcall
77 {
78 struct funcall *next;
79 int arglist_len;
80 };
81
82static struct funcall *funcall_chain;
83
3d6b6a90
JG
84/* Assign machine-independent names to certain registers
85 (unless overridden by the REGISTER_NAMES table) */
86
a332e593
SC
87#ifdef NO_STD_REGS
88unsigned num_std_regs = 0;
89struct std_regs std_regs[1];
90#else
3d6b6a90 91struct std_regs std_regs[] = {
a332e593 92
3d6b6a90
JG
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
a332e593 105
3d6b6a90
JG
106};
107
108unsigned num_std_regs = (sizeof std_regs / sizeof std_regs[0]);
109
a332e593
SC
110#endif
111
d70a61e7
AC
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. */
678fa7ff
RU
115
116int
117target_map_name_to_register (str, len)
118 char *str;
119 int len;
120{
121 int i;
122
3b3835cc
RU
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. */
678fa7ff 133 for (i = 0; i < NUM_REGS; i++)
9ddf9aa9
AC
134 if (REGISTER_NAME (i) && len == strlen (REGISTER_NAME (i))
135 && STREQN (str, REGISTER_NAME (i), len))
678fa7ff
RU
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
678fa7ff
RU
148 return -1;
149}
3d6b6a90
JG
150
151/* Begin counting arguments for a function call,
152 saving the data about any containing call. */
153
154void
155start_arglist ()
156{
9da75ad3 157 register struct funcall *new;
3d6b6a90 158
9da75ad3 159 new = (struct funcall *) xmalloc (sizeof (struct funcall));
3d6b6a90
JG
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
169int
170end_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;
be772100 176 free ((PTR)call);
3d6b6a90
JG
177 return val;
178}
179
180/* Free everything in the funcall chain.
181 Used when there is an error inside parsing. */
182
9da75ad3 183static void
3d6b6a90
JG
184free_funcalls ()
185{
186 register struct funcall *call, *next;
187
188 for (call = funcall_chain; call; call = next)
189 {
190 next = call->next;
be772100 191 free ((PTR)call);
3d6b6a90
JG
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
203void
204write_exp_elt (expelt)
205 union exp_element expelt;
206{
207 if (expout_ptr >= expout_size)
208 {
209 expout_size *= 2;
81028ab0
FF
210 expout = (struct expression *)
211 xrealloc ((char *) expout, sizeof (struct expression)
212 + EXP_ELEM_TO_BYTES (expout_size));
3d6b6a90
JG
213 }
214 expout->elts[expout_ptr++] = expelt;
215}
216
217void
218write_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
228void
229write_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
479fdd26
JK
239void
240write_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
3d6b6a90
JG
248void
249write_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
259void
260write_exp_elt_dblcst (expelt)
aa220473 261 DOUBLEST expelt;
3d6b6a90
JG
262{
263 union exp_element tmp;
264
265 tmp.doubleconst = expelt;
266
267 write_exp_elt (tmp);
268}
269
270void
271write_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
281void
282write_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.
d1065385
FF
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
3d6b6a90
JG
312
313void
314write_exp_string (str)
315 struct stoken str;
316{
317 register int len = str.length;
d1065385
FF
318 register int lenelt;
319 register char *strdata;
3d6b6a90 320
d1065385
FF
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). */
3d6b6a90 325
81028ab0 326 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
d1065385
FF
327
328 /* Ensure that we have enough available expression elements to store
329 everything. */
330
331 if ((expout_ptr + lenelt) >= expout_size)
3d6b6a90 332 {
d1065385 333 expout_size = max (expout_size * 2, expout_ptr + lenelt + 10);
3d6b6a90 334 expout = (struct expression *)
1ab3bf1b 335 xrealloc ((char *) expout, (sizeof (struct expression)
81028ab0 336 + EXP_ELEM_TO_BYTES (expout_size)));
3d6b6a90 337 }
d1065385
FF
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;
3d6b6a90
JG
349 write_exp_elt_longcst ((LONGEST) len);
350}
81028ab0
FF
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
363void
364write_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}
abe28b92
JK
399
400/* Add the appropriate elements for a minimal symbol to the end of
3fb93d86
JK
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
407static struct type *msym_text_symbol_type;
408static struct type *msym_data_symbol_type;
409static struct type *msym_unknown_symbol_type;
abe28b92
JK
410
411void
412write_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{
36297ff3
RU
417 CORE_ADDR addr;
418
abe28b92 419 write_exp_elt_opcode (OP_LONG);
4461196e 420 write_exp_elt_type (lookup_pointer_type (builtin_type_void));
36297ff3
RU
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
abe28b92
JK
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:
ae6d035d 434 case mst_solib_trampoline:
3fb93d86 435 write_exp_elt_type (msym_text_symbol_type);
abe28b92
JK
436 break;
437
438 case mst_data:
439 case mst_file_data:
440 case mst_bss:
441 case mst_file_bss:
3fb93d86 442 write_exp_elt_type (msym_data_symbol_type);
abe28b92
JK
443 break;
444
445 default:
3fb93d86 446 write_exp_elt_type (msym_unknown_symbol_type);
abe28b92
JK
447 break;
448 }
449 write_exp_elt_opcode (UNOP_MEMVAL);
450}
3d6b6a90 451\f
c700638c
PB
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
475void
476write_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
65b07ddc
DT
482 struct symbol * sym = NULL;
483 struct minimal_symbol * msym = NULL;
484
c700638c
PB
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. */
678fa7ff
RU
514 i = target_map_name_to_register( str.ptr + 1, str.length - 1 );
515 if( i >= 0 )
516 goto handle_register;
c700638c 517
65b07ddc
DT
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
c700638c
PB
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}
65b07ddc
DT
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
583static const char coloncolon[2] = {':',':'};
584
585struct symbol *
586parse_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
749char *
750find_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
c700638c 809\f
3d6b6a90
JG
810/* Return a null-terminated temporary copy of the name
811 of a string token. */
812
813char *
814copy_name (token)
815 struct stoken token;
816{
4ed3a9ea 817 memcpy (namecopy, token.ptr, token.length);
3d6b6a90
JG
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
1ab3bf1b 825static void
3d6b6a90
JG
826prefixify_expression (expr)
827 register struct expression *expr;
828{
81028ab0
FF
829 register int len =
830 sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
3d6b6a90
JG
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. */
4ed3a9ea 837 memcpy (temp, expr, len);
3d6b6a90
JG
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
8d2755a9 845int
3d6b6a90
JG
846length_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
d1065385 854 if (endpos < 1)
3d6b6a90
JG
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:
81028ab0
FF
863 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
864 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
3d6b6a90
JG
865 break;
866
867 case OP_LONG:
868 case OP_DOUBLE:
479fdd26 869 case OP_VAR_VALUE:
3d6b6a90
JG
870 oplen = 4;
871 break;
872
873 case OP_TYPE:
874 case OP_BOOL:
3d6b6a90
JG
875 case OP_LAST:
876 case OP_REGISTER:
877 case OP_INTERNALVAR:
878 oplen = 3;
879 break;
880
ead95f8a 881 case OP_COMPLEX:
a91a6192
SS
882 oplen = 1;
883 args = 2;
884 break;
885
3d6b6a90 886 case OP_FUNCALL:
a91a6192 887 case OP_F77_UNDETERMINED_ARGLIST:
3d6b6a90 888 oplen = 3;
d1065385 889 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
3d6b6a90
JG
890 break;
891
892 case UNOP_MAX:
893 case UNOP_MIN:
894 oplen = 3;
3d6b6a90
JG
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
dcda44a0 916 case OP_LABELED:
2640f7e1
JG
917 case STRUCTOP_STRUCT:
918 case STRUCTOP_PTR:
919 args = 1;
d1065385 920 /* fall through */
3d6b6a90
JG
921 case OP_M2_STRING:
922 case OP_STRING:
3c02944a 923 case OP_NAME:
0e4ca328 924 case OP_EXPRSTRING:
81028ab0
FF
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);
3d6b6a90
JG
933 break;
934
c4413e2c
FF
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
3d6b6a90 942 case TERNOP_COND:
f91a9e05
PB
943 case TERNOP_SLICE:
944 case TERNOP_SLICE_COUNT:
3d6b6a90
JG
945 args = 3;
946 break;
947
948 /* Modula-2 */
54bbbfb4 949 case MULTI_SUBSCRIPT:
a91a6192 950 oplen = 3;
d1065385 951 args = 1 + longest_to_int (expr->elts[endpos- 2].longconst);
3d6b6a90
JG
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
981static void
982prefixify_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:
81028ab0
FF
1003 oplen = longest_to_int (inexpr->elts[inend - 2].longconst);
1004 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
3d6b6a90
JG
1005 break;
1006
1007 case OP_LONG:
1008 case OP_DOUBLE:
479fdd26 1009 case OP_VAR_VALUE:
3d6b6a90
JG
1010 oplen = 4;
1011 break;
1012
1013 case OP_TYPE:
1014 case OP_BOOL:
3d6b6a90
JG
1015 case OP_LAST:
1016 case OP_REGISTER:
1017 case OP_INTERNALVAR:
1018 oplen = 3;
1019 break;
1020
ead95f8a 1021 case OP_COMPLEX:
a91a6192
SS
1022 oplen = 1;
1023 args = 2;
1024 break;
1025
3d6b6a90 1026 case OP_FUNCALL:
a91a6192 1027 case OP_F77_UNDETERMINED_ARGLIST:
3d6b6a90 1028 oplen = 3;
d1065385 1029 args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
3d6b6a90
JG
1030 break;
1031
1032 case UNOP_MIN:
1033 case UNOP_MAX:
1034 oplen = 3;
3d6b6a90
JG
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
61c1724b 1055 case STRUCTOP_STRUCT:
2640f7e1 1056 case STRUCTOP_PTR:
dcda44a0 1057 case OP_LABELED:
2640f7e1 1058 args = 1;
d1065385 1059 /* fall through */
3d6b6a90
JG
1060 case OP_M2_STRING:
1061 case OP_STRING:
3c02944a 1062 case OP_NAME:
0e4ca328 1063 case OP_EXPRSTRING:
81028ab0
FF
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);
3d6b6a90
JG
1072 break;
1073
c4413e2c
FF
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
3d6b6a90 1081 case TERNOP_COND:
f91a9e05
PB
1082 case TERNOP_SLICE:
1083 case TERNOP_SLICE_COUNT:
3d6b6a90
JG
1084 args = 3;
1085 break;
1086
1087 case BINOP_ASSIGN_MODIFY:
1088 oplen = 3;
1089 args = 2;
1090 break;
1091
1092 /* Modula-2 */
54bbbfb4 1093 case MULTI_SUBSCRIPT:
a91a6192 1094 oplen = 3;
d1065385 1095 args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
3d6b6a90
JG
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;
4ed3a9ea 1110 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
81028ab0 1111 EXP_ELEM_TO_BYTES (oplen));
3d6b6a90
JG
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
1150struct expression *
1151parse_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
ad3b8c4a 1168 old_chain = make_cleanup ((make_cleanup_func) free_funcalls, 0);
3d6b6a90
JG
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 *)
81028ab0 1177 xmalloc (sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_size));
3d6b6a90 1178 expout->language_defn = current_language;
ad3b8c4a 1179 make_cleanup ((make_cleanup_func) free_current_contents, &expout);
3d6b6a90
JG
1180
1181 if (current_language->la_parser ())
1182 current_language->la_error (NULL);
1183
1184 discard_cleanups (old_chain);
54bbbfb4
FF
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
3d6b6a90
JG
1190 expout->nelts = expout_ptr;
1191 expout = (struct expression *)
1ab3bf1b 1192 xrealloc ((char *) expout,
81028ab0 1193 sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_ptr));;
54bbbfb4
FF
1194
1195 /* Convert expression from postfix form as generated by yacc
1196 parser, to a prefix form. */
1197
433732f2
SG
1198#ifdef MAINTENANCE_CMDS
1199 if (expressiondebug)
1200 dump_prefix_expression (expout, gdb_stdout,
1201 "before conversion to prefix form");
1202#endif /* MAINTENANCE_CMDS */
1203
3d6b6a90 1204 prefixify_expression (expout);
433732f2
SG
1205
1206#ifdef MAINTENANCE_CMDS
1207 if (expressiondebug)
1208 dump_postfix_expression (expout, gdb_stdout,
1209 "after conversion to prefix form");
1210#endif /* MAINTENANCE_CMDS */
54bbbfb4 1211
3d6b6a90
JG
1212 *stringptr = lexptr;
1213 return expout;
1214}
1215
1216/* Parse STRING as an expression, and complain if this fails
1217 to use up all of the contents of STRING. */
1218
1219struct expression *
1220parse_expression (string)
1221 char *string;
1222{
1223 register struct expression *exp;
1224 exp = parse_exp_1 (&string, 0, 0);
1225 if (*string)
1226 error ("Junk after end of expression.");
1227 return exp;
1228}
f843c95f
JK
1229\f
1230/* Stuff for maintaining a stack of types. Currently just used by C, but
1231 probably useful for any language which declares its types "backwards". */
3d6b6a90
JG
1232
1233void
1234push_type (tp)
1235 enum type_pieces tp;
1236{
1237 if (type_stack_depth == type_stack_size)
1238 {
1239 type_stack_size *= 2;
1240 type_stack = (union type_stack_elt *)
1ab3bf1b 1241 xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
3d6b6a90
JG
1242 }
1243 type_stack[type_stack_depth++].piece = tp;
1244}
1245
1246void
1247push_type_int (n)
1248 int n;
1249{
1250 if (type_stack_depth == type_stack_size)
1251 {
1252 type_stack_size *= 2;
1253 type_stack = (union type_stack_elt *)
1ab3bf1b 1254 xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
3d6b6a90
JG
1255 }
1256 type_stack[type_stack_depth++].int_val = n;
1257}
1258
1259enum type_pieces
1260pop_type ()
1261{
1262 if (type_stack_depth)
1263 return type_stack[--type_stack_depth].piece;
1264 return tp_end;
1265}
1266
1267int
1268pop_type_int ()
1269{
1270 if (type_stack_depth)
1271 return type_stack[--type_stack_depth].int_val;
1272 /* "Can't happen". */
1273 return 0;
1274}
1275
f843c95f
JK
1276/* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1277 as modified by all the stuff on the stack. */
1278struct type *
1279follow_types (follow_type)
1280 struct type *follow_type;
1281{
1282 int done = 0;
1283 int array_size;
1284 struct type *range_type;
1285
1286 while (!done)
1287 switch (pop_type ())
1288 {
1289 case tp_end:
1290 done = 1;
1291 break;
1292 case tp_pointer:
1293 follow_type = lookup_pointer_type (follow_type);
1294 break;
1295 case tp_reference:
1296 follow_type = lookup_reference_type (follow_type);
1297 break;
1298 case tp_array:
1299 array_size = pop_type_int ();
36633dcc
JK
1300 /* FIXME-type-allocation: need a way to free this type when we are
1301 done with it. */
fda36387
PB
1302 range_type =
1303 create_range_type ((struct type *) NULL,
1304 builtin_type_int, 0,
1305 array_size >= 0 ? array_size - 1 : 0);
1306 follow_type =
1307 create_array_type ((struct type *) NULL,
1308 follow_type, range_type);
1309 if (array_size < 0)
1310 TYPE_ARRAY_UPPER_BOUND_TYPE(follow_type)
1311 = BOUND_CANNOT_BE_DETERMINED;
f843c95f
JK
1312 break;
1313 case tp_function:
36633dcc
JK
1314 /* FIXME-type-allocation: need a way to free this type when we are
1315 done with it. */
f843c95f
JK
1316 follow_type = lookup_function_type (follow_type);
1317 break;
1318 }
1319 return follow_type;
1320}
1321\f
3d6b6a90
JG
1322void
1323_initialize_parse ()
1324{
1325 type_stack_size = 80;
1326 type_stack_depth = 0;
1327 type_stack = (union type_stack_elt *)
1328 xmalloc (type_stack_size * sizeof (*type_stack));
3fb93d86
JK
1329
1330 msym_text_symbol_type =
eedb3363 1331 init_type (TYPE_CODE_FUNC, 1, 0, "<text variable, no debug info>", NULL);
3fb93d86
JK
1332 TYPE_TARGET_TYPE (msym_text_symbol_type) = builtin_type_int;
1333 msym_data_symbol_type =
1334 init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
eedb3363 1335 "<data variable, no debug info>", NULL);
3fb93d86 1336 msym_unknown_symbol_type =
eedb3363
JK
1337 init_type (TYPE_CODE_INT, 1, 0,
1338 "<variable (not text or data), no debug info>",
3fb93d86 1339 NULL);
433732f2
SG
1340
1341#ifdef MAINTENANCE_CMDS
1342 add_show_from_set (
1343 add_set_cmd ("expressiondebug", class_maintenance, var_zinteger,
1344 (char *)&expressiondebug,
1345 "Set expression debugging.\n\
1346When non-zero, the internal representation of expressions will be printed.",
1347 &setlist),
1348 &showlist);
1349#endif
3d6b6a90 1350}
This page took 0.409287 seconds and 4 git commands to generate.