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