Make base class for parser_state
[deliverable/binutils-gdb.git] / gdb / parse.c
1 /* Parse expressions for GDB.
2
3 Copyright (C) 1986-2019 Free Software Foundation, Inc.
4
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo, 1991.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22
23 /* Parse an expression from text in a string,
24 and return the result as a struct expression pointer.
25 That structure contains arithmetic operations in reverse polish,
26 with constants represented by operations that are followed by special data.
27 See expression.h for the details of the format.
28 What is important here is that it can be built up sequentially
29 during the process of parsing; the lower levels of the tree always
30 come first in the result. */
31
32 #include "defs.h"
33 #include <ctype.h>
34 #include "arch-utils.h"
35 #include "symtab.h"
36 #include "gdbtypes.h"
37 #include "frame.h"
38 #include "expression.h"
39 #include "value.h"
40 #include "command.h"
41 #include "language.h"
42 #include "f-lang.h"
43 #include "parser-defs.h"
44 #include "gdbcmd.h"
45 #include "symfile.h" /* for overlay functions */
46 #include "inferior.h"
47 #include "target-float.h"
48 #include "block.h"
49 #include "source.h"
50 #include "objfiles.h"
51 #include "user-regs.h"
52 #include <algorithm>
53 #include "common/gdb_optional.h"
54
55 /* Standard set of definitions for printing, dumping, prefixifying,
56 * and evaluating expressions. */
57
58 const struct exp_descriptor exp_descriptor_standard =
59 {
60 print_subexp_standard,
61 operator_length_standard,
62 operator_check_standard,
63 op_name_standard,
64 dump_subexp_body_standard,
65 evaluate_subexp_standard
66 };
67 \f
68 /* Global variables declared in parser-defs.h (and commented there). */
69 const struct block *expression_context_block;
70 CORE_ADDR expression_context_pc;
71 innermost_block_tracker innermost_block;
72 int arglist_len;
73 static struct type_stack type_stack;
74 const char *lexptr;
75 const char *prev_lexptr;
76 int paren_depth;
77 int comma_terminates;
78
79 /* True if parsing an expression to attempt completion. */
80 int parse_completion;
81
82 /* The index of the last struct expression directly before a '.' or
83 '->'. This is set when parsing and is only used when completing a
84 field name. It is -1 if no dereference operation was found. */
85 static int expout_last_struct = -1;
86
87 /* If we are completing a tagged type name, this will be nonzero. */
88 static enum type_code expout_tag_completion_type = TYPE_CODE_UNDEF;
89
90 /* The token for tagged type name completion. */
91 static gdb::unique_xmalloc_ptr<char> expout_completion_name;
92
93 \f
94 static unsigned int expressiondebug = 0;
95 static void
96 show_expressiondebug (struct ui_file *file, int from_tty,
97 struct cmd_list_element *c, const char *value)
98 {
99 fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
100 }
101
102
103 /* Non-zero if an expression parser should set yydebug. */
104 int parser_debug;
105
106 static void
107 show_parserdebug (struct ui_file *file, int from_tty,
108 struct cmd_list_element *c, const char *value)
109 {
110 fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
111 }
112
113
114 static int prefixify_subexp (struct expression *, struct expression *, int,
115 int);
116
117 static expression_up parse_exp_in_context (const char **, CORE_ADDR,
118 const struct block *, int,
119 int, int *,
120 innermost_block_tracker_types);
121
122 static void increase_expout_size (struct expr_builder *ps, size_t lenelt);
123
124
125 /* Documented at it's declaration. */
126
127 void
128 innermost_block_tracker::update (const struct block *b,
129 innermost_block_tracker_types t)
130 {
131 if ((m_types & t) != 0
132 && (m_innermost_block == NULL
133 || contained_in (b, m_innermost_block)))
134 m_innermost_block = b;
135 }
136
137 /* Data structure for saving values of arglist_len for function calls whose
138 arguments contain other function calls. */
139
140 static std::vector<int> *funcall_chain;
141
142 /* Begin counting arguments for a function call,
143 saving the data about any containing call. */
144
145 void
146 start_arglist (void)
147 {
148 funcall_chain->push_back (arglist_len);
149 arglist_len = 0;
150 }
151
152 /* Return the number of arguments in a function call just terminated,
153 and restore the data for the containing function call. */
154
155 int
156 end_arglist (void)
157 {
158 int val = arglist_len;
159 arglist_len = funcall_chain->back ();
160 funcall_chain->pop_back ();
161 return val;
162 }
163
164 \f
165
166 /* See definition in parser-defs.h. */
167
168 expr_builder::expr_builder (const struct language_defn *lang,
169 struct gdbarch *gdbarch)
170 : expout_size (10),
171 expout (XNEWVAR (expression,
172 (sizeof (expression)
173 + EXP_ELEM_TO_BYTES (expout_size)))),
174 expout_ptr (0)
175 {
176 expout->language_defn = lang;
177 expout->gdbarch = gdbarch;
178 }
179
180 expression_up
181 expr_builder::release ()
182 {
183 /* Record the actual number of expression elements, and then
184 reallocate the expression memory so that we free up any
185 excess elements. */
186
187 expout->nelts = expout_ptr;
188 expout.reset (XRESIZEVAR (expression, expout.release (),
189 (sizeof (expression)
190 + EXP_ELEM_TO_BYTES (expout_ptr))));
191
192 return std::move (expout);
193 }
194
195 /* This page contains the functions for adding data to the struct expression
196 being constructed. */
197
198 /* Add one element to the end of the expression. */
199
200 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
201 a register through here. */
202
203 static void
204 write_exp_elt (struct expr_builder *ps, const union exp_element *expelt)
205 {
206 if (ps->expout_ptr >= ps->expout_size)
207 {
208 ps->expout_size *= 2;
209 ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
210 (sizeof (expression)
211 + EXP_ELEM_TO_BYTES (ps->expout_size))));
212 }
213 ps->expout->elts[ps->expout_ptr++] = *expelt;
214 }
215
216 void
217 write_exp_elt_opcode (struct expr_builder *ps, enum exp_opcode expelt)
218 {
219 union exp_element tmp;
220
221 memset (&tmp, 0, sizeof (union exp_element));
222 tmp.opcode = expelt;
223 write_exp_elt (ps, &tmp);
224 }
225
226 void
227 write_exp_elt_sym (struct expr_builder *ps, struct symbol *expelt)
228 {
229 union exp_element tmp;
230
231 memset (&tmp, 0, sizeof (union exp_element));
232 tmp.symbol = expelt;
233 write_exp_elt (ps, &tmp);
234 }
235
236 void
237 write_exp_elt_msym (struct expr_builder *ps, minimal_symbol *expelt)
238 {
239 union exp_element tmp;
240
241 memset (&tmp, 0, sizeof (union exp_element));
242 tmp.msymbol = expelt;
243 write_exp_elt (ps, &tmp);
244 }
245
246 void
247 write_exp_elt_block (struct expr_builder *ps, const struct block *b)
248 {
249 union exp_element tmp;
250
251 memset (&tmp, 0, sizeof (union exp_element));
252 tmp.block = b;
253 write_exp_elt (ps, &tmp);
254 }
255
256 void
257 write_exp_elt_objfile (struct expr_builder *ps, struct objfile *objfile)
258 {
259 union exp_element tmp;
260
261 memset (&tmp, 0, sizeof (union exp_element));
262 tmp.objfile = objfile;
263 write_exp_elt (ps, &tmp);
264 }
265
266 void
267 write_exp_elt_longcst (struct expr_builder *ps, LONGEST expelt)
268 {
269 union exp_element tmp;
270
271 memset (&tmp, 0, sizeof (union exp_element));
272 tmp.longconst = expelt;
273 write_exp_elt (ps, &tmp);
274 }
275
276 void
277 write_exp_elt_floatcst (struct expr_builder *ps, const gdb_byte expelt[16])
278 {
279 union exp_element tmp;
280 int index;
281
282 for (index = 0; index < 16; index++)
283 tmp.floatconst[index] = expelt[index];
284
285 write_exp_elt (ps, &tmp);
286 }
287
288 void
289 write_exp_elt_type (struct expr_builder *ps, struct type *expelt)
290 {
291 union exp_element tmp;
292
293 memset (&tmp, 0, sizeof (union exp_element));
294 tmp.type = expelt;
295 write_exp_elt (ps, &tmp);
296 }
297
298 void
299 write_exp_elt_intern (struct expr_builder *ps, struct internalvar *expelt)
300 {
301 union exp_element tmp;
302
303 memset (&tmp, 0, sizeof (union exp_element));
304 tmp.internalvar = expelt;
305 write_exp_elt (ps, &tmp);
306 }
307
308 /* Add a string constant to the end of the expression.
309
310 String constants are stored by first writing an expression element
311 that contains the length of the string, then stuffing the string
312 constant itself into however many expression elements are needed
313 to hold it, and then writing another expression element that contains
314 the length of the string. I.e. an expression element at each end of
315 the string records the string length, so you can skip over the
316 expression elements containing the actual string bytes from either
317 end of the string. Note that this also allows gdb to handle
318 strings with embedded null bytes, as is required for some languages.
319
320 Don't be fooled by the fact that the string is null byte terminated,
321 this is strictly for the convenience of debugging gdb itself.
322 Gdb does not depend up the string being null terminated, since the
323 actual length is recorded in expression elements at each end of the
324 string. The null byte is taken into consideration when computing how
325 many expression elements are required to hold the string constant, of
326 course. */
327
328
329 void
330 write_exp_string (struct expr_builder *ps, struct stoken str)
331 {
332 int len = str.length;
333 size_t lenelt;
334 char *strdata;
335
336 /* Compute the number of expression elements required to hold the string
337 (including a null byte terminator), along with one expression element
338 at each end to record the actual string length (not including the
339 null byte terminator). */
340
341 lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
342
343 increase_expout_size (ps, lenelt);
344
345 /* Write the leading length expression element (which advances the current
346 expression element index), then write the string constant followed by a
347 terminating null byte, and then write the trailing length expression
348 element. */
349
350 write_exp_elt_longcst (ps, (LONGEST) len);
351 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
352 memcpy (strdata, str.ptr, len);
353 *(strdata + len) = '\0';
354 ps->expout_ptr += lenelt - 2;
355 write_exp_elt_longcst (ps, (LONGEST) len);
356 }
357
358 /* Add a vector of string constants to the end of the expression.
359
360 This adds an OP_STRING operation, but encodes the contents
361 differently from write_exp_string. The language is expected to
362 handle evaluation of this expression itself.
363
364 After the usual OP_STRING header, TYPE is written into the
365 expression as a long constant. The interpretation of this field is
366 up to the language evaluator.
367
368 Next, each string in VEC is written. The length is written as a
369 long constant, followed by the contents of the string. */
370
371 void
372 write_exp_string_vector (struct expr_builder *ps, int type,
373 struct stoken_vector *vec)
374 {
375 int i, len;
376 size_t n_slots;
377
378 /* Compute the size. We compute the size in number of slots to
379 avoid issues with string padding. */
380 n_slots = 0;
381 for (i = 0; i < vec->len; ++i)
382 {
383 /* One slot for the length of this element, plus the number of
384 slots needed for this string. */
385 n_slots += 1 + BYTES_TO_EXP_ELEM (vec->tokens[i].length);
386 }
387
388 /* One more slot for the type of the string. */
389 ++n_slots;
390
391 /* Now compute a phony string length. */
392 len = EXP_ELEM_TO_BYTES (n_slots) - 1;
393
394 n_slots += 4;
395 increase_expout_size (ps, n_slots);
396
397 write_exp_elt_opcode (ps, OP_STRING);
398 write_exp_elt_longcst (ps, len);
399 write_exp_elt_longcst (ps, type);
400
401 for (i = 0; i < vec->len; ++i)
402 {
403 write_exp_elt_longcst (ps, vec->tokens[i].length);
404 memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
405 vec->tokens[i].length);
406 ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
407 }
408
409 write_exp_elt_longcst (ps, len);
410 write_exp_elt_opcode (ps, OP_STRING);
411 }
412
413 /* Add a bitstring constant to the end of the expression.
414
415 Bitstring constants are stored by first writing an expression element
416 that contains the length of the bitstring (in bits), then stuffing the
417 bitstring constant itself into however many expression elements are
418 needed to hold it, and then writing another expression element that
419 contains the length of the bitstring. I.e. an expression element at
420 each end of the bitstring records the bitstring length, so you can skip
421 over the expression elements containing the actual bitstring bytes from
422 either end of the bitstring. */
423
424 void
425 write_exp_bitstring (struct expr_builder *ps, struct stoken str)
426 {
427 int bits = str.length; /* length in bits */
428 int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
429 size_t lenelt;
430 char *strdata;
431
432 /* Compute the number of expression elements required to hold the bitstring,
433 along with one expression element at each end to record the actual
434 bitstring length in bits. */
435
436 lenelt = 2 + BYTES_TO_EXP_ELEM (len);
437
438 increase_expout_size (ps, lenelt);
439
440 /* Write the leading length expression element (which advances the current
441 expression element index), then write the bitstring constant, and then
442 write the trailing length expression element. */
443
444 write_exp_elt_longcst (ps, (LONGEST) bits);
445 strdata = (char *) &ps->expout->elts[ps->expout_ptr];
446 memcpy (strdata, str.ptr, len);
447 ps->expout_ptr += lenelt - 2;
448 write_exp_elt_longcst (ps, (LONGEST) bits);
449 }
450
451 /* Return the type of MSYMBOL, a minimal symbol of OBJFILE. If
452 ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
453 address. */
454
455 type *
456 find_minsym_type_and_address (minimal_symbol *msymbol,
457 struct objfile *objfile,
458 CORE_ADDR *address_p)
459 {
460 bound_minimal_symbol bound_msym = {msymbol, objfile};
461 struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
462 enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
463
464 bool is_tls = (section != NULL
465 && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
466
467 /* The minimal symbol might point to a function descriptor;
468 resolve it to the actual code address instead. */
469 CORE_ADDR addr;
470 if (is_tls)
471 {
472 /* Addresses of TLS symbols are really offsets into a
473 per-objfile/per-thread storage block. */
474 addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym);
475 }
476 else if (msymbol_is_function (objfile, msymbol, &addr))
477 {
478 if (addr != BMSYMBOL_VALUE_ADDRESS (bound_msym))
479 {
480 /* This means we resolved a function descriptor, and we now
481 have an address for a code/text symbol instead of a data
482 symbol. */
483 if (MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
484 type = mst_text_gnu_ifunc;
485 else
486 type = mst_text;
487 section = NULL;
488 }
489 }
490 else
491 addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
492
493 if (overlay_debugging)
494 addr = symbol_overlayed_address (addr, section);
495
496 if (is_tls)
497 {
498 /* Skip translation if caller does not need the address. */
499 if (address_p != NULL)
500 *address_p = target_translate_tls_address (objfile, addr);
501 return objfile_type (objfile)->nodebug_tls_symbol;
502 }
503
504 if (address_p != NULL)
505 *address_p = addr;
506
507 switch (type)
508 {
509 case mst_text:
510 case mst_file_text:
511 case mst_solib_trampoline:
512 return objfile_type (objfile)->nodebug_text_symbol;
513
514 case mst_text_gnu_ifunc:
515 return objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
516
517 case mst_data:
518 case mst_file_data:
519 case mst_bss:
520 case mst_file_bss:
521 return objfile_type (objfile)->nodebug_data_symbol;
522
523 case mst_slot_got_plt:
524 return objfile_type (objfile)->nodebug_got_plt_symbol;
525
526 default:
527 return objfile_type (objfile)->nodebug_unknown_symbol;
528 }
529 }
530
531 /* Add the appropriate elements for a minimal symbol to the end of
532 the expression. */
533
534 void
535 write_exp_msymbol (struct expr_builder *ps,
536 struct bound_minimal_symbol bound_msym)
537 {
538 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
539 write_exp_elt_objfile (ps, bound_msym.objfile);
540 write_exp_elt_msym (ps, bound_msym.minsym);
541 write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
542 }
543
544 /* Mark the current index as the starting location of a structure
545 expression. This is used when completing on field names. */
546
547 void
548 mark_struct_expression (struct expr_builder *ps)
549 {
550 gdb_assert (parse_completion
551 && expout_tag_completion_type == TYPE_CODE_UNDEF);
552 expout_last_struct = ps->expout_ptr;
553 }
554
555 /* Indicate that the current parser invocation is completing a tag.
556 TAG is the type code of the tag, and PTR and LENGTH represent the
557 start of the tag name. */
558
559 void
560 mark_completion_tag (enum type_code tag, const char *ptr, int length)
561 {
562 gdb_assert (parse_completion
563 && expout_tag_completion_type == TYPE_CODE_UNDEF
564 && expout_completion_name == NULL
565 && expout_last_struct == -1);
566 gdb_assert (tag == TYPE_CODE_UNION
567 || tag == TYPE_CODE_STRUCT
568 || tag == TYPE_CODE_ENUM);
569 expout_tag_completion_type = tag;
570 expout_completion_name.reset (xstrndup (ptr, length));
571 }
572
573 \f
574 /* Recognize tokens that start with '$'. These include:
575
576 $regname A native register name or a "standard
577 register name".
578
579 $variable A convenience variable with a name chosen
580 by the user.
581
582 $digits Value history with index <digits>, starting
583 from the first value which has index 1.
584
585 $$digits Value history with index <digits> relative
586 to the last value. I.e. $$0 is the last
587 value, $$1 is the one previous to that, $$2
588 is the one previous to $$1, etc.
589
590 $ | $0 | $$0 The last value in the value history.
591
592 $$ An abbreviation for the second to the last
593 value in the value history, I.e. $$1 */
594
595 void
596 write_dollar_variable (struct expr_builder *ps, struct stoken str)
597 {
598 struct block_symbol sym;
599 struct bound_minimal_symbol msym;
600 struct internalvar *isym = NULL;
601
602 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
603 and $$digits (equivalent to $<-digits> if you could type that). */
604
605 int negate = 0;
606 int i = 1;
607 /* Double dollar means negate the number and add -1 as well.
608 Thus $$ alone means -1. */
609 if (str.length >= 2 && str.ptr[1] == '$')
610 {
611 negate = 1;
612 i = 2;
613 }
614 if (i == str.length)
615 {
616 /* Just dollars (one or two). */
617 i = -negate;
618 goto handle_last;
619 }
620 /* Is the rest of the token digits? */
621 for (; i < str.length; i++)
622 if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
623 break;
624 if (i == str.length)
625 {
626 i = atoi (str.ptr + 1 + negate);
627 if (negate)
628 i = -i;
629 goto handle_last;
630 }
631
632 /* Handle tokens that refer to machine registers:
633 $ followed by a register name. */
634 i = user_reg_map_name_to_regnum (ps->gdbarch (),
635 str.ptr + 1, str.length - 1);
636 if (i >= 0)
637 goto handle_register;
638
639 /* Any names starting with $ are probably debugger internal variables. */
640
641 isym = lookup_only_internalvar (copy_name (str) + 1);
642 if (isym)
643 {
644 write_exp_elt_opcode (ps, OP_INTERNALVAR);
645 write_exp_elt_intern (ps, isym);
646 write_exp_elt_opcode (ps, OP_INTERNALVAR);
647 return;
648 }
649
650 /* On some systems, such as HP-UX and hppa-linux, certain system routines
651 have names beginning with $ or $$. Check for those, first. */
652
653 sym = lookup_symbol (copy_name (str), NULL, VAR_DOMAIN, NULL);
654 if (sym.symbol)
655 {
656 write_exp_elt_opcode (ps, OP_VAR_VALUE);
657 write_exp_elt_block (ps, sym.block);
658 write_exp_elt_sym (ps, sym.symbol);
659 write_exp_elt_opcode (ps, OP_VAR_VALUE);
660 return;
661 }
662 msym = lookup_bound_minimal_symbol (copy_name (str));
663 if (msym.minsym)
664 {
665 write_exp_msymbol (ps, msym);
666 return;
667 }
668
669 /* Any other names are assumed to be debugger internal variables. */
670
671 write_exp_elt_opcode (ps, OP_INTERNALVAR);
672 write_exp_elt_intern (ps, create_internalvar (copy_name (str) + 1));
673 write_exp_elt_opcode (ps, OP_INTERNALVAR);
674 return;
675 handle_last:
676 write_exp_elt_opcode (ps, OP_LAST);
677 write_exp_elt_longcst (ps, (LONGEST) i);
678 write_exp_elt_opcode (ps, OP_LAST);
679 return;
680 handle_register:
681 write_exp_elt_opcode (ps, OP_REGISTER);
682 str.length--;
683 str.ptr++;
684 write_exp_string (ps, str);
685 write_exp_elt_opcode (ps, OP_REGISTER);
686 innermost_block.update (expression_context_block,
687 INNERMOST_BLOCK_FOR_REGISTERS);
688 return;
689 }
690
691
692 const char *
693 find_template_name_end (const char *p)
694 {
695 int depth = 1;
696 int just_seen_right = 0;
697 int just_seen_colon = 0;
698 int just_seen_space = 0;
699
700 if (!p || (*p != '<'))
701 return 0;
702
703 while (*++p)
704 {
705 switch (*p)
706 {
707 case '\'':
708 case '\"':
709 case '{':
710 case '}':
711 /* In future, may want to allow these?? */
712 return 0;
713 case '<':
714 depth++; /* start nested template */
715 if (just_seen_colon || just_seen_right || just_seen_space)
716 return 0; /* but not after : or :: or > or space */
717 break;
718 case '>':
719 if (just_seen_colon || just_seen_right)
720 return 0; /* end a (nested?) template */
721 just_seen_right = 1; /* but not after : or :: */
722 if (--depth == 0) /* also disallow >>, insist on > > */
723 return ++p; /* if outermost ended, return */
724 break;
725 case ':':
726 if (just_seen_space || (just_seen_colon > 1))
727 return 0; /* nested class spec coming up */
728 just_seen_colon++; /* we allow :: but not :::: */
729 break;
730 case ' ':
731 break;
732 default:
733 if (!((*p >= 'a' && *p <= 'z') || /* allow token chars */
734 (*p >= 'A' && *p <= 'Z') ||
735 (*p >= '0' && *p <= '9') ||
736 (*p == '_') || (*p == ',') || /* commas for template args */
737 (*p == '&') || (*p == '*') || /* pointer and ref types */
738 (*p == '(') || (*p == ')') || /* function types */
739 (*p == '[') || (*p == ']'))) /* array types */
740 return 0;
741 }
742 if (*p != ' ')
743 just_seen_space = 0;
744 if (*p != ':')
745 just_seen_colon = 0;
746 if (*p != '>')
747 just_seen_right = 0;
748 }
749 return 0;
750 }
751 \f
752
753 /* Return a null-terminated temporary copy of the name of a string token.
754
755 Tokens that refer to names do so with explicit pointer and length,
756 so they can share the storage that lexptr is parsing.
757 When it is necessary to pass a name to a function that expects
758 a null-terminated string, the substring is copied out
759 into a separate block of storage.
760
761 N.B. A single buffer is reused on each call. */
762
763 char *
764 copy_name (struct stoken token)
765 {
766 /* A temporary buffer for identifiers, so we can null-terminate them.
767 We allocate this with xrealloc. parse_exp_1 used to allocate with
768 alloca, using the size of the whole expression as a conservative
769 estimate of the space needed. However, macro expansion can
770 introduce names longer than the original expression; there's no
771 practical way to know beforehand how large that might be. */
772 static char *namecopy;
773 static size_t namecopy_size;
774
775 /* Make sure there's enough space for the token. */
776 if (namecopy_size < token.length + 1)
777 {
778 namecopy_size = token.length + 1;
779 namecopy = (char *) xrealloc (namecopy, token.length + 1);
780 }
781
782 memcpy (namecopy, token.ptr, token.length);
783 namecopy[token.length] = 0;
784
785 return namecopy;
786 }
787 \f
788
789 /* See comments on parser-defs.h. */
790
791 int
792 prefixify_expression (struct expression *expr)
793 {
794 gdb_assert (expr->nelts > 0);
795 int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
796 struct expression *temp;
797 int inpos = expr->nelts, outpos = 0;
798
799 temp = (struct expression *) alloca (len);
800
801 /* Copy the original expression into temp. */
802 memcpy (temp, expr, len);
803
804 return prefixify_subexp (temp, expr, inpos, outpos);
805 }
806
807 /* Return the number of exp_elements in the postfix subexpression
808 of EXPR whose operator is at index ENDPOS - 1 in EXPR. */
809
810 static int
811 length_of_subexp (struct expression *expr, int endpos)
812 {
813 int oplen, args;
814
815 operator_length (expr, endpos, &oplen, &args);
816
817 while (args > 0)
818 {
819 oplen += length_of_subexp (expr, endpos - oplen);
820 args--;
821 }
822
823 return oplen;
824 }
825
826 /* Sets *OPLENP to the length of the operator whose (last) index is
827 ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
828 operator takes. */
829
830 void
831 operator_length (const struct expression *expr, int endpos, int *oplenp,
832 int *argsp)
833 {
834 expr->language_defn->la_exp_desc->operator_length (expr, endpos,
835 oplenp, argsp);
836 }
837
838 /* Default value for operator_length in exp_descriptor vectors. */
839
840 void
841 operator_length_standard (const struct expression *expr, int endpos,
842 int *oplenp, int *argsp)
843 {
844 int oplen = 1;
845 int args = 0;
846 enum range_type range_type;
847 int i;
848
849 if (endpos < 1)
850 error (_("?error in operator_length_standard"));
851
852 i = (int) expr->elts[endpos - 1].opcode;
853
854 switch (i)
855 {
856 /* C++ */
857 case OP_SCOPE:
858 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
859 oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
860 break;
861
862 case OP_LONG:
863 case OP_FLOAT:
864 case OP_VAR_VALUE:
865 case OP_VAR_MSYM_VALUE:
866 oplen = 4;
867 break;
868
869 case OP_FUNC_STATIC_VAR:
870 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
871 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
872 args = 1;
873 break;
874
875 case OP_TYPE:
876 case OP_BOOL:
877 case OP_LAST:
878 case OP_INTERNALVAR:
879 case OP_VAR_ENTRY_VALUE:
880 oplen = 3;
881 break;
882
883 case OP_COMPLEX:
884 oplen = 3;
885 args = 2;
886 break;
887
888 case OP_FUNCALL:
889 case OP_F77_UNDETERMINED_ARGLIST:
890 oplen = 3;
891 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
892 break;
893
894 case TYPE_INSTANCE:
895 oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
896 args = 1;
897 break;
898
899 case OP_OBJC_MSGCALL: /* Objective C message (method) call. */
900 oplen = 4;
901 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
902 break;
903
904 case UNOP_MAX:
905 case UNOP_MIN:
906 oplen = 3;
907 break;
908
909 case UNOP_CAST_TYPE:
910 case UNOP_DYNAMIC_CAST:
911 case UNOP_REINTERPRET_CAST:
912 case UNOP_MEMVAL_TYPE:
913 oplen = 1;
914 args = 2;
915 break;
916
917 case BINOP_VAL:
918 case UNOP_CAST:
919 case UNOP_MEMVAL:
920 oplen = 3;
921 args = 1;
922 break;
923
924 case UNOP_ABS:
925 case UNOP_CAP:
926 case UNOP_CHR:
927 case UNOP_FLOAT:
928 case UNOP_HIGH:
929 case UNOP_KIND:
930 case UNOP_ODD:
931 case UNOP_ORD:
932 case UNOP_TRUNC:
933 case OP_TYPEOF:
934 case OP_DECLTYPE:
935 case OP_TYPEID:
936 oplen = 1;
937 args = 1;
938 break;
939
940 case OP_ADL_FUNC:
941 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
942 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
943 oplen++;
944 oplen++;
945 break;
946
947 case STRUCTOP_STRUCT:
948 case STRUCTOP_PTR:
949 args = 1;
950 /* fall through */
951 case OP_REGISTER:
952 case OP_M2_STRING:
953 case OP_STRING:
954 case OP_OBJC_NSSTRING: /* Objective C Foundation Class
955 NSString constant. */
956 case OP_OBJC_SELECTOR: /* Objective C "@selector" pseudo-op. */
957 case OP_NAME:
958 oplen = longest_to_int (expr->elts[endpos - 2].longconst);
959 oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
960 break;
961
962 case OP_ARRAY:
963 oplen = 4;
964 args = longest_to_int (expr->elts[endpos - 2].longconst);
965 args -= longest_to_int (expr->elts[endpos - 3].longconst);
966 args += 1;
967 break;
968
969 case TERNOP_COND:
970 case TERNOP_SLICE:
971 args = 3;
972 break;
973
974 /* Modula-2 */
975 case MULTI_SUBSCRIPT:
976 oplen = 3;
977 args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
978 break;
979
980 case BINOP_ASSIGN_MODIFY:
981 oplen = 3;
982 args = 2;
983 break;
984
985 /* C++ */
986 case OP_THIS:
987 oplen = 2;
988 break;
989
990 case OP_RANGE:
991 oplen = 3;
992 range_type = (enum range_type)
993 longest_to_int (expr->elts[endpos - 2].longconst);
994
995 switch (range_type)
996 {
997 case LOW_BOUND_DEFAULT:
998 case LOW_BOUND_DEFAULT_EXCLUSIVE:
999 case HIGH_BOUND_DEFAULT:
1000 args = 1;
1001 break;
1002 case BOTH_BOUND_DEFAULT:
1003 args = 0;
1004 break;
1005 case NONE_BOUND_DEFAULT:
1006 case NONE_BOUND_DEFAULT_EXCLUSIVE:
1007 args = 2;
1008 break;
1009 }
1010
1011 break;
1012
1013 default:
1014 args = 1 + (i < (int) BINOP_END);
1015 }
1016
1017 *oplenp = oplen;
1018 *argsp = args;
1019 }
1020
1021 /* Copy the subexpression ending just before index INEND in INEXPR
1022 into OUTEXPR, starting at index OUTBEG.
1023 In the process, convert it from suffix to prefix form.
1024 If EXPOUT_LAST_STRUCT is -1, then this function always returns -1.
1025 Otherwise, it returns the index of the subexpression which is the
1026 left-hand-side of the expression at EXPOUT_LAST_STRUCT. */
1027
1028 static int
1029 prefixify_subexp (struct expression *inexpr,
1030 struct expression *outexpr, int inend, int outbeg)
1031 {
1032 int oplen;
1033 int args;
1034 int i;
1035 int *arglens;
1036 int result = -1;
1037
1038 operator_length (inexpr, inend, &oplen, &args);
1039
1040 /* Copy the final operator itself, from the end of the input
1041 to the beginning of the output. */
1042 inend -= oplen;
1043 memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
1044 EXP_ELEM_TO_BYTES (oplen));
1045 outbeg += oplen;
1046
1047 if (expout_last_struct == inend)
1048 result = outbeg - oplen;
1049
1050 /* Find the lengths of the arg subexpressions. */
1051 arglens = (int *) alloca (args * sizeof (int));
1052 for (i = args - 1; i >= 0; i--)
1053 {
1054 oplen = length_of_subexp (inexpr, inend);
1055 arglens[i] = oplen;
1056 inend -= oplen;
1057 }
1058
1059 /* Now copy each subexpression, preserving the order of
1060 the subexpressions, but prefixifying each one.
1061 In this loop, inend starts at the beginning of
1062 the expression this level is working on
1063 and marches forward over the arguments.
1064 outbeg does similarly in the output. */
1065 for (i = 0; i < args; i++)
1066 {
1067 int r;
1068
1069 oplen = arglens[i];
1070 inend += oplen;
1071 r = prefixify_subexp (inexpr, outexpr, inend, outbeg);
1072 if (r != -1)
1073 {
1074 /* Return immediately. We probably have only parsed a
1075 partial expression, so we don't want to try to reverse
1076 the other operands. */
1077 return r;
1078 }
1079 outbeg += oplen;
1080 }
1081
1082 return result;
1083 }
1084 \f
1085 /* Read an expression from the string *STRINGPTR points to,
1086 parse it, and return a pointer to a struct expression that we malloc.
1087 Use block BLOCK as the lexical context for variable names;
1088 if BLOCK is zero, use the block of the selected stack frame.
1089 Meanwhile, advance *STRINGPTR to point after the expression,
1090 at the first nonwhite character that is not part of the expression
1091 (possibly a null character).
1092
1093 If COMMA is nonzero, stop if a comma is reached. */
1094
1095 expression_up
1096 parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
1097 int comma, innermost_block_tracker_types tracker_types)
1098 {
1099 return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
1100 tracker_types);
1101 }
1102
1103 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1104 no value is expected from the expression.
1105 OUT_SUBEXP is set when attempting to complete a field name; in this
1106 case it is set to the index of the subexpression on the
1107 left-hand-side of the struct op. If not doing such completion, it
1108 is left untouched. */
1109
1110 static expression_up
1111 parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1112 const struct block *block,
1113 int comma, int void_context_p, int *out_subexp,
1114 innermost_block_tracker_types tracker_types)
1115 {
1116 const struct language_defn *lang = NULL;
1117 int subexp;
1118
1119 lexptr = *stringptr;
1120 prev_lexptr = NULL;
1121
1122 paren_depth = 0;
1123 type_stack.elements.clear ();
1124 expout_last_struct = -1;
1125 expout_tag_completion_type = TYPE_CODE_UNDEF;
1126 expout_completion_name.reset ();
1127 innermost_block.reset (tracker_types);
1128
1129 comma_terminates = comma;
1130
1131 if (lexptr == 0 || *lexptr == 0)
1132 error_no_arg (_("expression to compute"));
1133
1134 std::vector<int> funcalls;
1135 scoped_restore save_funcall_chain = make_scoped_restore (&funcall_chain,
1136 &funcalls);
1137
1138 expression_context_block = block;
1139
1140 /* If no context specified, try using the current frame, if any. */
1141 if (!expression_context_block)
1142 expression_context_block = get_selected_block (&expression_context_pc);
1143 else if (pc == 0)
1144 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1145 else
1146 expression_context_pc = pc;
1147
1148 /* Fall back to using the current source static context, if any. */
1149
1150 if (!expression_context_block)
1151 {
1152 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1153 if (cursal.symtab)
1154 expression_context_block
1155 = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1156 STATIC_BLOCK);
1157 if (expression_context_block)
1158 expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1159 }
1160
1161 if (language_mode == language_mode_auto && block != NULL)
1162 {
1163 /* Find the language associated to the given context block.
1164 Default to the current language if it can not be determined.
1165
1166 Note that using the language corresponding to the current frame
1167 can sometimes give unexpected results. For instance, this
1168 routine is often called several times during the inferior
1169 startup phase to re-parse breakpoint expressions after
1170 a new shared library has been loaded. The language associated
1171 to the current frame at this moment is not relevant for
1172 the breakpoint. Using it would therefore be silly, so it seems
1173 better to rely on the current language rather than relying on
1174 the current frame language to parse the expression. That's why
1175 we do the following language detection only if the context block
1176 has been specifically provided. */
1177 struct symbol *func = block_linkage_function (block);
1178
1179 if (func != NULL)
1180 lang = language_def (SYMBOL_LANGUAGE (func));
1181 if (lang == NULL || lang->la_language == language_unknown)
1182 lang = current_language;
1183 }
1184 else
1185 lang = current_language;
1186
1187 /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1188 While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1189 and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1190 to the value matching SELECTED_FRAME as set by get_current_arch. */
1191
1192 parser_state ps (lang, get_current_arch ());
1193
1194 scoped_restore_current_language lang_saver;
1195 set_language (lang->la_language);
1196
1197 TRY
1198 {
1199 lang->la_parser (&ps);
1200 }
1201 CATCH (except, RETURN_MASK_ALL)
1202 {
1203 /* If parsing for completion, allow this to succeed; but if no
1204 expression elements have been written, then there's nothing
1205 to do, so fail. */
1206 if (! parse_completion || ps.expout_ptr == 0)
1207 throw_exception (except);
1208 }
1209 END_CATCH
1210
1211 /* We have to operate on an "expression *", due to la_post_parser,
1212 which explains this funny-looking double release. */
1213 expression_up result = ps.release ();
1214
1215 /* Convert expression from postfix form as generated by yacc
1216 parser, to a prefix form. */
1217
1218 if (expressiondebug)
1219 dump_raw_expression (result.get (), gdb_stdlog,
1220 "before conversion to prefix form");
1221
1222 subexp = prefixify_expression (result.get ());
1223 if (out_subexp)
1224 *out_subexp = subexp;
1225
1226 lang->la_post_parser (&result, void_context_p);
1227
1228 if (expressiondebug)
1229 dump_prefix_expression (result.get (), gdb_stdlog);
1230
1231 *stringptr = lexptr;
1232 return result;
1233 }
1234
1235 /* Parse STRING as an expression, and complain if this fails
1236 to use up all of the contents of STRING. */
1237
1238 expression_up
1239 parse_expression (const char *string)
1240 {
1241 expression_up exp = parse_exp_1 (&string, 0, 0, 0);
1242 if (*string)
1243 error (_("Junk after end of expression."));
1244 return exp;
1245 }
1246
1247 /* Same as parse_expression, but using the given language (LANG)
1248 to parse the expression. */
1249
1250 expression_up
1251 parse_expression_with_language (const char *string, enum language lang)
1252 {
1253 gdb::optional<scoped_restore_current_language> lang_saver;
1254 if (current_language->la_language != lang)
1255 {
1256 lang_saver.emplace ();
1257 set_language (lang);
1258 }
1259
1260 return parse_expression (string);
1261 }
1262
1263 /* Parse STRING as an expression. If parsing ends in the middle of a
1264 field reference, return the type of the left-hand-side of the
1265 reference; furthermore, if the parsing ends in the field name,
1266 return the field name in *NAME. If the parsing ends in the middle
1267 of a field reference, but the reference is somehow invalid, throw
1268 an exception. In all other cases, return NULL. */
1269
1270 struct type *
1271 parse_expression_for_completion (const char *string,
1272 gdb::unique_xmalloc_ptr<char> *name,
1273 enum type_code *code)
1274 {
1275 expression_up exp;
1276 struct value *val;
1277 int subexp;
1278
1279 TRY
1280 {
1281 parse_completion = 1;
1282 exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
1283 INNERMOST_BLOCK_FOR_SYMBOLS);
1284 }
1285 CATCH (except, RETURN_MASK_ERROR)
1286 {
1287 /* Nothing, EXP remains NULL. */
1288 }
1289 END_CATCH
1290
1291 parse_completion = 0;
1292 if (exp == NULL)
1293 return NULL;
1294
1295 if (expout_tag_completion_type != TYPE_CODE_UNDEF)
1296 {
1297 *code = expout_tag_completion_type;
1298 *name = std::move (expout_completion_name);
1299 return NULL;
1300 }
1301
1302 if (expout_last_struct == -1)
1303 return NULL;
1304
1305 const char *fieldname = extract_field_op (exp.get (), &subexp);
1306 if (fieldname == NULL)
1307 {
1308 name->reset ();
1309 return NULL;
1310 }
1311
1312 name->reset (xstrdup (fieldname));
1313 /* This might throw an exception. If so, we want to let it
1314 propagate. */
1315 val = evaluate_subexpression_type (exp.get (), subexp);
1316
1317 return value_type (val);
1318 }
1319
1320 /* A post-parser that does nothing. */
1321
1322 void
1323 null_post_parser (expression_up *exp, int void_context_p)
1324 {
1325 }
1326
1327 /* Parse floating point value P of length LEN.
1328 Return false if invalid, true if valid.
1329 The successfully parsed number is stored in DATA in
1330 target format for floating-point type TYPE.
1331
1332 NOTE: This accepts the floating point syntax that sscanf accepts. */
1333
1334 bool
1335 parse_float (const char *p, int len,
1336 const struct type *type, gdb_byte *data)
1337 {
1338 return target_float_from_string (data, type, std::string (p, len));
1339 }
1340 \f
1341 /* Stuff for maintaining a stack of types. Currently just used by C, but
1342 probably useful for any language which declares its types "backwards". */
1343
1344 /* A helper function for insert_type and insert_type_address_space.
1345 This does work of expanding the type stack and inserting the new
1346 element, ELEMENT, into the stack at location SLOT. */
1347
1348 static void
1349 insert_into_type_stack (int slot, union type_stack_elt element)
1350 {
1351 gdb_assert (slot <= type_stack.elements.size ());
1352 type_stack.elements.insert (type_stack.elements.begin () + slot, element);
1353 }
1354
1355 /* Insert a new type, TP, at the bottom of the type stack. If TP is
1356 tp_pointer, tp_reference or tp_rvalue_reference, it is inserted at the
1357 bottom. If TP is a qualifier, it is inserted at slot 1 (just above a
1358 previous tp_pointer) if there is anything on the stack, or simply pushed
1359 if the stack is empty. Other values for TP are invalid. */
1360
1361 void
1362 insert_type (enum type_pieces tp)
1363 {
1364 union type_stack_elt element;
1365 int slot;
1366
1367 gdb_assert (tp == tp_pointer || tp == tp_reference
1368 || tp == tp_rvalue_reference || tp == tp_const
1369 || tp == tp_volatile);
1370
1371 /* If there is anything on the stack (we know it will be a
1372 tp_pointer), insert the qualifier above it. Otherwise, simply
1373 push this on the top of the stack. */
1374 if (!type_stack.elements.empty () && (tp == tp_const || tp == tp_volatile))
1375 slot = 1;
1376 else
1377 slot = 0;
1378
1379 element.piece = tp;
1380 insert_into_type_stack (slot, element);
1381 }
1382
1383 void
1384 push_type (enum type_pieces tp)
1385 {
1386 type_stack_elt elt;
1387 elt.piece = tp;
1388 type_stack.elements.push_back (elt);
1389 }
1390
1391 void
1392 push_type_int (int n)
1393 {
1394 type_stack_elt elt;
1395 elt.int_val = n;
1396 type_stack.elements.push_back (elt);
1397 }
1398
1399 /* Insert a tp_space_identifier and the corresponding address space
1400 value into the stack. STRING is the name of an address space, as
1401 recognized by address_space_name_to_int. If the stack is empty,
1402 the new elements are simply pushed. If the stack is not empty,
1403 this function assumes that the first item on the stack is a
1404 tp_pointer, and the new values are inserted above the first
1405 item. */
1406
1407 void
1408 insert_type_address_space (struct expr_builder *pstate, char *string)
1409 {
1410 union type_stack_elt element;
1411 int slot;
1412
1413 /* If there is anything on the stack (we know it will be a
1414 tp_pointer), insert the address space qualifier above it.
1415 Otherwise, simply push this on the top of the stack. */
1416 if (!type_stack.elements.empty ())
1417 slot = 1;
1418 else
1419 slot = 0;
1420
1421 element.piece = tp_space_identifier;
1422 insert_into_type_stack (slot, element);
1423 element.int_val = address_space_name_to_int (pstate->gdbarch (),
1424 string);
1425 insert_into_type_stack (slot, element);
1426 }
1427
1428 enum type_pieces
1429 pop_type (void)
1430 {
1431 if (!type_stack.elements.empty ())
1432 {
1433 type_stack_elt elt = type_stack.elements.back ();
1434 type_stack.elements.pop_back ();
1435 return elt.piece;
1436 }
1437 return tp_end;
1438 }
1439
1440 int
1441 pop_type_int (void)
1442 {
1443 if (!type_stack.elements.empty ())
1444 {
1445 type_stack_elt elt = type_stack.elements.back ();
1446 type_stack.elements.pop_back ();
1447 return elt.int_val;
1448 }
1449 /* "Can't happen". */
1450 return 0;
1451 }
1452
1453 /* Pop a type list element from the global type stack. */
1454
1455 static std::vector<struct type *> *
1456 pop_typelist (void)
1457 {
1458 gdb_assert (!type_stack.elements.empty ());
1459 type_stack_elt elt = type_stack.elements.back ();
1460 type_stack.elements.pop_back ();
1461 return elt.typelist_val;
1462 }
1463
1464 /* Pop a type_stack element from the global type stack. */
1465
1466 static struct type_stack *
1467 pop_type_stack (void)
1468 {
1469 gdb_assert (!type_stack.elements.empty ());
1470 type_stack_elt elt = type_stack.elements.back ();
1471 type_stack.elements.pop_back ();
1472 return elt.stack_val;
1473 }
1474
1475 /* Append the elements of the type stack FROM to the type stack TO.
1476 Always returns TO. */
1477
1478 struct type_stack *
1479 append_type_stack (struct type_stack *to, struct type_stack *from)
1480 {
1481 to->elements.insert (to->elements.end (), from->elements.begin (),
1482 from->elements.end ());
1483 return to;
1484 }
1485
1486 /* Push the type stack STACK as an element on the global type stack. */
1487
1488 void
1489 push_type_stack (struct type_stack *stack)
1490 {
1491 type_stack_elt elt;
1492 elt.stack_val = stack;
1493 type_stack.elements.push_back (elt);
1494 push_type (tp_type_stack);
1495 }
1496
1497 /* Copy the global type stack into a newly allocated type stack and
1498 return it. The global stack is cleared. The returned type stack
1499 must be freed with delete. */
1500
1501 struct type_stack *
1502 get_type_stack (void)
1503 {
1504 struct type_stack *result = new struct type_stack (std::move (type_stack));
1505 type_stack.elements.clear ();
1506 return result;
1507 }
1508
1509 /* Push a function type with arguments onto the global type stack.
1510 LIST holds the argument types. If the final item in LIST is NULL,
1511 then the function will be varargs. */
1512
1513 void
1514 push_typelist (std::vector<struct type *> *list)
1515 {
1516 type_stack_elt elt;
1517 elt.typelist_val = list;
1518 type_stack.elements.push_back (elt);
1519 push_type (tp_function_with_arguments);
1520 }
1521
1522 /* Pop the type stack and return a type_instance_flags that
1523 corresponds the const/volatile qualifiers on the stack. This is
1524 called by the C++ parser when parsing methods types, and as such no
1525 other kind of type in the type stack is expected. */
1526
1527 type_instance_flags
1528 follow_type_instance_flags ()
1529 {
1530 type_instance_flags flags = 0;
1531
1532 for (;;)
1533 switch (pop_type ())
1534 {
1535 case tp_end:
1536 return flags;
1537 case tp_const:
1538 flags |= TYPE_INSTANCE_FLAG_CONST;
1539 break;
1540 case tp_volatile:
1541 flags |= TYPE_INSTANCE_FLAG_VOLATILE;
1542 break;
1543 default:
1544 gdb_assert_not_reached ("unrecognized tp_ value in follow_types");
1545 }
1546 }
1547
1548
1549 /* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
1550 as modified by all the stuff on the stack. */
1551 struct type *
1552 follow_types (struct type *follow_type)
1553 {
1554 int done = 0;
1555 int make_const = 0;
1556 int make_volatile = 0;
1557 int make_addr_space = 0;
1558 int array_size;
1559
1560 while (!done)
1561 switch (pop_type ())
1562 {
1563 case tp_end:
1564 done = 1;
1565 if (make_const)
1566 follow_type = make_cv_type (make_const,
1567 TYPE_VOLATILE (follow_type),
1568 follow_type, 0);
1569 if (make_volatile)
1570 follow_type = make_cv_type (TYPE_CONST (follow_type),
1571 make_volatile,
1572 follow_type, 0);
1573 if (make_addr_space)
1574 follow_type = make_type_with_address_space (follow_type,
1575 make_addr_space);
1576 make_const = make_volatile = 0;
1577 make_addr_space = 0;
1578 break;
1579 case tp_const:
1580 make_const = 1;
1581 break;
1582 case tp_volatile:
1583 make_volatile = 1;
1584 break;
1585 case tp_space_identifier:
1586 make_addr_space = pop_type_int ();
1587 break;
1588 case tp_pointer:
1589 follow_type = lookup_pointer_type (follow_type);
1590 if (make_const)
1591 follow_type = make_cv_type (make_const,
1592 TYPE_VOLATILE (follow_type),
1593 follow_type, 0);
1594 if (make_volatile)
1595 follow_type = make_cv_type (TYPE_CONST (follow_type),
1596 make_volatile,
1597 follow_type, 0);
1598 if (make_addr_space)
1599 follow_type = make_type_with_address_space (follow_type,
1600 make_addr_space);
1601 make_const = make_volatile = 0;
1602 make_addr_space = 0;
1603 break;
1604 case tp_reference:
1605 follow_type = lookup_lvalue_reference_type (follow_type);
1606 goto process_reference;
1607 case tp_rvalue_reference:
1608 follow_type = lookup_rvalue_reference_type (follow_type);
1609 process_reference:
1610 if (make_const)
1611 follow_type = make_cv_type (make_const,
1612 TYPE_VOLATILE (follow_type),
1613 follow_type, 0);
1614 if (make_volatile)
1615 follow_type = make_cv_type (TYPE_CONST (follow_type),
1616 make_volatile,
1617 follow_type, 0);
1618 if (make_addr_space)
1619 follow_type = make_type_with_address_space (follow_type,
1620 make_addr_space);
1621 make_const = make_volatile = 0;
1622 make_addr_space = 0;
1623 break;
1624 case tp_array:
1625 array_size = pop_type_int ();
1626 /* FIXME-type-allocation: need a way to free this type when we are
1627 done with it. */
1628 follow_type =
1629 lookup_array_range_type (follow_type,
1630 0, array_size >= 0 ? array_size - 1 : 0);
1631 if (array_size < 0)
1632 TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (follow_type))
1633 = PROP_UNDEFINED;
1634 break;
1635 case tp_function:
1636 /* FIXME-type-allocation: need a way to free this type when we are
1637 done with it. */
1638 follow_type = lookup_function_type (follow_type);
1639 break;
1640
1641 case tp_function_with_arguments:
1642 {
1643 std::vector<struct type *> *args = pop_typelist ();
1644
1645 follow_type
1646 = lookup_function_type_with_arguments (follow_type,
1647 args->size (),
1648 args->data ());
1649 }
1650 break;
1651
1652 case tp_type_stack:
1653 {
1654 struct type_stack *stack = pop_type_stack ();
1655 /* Sort of ugly, but not really much worse than the
1656 alternatives. */
1657 struct type_stack save = type_stack;
1658
1659 type_stack = *stack;
1660 follow_type = follow_types (follow_type);
1661 gdb_assert (type_stack.elements.empty ());
1662
1663 type_stack = save;
1664 }
1665 break;
1666 default:
1667 gdb_assert_not_reached ("unrecognized tp_ value in follow_types");
1668 }
1669 return follow_type;
1670 }
1671 \f
1672 /* This function avoids direct calls to fprintf
1673 in the parser generated debug code. */
1674 void
1675 parser_fprintf (FILE *x, const char *y, ...)
1676 {
1677 va_list args;
1678
1679 va_start (args, y);
1680 if (x == stderr)
1681 vfprintf_unfiltered (gdb_stderr, y, args);
1682 else
1683 {
1684 fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1685 vfprintf_unfiltered (gdb_stderr, y, args);
1686 }
1687 va_end (args);
1688 }
1689
1690 /* Implementation of the exp_descriptor method operator_check. */
1691
1692 int
1693 operator_check_standard (struct expression *exp, int pos,
1694 int (*objfile_func) (struct objfile *objfile,
1695 void *data),
1696 void *data)
1697 {
1698 const union exp_element *const elts = exp->elts;
1699 struct type *type = NULL;
1700 struct objfile *objfile = NULL;
1701
1702 /* Extended operators should have been already handled by exp_descriptor
1703 iterate method of its specific language. */
1704 gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1705
1706 /* Track the callers of write_exp_elt_type for this table. */
1707
1708 switch (elts[pos].opcode)
1709 {
1710 case BINOP_VAL:
1711 case OP_COMPLEX:
1712 case OP_FLOAT:
1713 case OP_LONG:
1714 case OP_SCOPE:
1715 case OP_TYPE:
1716 case UNOP_CAST:
1717 case UNOP_MAX:
1718 case UNOP_MEMVAL:
1719 case UNOP_MIN:
1720 type = elts[pos + 1].type;
1721 break;
1722
1723 case TYPE_INSTANCE:
1724 {
1725 LONGEST arg, nargs = elts[pos + 2].longconst;
1726
1727 for (arg = 0; arg < nargs; arg++)
1728 {
1729 struct type *inst_type = elts[pos + 3 + arg].type;
1730 struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
1731
1732 if (inst_objfile && (*objfile_func) (inst_objfile, data))
1733 return 1;
1734 }
1735 }
1736 break;
1737
1738 case OP_VAR_VALUE:
1739 {
1740 const struct block *const block = elts[pos + 1].block;
1741 const struct symbol *const symbol = elts[pos + 2].symbol;
1742
1743 /* Check objfile where the variable itself is placed.
1744 SYMBOL_OBJ_SECTION (symbol) may be NULL. */
1745 if ((*objfile_func) (symbol_objfile (symbol), data))
1746 return 1;
1747
1748 /* Check objfile where is placed the code touching the variable. */
1749 objfile = lookup_objfile_from_block (block);
1750
1751 type = SYMBOL_TYPE (symbol);
1752 }
1753 break;
1754 case OP_VAR_MSYM_VALUE:
1755 objfile = elts[pos + 1].objfile;
1756 break;
1757 }
1758
1759 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
1760
1761 if (type && TYPE_OBJFILE (type)
1762 && (*objfile_func) (TYPE_OBJFILE (type), data))
1763 return 1;
1764 if (objfile && (*objfile_func) (objfile, data))
1765 return 1;
1766
1767 return 0;
1768 }
1769
1770 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1771 OBJFILE_FUNC is never called with NULL OBJFILE. OBJFILE_FUNC get
1772 passed an arbitrary caller supplied DATA pointer. If OBJFILE_FUNC
1773 returns non-zero value then (any other) non-zero value is immediately
1774 returned to the caller. Otherwise zero is returned after iterating
1775 through whole EXP. */
1776
1777 static int
1778 exp_iterate (struct expression *exp,
1779 int (*objfile_func) (struct objfile *objfile, void *data),
1780 void *data)
1781 {
1782 int endpos;
1783
1784 for (endpos = exp->nelts; endpos > 0; )
1785 {
1786 int pos, args, oplen = 0;
1787
1788 operator_length (exp, endpos, &oplen, &args);
1789 gdb_assert (oplen > 0);
1790
1791 pos = endpos - oplen;
1792 if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1793 objfile_func, data))
1794 return 1;
1795
1796 endpos = pos;
1797 }
1798
1799 return 0;
1800 }
1801
1802 /* Helper for exp_uses_objfile. */
1803
1804 static int
1805 exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1806 {
1807 struct objfile *objfile = (struct objfile *) objfile_voidp;
1808
1809 if (exp_objfile->separate_debug_objfile_backlink)
1810 exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1811
1812 return exp_objfile == objfile;
1813 }
1814
1815 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1816 is unloaded), otherwise return 0. OBJFILE must not be a separate debug info
1817 file. */
1818
1819 int
1820 exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1821 {
1822 gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1823
1824 return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1825 }
1826
1827 /* Reallocate the `expout' pointer inside PS so that it can accommodate
1828 at least LENELT expression elements. This function does nothing if
1829 there is enough room for the elements. */
1830
1831 static void
1832 increase_expout_size (struct expr_builder *ps, size_t lenelt)
1833 {
1834 if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1835 {
1836 ps->expout_size = std::max (ps->expout_size * 2,
1837 ps->expout_ptr + lenelt + 10);
1838 ps->expout.reset (XRESIZEVAR (expression,
1839 ps->expout.release (),
1840 (sizeof (struct expression)
1841 + EXP_ELEM_TO_BYTES (ps->expout_size))));
1842 }
1843 }
1844
1845 void
1846 _initialize_parse (void)
1847 {
1848 add_setshow_zuinteger_cmd ("expression", class_maintenance,
1849 &expressiondebug,
1850 _("Set expression debugging."),
1851 _("Show expression debugging."),
1852 _("When non-zero, the internal representation "
1853 "of expressions will be printed."),
1854 NULL,
1855 show_expressiondebug,
1856 &setdebuglist, &showdebuglist);
1857 add_setshow_boolean_cmd ("parser", class_maintenance,
1858 &parser_debug,
1859 _("Set parser debugging."),
1860 _("Show parser debugging."),
1861 _("When non-zero, expression parser "
1862 "tracing will be enabled."),
1863 NULL,
1864 show_parserdebug,
1865 &setdebuglist, &showdebuglist);
1866 }
This page took 0.068545 seconds and 5 git commands to generate.