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