]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/parse.c
* language.h (struct language_arch_info): New members
[thirdparty/binutils-gdb.git] / gdb / parse.c
CommitLineData
c906108c 1/* Parse expressions for GDB.
c4a172b5 2
6aba47ca 3 Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
9b254dd1
DJ
4 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2008
5 Free Software Foundation, Inc.
c4a172b5 6
c906108c
SS
7 Modified from expread.y by the Department of Computer Science at the
8 State University of New York at Buffalo, 1991.
9
c5aa993b 10 This file is part of GDB.
c906108c 11
c5aa993b
JM
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
a9762ec7 14 the Free Software Foundation; either version 3 of the License, or
c5aa993b 15 (at your option) any later version.
c906108c 16
c5aa993b
JM
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
c906108c 21
c5aa993b 22 You should have received a copy of the GNU General Public License
a9762ec7 23 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
24
25/* Parse an expression from text in a string,
26 and return the result as a struct expression pointer.
27 That structure contains arithmetic operations in reverse polish,
28 with constants represented by operations that are followed by special data.
29 See expression.h for the details of the format.
30 What is important here is that it can be built up sequentially
31 during the process of parsing; the lower levels of the tree always
32 come first in the result. */
c5aa993b 33
cce74817
JM
34#include <ctype.h>
35
c906108c
SS
36#include "defs.h"
37#include "gdb_string.h"
c906108c
SS
38#include "symtab.h"
39#include "gdbtypes.h"
40#include "frame.h"
41#include "expression.h"
42#include "value.h"
43#include "command.h"
44#include "language.h"
0b4e1325 45#include "f-lang.h"
c906108c
SS
46#include "parser-defs.h"
47#include "gdbcmd.h"
c5aa993b 48#include "symfile.h" /* for overlay functions */
f57d151a 49#include "inferior.h"
d16aafd8 50#include "doublest.h"
0406ec40 51#include "gdb_assert.h"
fe898f56 52#include "block.h"
59f92a09 53#include "source.h"
9e35dae4 54#include "objfiles.h"
65d12d83 55#include "exceptions.h"
029a67e4 56#include "user-regs.h"
e2305d34 57
5f9769d1
PH
58/* Standard set of definitions for printing, dumping, prefixifying,
59 * and evaluating expressions. */
60
61const struct exp_descriptor exp_descriptor_standard =
62 {
63 print_subexp_standard,
64 operator_length_standard,
65 op_name_standard,
66 dump_subexp_body_standard,
67 evaluate_subexp_standard
68 };
c906108c
SS
69\f
70/* Global variables declared in parser-defs.h (and commented there). */
71struct expression *expout;
72int expout_size;
73int expout_ptr;
74struct block *expression_context_block;
84f0252a 75CORE_ADDR expression_context_pc;
c906108c
SS
76struct block *innermost_block;
77int arglist_len;
78union type_stack_elt *type_stack;
79int type_stack_depth, type_stack_size;
80char *lexptr;
665132f9 81char *prev_lexptr;
c906108c
SS
82int paren_depth;
83int comma_terminates;
3a913e29 84
65d12d83
TT
85/* True if parsing an expression to find a field reference. This is
86 only used by completion. */
87int in_parse_field;
88
89/* The index of the last struct expression directly before a '.' or
90 '->'. This is set when parsing and is only used when completing a
91 field name. It is -1 if no dereference operation was found. */
92static int expout_last_struct = -1;
93
3a913e29
JB
94/* A temporary buffer for identifiers, so we can null-terminate them.
95
96 We allocate this with xrealloc. parse_exp_1 used to allocate with
97 alloca, using the size of the whole expression as a conservative
98 estimate of the space needed. However, macro expansion can
99 introduce names longer than the original expression; there's no
100 practical way to know beforehand how large that might be. */
101char *namecopy;
102size_t namecopy_size;
c906108c 103\f
c906108c 104static int expressiondebug = 0;
920d2a44
AC
105static void
106show_expressiondebug (struct ui_file *file, int from_tty,
107 struct cmd_list_element *c, const char *value)
108{
109 fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
110}
c906108c 111
74b7792f 112static void free_funcalls (void *ignore);
c906108c 113
65d12d83 114static int prefixify_expression (struct expression *);
c906108c 115
65d12d83
TT
116static int prefixify_subexp (struct expression *, struct expression *, int,
117 int);
c906108c 118
e85c3284 119static struct expression *parse_exp_in_context (char **, struct block *, int,
65d12d83 120 int, int *);
e85c3284 121
a14ed312 122void _initialize_parse (void);
392a587b 123
c906108c
SS
124/* Data structure for saving values of arglist_len for function calls whose
125 arguments contain other function calls. */
126
127struct funcall
128 {
129 struct funcall *next;
130 int arglist_len;
131 };
132
133static struct funcall *funcall_chain;
134
c906108c
SS
135/* Begin counting arguments for a function call,
136 saving the data about any containing call. */
137
138void
fba45db2 139start_arglist (void)
c906108c 140{
f86f5ca3 141 struct funcall *new;
c906108c
SS
142
143 new = (struct funcall *) xmalloc (sizeof (struct funcall));
144 new->next = funcall_chain;
145 new->arglist_len = arglist_len;
146 arglist_len = 0;
147 funcall_chain = new;
148}
149
150/* Return the number of arguments in a function call just terminated,
151 and restore the data for the containing function call. */
152
153int
fba45db2 154end_arglist (void)
c906108c 155{
f86f5ca3
PH
156 int val = arglist_len;
157 struct funcall *call = funcall_chain;
c906108c
SS
158 funcall_chain = call->next;
159 arglist_len = call->arglist_len;
b8c9b27d 160 xfree (call);
c906108c
SS
161 return val;
162}
163
164/* Free everything in the funcall chain.
165 Used when there is an error inside parsing. */
166
167static void
74b7792f 168free_funcalls (void *ignore)
c906108c 169{
f86f5ca3 170 struct funcall *call, *next;
c906108c
SS
171
172 for (call = funcall_chain; call; call = next)
173 {
174 next = call->next;
b8c9b27d 175 xfree (call);
c906108c
SS
176 }
177}
178\f
179/* This page contains the functions for adding data to the struct expression
180 being constructed. */
181
182/* Add one element to the end of the expression. */
183
184/* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
185 a register through here */
186
187void
fba45db2 188write_exp_elt (union exp_element expelt)
c906108c
SS
189{
190 if (expout_ptr >= expout_size)
191 {
192 expout_size *= 2;
193 expout = (struct expression *)
194 xrealloc ((char *) expout, sizeof (struct expression)
195 + EXP_ELEM_TO_BYTES (expout_size));
196 }
197 expout->elts[expout_ptr++] = expelt;
198}
199
200void
fba45db2 201write_exp_elt_opcode (enum exp_opcode expelt)
c906108c
SS
202{
203 union exp_element tmp;
09153d55 204 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
205
206 tmp.opcode = expelt;
207
208 write_exp_elt (tmp);
209}
210
211void
fba45db2 212write_exp_elt_sym (struct symbol *expelt)
c906108c
SS
213{
214 union exp_element tmp;
09153d55 215 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
216
217 tmp.symbol = expelt;
218
219 write_exp_elt (tmp);
220}
221
222void
fba45db2 223write_exp_elt_block (struct block *b)
c906108c
SS
224{
225 union exp_element tmp;
09153d55 226 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
227 tmp.block = b;
228 write_exp_elt (tmp);
229}
230
9e35dae4
DJ
231void
232write_exp_elt_objfile (struct objfile *objfile)
233{
234 union exp_element tmp;
235 memset (&tmp, 0, sizeof (union exp_element));
236 tmp.objfile = objfile;
237 write_exp_elt (tmp);
238}
239
c906108c 240void
fba45db2 241write_exp_elt_longcst (LONGEST expelt)
c906108c
SS
242{
243 union exp_element tmp;
09153d55 244 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
245
246 tmp.longconst = expelt;
247
248 write_exp_elt (tmp);
249}
250
251void
fba45db2 252write_exp_elt_dblcst (DOUBLEST expelt)
c906108c
SS
253{
254 union exp_element tmp;
09153d55 255 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
256
257 tmp.doubleconst = expelt;
258
259 write_exp_elt (tmp);
260}
261
27bc4d80
TJB
262void
263write_exp_elt_decfloatcst (gdb_byte expelt[16])
264{
265 union exp_element tmp;
266 int index;
267
268 for (index = 0; index < 16; index++)
269 tmp.decfloatconst[index] = expelt[index];
270
271 write_exp_elt (tmp);
272}
273
c906108c 274void
fba45db2 275write_exp_elt_type (struct type *expelt)
c906108c
SS
276{
277 union exp_element tmp;
09153d55 278 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
279
280 tmp.type = expelt;
281
282 write_exp_elt (tmp);
283}
284
285void
fba45db2 286write_exp_elt_intern (struct internalvar *expelt)
c906108c
SS
287{
288 union exp_element tmp;
09153d55 289 memset (&tmp, 0, sizeof (union exp_element));
c906108c
SS
290
291 tmp.internalvar = expelt;
292
293 write_exp_elt (tmp);
294}
295
296/* Add a string constant to the end of the expression.
297
298 String constants are stored by first writing an expression element
299 that contains the length of the string, then stuffing the string
300 constant itself into however many expression elements are needed
301 to hold it, and then writing another expression element that contains
302 the length of the string. I.E. an expression element at each end of
303 the string records the string length, so you can skip over the
304 expression elements containing the actual string bytes from either
305 end of the string. Note that this also allows gdb to handle
306 strings with embedded null bytes, as is required for some languages.
307
308 Don't be fooled by the fact that the string is null byte terminated,
309 this is strictly for the convenience of debugging gdb itself. Gdb
310 Gdb does not depend up the string being null terminated, since the
311 actual length is recorded in expression elements at each end of the
312 string. The null byte is taken into consideration when computing how
313 many expression elements are required to hold the string constant, of
314 course. */
315
316
317void
fba45db2 318write_exp_string (struct stoken str)
c906108c 319{
f86f5ca3
PH
320 int len = str.length;
321 int lenelt;
322 char *strdata;
c906108c
SS
323
324 /* Compute the number of expression elements required to hold the string
325 (including a null byte terminator), along with one expression element
326 at each end to record the actual string length (not including the
327 null byte terminator). */
328
329 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
330
331 /* Ensure that we have enough available expression elements to store
332 everything. */
333
334 if ((expout_ptr + lenelt) >= expout_size)
335 {
336 expout_size = max (expout_size * 2, expout_ptr + lenelt + 10);
337 expout = (struct expression *)
338 xrealloc ((char *) expout, (sizeof (struct expression)
339 + EXP_ELEM_TO_BYTES (expout_size)));
340 }
341
342 /* Write the leading length expression element (which advances the current
343 expression element index), then write the string constant followed by a
344 terminating null byte, and then write the trailing length expression
345 element. */
346
347 write_exp_elt_longcst ((LONGEST) len);
348 strdata = (char *) &expout->elts[expout_ptr];
349 memcpy (strdata, str.ptr, len);
350 *(strdata + len) = '\0';
351 expout_ptr += lenelt - 2;
352 write_exp_elt_longcst ((LONGEST) len);
353}
354
355/* Add a bitstring constant to the end of the expression.
356
357 Bitstring constants are stored by first writing an expression element
358 that contains the length of the bitstring (in bits), then stuffing the
359 bitstring constant itself into however many expression elements are
360 needed to hold it, and then writing another expression element that
361 contains the length of the bitstring. I.E. an expression element at
362 each end of the bitstring records the bitstring length, so you can skip
363 over the expression elements containing the actual bitstring bytes from
364 either end of the bitstring. */
365
366void
fba45db2 367write_exp_bitstring (struct stoken str)
c906108c 368{
f86f5ca3
PH
369 int bits = str.length; /* length in bits */
370 int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
371 int lenelt;
372 char *strdata;
c906108c
SS
373
374 /* Compute the number of expression elements required to hold the bitstring,
375 along with one expression element at each end to record the actual
376 bitstring length in bits. */
377
378 lenelt = 2 + BYTES_TO_EXP_ELEM (len);
379
380 /* Ensure that we have enough available expression elements to store
381 everything. */
382
383 if ((expout_ptr + lenelt) >= expout_size)
384 {
385 expout_size = max (expout_size * 2, expout_ptr + lenelt + 10);
386 expout = (struct expression *)
387 xrealloc ((char *) expout, (sizeof (struct expression)
388 + EXP_ELEM_TO_BYTES (expout_size)));
389 }
390
391 /* Write the leading length expression element (which advances the current
392 expression element index), then write the bitstring constant, and then
393 write the trailing length expression element. */
394
395 write_exp_elt_longcst ((LONGEST) bits);
396 strdata = (char *) &expout->elts[expout_ptr];
397 memcpy (strdata, str.ptr, len);
398 expout_ptr += lenelt - 2;
399 write_exp_elt_longcst ((LONGEST) bits);
400}
401
402/* Add the appropriate elements for a minimal symbol to the end of
c841afd5 403 the expression. */
c906108c 404
c906108c 405void
c841afd5 406write_exp_msymbol (struct minimal_symbol *msymbol)
c906108c 407{
bccdca4a
UW
408 struct objfile *objfile = msymbol_objfile (msymbol);
409 struct gdbarch *gdbarch = get_objfile_arch (objfile);
410
411 CORE_ADDR addr = SYMBOL_VALUE_ADDRESS (msymbol);
714835d5 412 struct obj_section *section = SYMBOL_OBJ_SECTION (msymbol);
bccdca4a
UW
413 enum minimal_symbol_type type = msymbol->type;
414 CORE_ADDR pc;
415
416 /* The minimal symbol might point to a function descriptor;
417 resolve it to the actual code address instead. */
418 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, addr, &current_target);
419 if (pc != addr)
420 {
421 /* In this case, assume we have a code symbol instead of
422 a data symbol. */
423 type = mst_text;
714835d5 424 section = NULL;
bccdca4a
UW
425 addr = pc;
426 }
427
428 if (overlay_debugging)
714835d5 429 addr = symbol_overlayed_address (addr, section);
c906108c
SS
430
431 write_exp_elt_opcode (OP_LONG);
a858089e 432 /* Let's make the type big enough to hold a 64-bit address. */
c841afd5 433 write_exp_elt_type (builtin_type (gdbarch)->builtin_core_addr);
c906108c 434 write_exp_elt_longcst ((LONGEST) addr);
c906108c
SS
435 write_exp_elt_opcode (OP_LONG);
436
714835d5 437 if (section && section->the_bfd_section->flags & SEC_THREAD_LOCAL)
9e35dae4 438 {
9e35dae4 439 write_exp_elt_opcode (UNOP_MEMVAL_TLS);
bccdca4a 440 write_exp_elt_objfile (objfile);
64c50499 441 write_exp_elt_type (builtin_type (gdbarch)->nodebug_tls_symbol);
9e35dae4
DJ
442 write_exp_elt_opcode (UNOP_MEMVAL_TLS);
443 return;
444 }
445
c906108c 446 write_exp_elt_opcode (UNOP_MEMVAL);
bccdca4a 447 switch (type)
c906108c
SS
448 {
449 case mst_text:
450 case mst_file_text:
451 case mst_solib_trampoline:
64c50499 452 write_exp_elt_type (builtin_type (gdbarch)->nodebug_text_symbol);
c906108c
SS
453 break;
454
455 case mst_data:
456 case mst_file_data:
457 case mst_bss:
458 case mst_file_bss:
64c50499 459 write_exp_elt_type (builtin_type (gdbarch)->nodebug_data_symbol);
c906108c
SS
460 break;
461
462 default:
64c50499 463 write_exp_elt_type (builtin_type (gdbarch)->nodebug_unknown_symbol);
c906108c
SS
464 break;
465 }
466 write_exp_elt_opcode (UNOP_MEMVAL);
467}
65d12d83
TT
468
469/* Mark the current index as the starting location of a structure
470 expression. This is used when completing on field names. */
471
472void
473mark_struct_expression (void)
474{
475 expout_last_struct = expout_ptr;
476}
477
c906108c
SS
478\f
479/* Recognize tokens that start with '$'. These include:
480
c5aa993b
JM
481 $regname A native register name or a "standard
482 register name".
c906108c 483
c5aa993b
JM
484 $variable A convenience variable with a name chosen
485 by the user.
c906108c 486
c5aa993b
JM
487 $digits Value history with index <digits>, starting
488 from the first value which has index 1.
c906108c 489
c5aa993b
JM
490 $$digits Value history with index <digits> relative
491 to the last value. I.E. $$0 is the last
492 value, $$1 is the one previous to that, $$2
493 is the one previous to $$1, etc.
c906108c 494
c5aa993b 495 $ | $0 | $$0 The last value in the value history.
c906108c 496
c5aa993b
JM
497 $$ An abbreviation for the second to the last
498 value in the value history, I.E. $$1
c906108c 499
c5aa993b 500 */
c906108c
SS
501
502void
fba45db2 503write_dollar_variable (struct stoken str)
c906108c 504{
d7318818
RC
505 struct symbol *sym = NULL;
506 struct minimal_symbol *msym = NULL;
c4a3d09a 507 struct internalvar *isym = NULL;
d7318818 508
c906108c
SS
509 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
510 and $$digits (equivalent to $<-digits> if you could type that). */
511
c906108c
SS
512 int negate = 0;
513 int i = 1;
514 /* Double dollar means negate the number and add -1 as well.
515 Thus $$ alone means -1. */
516 if (str.length >= 2 && str.ptr[1] == '$')
517 {
518 negate = 1;
519 i = 2;
520 }
521 if (i == str.length)
522 {
523 /* Just dollars (one or two) */
c5aa993b 524 i = -negate;
c906108c
SS
525 goto handle_last;
526 }
527 /* Is the rest of the token digits? */
528 for (; i < str.length; i++)
529 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
530 break;
531 if (i == str.length)
532 {
533 i = atoi (str.ptr + 1 + negate);
534 if (negate)
c5aa993b 535 i = -i;
c906108c
SS
536 goto handle_last;
537 }
c5aa993b 538
c906108c
SS
539 /* Handle tokens that refer to machine registers:
540 $ followed by a register name. */
029a67e4
UW
541 i = user_reg_map_name_to_regnum (current_gdbarch,
542 str.ptr + 1, str.length - 1);
c5aa993b 543 if (i >= 0)
c906108c
SS
544 goto handle_register;
545
c4a3d09a
MF
546 /* Any names starting with $ are probably debugger internal variables. */
547
548 isym = lookup_only_internalvar (copy_name (str) + 1);
549 if (isym)
550 {
551 write_exp_elt_opcode (OP_INTERNALVAR);
552 write_exp_elt_intern (isym);
553 write_exp_elt_opcode (OP_INTERNALVAR);
554 return;
555 }
556
d7318818
RC
557 /* On some systems, such as HP-UX and hppa-linux, certain system routines
558 have names beginning with $ or $$. Check for those, first. */
559
560 sym = lookup_symbol (copy_name (str), (struct block *) NULL,
2570f2b7 561 VAR_DOMAIN, (int *) NULL);
d7318818
RC
562 if (sym)
563 {
564 write_exp_elt_opcode (OP_VAR_VALUE);
565 write_exp_elt_block (block_found); /* set by lookup_symbol */
566 write_exp_elt_sym (sym);
567 write_exp_elt_opcode (OP_VAR_VALUE);
568 return;
569 }
570 msym = lookup_minimal_symbol (copy_name (str), NULL, NULL);
571 if (msym)
c906108c 572 {
c841afd5 573 write_exp_msymbol (msym);
d7318818 574 return;
c906108c 575 }
c5aa993b 576
c4a3d09a 577 /* Any other names are assumed to be debugger internal variables. */
c906108c
SS
578
579 write_exp_elt_opcode (OP_INTERNALVAR);
c4a3d09a 580 write_exp_elt_intern (create_internalvar (copy_name (str) + 1));
c5aa993b 581 write_exp_elt_opcode (OP_INTERNALVAR);
c906108c 582 return;
c5aa993b 583handle_last:
c906108c
SS
584 write_exp_elt_opcode (OP_LAST);
585 write_exp_elt_longcst ((LONGEST) i);
586 write_exp_elt_opcode (OP_LAST);
587 return;
c5aa993b 588handle_register:
c906108c 589 write_exp_elt_opcode (OP_REGISTER);
67f3407f
DJ
590 str.length--;
591 str.ptr++;
592 write_exp_string (str);
c5aa993b 593 write_exp_elt_opcode (OP_REGISTER);
c906108c
SS
594 return;
595}
596
597
c906108c 598char *
fba45db2 599find_template_name_end (char *p)
c906108c
SS
600{
601 int depth = 1;
602 int just_seen_right = 0;
603 int just_seen_colon = 0;
604 int just_seen_space = 0;
c5aa993b 605
c906108c
SS
606 if (!p || (*p != '<'))
607 return 0;
608
609 while (*++p)
610 {
611 switch (*p)
c5aa993b
JM
612 {
613 case '\'':
614 case '\"':
615 case '{':
616 case '}':
617 /* In future, may want to allow these?? */
618 return 0;
619 case '<':
620 depth++; /* start nested template */
621 if (just_seen_colon || just_seen_right || just_seen_space)
622 return 0; /* but not after : or :: or > or space */
623 break;
624 case '>':
625 if (just_seen_colon || just_seen_right)
626 return 0; /* end a (nested?) template */
627 just_seen_right = 1; /* but not after : or :: */
628 if (--depth == 0) /* also disallow >>, insist on > > */
629 return ++p; /* if outermost ended, return */
630 break;
631 case ':':
632 if (just_seen_space || (just_seen_colon > 1))
633 return 0; /* nested class spec coming up */
634 just_seen_colon++; /* we allow :: but not :::: */
635 break;
636 case ' ':
637 break;
638 default:
639 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
640 (*p >= 'A' && *p <= 'Z') ||
641 (*p >= '0' && *p <= '9') ||
642 (*p == '_') || (*p == ',') || /* commas for template args */
643 (*p == '&') || (*p == '*') || /* pointer and ref types */
644 (*p == '(') || (*p == ')') || /* function types */
645 (*p == '[') || (*p == ']'))) /* array types */
646 return 0;
647 }
c906108c 648 if (*p != ' ')
c5aa993b 649 just_seen_space = 0;
c906108c 650 if (*p != ':')
c5aa993b 651 just_seen_colon = 0;
c906108c 652 if (*p != '>')
c5aa993b 653 just_seen_right = 0;
c906108c
SS
654 }
655 return 0;
656}
c5aa993b 657\f
c906108c
SS
658
659
c906108c
SS
660/* Return a null-terminated temporary copy of the name
661 of a string token. */
662
663char *
fba45db2 664copy_name (struct stoken token)
c906108c 665{
3a913e29
JB
666 /* Make sure there's enough space for the token. */
667 if (namecopy_size < token.length + 1)
668 {
669 namecopy_size = token.length + 1;
670 namecopy = xrealloc (namecopy, token.length + 1);
671 }
672
c906108c
SS
673 memcpy (namecopy, token.ptr, token.length);
674 namecopy[token.length] = 0;
3a913e29 675
c906108c
SS
676 return namecopy;
677}
678\f
679/* Reverse an expression from suffix form (in which it is constructed)
65d12d83
TT
680 to prefix form (in which we can conveniently print or execute it).
681 Ordinarily this always returns -1. However, if EXPOUT_LAST_STRUCT
682 is not -1 (i.e., we are trying to complete a field name), it will
683 return the index of the subexpression which is the left-hand-side
684 of the struct operation at EXPOUT_LAST_STRUCT. */
c906108c 685
65d12d83 686static int
f86f5ca3 687prefixify_expression (struct expression *expr)
c906108c 688{
df2a60d0 689 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
f86f5ca3
PH
690 struct expression *temp;
691 int inpos = expr->nelts, outpos = 0;
c906108c
SS
692
693 temp = (struct expression *) alloca (len);
694
695 /* Copy the original expression into temp. */
696 memcpy (temp, expr, len);
697
65d12d83 698 return prefixify_subexp (temp, expr, inpos, outpos);
c906108c
SS
699}
700
24daaebc
PH
701/* Return the number of exp_elements in the postfix subexpression
702 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
c906108c
SS
703
704int
f86f5ca3 705length_of_subexp (struct expression *expr, int endpos)
24daaebc
PH
706{
707 int oplen, args, i;
708
709 operator_length (expr, endpos, &oplen, &args);
710
711 while (args > 0)
712 {
713 oplen += length_of_subexp (expr, endpos - oplen);
714 args--;
715 }
716
717 return oplen;
718}
719
720/* Sets *OPLENP to the length of the operator whose (last) index is
721 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
722 operator takes. */
723
724void
725operator_length (struct expression *expr, int endpos, int *oplenp, int *argsp)
5f9769d1
PH
726{
727 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
728 oplenp, argsp);
729}
730
731/* Default value for operator_length in exp_descriptor vectors. */
732
733void
734operator_length_standard (struct expression *expr, int endpos,
735 int *oplenp, int *argsp)
c906108c 736{
f86f5ca3
PH
737 int oplen = 1;
738 int args = 0;
0b4e1325 739 enum f90_range_type range_type;
f86f5ca3 740 int i;
c906108c
SS
741
742 if (endpos < 1)
8a3fe4f8 743 error (_("?error in operator_length_standard"));
c906108c
SS
744
745 i = (int) expr->elts[endpos - 1].opcode;
746
747 switch (i)
748 {
749 /* C++ */
750 case OP_SCOPE:
751 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
752 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
753 break;
754
755 case OP_LONG:
756 case OP_DOUBLE:
27bc4d80 757 case OP_DECFLOAT:
c906108c
SS
758 case OP_VAR_VALUE:
759 oplen = 4;
760 break;
761
762 case OP_TYPE:
763 case OP_BOOL:
764 case OP_LAST:
c906108c
SS
765 case OP_INTERNALVAR:
766 oplen = 3;
767 break;
768
769 case OP_COMPLEX:
c5aa993b 770 oplen = 1;
c906108c 771 args = 2;
c5aa993b 772 break;
c906108c
SS
773
774 case OP_FUNCALL:
775 case OP_F77_UNDETERMINED_ARGLIST:
776 oplen = 3;
777 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
778 break;
779
646df18d 780 case OP_OBJC_MSGCALL: /* Objective C message (method) call */
53c551b7
AF
781 oplen = 4;
782 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
783 break;
784
c906108c
SS
785 case UNOP_MAX:
786 case UNOP_MIN:
787 oplen = 3;
788 break;
789
c5aa993b
JM
790 case BINOP_VAL:
791 case UNOP_CAST:
792 case UNOP_MEMVAL:
c906108c
SS
793 oplen = 3;
794 args = 1;
795 break;
796
9e35dae4
DJ
797 case UNOP_MEMVAL_TLS:
798 oplen = 4;
799 args = 1;
800 break;
801
c906108c
SS
802 case UNOP_ABS:
803 case UNOP_CAP:
804 case UNOP_CHR:
805 case UNOP_FLOAT:
806 case UNOP_HIGH:
807 case UNOP_ODD:
808 case UNOP_ORD:
809 case UNOP_TRUNC:
810 oplen = 1;
811 args = 1;
812 break;
813
814 case OP_LABELED:
815 case STRUCTOP_STRUCT:
816 case STRUCTOP_PTR:
817 args = 1;
818 /* fall through */
67f3407f 819 case OP_REGISTER:
c906108c
SS
820 case OP_M2_STRING:
821 case OP_STRING:
646df18d
AF
822 case OP_OBJC_NSSTRING: /* Objective C Foundation Class NSString constant */
823 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op */
c906108c 824 case OP_NAME:
c906108c
SS
825 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
826 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
827 break;
828
829 case OP_BITSTRING:
830 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
831 oplen = (oplen + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
832 oplen = 4 + BYTES_TO_EXP_ELEM (oplen);
833 break;
834
835 case OP_ARRAY:
836 oplen = 4;
837 args = longest_to_int (expr->elts[endpos - 2].longconst);
838 args -= longest_to_int (expr->elts[endpos - 3].longconst);
839 args += 1;
840 break;
841
842 case TERNOP_COND:
843 case TERNOP_SLICE:
844 case TERNOP_SLICE_COUNT:
845 args = 3;
846 break;
847
848 /* Modula-2 */
c5aa993b 849 case MULTI_SUBSCRIPT:
c906108c 850 oplen = 3;
c5aa993b 851 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
c906108c
SS
852 break;
853
854 case BINOP_ASSIGN_MODIFY:
855 oplen = 3;
856 args = 2;
857 break;
858
859 /* C++ */
860 case OP_THIS:
646df18d 861 case OP_OBJC_SELF:
c906108c
SS
862 oplen = 2;
863 break;
864
0b4e1325
WZ
865 case OP_F90_RANGE:
866 oplen = 3;
867
868 range_type = longest_to_int (expr->elts[endpos - 2].longconst);
869 switch (range_type)
870 {
871 case LOW_BOUND_DEFAULT:
872 case HIGH_BOUND_DEFAULT:
873 args = 1;
874 break;
875 case BOTH_BOUND_DEFAULT:
876 args = 0;
877 break;
878 case NONE_BOUND_DEFAULT:
879 args = 2;
880 break;
881 }
882
883 break;
884
c906108c
SS
885 default:
886 args = 1 + (i < (int) BINOP_END);
887 }
888
24daaebc
PH
889 *oplenp = oplen;
890 *argsp = args;
c906108c
SS
891}
892
893/* Copy the subexpression ending just before index INEND in INEXPR
894 into OUTEXPR, starting at index OUTBEG.
65d12d83
TT
895 In the process, convert it from suffix to prefix form.
896 If EXPOUT_LAST_STRUCT is -1, then this function always returns -1.
897 Otherwise, it returns the index of the subexpression which is the
898 left-hand-side of the expression at EXPOUT_LAST_STRUCT. */
c906108c 899
65d12d83 900static int
f86f5ca3
PH
901prefixify_subexp (struct expression *inexpr,
902 struct expression *outexpr, int inend, int outbeg)
c906108c 903{
24daaebc
PH
904 int oplen;
905 int args;
f86f5ca3 906 int i;
c906108c
SS
907 int *arglens;
908 enum exp_opcode opcode;
65d12d83 909 int result = -1;
c906108c 910
24daaebc 911 operator_length (inexpr, inend, &oplen, &args);
c906108c
SS
912
913 /* Copy the final operator itself, from the end of the input
914 to the beginning of the output. */
915 inend -= oplen;
916 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
917 EXP_ELEM_TO_BYTES (oplen));
918 outbeg += oplen;
919
65d12d83
TT
920 if (expout_last_struct == inend)
921 result = outbeg - oplen;
922
c906108c
SS
923 /* Find the lengths of the arg subexpressions. */
924 arglens = (int *) alloca (args * sizeof (int));
925 for (i = args - 1; i >= 0; i--)
926 {
927 oplen = length_of_subexp (inexpr, inend);
928 arglens[i] = oplen;
929 inend -= oplen;
930 }
931
932 /* Now copy each subexpression, preserving the order of
933 the subexpressions, but prefixifying each one.
934 In this loop, inend starts at the beginning of
935 the expression this level is working on
936 and marches forward over the arguments.
937 outbeg does similarly in the output. */
938 for (i = 0; i < args; i++)
939 {
65d12d83 940 int r;
c906108c
SS
941 oplen = arglens[i];
942 inend += oplen;
65d12d83
TT
943 r = prefixify_subexp (inexpr, outexpr, inend, outbeg);
944 if (r != -1)
945 {
946 /* Return immediately. We probably have only parsed a
947 partial expression, so we don't want to try to reverse
948 the other operands. */
949 return r;
950 }
c906108c
SS
951 outbeg += oplen;
952 }
65d12d83
TT
953
954 return result;
c906108c
SS
955}
956\f
957/* This page contains the two entry points to this file. */
958
959/* Read an expression from the string *STRINGPTR points to,
960 parse it, and return a pointer to a struct expression that we malloc.
961 Use block BLOCK as the lexical context for variable names;
962 if BLOCK is zero, use the block of the selected stack frame.
963 Meanwhile, advance *STRINGPTR to point after the expression,
964 at the first nonwhite character that is not part of the expression
965 (possibly a null character).
966
967 If COMMA is nonzero, stop if a comma is reached. */
968
969struct expression *
fba45db2 970parse_exp_1 (char **stringptr, struct block *block, int comma)
e85c3284 971{
65d12d83 972 return parse_exp_in_context (stringptr, block, comma, 0, NULL);
e85c3284
PH
973}
974
975/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
65d12d83
TT
976 no value is expected from the expression.
977 OUT_SUBEXP is set when attempting to complete a field name; in this
978 case it is set to the index of the subexpression on the
979 left-hand-side of the struct op. If not doing such completion, it
980 is left untouched. */
e85c3284
PH
981
982static struct expression *
983parse_exp_in_context (char **stringptr, struct block *block, int comma,
65d12d83 984 int void_context_p, int *out_subexp)
c906108c 985{
65d12d83 986 volatile struct gdb_exception except;
c906108c 987 struct cleanup *old_chain;
65d12d83 988 int subexp;
c906108c
SS
989
990 lexptr = *stringptr;
665132f9 991 prev_lexptr = NULL;
c906108c
SS
992
993 paren_depth = 0;
994 type_stack_depth = 0;
65d12d83 995 expout_last_struct = -1;
c906108c
SS
996
997 comma_terminates = comma;
998
999 if (lexptr == 0 || *lexptr == 0)
e2e0b3e5 1000 error_no_arg (_("expression to compute"));
c906108c 1001
74b7792f 1002 old_chain = make_cleanup (free_funcalls, 0 /*ignore*/);
c906108c
SS
1003 funcall_chain = 0;
1004
d705c43c 1005 expression_context_block = block;
59f92a09 1006
d705c43c
PA
1007 /* If no context specified, try using the current frame, if any. */
1008 if (!expression_context_block)
1009 expression_context_block = get_selected_block (&expression_context_pc);
1010 else
1011 expression_context_pc = BLOCK_START (expression_context_block);
59f92a09 1012
d705c43c 1013 /* Fall back to using the current source static context, if any. */
59f92a09 1014
d705c43c 1015 if (!expression_context_block)
59f92a09
FF
1016 {
1017 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1018 if (cursal.symtab)
d705c43c
PA
1019 expression_context_block
1020 = BLOCKVECTOR_BLOCK (BLOCKVECTOR (cursal.symtab), STATIC_BLOCK);
1021 if (expression_context_block)
1022 expression_context_pc = BLOCK_START (expression_context_block);
84f0252a 1023 }
c906108c 1024
c906108c
SS
1025 expout_size = 10;
1026 expout_ptr = 0;
1027 expout = (struct expression *)
1028 xmalloc (sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_size));
1029 expout->language_defn = current_language;
3e79cecf 1030 expout->gdbarch = current_gdbarch;
c906108c 1031
65d12d83
TT
1032 TRY_CATCH (except, RETURN_MASK_ALL)
1033 {
1034 if (current_language->la_parser ())
1035 current_language->la_error (NULL);
1036 }
1037 if (except.reason < 0)
1038 {
1039 if (! in_parse_field)
1040 {
1041 xfree (expout);
1042 throw_exception (except);
1043 }
1044 }
c906108c
SS
1045
1046 discard_cleanups (old_chain);
1047
1048 /* Record the actual number of expression elements, and then
1049 reallocate the expression memory so that we free up any
1050 excess elements. */
1051
1052 expout->nelts = expout_ptr;
1053 expout = (struct expression *)
1054 xrealloc ((char *) expout,
1055 sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_ptr));;
1056
1057 /* Convert expression from postfix form as generated by yacc
1058 parser, to a prefix form. */
1059
c906108c 1060 if (expressiondebug)
24daaebc
PH
1061 dump_raw_expression (expout, gdb_stdlog,
1062 "before conversion to prefix form");
c906108c 1063
65d12d83
TT
1064 subexp = prefixify_expression (expout);
1065 if (out_subexp)
1066 *out_subexp = subexp;
c906108c 1067
e85c3284
PH
1068 current_language->la_post_parser (&expout, void_context_p);
1069
c906108c 1070 if (expressiondebug)
24daaebc 1071 dump_prefix_expression (expout, gdb_stdlog);
c906108c
SS
1072
1073 *stringptr = lexptr;
1074 return expout;
1075}
1076
1077/* Parse STRING as an expression, and complain if this fails
1078 to use up all of the contents of STRING. */
1079
1080struct expression *
fba45db2 1081parse_expression (char *string)
c906108c 1082{
f86f5ca3 1083 struct expression *exp;
c906108c
SS
1084 exp = parse_exp_1 (&string, 0, 0);
1085 if (*string)
8a3fe4f8 1086 error (_("Junk after end of expression."));
c906108c
SS
1087 return exp;
1088}
e85c3284 1089
65d12d83
TT
1090/* Parse STRING as an expression. If parsing ends in the middle of a
1091 field reference, return the type of the left-hand-side of the
1092 reference; furthermore, if the parsing ends in the field name,
1093 return the field name in *NAME. In all other cases, return NULL. */
1094
1095struct type *
1096parse_field_expression (char *string, char **name)
1097{
1098 struct expression *exp = NULL;
1099 struct value *val;
1100 int subexp;
1101 volatile struct gdb_exception except;
1102
1103 TRY_CATCH (except, RETURN_MASK_ALL)
1104 {
1105 in_parse_field = 1;
1106 exp = parse_exp_in_context (&string, 0, 0, 0, &subexp);
1107 }
1108 in_parse_field = 0;
1109 if (except.reason < 0 || ! exp)
1110 return NULL;
1111 if (expout_last_struct == -1)
1112 {
1113 xfree (exp);
1114 return NULL;
1115 }
1116
1117 *name = extract_field_op (exp, &subexp);
1118 if (!*name)
1119 {
1120 xfree (exp);
1121 return NULL;
1122 }
1123 val = evaluate_subexpression_type (exp, subexp);
1124 xfree (exp);
1125
1126 return value_type (val);
1127}
1128
e85c3284
PH
1129/* A post-parser that does nothing */
1130
e85c3284
PH
1131void
1132null_post_parser (struct expression **exp, int void_context_p)
1133{
1134}
c906108c
SS
1135\f
1136/* Stuff for maintaining a stack of types. Currently just used by C, but
1137 probably useful for any language which declares its types "backwards". */
1138
47663de5
MS
1139static void
1140check_type_stack_depth (void)
c906108c
SS
1141{
1142 if (type_stack_depth == type_stack_size)
1143 {
1144 type_stack_size *= 2;
1145 type_stack = (union type_stack_elt *)
1146 xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
1147 }
47663de5
MS
1148}
1149
1150void
1151push_type (enum type_pieces tp)
1152{
1153 check_type_stack_depth ();
c906108c
SS
1154 type_stack[type_stack_depth++].piece = tp;
1155}
1156
1157void
fba45db2 1158push_type_int (int n)
c906108c 1159{
47663de5 1160 check_type_stack_depth ();
c906108c
SS
1161 type_stack[type_stack_depth++].int_val = n;
1162}
1163
47663de5
MS
1164void
1165push_type_address_space (char *string)
1166{
1167 push_type_int (address_space_name_to_int (string));
1168}
1169
c5aa993b 1170enum type_pieces
fba45db2 1171pop_type (void)
c906108c
SS
1172{
1173 if (type_stack_depth)
1174 return type_stack[--type_stack_depth].piece;
1175 return tp_end;
1176}
1177
1178int
fba45db2 1179pop_type_int (void)
c906108c
SS
1180{
1181 if (type_stack_depth)
1182 return type_stack[--type_stack_depth].int_val;
1183 /* "Can't happen". */
1184 return 0;
1185}
1186
1187/* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1188 as modified by all the stuff on the stack. */
1189struct type *
fba45db2 1190follow_types (struct type *follow_type)
c906108c
SS
1191{
1192 int done = 0;
2e2394a0
MS
1193 int make_const = 0;
1194 int make_volatile = 0;
47663de5 1195 int make_addr_space = 0;
c906108c
SS
1196 int array_size;
1197 struct type *range_type;
1198
1199 while (!done)
1200 switch (pop_type ())
1201 {
1202 case tp_end:
1203 done = 1;
2e2394a0
MS
1204 if (make_const)
1205 follow_type = make_cv_type (make_const,
1206 TYPE_VOLATILE (follow_type),
1207 follow_type, 0);
1208 if (make_volatile)
1209 follow_type = make_cv_type (TYPE_CONST (follow_type),
1210 make_volatile,
1211 follow_type, 0);
47663de5
MS
1212 if (make_addr_space)
1213 follow_type = make_type_with_address_space (follow_type,
1214 make_addr_space);
1215 make_const = make_volatile = 0;
1216 make_addr_space = 0;
2e2394a0
MS
1217 break;
1218 case tp_const:
1219 make_const = 1;
1220 break;
1221 case tp_volatile:
1222 make_volatile = 1;
c906108c 1223 break;
47663de5
MS
1224 case tp_space_identifier:
1225 make_addr_space = pop_type_int ();
1226 break;
c906108c
SS
1227 case tp_pointer:
1228 follow_type = lookup_pointer_type (follow_type);
2e2394a0
MS
1229 if (make_const)
1230 follow_type = make_cv_type (make_const,
1231 TYPE_VOLATILE (follow_type),
1232 follow_type, 0);
1233 if (make_volatile)
1234 follow_type = make_cv_type (TYPE_CONST (follow_type),
1235 make_volatile,
1236 follow_type, 0);
47663de5
MS
1237 if (make_addr_space)
1238 follow_type = make_type_with_address_space (follow_type,
1239 make_addr_space);
2e2394a0 1240 make_const = make_volatile = 0;
47663de5 1241 make_addr_space = 0;
c906108c
SS
1242 break;
1243 case tp_reference:
1244 follow_type = lookup_reference_type (follow_type);
2e2394a0 1245 if (make_const)
47663de5
MS
1246 follow_type = make_cv_type (make_const,
1247 TYPE_VOLATILE (follow_type),
1248 follow_type, 0);
2e2394a0 1249 if (make_volatile)
47663de5
MS
1250 follow_type = make_cv_type (TYPE_CONST (follow_type),
1251 make_volatile,
1252 follow_type, 0);
1253 if (make_addr_space)
1254 follow_type = make_type_with_address_space (follow_type,
1255 make_addr_space);
2e2394a0 1256 make_const = make_volatile = 0;
47663de5 1257 make_addr_space = 0;
c906108c
SS
1258 break;
1259 case tp_array:
1260 array_size = pop_type_int ();
1261 /* FIXME-type-allocation: need a way to free this type when we are
1262 done with it. */
1263 range_type =
1264 create_range_type ((struct type *) NULL,
1265 builtin_type_int, 0,
1266 array_size >= 0 ? array_size - 1 : 0);
1267 follow_type =
1268 create_array_type ((struct type *) NULL,
1269 follow_type, range_type);
1270 if (array_size < 0)
c5aa993b 1271 TYPE_ARRAY_UPPER_BOUND_TYPE (follow_type)
c906108c
SS
1272 = BOUND_CANNOT_BE_DETERMINED;
1273 break;
1274 case tp_function:
1275 /* FIXME-type-allocation: need a way to free this type when we are
1276 done with it. */
1277 follow_type = lookup_function_type (follow_type);
1278 break;
1279 }
1280 return follow_type;
1281}
1282\f
f461f5cf
PM
1283/* This function avoids direct calls to fprintf
1284 in the parser generated debug code. */
1285void
1286parser_fprintf (FILE *x, const char *y, ...)
1287{
1288 va_list args;
1289 va_start (args, y);
1290 if (x == stderr)
1291 vfprintf_unfiltered (gdb_stderr, y, args);
1292 else
1293 {
1294 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1295 vfprintf_unfiltered (gdb_stderr, y, args);
1296 }
1297 va_end (args);
1298}
1299
ac9a91a7 1300void
fba45db2 1301_initialize_parse (void)
ac9a91a7
JM
1302{
1303 type_stack_size = 80;
1304 type_stack_depth = 0;
1305 type_stack = (union type_stack_elt *)
1306 xmalloc (type_stack_size * sizeof (*type_stack));
1307
85c07804
AC
1308 add_setshow_zinteger_cmd ("expression", class_maintenance,
1309 &expressiondebug, _("\
1310Set expression debugging."), _("\
1311Show expression debugging."), _("\
1312When non-zero, the internal representation of expressions will be printed."),
1313 NULL,
920d2a44 1314 show_expressiondebug,
85c07804 1315 &setdebuglist, &showdebuglist);
c906108c 1316}