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