* linux-nat.c (linux_nat_new_thread): New variable.
[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;
472
c906108c
SS
473 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
474 and $$digits (equivalent to $<-digits> if you could type that). */
475
c906108c
SS
476 int negate = 0;
477 int i = 1;
478 /* Double dollar means negate the number and add -1 as well.
479 Thus $$ alone means -1. */
480 if (str.length >= 2 && str.ptr[1] == '$')
481 {
482 negate = 1;
483 i = 2;
484 }
485 if (i == str.length)
486 {
487 /* Just dollars (one or two) */
c5aa993b 488 i = -negate;
c906108c
SS
489 goto handle_last;
490 }
491 /* Is the rest of the token digits? */
492 for (; i < str.length; i++)
493 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
494 break;
495 if (i == str.length)
496 {
497 i = atoi (str.ptr + 1 + negate);
498 if (negate)
c5aa993b 499 i = -i;
c906108c
SS
500 goto handle_last;
501 }
c5aa993b 502
c906108c
SS
503 /* Handle tokens that refer to machine registers:
504 $ followed by a register name. */
206415a3 505 i = frame_map_name_to_regnum (deprecated_safe_get_selected_frame (),
eb8bc282 506 str.ptr + 1, str.length - 1);
c5aa993b 507 if (i >= 0)
c906108c
SS
508 goto handle_register;
509
d7318818
RC
510 /* On some systems, such as HP-UX and hppa-linux, certain system routines
511 have names beginning with $ or $$. Check for those, first. */
512
513 sym = lookup_symbol (copy_name (str), (struct block *) NULL,
514 VAR_DOMAIN, (int *) NULL, (struct symtab **) NULL);
515 if (sym)
516 {
517 write_exp_elt_opcode (OP_VAR_VALUE);
518 write_exp_elt_block (block_found); /* set by lookup_symbol */
519 write_exp_elt_sym (sym);
520 write_exp_elt_opcode (OP_VAR_VALUE);
521 return;
522 }
523 msym = lookup_minimal_symbol (copy_name (str), NULL, NULL);
524 if (msym)
c906108c 525 {
d7318818
RC
526 write_exp_msymbol (msym,
527 lookup_function_type (builtin_type_int),
528 builtin_type_int);
529 return;
c906108c 530 }
c5aa993b 531
c906108c
SS
532 /* Any other names starting in $ are debugger internal variables. */
533
534 write_exp_elt_opcode (OP_INTERNALVAR);
535 write_exp_elt_intern (lookup_internalvar (copy_name (str) + 1));
c5aa993b 536 write_exp_elt_opcode (OP_INTERNALVAR);
c906108c 537 return;
c5aa993b 538handle_last:
c906108c
SS
539 write_exp_elt_opcode (OP_LAST);
540 write_exp_elt_longcst ((LONGEST) i);
541 write_exp_elt_opcode (OP_LAST);
542 return;
c5aa993b 543handle_register:
c906108c 544 write_exp_elt_opcode (OP_REGISTER);
67f3407f
DJ
545 str.length--;
546 str.ptr++;
547 write_exp_string (str);
c5aa993b 548 write_exp_elt_opcode (OP_REGISTER);
c906108c
SS
549 return;
550}
551
552
c906108c 553char *
fba45db2 554find_template_name_end (char *p)
c906108c
SS
555{
556 int depth = 1;
557 int just_seen_right = 0;
558 int just_seen_colon = 0;
559 int just_seen_space = 0;
c5aa993b 560
c906108c
SS
561 if (!p || (*p != '<'))
562 return 0;
563
564 while (*++p)
565 {
566 switch (*p)
c5aa993b
JM
567 {
568 case '\'':
569 case '\"':
570 case '{':
571 case '}':
572 /* In future, may want to allow these?? */
573 return 0;
574 case '<':
575 depth++; /* start nested template */
576 if (just_seen_colon || just_seen_right || just_seen_space)
577 return 0; /* but not after : or :: or > or space */
578 break;
579 case '>':
580 if (just_seen_colon || just_seen_right)
581 return 0; /* end a (nested?) template */
582 just_seen_right = 1; /* but not after : or :: */
583 if (--depth == 0) /* also disallow >>, insist on > > */
584 return ++p; /* if outermost ended, return */
585 break;
586 case ':':
587 if (just_seen_space || (just_seen_colon > 1))
588 return 0; /* nested class spec coming up */
589 just_seen_colon++; /* we allow :: but not :::: */
590 break;
591 case ' ':
592 break;
593 default:
594 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
595 (*p >= 'A' && *p <= 'Z') ||
596 (*p >= '0' && *p <= '9') ||
597 (*p == '_') || (*p == ',') || /* commas for template args */
598 (*p == '&') || (*p == '*') || /* pointer and ref types */
599 (*p == '(') || (*p == ')') || /* function types */
600 (*p == '[') || (*p == ']'))) /* array types */
601 return 0;
602 }
c906108c 603 if (*p != ' ')
c5aa993b 604 just_seen_space = 0;
c906108c 605 if (*p != ':')
c5aa993b 606 just_seen_colon = 0;
c906108c 607 if (*p != '>')
c5aa993b 608 just_seen_right = 0;
c906108c
SS
609 }
610 return 0;
611}
c5aa993b 612\f
c906108c
SS
613
614
c906108c
SS
615/* Return a null-terminated temporary copy of the name
616 of a string token. */
617
618char *
fba45db2 619copy_name (struct stoken token)
c906108c 620{
3a913e29
JB
621 /* Make sure there's enough space for the token. */
622 if (namecopy_size < token.length + 1)
623 {
624 namecopy_size = token.length + 1;
625 namecopy = xrealloc (namecopy, token.length + 1);
626 }
627
c906108c
SS
628 memcpy (namecopy, token.ptr, token.length);
629 namecopy[token.length] = 0;
3a913e29 630
c906108c
SS
631 return namecopy;
632}
633\f
634/* Reverse an expression from suffix form (in which it is constructed)
635 to prefix form (in which we can conveniently print or execute it). */
636
637static void
f86f5ca3 638prefixify_expression (struct expression *expr)
c906108c 639{
f86f5ca3 640 int len =
c5aa993b 641 sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
f86f5ca3
PH
642 struct expression *temp;
643 int inpos = expr->nelts, outpos = 0;
c906108c
SS
644
645 temp = (struct expression *) alloca (len);
646
647 /* Copy the original expression into temp. */
648 memcpy (temp, expr, len);
649
650 prefixify_subexp (temp, expr, inpos, outpos);
651}
652
24daaebc
PH
653/* Return the number of exp_elements in the postfix subexpression
654 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
c906108c
SS
655
656int
f86f5ca3 657length_of_subexp (struct expression *expr, int endpos)
24daaebc
PH
658{
659 int oplen, args, i;
660
661 operator_length (expr, endpos, &oplen, &args);
662
663 while (args > 0)
664 {
665 oplen += length_of_subexp (expr, endpos - oplen);
666 args--;
667 }
668
669 return oplen;
670}
671
672/* Sets *OPLENP to the length of the operator whose (last) index is
673 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
674 operator takes. */
675
676void
677operator_length (struct expression *expr, int endpos, int *oplenp, int *argsp)
5f9769d1
PH
678{
679 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
680 oplenp, argsp);
681}
682
683/* Default value for operator_length in exp_descriptor vectors. */
684
685void
686operator_length_standard (struct expression *expr, int endpos,
687 int *oplenp, int *argsp)
c906108c 688{
f86f5ca3
PH
689 int oplen = 1;
690 int args = 0;
0b4e1325 691 enum f90_range_type range_type;
f86f5ca3 692 int i;
c906108c
SS
693
694 if (endpos < 1)
8a3fe4f8 695 error (_("?error in operator_length_standard"));
c906108c
SS
696
697 i = (int) expr->elts[endpos - 1].opcode;
698
699 switch (i)
700 {
701 /* C++ */
702 case OP_SCOPE:
703 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
704 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
705 break;
706
707 case OP_LONG:
708 case OP_DOUBLE:
709 case OP_VAR_VALUE:
710 oplen = 4;
711 break;
712
713 case OP_TYPE:
714 case OP_BOOL:
715 case OP_LAST:
c906108c
SS
716 case OP_INTERNALVAR:
717 oplen = 3;
718 break;
719
720 case OP_COMPLEX:
c5aa993b 721 oplen = 1;
c906108c 722 args = 2;
c5aa993b 723 break;
c906108c
SS
724
725 case OP_FUNCALL:
726 case OP_F77_UNDETERMINED_ARGLIST:
727 oplen = 3;
728 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
729 break;
730
646df18d 731 case OP_OBJC_MSGCALL: /* Objective C message (method) call */
53c551b7
AF
732 oplen = 4;
733 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
734 break;
735
c906108c
SS
736 case UNOP_MAX:
737 case UNOP_MIN:
738 oplen = 3;
739 break;
740
c5aa993b
JM
741 case BINOP_VAL:
742 case UNOP_CAST:
743 case UNOP_MEMVAL:
c906108c
SS
744 oplen = 3;
745 args = 1;
746 break;
747
9e35dae4
DJ
748 case UNOP_MEMVAL_TLS:
749 oplen = 4;
750 args = 1;
751 break;
752
c906108c
SS
753 case UNOP_ABS:
754 case UNOP_CAP:
755 case UNOP_CHR:
756 case UNOP_FLOAT:
757 case UNOP_HIGH:
758 case UNOP_ODD:
759 case UNOP_ORD:
760 case UNOP_TRUNC:
761 oplen = 1;
762 args = 1;
763 break;
764
765 case OP_LABELED:
766 case STRUCTOP_STRUCT:
767 case STRUCTOP_PTR:
768 args = 1;
769 /* fall through */
67f3407f 770 case OP_REGISTER:
c906108c
SS
771 case OP_M2_STRING:
772 case OP_STRING:
646df18d
AF
773 case OP_OBJC_NSSTRING: /* Objective C Foundation Class NSString constant */
774 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op */
c906108c 775 case OP_NAME:
c906108c
SS
776 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
777 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
778 break;
779
780 case OP_BITSTRING:
781 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
782 oplen = (oplen + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
783 oplen = 4 + BYTES_TO_EXP_ELEM (oplen);
784 break;
785
786 case OP_ARRAY:
787 oplen = 4;
788 args = longest_to_int (expr->elts[endpos - 2].longconst);
789 args -= longest_to_int (expr->elts[endpos - 3].longconst);
790 args += 1;
791 break;
792
793 case TERNOP_COND:
794 case TERNOP_SLICE:
795 case TERNOP_SLICE_COUNT:
796 args = 3;
797 break;
798
799 /* Modula-2 */
c5aa993b 800 case MULTI_SUBSCRIPT:
c906108c 801 oplen = 3;
c5aa993b 802 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
c906108c
SS
803 break;
804
805 case BINOP_ASSIGN_MODIFY:
806 oplen = 3;
807 args = 2;
808 break;
809
810 /* C++ */
811 case OP_THIS:
646df18d 812 case OP_OBJC_SELF:
c906108c
SS
813 oplen = 2;
814 break;
815
0b4e1325
WZ
816 case OP_F90_RANGE:
817 oplen = 3;
818
819 range_type = longest_to_int (expr->elts[endpos - 2].longconst);
820 switch (range_type)
821 {
822 case LOW_BOUND_DEFAULT:
823 case HIGH_BOUND_DEFAULT:
824 args = 1;
825 break;
826 case BOTH_BOUND_DEFAULT:
827 args = 0;
828 break;
829 case NONE_BOUND_DEFAULT:
830 args = 2;
831 break;
832 }
833
834 break;
835
c906108c
SS
836 default:
837 args = 1 + (i < (int) BINOP_END);
838 }
839
24daaebc
PH
840 *oplenp = oplen;
841 *argsp = args;
c906108c
SS
842}
843
844/* Copy the subexpression ending just before index INEND in INEXPR
845 into OUTEXPR, starting at index OUTBEG.
846 In the process, convert it from suffix to prefix form. */
847
848static void
f86f5ca3
PH
849prefixify_subexp (struct expression *inexpr,
850 struct expression *outexpr, int inend, int outbeg)
c906108c 851{
24daaebc
PH
852 int oplen;
853 int args;
f86f5ca3 854 int i;
c906108c
SS
855 int *arglens;
856 enum exp_opcode opcode;
857
24daaebc 858 operator_length (inexpr, inend, &oplen, &args);
c906108c
SS
859
860 /* Copy the final operator itself, from the end of the input
861 to the beginning of the output. */
862 inend -= oplen;
863 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
864 EXP_ELEM_TO_BYTES (oplen));
865 outbeg += oplen;
866
867 /* Find the lengths of the arg subexpressions. */
868 arglens = (int *) alloca (args * sizeof (int));
869 for (i = args - 1; i >= 0; i--)
870 {
871 oplen = length_of_subexp (inexpr, inend);
872 arglens[i] = oplen;
873 inend -= oplen;
874 }
875
876 /* Now copy each subexpression, preserving the order of
877 the subexpressions, but prefixifying each one.
878 In this loop, inend starts at the beginning of
879 the expression this level is working on
880 and marches forward over the arguments.
881 outbeg does similarly in the output. */
882 for (i = 0; i < args; i++)
883 {
884 oplen = arglens[i];
885 inend += oplen;
886 prefixify_subexp (inexpr, outexpr, inend, outbeg);
887 outbeg += oplen;
888 }
889}
890\f
891/* This page contains the two entry points to this file. */
892
893/* Read an expression from the string *STRINGPTR points to,
894 parse it, and return a pointer to a struct expression that we malloc.
895 Use block BLOCK as the lexical context for variable names;
896 if BLOCK is zero, use the block of the selected stack frame.
897 Meanwhile, advance *STRINGPTR to point after the expression,
898 at the first nonwhite character that is not part of the expression
899 (possibly a null character).
900
901 If COMMA is nonzero, stop if a comma is reached. */
902
903struct expression *
fba45db2 904parse_exp_1 (char **stringptr, struct block *block, int comma)
e85c3284
PH
905{
906 return parse_exp_in_context (stringptr, block, comma, 0);
907}
908
909/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
910 no value is expected from the expression. */
911
912static struct expression *
913parse_exp_in_context (char **stringptr, struct block *block, int comma,
914 int void_context_p)
c906108c
SS
915{
916 struct cleanup *old_chain;
917
918 lexptr = *stringptr;
665132f9 919 prev_lexptr = NULL;
c906108c
SS
920
921 paren_depth = 0;
922 type_stack_depth = 0;
923
924 comma_terminates = comma;
925
926 if (lexptr == 0 || *lexptr == 0)
e2e0b3e5 927 error_no_arg (_("expression to compute"));
c906108c 928
74b7792f 929 old_chain = make_cleanup (free_funcalls, 0 /*ignore*/);
c906108c
SS
930 funcall_chain = 0;
931
59f92a09
FF
932 /* If no context specified, try using the current frame, if any. */
933
934 if (!block)
935 block = get_selected_block (&expression_context_pc);
936
937 /* Fall back to using the current source static context, if any. */
938
939 if (!block)
940 {
941 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
942 if (cursal.symtab)
943 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (cursal.symtab), STATIC_BLOCK);
944 }
945
946 /* Save the context, if specified by caller, or found above. */
947
84f0252a
JB
948 if (block)
949 {
950 expression_context_block = block;
8da065d5 951 expression_context_pc = BLOCK_START (block);
84f0252a 952 }
c906108c 953
c906108c
SS
954 expout_size = 10;
955 expout_ptr = 0;
956 expout = (struct expression *)
957 xmalloc (sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_size));
958 expout->language_defn = current_language;
c13c43fd 959 make_cleanup (free_current_contents, &expout);
c906108c
SS
960
961 if (current_language->la_parser ())
962 current_language->la_error (NULL);
963
964 discard_cleanups (old_chain);
965
966 /* Record the actual number of expression elements, and then
967 reallocate the expression memory so that we free up any
968 excess elements. */
969
970 expout->nelts = expout_ptr;
971 expout = (struct expression *)
972 xrealloc ((char *) expout,
973 sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_ptr));;
974
975 /* Convert expression from postfix form as generated by yacc
976 parser, to a prefix form. */
977
c906108c 978 if (expressiondebug)
24daaebc
PH
979 dump_raw_expression (expout, gdb_stdlog,
980 "before conversion to prefix form");
c906108c
SS
981
982 prefixify_expression (expout);
983
e85c3284
PH
984 current_language->la_post_parser (&expout, void_context_p);
985
c906108c 986 if (expressiondebug)
24daaebc 987 dump_prefix_expression (expout, gdb_stdlog);
c906108c
SS
988
989 *stringptr = lexptr;
990 return expout;
991}
992
993/* Parse STRING as an expression, and complain if this fails
994 to use up all of the contents of STRING. */
995
996struct expression *
fba45db2 997parse_expression (char *string)
c906108c 998{
f86f5ca3 999 struct expression *exp;
c906108c
SS
1000 exp = parse_exp_1 (&string, 0, 0);
1001 if (*string)
8a3fe4f8 1002 error (_("Junk after end of expression."));
c906108c
SS
1003 return exp;
1004}
e85c3284
PH
1005
1006
1007/* As for parse_expression, except that if VOID_CONTEXT_P, then
1008 no value is expected from the expression. */
1009
1010struct expression *
1011parse_expression_in_context (char *string, int void_context_p)
1012{
1013 struct expression *exp;
1014 exp = parse_exp_in_context (&string, 0, 0, void_context_p);
1015 if (*string != '\000')
8a3fe4f8 1016 error (_("Junk after end of expression."));
e85c3284
PH
1017 return exp;
1018}
1019
1020/* A post-parser that does nothing */
1021
e85c3284
PH
1022void
1023null_post_parser (struct expression **exp, int void_context_p)
1024{
1025}
c906108c
SS
1026\f
1027/* Stuff for maintaining a stack of types. Currently just used by C, but
1028 probably useful for any language which declares its types "backwards". */
1029
47663de5
MS
1030static void
1031check_type_stack_depth (void)
c906108c
SS
1032{
1033 if (type_stack_depth == type_stack_size)
1034 {
1035 type_stack_size *= 2;
1036 type_stack = (union type_stack_elt *)
1037 xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
1038 }
47663de5
MS
1039}
1040
1041void
1042push_type (enum type_pieces tp)
1043{
1044 check_type_stack_depth ();
c906108c
SS
1045 type_stack[type_stack_depth++].piece = tp;
1046}
1047
1048void
fba45db2 1049push_type_int (int n)
c906108c 1050{
47663de5 1051 check_type_stack_depth ();
c906108c
SS
1052 type_stack[type_stack_depth++].int_val = n;
1053}
1054
47663de5
MS
1055void
1056push_type_address_space (char *string)
1057{
1058 push_type_int (address_space_name_to_int (string));
1059}
1060
c5aa993b 1061enum type_pieces
fba45db2 1062pop_type (void)
c906108c
SS
1063{
1064 if (type_stack_depth)
1065 return type_stack[--type_stack_depth].piece;
1066 return tp_end;
1067}
1068
1069int
fba45db2 1070pop_type_int (void)
c906108c
SS
1071{
1072 if (type_stack_depth)
1073 return type_stack[--type_stack_depth].int_val;
1074 /* "Can't happen". */
1075 return 0;
1076}
1077
1078/* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1079 as modified by all the stuff on the stack. */
1080struct type *
fba45db2 1081follow_types (struct type *follow_type)
c906108c
SS
1082{
1083 int done = 0;
2e2394a0
MS
1084 int make_const = 0;
1085 int make_volatile = 0;
47663de5 1086 int make_addr_space = 0;
c906108c
SS
1087 int array_size;
1088 struct type *range_type;
1089
1090 while (!done)
1091 switch (pop_type ())
1092 {
1093 case tp_end:
1094 done = 1;
2e2394a0
MS
1095 if (make_const)
1096 follow_type = make_cv_type (make_const,
1097 TYPE_VOLATILE (follow_type),
1098 follow_type, 0);
1099 if (make_volatile)
1100 follow_type = make_cv_type (TYPE_CONST (follow_type),
1101 make_volatile,
1102 follow_type, 0);
47663de5
MS
1103 if (make_addr_space)
1104 follow_type = make_type_with_address_space (follow_type,
1105 make_addr_space);
1106 make_const = make_volatile = 0;
1107 make_addr_space = 0;
2e2394a0
MS
1108 break;
1109 case tp_const:
1110 make_const = 1;
1111 break;
1112 case tp_volatile:
1113 make_volatile = 1;
c906108c 1114 break;
47663de5
MS
1115 case tp_space_identifier:
1116 make_addr_space = pop_type_int ();
1117 break;
c906108c
SS
1118 case tp_pointer:
1119 follow_type = lookup_pointer_type (follow_type);
2e2394a0
MS
1120 if (make_const)
1121 follow_type = make_cv_type (make_const,
1122 TYPE_VOLATILE (follow_type),
1123 follow_type, 0);
1124 if (make_volatile)
1125 follow_type = make_cv_type (TYPE_CONST (follow_type),
1126 make_volatile,
1127 follow_type, 0);
47663de5
MS
1128 if (make_addr_space)
1129 follow_type = make_type_with_address_space (follow_type,
1130 make_addr_space);
2e2394a0 1131 make_const = make_volatile = 0;
47663de5 1132 make_addr_space = 0;
c906108c
SS
1133 break;
1134 case tp_reference:
1135 follow_type = lookup_reference_type (follow_type);
2e2394a0 1136 if (make_const)
47663de5
MS
1137 follow_type = make_cv_type (make_const,
1138 TYPE_VOLATILE (follow_type),
1139 follow_type, 0);
2e2394a0 1140 if (make_volatile)
47663de5
MS
1141 follow_type = make_cv_type (TYPE_CONST (follow_type),
1142 make_volatile,
1143 follow_type, 0);
1144 if (make_addr_space)
1145 follow_type = make_type_with_address_space (follow_type,
1146 make_addr_space);
2e2394a0 1147 make_const = make_volatile = 0;
47663de5 1148 make_addr_space = 0;
c906108c
SS
1149 break;
1150 case tp_array:
1151 array_size = pop_type_int ();
1152 /* FIXME-type-allocation: need a way to free this type when we are
1153 done with it. */
1154 range_type =
1155 create_range_type ((struct type *) NULL,
1156 builtin_type_int, 0,
1157 array_size >= 0 ? array_size - 1 : 0);
1158 follow_type =
1159 create_array_type ((struct type *) NULL,
1160 follow_type, range_type);
1161 if (array_size < 0)
c5aa993b 1162 TYPE_ARRAY_UPPER_BOUND_TYPE (follow_type)
c906108c
SS
1163 = BOUND_CANNOT_BE_DETERMINED;
1164 break;
1165 case tp_function:
1166 /* FIXME-type-allocation: need a way to free this type when we are
1167 done with it. */
1168 follow_type = lookup_function_type (follow_type);
1169 break;
1170 }
1171 return follow_type;
1172}
1173\f
f461f5cf
PM
1174/* This function avoids direct calls to fprintf
1175 in the parser generated debug code. */
1176void
1177parser_fprintf (FILE *x, const char *y, ...)
1178{
1179 va_list args;
1180 va_start (args, y);
1181 if (x == stderr)
1182 vfprintf_unfiltered (gdb_stderr, y, args);
1183 else
1184 {
1185 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1186 vfprintf_unfiltered (gdb_stderr, y, args);
1187 }
1188 va_end (args);
1189}
1190
ac9a91a7 1191void
fba45db2 1192_initialize_parse (void)
ac9a91a7
JM
1193{
1194 type_stack_size = 80;
1195 type_stack_depth = 0;
1196 type_stack = (union type_stack_elt *)
1197 xmalloc (type_stack_size * sizeof (*type_stack));
1198
85c07804
AC
1199 add_setshow_zinteger_cmd ("expression", class_maintenance,
1200 &expressiondebug, _("\
1201Set expression debugging."), _("\
1202Show expression debugging."), _("\
1203When non-zero, the internal representation of expressions will be printed."),
1204 NULL,
920d2a44 1205 show_expressiondebug,
85c07804 1206 &setdebuglist, &showdebuglist);
c906108c 1207}
This page took 0.695994 seconds and 4 git commands to generate.