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