xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/parse.c (revision ccd9df534e375a4366c5b55f23782053c7a98d82)
1 /* Parse expressions for GDB.
2 
3    Copyright (C) 1986-2020 Free Software Foundation, Inc.
4 
5    Modified from expread.y by the Department of Computer Science at the
6    State University of New York at Buffalo, 1991.
7 
8    This file is part of GDB.
9 
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14 
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19 
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22 
23 /* Parse an expression from text in a string,
24    and return the result as a struct expression pointer.
25    That structure contains arithmetic operations in reverse polish,
26    with constants represented by operations that are followed by special data.
27    See expression.h for the details of the format.
28    What is important here is that it can be built up sequentially
29    during the process of parsing; the lower levels of the tree always
30    come first in the result.  */
31 
32 #include "defs.h"
33 #include <ctype.h>
34 #include "arch-utils.h"
35 #include "symtab.h"
36 #include "gdbtypes.h"
37 #include "frame.h"
38 #include "expression.h"
39 #include "value.h"
40 #include "command.h"
41 #include "language.h"
42 #include "f-lang.h"
43 #include "parser-defs.h"
44 #include "gdbcmd.h"
45 #include "symfile.h"		/* for overlay functions */
46 #include "inferior.h"
47 #include "target-float.h"
48 #include "block.h"
49 #include "source.h"
50 #include "objfiles.h"
51 #include "user-regs.h"
52 #include <algorithm>
53 #include "gdbsupport/gdb_optional.h"
54 
55 /* Standard set of definitions for printing, dumping, prefixifying,
56  * and evaluating expressions.  */
57 
58 const struct exp_descriptor exp_descriptor_standard =
59   {
60     print_subexp_standard,
61     operator_length_standard,
62     operator_check_standard,
63     op_name_standard,
64     dump_subexp_body_standard,
65     evaluate_subexp_standard
66   };
67 
68 static unsigned int expressiondebug = 0;
69 static void
70 show_expressiondebug (struct ui_file *file, int from_tty,
71 		      struct cmd_list_element *c, const char *value)
72 {
73   fprintf_filtered (file, _("Expression debugging is %s.\n"), value);
74 }
75 
76 
77 /* True if an expression parser should set yydebug.  */
78 bool parser_debug;
79 
80 static void
81 show_parserdebug (struct ui_file *file, int from_tty,
82 		  struct cmd_list_element *c, const char *value)
83 {
84   fprintf_filtered (file, _("Parser debugging is %s.\n"), value);
85 }
86 
87 
88 static int prefixify_subexp (struct expression *, struct expression *, int,
89 			     int, int);
90 
91 static expression_up parse_exp_in_context (const char **, CORE_ADDR,
92 					   const struct block *, int,
93 					   int, int *,
94 					   innermost_block_tracker *,
95 					   expr_completion_state *);
96 
97 static void increase_expout_size (struct expr_builder *ps, size_t lenelt);
98 
99 
100 /* Documented at it's declaration.  */
101 
102 void
103 innermost_block_tracker::update (const struct block *b,
104 				 innermost_block_tracker_types t)
105 {
106   if ((m_types & t) != 0
107       && (m_innermost_block == NULL
108 	  || contained_in (b, m_innermost_block)))
109     m_innermost_block = b;
110 }
111 
112 
113 
114 /* See definition in parser-defs.h.  */
115 
116 expr_builder::expr_builder (const struct language_defn *lang,
117 			    struct gdbarch *gdbarch)
118   : expout_size (10),
119     expout (XNEWVAR (expression,
120 		     (sizeof (expression)
121 		      + EXP_ELEM_TO_BYTES (expout_size)))),
122     expout_ptr (0)
123 {
124   expout->language_defn = lang;
125   expout->gdbarch = gdbarch;
126 }
127 
128 expression_up
129 expr_builder::release ()
130 {
131   /* Record the actual number of expression elements, and then
132      reallocate the expression memory so that we free up any
133      excess elements.  */
134 
135   expout->nelts = expout_ptr;
136   expout.reset (XRESIZEVAR (expression, expout.release (),
137 			    (sizeof (expression)
138 			     + EXP_ELEM_TO_BYTES (expout_ptr))));
139 
140   return std::move (expout);
141 }
142 
143 /* This page contains the functions for adding data to the struct expression
144    being constructed.  */
145 
146 /* Add one element to the end of the expression.  */
147 
148 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
149    a register through here.  */
150 
151 static void
152 write_exp_elt (struct expr_builder *ps, const union exp_element *expelt)
153 {
154   if (ps->expout_ptr >= ps->expout_size)
155     {
156       ps->expout_size *= 2;
157       ps->expout.reset (XRESIZEVAR (expression, ps->expout.release (),
158 				    (sizeof (expression)
159 				     + EXP_ELEM_TO_BYTES (ps->expout_size))));
160     }
161   ps->expout->elts[ps->expout_ptr++] = *expelt;
162 }
163 
164 void
165 write_exp_elt_opcode (struct expr_builder *ps, enum exp_opcode expelt)
166 {
167   union exp_element tmp;
168 
169   memset (&tmp, 0, sizeof (union exp_element));
170   tmp.opcode = expelt;
171   write_exp_elt (ps, &tmp);
172 }
173 
174 void
175 write_exp_elt_sym (struct expr_builder *ps, struct symbol *expelt)
176 {
177   union exp_element tmp;
178 
179   memset (&tmp, 0, sizeof (union exp_element));
180   tmp.symbol = expelt;
181   write_exp_elt (ps, &tmp);
182 }
183 
184 static void
185 write_exp_elt_msym (struct expr_builder *ps, minimal_symbol *expelt)
186 {
187   union exp_element tmp;
188 
189   memset (&tmp, 0, sizeof (union exp_element));
190   tmp.msymbol = expelt;
191   write_exp_elt (ps, &tmp);
192 }
193 
194 void
195 write_exp_elt_block (struct expr_builder *ps, const struct block *b)
196 {
197   union exp_element tmp;
198 
199   memset (&tmp, 0, sizeof (union exp_element));
200   tmp.block = b;
201   write_exp_elt (ps, &tmp);
202 }
203 
204 void
205 write_exp_elt_objfile (struct expr_builder *ps, struct objfile *objfile)
206 {
207   union exp_element tmp;
208 
209   memset (&tmp, 0, sizeof (union exp_element));
210   tmp.objfile = objfile;
211   write_exp_elt (ps, &tmp);
212 }
213 
214 void
215 write_exp_elt_longcst (struct expr_builder *ps, LONGEST expelt)
216 {
217   union exp_element tmp;
218 
219   memset (&tmp, 0, sizeof (union exp_element));
220   tmp.longconst = expelt;
221   write_exp_elt (ps, &tmp);
222 }
223 
224 void
225 write_exp_elt_floatcst (struct expr_builder *ps, const gdb_byte expelt[16])
226 {
227   union exp_element tmp;
228   int index;
229 
230   for (index = 0; index < 16; index++)
231     tmp.floatconst[index] = expelt[index];
232 
233   write_exp_elt (ps, &tmp);
234 }
235 
236 void
237 write_exp_elt_type (struct expr_builder *ps, struct type *expelt)
238 {
239   union exp_element tmp;
240 
241   memset (&tmp, 0, sizeof (union exp_element));
242   tmp.type = expelt;
243   write_exp_elt (ps, &tmp);
244 }
245 
246 void
247 write_exp_elt_intern (struct expr_builder *ps, struct internalvar *expelt)
248 {
249   union exp_element tmp;
250 
251   memset (&tmp, 0, sizeof (union exp_element));
252   tmp.internalvar = expelt;
253   write_exp_elt (ps, &tmp);
254 }
255 
256 /* Add a string constant to the end of the expression.
257 
258    String constants are stored by first writing an expression element
259    that contains the length of the string, then stuffing the string
260    constant itself into however many expression elements are needed
261    to hold it, and then writing another expression element that contains
262    the length of the string.  I.e. an expression element at each end of
263    the string records the string length, so you can skip over the
264    expression elements containing the actual string bytes from either
265    end of the string.  Note that this also allows gdb to handle
266    strings with embedded null bytes, as is required for some languages.
267 
268    Don't be fooled by the fact that the string is null byte terminated,
269    this is strictly for the convenience of debugging gdb itself.
270    Gdb does not depend up the string being null terminated, since the
271    actual length is recorded in expression elements at each end of the
272    string.  The null byte is taken into consideration when computing how
273    many expression elements are required to hold the string constant, of
274    course.  */
275 
276 
277 void
278 write_exp_string (struct expr_builder *ps, struct stoken str)
279 {
280   int len = str.length;
281   size_t lenelt;
282   char *strdata;
283 
284   /* Compute the number of expression elements required to hold the string
285      (including a null byte terminator), along with one expression element
286      at each end to record the actual string length (not including the
287      null byte terminator).  */
288 
289   lenelt = 2 + BYTES_TO_EXP_ELEM (len + 1);
290 
291   increase_expout_size (ps, lenelt);
292 
293   /* Write the leading length expression element (which advances the current
294      expression element index), then write the string constant followed by a
295      terminating null byte, and then write the trailing length expression
296      element.  */
297 
298   write_exp_elt_longcst (ps, (LONGEST) len);
299   strdata = (char *) &ps->expout->elts[ps->expout_ptr];
300   memcpy (strdata, str.ptr, len);
301   *(strdata + len) = '\0';
302   ps->expout_ptr += lenelt - 2;
303   write_exp_elt_longcst (ps, (LONGEST) len);
304 }
305 
306 /* Add a vector of string constants to the end of the expression.
307 
308    This adds an OP_STRING operation, but encodes the contents
309    differently from write_exp_string.  The language is expected to
310    handle evaluation of this expression itself.
311 
312    After the usual OP_STRING header, TYPE is written into the
313    expression as a long constant.  The interpretation of this field is
314    up to the language evaluator.
315 
316    Next, each string in VEC is written.  The length is written as a
317    long constant, followed by the contents of the string.  */
318 
319 void
320 write_exp_string_vector (struct expr_builder *ps, int type,
321 			 struct stoken_vector *vec)
322 {
323   int i, len;
324   size_t n_slots;
325 
326   /* Compute the size.  We compute the size in number of slots to
327      avoid issues with string padding.  */
328   n_slots = 0;
329   for (i = 0; i < vec->len; ++i)
330     {
331       /* One slot for the length of this element, plus the number of
332 	 slots needed for this string.  */
333       n_slots += 1 + BYTES_TO_EXP_ELEM (vec->tokens[i].length);
334     }
335 
336   /* One more slot for the type of the string.  */
337   ++n_slots;
338 
339   /* Now compute a phony string length.  */
340   len = EXP_ELEM_TO_BYTES (n_slots) - 1;
341 
342   n_slots += 4;
343   increase_expout_size (ps, n_slots);
344 
345   write_exp_elt_opcode (ps, OP_STRING);
346   write_exp_elt_longcst (ps, len);
347   write_exp_elt_longcst (ps, type);
348 
349   for (i = 0; i < vec->len; ++i)
350     {
351       write_exp_elt_longcst (ps, vec->tokens[i].length);
352       memcpy (&ps->expout->elts[ps->expout_ptr], vec->tokens[i].ptr,
353 	      vec->tokens[i].length);
354       ps->expout_ptr += BYTES_TO_EXP_ELEM (vec->tokens[i].length);
355     }
356 
357   write_exp_elt_longcst (ps, len);
358   write_exp_elt_opcode (ps, OP_STRING);
359 }
360 
361 /* Add a bitstring constant to the end of the expression.
362 
363    Bitstring constants are stored by first writing an expression element
364    that contains the length of the bitstring (in bits), then stuffing the
365    bitstring constant itself into however many expression elements are
366    needed to hold it, and then writing another expression element that
367    contains the length of the bitstring.  I.e. an expression element at
368    each end of the bitstring records the bitstring length, so you can skip
369    over the expression elements containing the actual bitstring bytes from
370    either end of the bitstring.  */
371 
372 void
373 write_exp_bitstring (struct expr_builder *ps, struct stoken str)
374 {
375   int bits = str.length;	/* length in bits */
376   int len = (bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
377   size_t lenelt;
378   char *strdata;
379 
380   /* Compute the number of expression elements required to hold the bitstring,
381      along with one expression element at each end to record the actual
382      bitstring length in bits.  */
383 
384   lenelt = 2 + BYTES_TO_EXP_ELEM (len);
385 
386   increase_expout_size (ps, lenelt);
387 
388   /* Write the leading length expression element (which advances the current
389      expression element index), then write the bitstring constant, and then
390      write the trailing length expression element.  */
391 
392   write_exp_elt_longcst (ps, (LONGEST) bits);
393   strdata = (char *) &ps->expout->elts[ps->expout_ptr];
394   memcpy (strdata, str.ptr, len);
395   ps->expout_ptr += lenelt - 2;
396   write_exp_elt_longcst (ps, (LONGEST) bits);
397 }
398 
399 /* Return the type of MSYMBOL, a minimal symbol of OBJFILE.  If
400    ADDRESS_P is not NULL, set it to the MSYMBOL's resolved
401    address.  */
402 
403 type *
404 find_minsym_type_and_address (minimal_symbol *msymbol,
405 			      struct objfile *objfile,
406 			      CORE_ADDR *address_p)
407 {
408   bound_minimal_symbol bound_msym = {msymbol, objfile};
409   struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
410   enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
411 
412   bool is_tls = (section != NULL
413 		 && section->the_bfd_section->flags & SEC_THREAD_LOCAL);
414 
415   /* The minimal symbol might point to a function descriptor;
416      resolve it to the actual code address instead.  */
417   CORE_ADDR addr;
418   if (is_tls)
419     {
420       /* Addresses of TLS symbols are really offsets into a
421 	 per-objfile/per-thread storage block.  */
422       addr = MSYMBOL_VALUE_RAW_ADDRESS (bound_msym.minsym);
423     }
424   else if (msymbol_is_function (objfile, msymbol, &addr))
425     {
426       if (addr != BMSYMBOL_VALUE_ADDRESS (bound_msym))
427 	{
428 	  /* This means we resolved a function descriptor, and we now
429 	     have an address for a code/text symbol instead of a data
430 	     symbol.  */
431 	  if (MSYMBOL_TYPE (msymbol) == mst_data_gnu_ifunc)
432 	    type = mst_text_gnu_ifunc;
433 	  else
434 	    type = mst_text;
435 	  section = NULL;
436 	}
437     }
438   else
439     addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
440 
441   if (overlay_debugging)
442     addr = symbol_overlayed_address (addr, section);
443 
444   if (is_tls)
445     {
446       /* Skip translation if caller does not need the address.  */
447       if (address_p != NULL)
448 	*address_p = target_translate_tls_address (objfile, addr);
449       return objfile_type (objfile)->nodebug_tls_symbol;
450     }
451 
452   if (address_p != NULL)
453     *address_p = addr;
454 
455   switch (type)
456     {
457     case mst_text:
458     case mst_file_text:
459     case mst_solib_trampoline:
460       return objfile_type (objfile)->nodebug_text_symbol;
461 
462     case mst_text_gnu_ifunc:
463       return objfile_type (objfile)->nodebug_text_gnu_ifunc_symbol;
464 
465     case mst_data:
466     case mst_file_data:
467     case mst_bss:
468     case mst_file_bss:
469       return objfile_type (objfile)->nodebug_data_symbol;
470 
471     case mst_slot_got_plt:
472       return objfile_type (objfile)->nodebug_got_plt_symbol;
473 
474     default:
475       return objfile_type (objfile)->nodebug_unknown_symbol;
476     }
477 }
478 
479 /* Add the appropriate elements for a minimal symbol to the end of
480    the expression.  */
481 
482 void
483 write_exp_msymbol (struct expr_builder *ps,
484 		   struct bound_minimal_symbol bound_msym)
485 {
486   write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
487   write_exp_elt_objfile (ps, bound_msym.objfile);
488   write_exp_elt_msym (ps, bound_msym.minsym);
489   write_exp_elt_opcode (ps, OP_VAR_MSYM_VALUE);
490 }
491 
492 /* See parser-defs.h.  */
493 
494 void
495 parser_state::mark_struct_expression ()
496 {
497   gdb_assert (parse_completion
498 	      && (m_completion_state.expout_tag_completion_type
499 		  == TYPE_CODE_UNDEF));
500   m_completion_state.expout_last_struct = expout_ptr;
501 }
502 
503 /* Indicate that the current parser invocation is completing a tag.
504    TAG is the type code of the tag, and PTR and LENGTH represent the
505    start of the tag name.  */
506 
507 void
508 parser_state::mark_completion_tag (enum type_code tag, const char *ptr,
509 				   int length)
510 {
511   gdb_assert (parse_completion
512 	      && (m_completion_state.expout_tag_completion_type
513 		  == TYPE_CODE_UNDEF)
514 	      && m_completion_state.expout_completion_name == NULL
515 	      && m_completion_state.expout_last_struct == -1);
516   gdb_assert (tag == TYPE_CODE_UNION
517 	      || tag == TYPE_CODE_STRUCT
518 	      || tag == TYPE_CODE_ENUM);
519   m_completion_state.expout_tag_completion_type = tag;
520   m_completion_state.expout_completion_name.reset (xstrndup (ptr, length));
521 }
522 
523 
524 /* Recognize tokens that start with '$'.  These include:
525 
526    $regname     A native register name or a "standard
527    register name".
528 
529    $variable    A convenience variable with a name chosen
530    by the user.
531 
532    $digits              Value history with index <digits>, starting
533    from the first value which has index 1.
534 
535    $$digits     Value history with index <digits> relative
536    to the last value.  I.e. $$0 is the last
537    value, $$1 is the one previous to that, $$2
538    is the one previous to $$1, etc.
539 
540    $ | $0 | $$0 The last value in the value history.
541 
542    $$           An abbreviation for the second to the last
543    value in the value history, I.e. $$1  */
544 
545 void
546 write_dollar_variable (struct parser_state *ps, struct stoken str)
547 {
548   struct block_symbol sym;
549   struct bound_minimal_symbol msym;
550   struct internalvar *isym = NULL;
551   std::string copy;
552 
553   /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
554      and $$digits (equivalent to $<-digits> if you could type that).  */
555 
556   int negate = 0;
557   int i = 1;
558   /* Double dollar means negate the number and add -1 as well.
559      Thus $$ alone means -1.  */
560   if (str.length >= 2 && str.ptr[1] == '$')
561     {
562       negate = 1;
563       i = 2;
564     }
565   if (i == str.length)
566     {
567       /* Just dollars (one or two).  */
568       i = -negate;
569       goto handle_last;
570     }
571   /* Is the rest of the token digits?  */
572   for (; i < str.length; i++)
573     if (!(str.ptr[i] >= '0' && str.ptr[i] <= '9'))
574       break;
575   if (i == str.length)
576     {
577       i = atoi (str.ptr + 1 + negate);
578       if (negate)
579 	i = -i;
580       goto handle_last;
581     }
582 
583   /* Handle tokens that refer to machine registers:
584      $ followed by a register name.  */
585   i = user_reg_map_name_to_regnum (ps->gdbarch (),
586 				   str.ptr + 1, str.length - 1);
587   if (i >= 0)
588     goto handle_register;
589 
590   /* Any names starting with $ are probably debugger internal variables.  */
591 
592   copy = copy_name (str);
593   isym = lookup_only_internalvar (copy.c_str () + 1);
594   if (isym)
595     {
596       write_exp_elt_opcode (ps, OP_INTERNALVAR);
597       write_exp_elt_intern (ps, isym);
598       write_exp_elt_opcode (ps, OP_INTERNALVAR);
599       return;
600     }
601 
602   /* On some systems, such as HP-UX and hppa-linux, certain system routines
603      have names beginning with $ or $$.  Check for those, first.  */
604 
605   sym = lookup_symbol (copy.c_str (), NULL, VAR_DOMAIN, NULL);
606   if (sym.symbol)
607     {
608       write_exp_elt_opcode (ps, OP_VAR_VALUE);
609       write_exp_elt_block (ps, sym.block);
610       write_exp_elt_sym (ps, sym.symbol);
611       write_exp_elt_opcode (ps, OP_VAR_VALUE);
612       return;
613     }
614   msym = lookup_bound_minimal_symbol (copy.c_str ());
615   if (msym.minsym)
616     {
617       write_exp_msymbol (ps, msym);
618       return;
619     }
620 
621   /* Any other names are assumed to be debugger internal variables.  */
622 
623   write_exp_elt_opcode (ps, OP_INTERNALVAR);
624   write_exp_elt_intern (ps, create_internalvar (copy.c_str () + 1));
625   write_exp_elt_opcode (ps, OP_INTERNALVAR);
626   return;
627 handle_last:
628   write_exp_elt_opcode (ps, OP_LAST);
629   write_exp_elt_longcst (ps, (LONGEST) i);
630   write_exp_elt_opcode (ps, OP_LAST);
631   return;
632 handle_register:
633   write_exp_elt_opcode (ps, OP_REGISTER);
634   str.length--;
635   str.ptr++;
636   write_exp_string (ps, str);
637   write_exp_elt_opcode (ps, OP_REGISTER);
638   ps->block_tracker->update (ps->expression_context_block,
639 			     INNERMOST_BLOCK_FOR_REGISTERS);
640   return;
641 }
642 
643 
644 const char *
645 find_template_name_end (const char *p)
646 {
647   int depth = 1;
648   int just_seen_right = 0;
649   int just_seen_colon = 0;
650   int just_seen_space = 0;
651 
652   if (!p || (*p != '<'))
653     return 0;
654 
655   while (*++p)
656     {
657       switch (*p)
658 	{
659 	case '\'':
660 	case '\"':
661 	case '{':
662 	case '}':
663 	  /* In future, may want to allow these??  */
664 	  return 0;
665 	case '<':
666 	  depth++;		/* start nested template */
667 	  if (just_seen_colon || just_seen_right || just_seen_space)
668 	    return 0;		/* but not after : or :: or > or space */
669 	  break;
670 	case '>':
671 	  if (just_seen_colon || just_seen_right)
672 	    return 0;		/* end a (nested?) template */
673 	  just_seen_right = 1;	/* but not after : or :: */
674 	  if (--depth == 0)	/* also disallow >>, insist on > > */
675 	    return ++p;		/* if outermost ended, return */
676 	  break;
677 	case ':':
678 	  if (just_seen_space || (just_seen_colon > 1))
679 	    return 0;		/* nested class spec coming up */
680 	  just_seen_colon++;	/* we allow :: but not :::: */
681 	  break;
682 	case ' ':
683 	  break;
684 	default:
685 	  if (!((*p >= 'a' && *p <= 'z') ||	/* allow token chars */
686 		(*p >= 'A' && *p <= 'Z') ||
687 		(*p >= '0' && *p <= '9') ||
688 		(*p == '_') || (*p == ',') ||	/* commas for template args */
689 		(*p == '&') || (*p == '*') ||	/* pointer and ref types */
690 		(*p == '(') || (*p == ')') ||	/* function types */
691 		(*p == '[') || (*p == ']')))	/* array types */
692 	    return 0;
693 	}
694       if (*p != ' ')
695 	just_seen_space = 0;
696       if (*p != ':')
697 	just_seen_colon = 0;
698       if (*p != '>')
699 	just_seen_right = 0;
700     }
701   return 0;
702 }
703 
704 
705 /* Return a null-terminated temporary copy of the name of a string token.
706 
707    Tokens that refer to names do so with explicit pointer and length,
708    so they can share the storage that lexptr is parsing.
709    When it is necessary to pass a name to a function that expects
710    a null-terminated string, the substring is copied out
711    into a separate block of storage.  */
712 
713 std::string
714 copy_name (struct stoken token)
715 {
716   return std::string (token.ptr, token.length);
717 }
718 
719 
720 /* See comments on parser-defs.h.  */
721 
722 int
723 prefixify_expression (struct expression *expr, int last_struct)
724 {
725   gdb_assert (expr->nelts > 0);
726   int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
727   struct expression *temp;
728   int inpos = expr->nelts, outpos = 0;
729 
730   temp = (struct expression *) alloca (len);
731 
732   /* Copy the original expression into temp.  */
733   memcpy (temp, expr, len);
734 
735   return prefixify_subexp (temp, expr, inpos, outpos, last_struct);
736 }
737 
738 /* Return the number of exp_elements in the postfix subexpression
739    of EXPR whose operator is at index ENDPOS - 1 in EXPR.  */
740 
741 static int
742 length_of_subexp (struct expression *expr, int endpos)
743 {
744   int oplen, args;
745 
746   operator_length (expr, endpos, &oplen, &args);
747 
748   while (args > 0)
749     {
750       oplen += length_of_subexp (expr, endpos - oplen);
751       args--;
752     }
753 
754   return oplen;
755 }
756 
757 /* Sets *OPLENP to the length of the operator whose (last) index is
758    ENDPOS - 1 in EXPR, and sets *ARGSP to the number of arguments that
759    operator takes.  */
760 
761 void
762 operator_length (const struct expression *expr, int endpos, int *oplenp,
763 		 int *argsp)
764 {
765   expr->language_defn->la_exp_desc->operator_length (expr, endpos,
766 						     oplenp, argsp);
767 }
768 
769 /* Default value for operator_length in exp_descriptor vectors.  */
770 
771 void
772 operator_length_standard (const struct expression *expr, int endpos,
773 			  int *oplenp, int *argsp)
774 {
775   int oplen = 1;
776   int args = 0;
777   enum range_type range_type;
778   int i;
779 
780   if (endpos < 1)
781     error (_("?error in operator_length_standard"));
782 
783   i = (int) expr->elts[endpos - 1].opcode;
784 
785   switch (i)
786     {
787       /* C++  */
788     case OP_SCOPE:
789       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
790       oplen = 5 + BYTES_TO_EXP_ELEM (oplen + 1);
791       break;
792 
793     case OP_LONG:
794     case OP_FLOAT:
795     case OP_VAR_VALUE:
796     case OP_VAR_MSYM_VALUE:
797       oplen = 4;
798       break;
799 
800     case OP_FUNC_STATIC_VAR:
801       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
802       oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
803       args = 1;
804       break;
805 
806     case OP_TYPE:
807     case OP_BOOL:
808     case OP_LAST:
809     case OP_INTERNALVAR:
810     case OP_VAR_ENTRY_VALUE:
811       oplen = 3;
812       break;
813 
814     case OP_COMPLEX:
815       oplen = 3;
816       args = 2;
817       break;
818 
819     case OP_FUNCALL:
820     case OP_F77_UNDETERMINED_ARGLIST:
821       oplen = 3;
822       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
823       break;
824 
825     case TYPE_INSTANCE:
826       oplen = 5 + longest_to_int (expr->elts[endpos - 2].longconst);
827       args = 1;
828       break;
829 
830     case OP_OBJC_MSGCALL:	/* Objective C message (method) call.  */
831       oplen = 4;
832       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
833       break;
834 
835     case UNOP_MAX:
836     case UNOP_MIN:
837       oplen = 3;
838       break;
839 
840     case UNOP_CAST_TYPE:
841     case UNOP_DYNAMIC_CAST:
842     case UNOP_REINTERPRET_CAST:
843     case UNOP_MEMVAL_TYPE:
844       oplen = 1;
845       args = 2;
846       break;
847 
848     case BINOP_VAL:
849     case UNOP_CAST:
850     case UNOP_MEMVAL:
851       oplen = 3;
852       args = 1;
853       break;
854 
855     case UNOP_ABS:
856     case UNOP_CAP:
857     case UNOP_CHR:
858     case UNOP_FLOAT:
859     case UNOP_HIGH:
860     case UNOP_ODD:
861     case UNOP_ORD:
862     case UNOP_TRUNC:
863     case OP_TYPEOF:
864     case OP_DECLTYPE:
865     case OP_TYPEID:
866       oplen = 1;
867       args = 1;
868       break;
869 
870     case OP_ADL_FUNC:
871       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
872       oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
873       oplen++;
874       oplen++;
875       break;
876 
877     case STRUCTOP_STRUCT:
878     case STRUCTOP_PTR:
879       args = 1;
880       /* fall through */
881     case OP_REGISTER:
882     case OP_M2_STRING:
883     case OP_STRING:
884     case OP_OBJC_NSSTRING:	/* Objective C Foundation Class
885 				   NSString constant.  */
886     case OP_OBJC_SELECTOR:	/* Objective C "@selector" pseudo-op.  */
887     case OP_NAME:
888       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
889       oplen = 4 + BYTES_TO_EXP_ELEM (oplen + 1);
890       break;
891 
892     case OP_ARRAY:
893       oplen = 4;
894       args = longest_to_int (expr->elts[endpos - 2].longconst);
895       args -= longest_to_int (expr->elts[endpos - 3].longconst);
896       args += 1;
897       break;
898 
899     case TERNOP_COND:
900     case TERNOP_SLICE:
901       args = 3;
902       break;
903 
904       /* Modula-2 */
905     case MULTI_SUBSCRIPT:
906       oplen = 3;
907       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
908       break;
909 
910     case BINOP_ASSIGN_MODIFY:
911       oplen = 3;
912       args = 2;
913       break;
914 
915       /* C++ */
916     case OP_THIS:
917       oplen = 2;
918       break;
919 
920     case OP_RANGE:
921       oplen = 3;
922       range_type = (enum range_type)
923 	longest_to_int (expr->elts[endpos - 2].longconst);
924 
925       switch (range_type)
926 	{
927 	case LOW_BOUND_DEFAULT:
928 	case LOW_BOUND_DEFAULT_EXCLUSIVE:
929 	case HIGH_BOUND_DEFAULT:
930 	  args = 1;
931 	  break;
932 	case BOTH_BOUND_DEFAULT:
933 	  args = 0;
934 	  break;
935 	case NONE_BOUND_DEFAULT:
936 	case NONE_BOUND_DEFAULT_EXCLUSIVE:
937 	  args = 2;
938 	  break;
939 	}
940 
941       break;
942 
943     default:
944       args = 1 + (i < (int) BINOP_END);
945     }
946 
947   *oplenp = oplen;
948   *argsp = args;
949 }
950 
951 /* Copy the subexpression ending just before index INEND in INEXPR
952    into OUTEXPR, starting at index OUTBEG.
953    In the process, convert it from suffix to prefix form.
954    If LAST_STRUCT is -1, then this function always returns -1.
955    Otherwise, it returns the index of the subexpression which is the
956    left-hand-side of the expression at LAST_STRUCT.  */
957 
958 static int
959 prefixify_subexp (struct expression *inexpr,
960 		  struct expression *outexpr, int inend, int outbeg,
961 		  int last_struct)
962 {
963   int oplen;
964   int args;
965   int i;
966   int *arglens;
967   int result = -1;
968 
969   operator_length (inexpr, inend, &oplen, &args);
970 
971   /* Copy the final operator itself, from the end of the input
972      to the beginning of the output.  */
973   inend -= oplen;
974   memcpy (&outexpr->elts[outbeg], &inexpr->elts[inend],
975 	  EXP_ELEM_TO_BYTES (oplen));
976   outbeg += oplen;
977 
978   if (last_struct == inend)
979     result = outbeg - oplen;
980 
981   /* Find the lengths of the arg subexpressions.  */
982   arglens = (int *) alloca (args * sizeof (int));
983   for (i = args - 1; i >= 0; i--)
984     {
985       oplen = length_of_subexp (inexpr, inend);
986       arglens[i] = oplen;
987       inend -= oplen;
988     }
989 
990   /* Now copy each subexpression, preserving the order of
991      the subexpressions, but prefixifying each one.
992      In this loop, inend starts at the beginning of
993      the expression this level is working on
994      and marches forward over the arguments.
995      outbeg does similarly in the output.  */
996   for (i = 0; i < args; i++)
997     {
998       int r;
999 
1000       oplen = arglens[i];
1001       inend += oplen;
1002       r = prefixify_subexp (inexpr, outexpr, inend, outbeg, last_struct);
1003       if (r != -1)
1004 	{
1005 	  /* Return immediately.  We probably have only parsed a
1006 	     partial expression, so we don't want to try to reverse
1007 	     the other operands.  */
1008 	  return r;
1009 	}
1010       outbeg += oplen;
1011     }
1012 
1013   return result;
1014 }
1015 
1016 /* Read an expression from the string *STRINGPTR points to,
1017    parse it, and return a pointer to a struct expression that we malloc.
1018    Use block BLOCK as the lexical context for variable names;
1019    if BLOCK is zero, use the block of the selected stack frame.
1020    Meanwhile, advance *STRINGPTR to point after the expression,
1021    at the first nonwhite character that is not part of the expression
1022    (possibly a null character).
1023 
1024    If COMMA is nonzero, stop if a comma is reached.  */
1025 
1026 expression_up
1027 parse_exp_1 (const char **stringptr, CORE_ADDR pc, const struct block *block,
1028 	     int comma, innermost_block_tracker *tracker)
1029 {
1030   return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL,
1031 			       tracker, nullptr);
1032 }
1033 
1034 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
1035    no value is expected from the expression.
1036    OUT_SUBEXP is set when attempting to complete a field name; in this
1037    case it is set to the index of the subexpression on the
1038    left-hand-side of the struct op.  If not doing such completion, it
1039    is left untouched.  */
1040 
1041 static expression_up
1042 parse_exp_in_context (const char **stringptr, CORE_ADDR pc,
1043 		      const struct block *block,
1044 		      int comma, int void_context_p, int *out_subexp,
1045 		      innermost_block_tracker *tracker,
1046 		      expr_completion_state *cstate)
1047 {
1048   const struct language_defn *lang = NULL;
1049   int subexp;
1050 
1051   if (*stringptr == 0 || **stringptr == 0)
1052     error_no_arg (_("expression to compute"));
1053 
1054   const struct block *expression_context_block = block;
1055   CORE_ADDR expression_context_pc = 0;
1056 
1057   innermost_block_tracker local_tracker;
1058   if (tracker == nullptr)
1059     tracker = &local_tracker;
1060 
1061   /* If no context specified, try using the current frame, if any.  */
1062   if (!expression_context_block)
1063     expression_context_block = get_selected_block (&expression_context_pc);
1064   else if (pc == 0)
1065     expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1066   else
1067     expression_context_pc = pc;
1068 
1069   /* Fall back to using the current source static context, if any.  */
1070 
1071   if (!expression_context_block)
1072     {
1073       struct symtab_and_line cursal = get_current_source_symtab_and_line ();
1074       if (cursal.symtab)
1075 	expression_context_block
1076 	  = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
1077 			       STATIC_BLOCK);
1078       if (expression_context_block)
1079 	expression_context_pc = BLOCK_ENTRY_PC (expression_context_block);
1080     }
1081 
1082   if (language_mode == language_mode_auto && block != NULL)
1083     {
1084       /* Find the language associated to the given context block.
1085          Default to the current language if it can not be determined.
1086 
1087          Note that using the language corresponding to the current frame
1088          can sometimes give unexpected results.  For instance, this
1089          routine is often called several times during the inferior
1090          startup phase to re-parse breakpoint expressions after
1091          a new shared library has been loaded.  The language associated
1092          to the current frame at this moment is not relevant for
1093          the breakpoint.  Using it would therefore be silly, so it seems
1094          better to rely on the current language rather than relying on
1095          the current frame language to parse the expression.  That's why
1096          we do the following language detection only if the context block
1097          has been specifically provided.  */
1098       struct symbol *func = block_linkage_function (block);
1099 
1100       if (func != NULL)
1101         lang = language_def (func->language ());
1102       if (lang == NULL || lang->la_language == language_unknown)
1103         lang = current_language;
1104     }
1105   else
1106     lang = current_language;
1107 
1108   /* get_current_arch may reset CURRENT_LANGUAGE via select_frame.
1109      While we need CURRENT_LANGUAGE to be set to LANG (for lookup_symbol
1110      and others called from *.y) ensure CURRENT_LANGUAGE gets restored
1111      to the value matching SELECTED_FRAME as set by get_current_arch.  */
1112 
1113   parser_state ps (lang, get_current_arch (), expression_context_block,
1114 		   expression_context_pc, comma, *stringptr,
1115 		   cstate != nullptr, tracker);
1116 
1117   scoped_restore_current_language lang_saver;
1118   set_language (lang->la_language);
1119 
1120   try
1121     {
1122       lang->parser (&ps);
1123     }
1124   catch (const gdb_exception &except)
1125     {
1126       /* If parsing for completion, allow this to succeed; but if no
1127 	 expression elements have been written, then there's nothing
1128 	 to do, so fail.  */
1129       if (! ps.parse_completion || ps.expout_ptr == 0)
1130 	throw;
1131     }
1132 
1133   /* We have to operate on an "expression *", due to la_post_parser,
1134      which explains this funny-looking double release.  */
1135   expression_up result = ps.release ();
1136 
1137   /* Convert expression from postfix form as generated by yacc
1138      parser, to a prefix form.  */
1139 
1140   if (expressiondebug)
1141     dump_raw_expression (result.get (), gdb_stdlog,
1142 			 "before conversion to prefix form");
1143 
1144   subexp = prefixify_expression (result.get (),
1145 				 ps.m_completion_state.expout_last_struct);
1146   if (out_subexp)
1147     *out_subexp = subexp;
1148 
1149   lang->post_parser (&result, void_context_p, ps.parse_completion, tracker);
1150 
1151   if (expressiondebug)
1152     dump_prefix_expression (result.get (), gdb_stdlog);
1153 
1154   if (cstate != nullptr)
1155     *cstate = std::move (ps.m_completion_state);
1156   *stringptr = ps.lexptr;
1157   return result;
1158 }
1159 
1160 /* Parse STRING as an expression, and complain if this fails
1161    to use up all of the contents of STRING.  */
1162 
1163 expression_up
1164 parse_expression (const char *string, innermost_block_tracker *tracker)
1165 {
1166   expression_up exp = parse_exp_1 (&string, 0, 0, 0, tracker);
1167   if (*string)
1168     error (_("Junk after end of expression."));
1169   return exp;
1170 }
1171 
1172 /* Same as parse_expression, but using the given language (LANG)
1173    to parse the expression.  */
1174 
1175 expression_up
1176 parse_expression_with_language (const char *string, enum language lang)
1177 {
1178   gdb::optional<scoped_restore_current_language> lang_saver;
1179   if (current_language->la_language != lang)
1180     {
1181       lang_saver.emplace ();
1182       set_language (lang);
1183     }
1184 
1185   return parse_expression (string);
1186 }
1187 
1188 /* Parse STRING as an expression.  If parsing ends in the middle of a
1189    field reference, return the type of the left-hand-side of the
1190    reference; furthermore, if the parsing ends in the field name,
1191    return the field name in *NAME.  If the parsing ends in the middle
1192    of a field reference, but the reference is somehow invalid, throw
1193    an exception.  In all other cases, return NULL.  */
1194 
1195 struct type *
1196 parse_expression_for_completion (const char *string,
1197 				 gdb::unique_xmalloc_ptr<char> *name,
1198 				 enum type_code *code)
1199 {
1200   expression_up exp;
1201   struct value *val;
1202   int subexp;
1203   expr_completion_state cstate;
1204 
1205   try
1206     {
1207       exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp,
1208 				  nullptr, &cstate);
1209     }
1210   catch (const gdb_exception_error &except)
1211     {
1212       /* Nothing, EXP remains NULL.  */
1213     }
1214 
1215   if (exp == NULL)
1216     return NULL;
1217 
1218   if (cstate.expout_tag_completion_type != TYPE_CODE_UNDEF)
1219     {
1220       *code = cstate.expout_tag_completion_type;
1221       *name = std::move (cstate.expout_completion_name);
1222       return NULL;
1223     }
1224 
1225   if (cstate.expout_last_struct == -1)
1226     return NULL;
1227 
1228   const char *fieldname = extract_field_op (exp.get (), &subexp);
1229   if (fieldname == NULL)
1230     {
1231       name->reset ();
1232       return NULL;
1233     }
1234 
1235   name->reset (xstrdup (fieldname));
1236   /* This might throw an exception.  If so, we want to let it
1237      propagate.  */
1238   val = evaluate_subexpression_type (exp.get (), subexp);
1239 
1240   return value_type (val);
1241 }
1242 
1243 /* Parse floating point value P of length LEN.
1244    Return false if invalid, true if valid.
1245    The successfully parsed number is stored in DATA in
1246    target format for floating-point type TYPE.
1247 
1248    NOTE: This accepts the floating point syntax that sscanf accepts.  */
1249 
1250 bool
1251 parse_float (const char *p, int len,
1252 	     const struct type *type, gdb_byte *data)
1253 {
1254   return target_float_from_string (data, type, std::string (p, len));
1255 }
1256 
1257 /* This function avoids direct calls to fprintf
1258    in the parser generated debug code.  */
1259 void
1260 parser_fprintf (FILE *x, const char *y, ...)
1261 {
1262   va_list args;
1263 
1264   va_start (args, y);
1265   if (x == stderr)
1266     vfprintf_unfiltered (gdb_stderr, y, args);
1267   else
1268     {
1269       fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
1270       vfprintf_unfiltered (gdb_stderr, y, args);
1271     }
1272   va_end (args);
1273 }
1274 
1275 /* Implementation of the exp_descriptor method operator_check.  */
1276 
1277 int
1278 operator_check_standard (struct expression *exp, int pos,
1279 			 int (*objfile_func) (struct objfile *objfile,
1280 					      void *data),
1281 			 void *data)
1282 {
1283   const union exp_element *const elts = exp->elts;
1284   struct type *type = NULL;
1285   struct objfile *objfile = NULL;
1286 
1287   /* Extended operators should have been already handled by exp_descriptor
1288      iterate method of its specific language.  */
1289   gdb_assert (elts[pos].opcode < OP_EXTENDED0);
1290 
1291   /* Track the callers of write_exp_elt_type for this table.  */
1292 
1293   switch (elts[pos].opcode)
1294     {
1295     case BINOP_VAL:
1296     case OP_COMPLEX:
1297     case OP_FLOAT:
1298     case OP_LONG:
1299     case OP_SCOPE:
1300     case OP_TYPE:
1301     case UNOP_CAST:
1302     case UNOP_MAX:
1303     case UNOP_MEMVAL:
1304     case UNOP_MIN:
1305       type = elts[pos + 1].type;
1306       break;
1307 
1308     case TYPE_INSTANCE:
1309       {
1310 	LONGEST arg, nargs = elts[pos + 2].longconst;
1311 
1312 	for (arg = 0; arg < nargs; arg++)
1313 	  {
1314 	    struct type *inst_type = elts[pos + 3 + arg].type;
1315 	    struct objfile *inst_objfile = TYPE_OBJFILE (inst_type);
1316 
1317 	    if (inst_objfile && (*objfile_func) (inst_objfile, data))
1318 	      return 1;
1319 	  }
1320       }
1321       break;
1322 
1323     case OP_VAR_VALUE:
1324       {
1325 	const struct block *const block = elts[pos + 1].block;
1326 	const struct symbol *const symbol = elts[pos + 2].symbol;
1327 
1328 	/* Check objfile where the variable itself is placed.
1329 	   SYMBOL_OBJ_SECTION (symbol) may be NULL.  */
1330 	if ((*objfile_func) (symbol_objfile (symbol), data))
1331 	  return 1;
1332 
1333 	/* Check objfile where is placed the code touching the variable.  */
1334 	objfile = block_objfile (block);
1335 
1336 	type = SYMBOL_TYPE (symbol);
1337       }
1338       break;
1339     case OP_VAR_MSYM_VALUE:
1340       objfile = elts[pos + 1].objfile;
1341       break;
1342     }
1343 
1344   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
1345 
1346   if (type && TYPE_OBJFILE (type)
1347       && (*objfile_func) (TYPE_OBJFILE (type), data))
1348     return 1;
1349   if (objfile && (*objfile_func) (objfile, data))
1350     return 1;
1351 
1352   return 0;
1353 }
1354 
1355 /* Call OBJFILE_FUNC for any objfile found being referenced by EXP.
1356    OBJFILE_FUNC is never called with NULL OBJFILE.  OBJFILE_FUNC get
1357    passed an arbitrary caller supplied DATA pointer.  If OBJFILE_FUNC
1358    returns non-zero value then (any other) non-zero value is immediately
1359    returned to the caller.  Otherwise zero is returned after iterating
1360    through whole EXP.  */
1361 
1362 static int
1363 exp_iterate (struct expression *exp,
1364 	     int (*objfile_func) (struct objfile *objfile, void *data),
1365 	     void *data)
1366 {
1367   int endpos;
1368 
1369   for (endpos = exp->nelts; endpos > 0; )
1370     {
1371       int pos, args, oplen = 0;
1372 
1373       operator_length (exp, endpos, &oplen, &args);
1374       gdb_assert (oplen > 0);
1375 
1376       pos = endpos - oplen;
1377       if (exp->language_defn->la_exp_desc->operator_check (exp, pos,
1378 							   objfile_func, data))
1379 	return 1;
1380 
1381       endpos = pos;
1382     }
1383 
1384   return 0;
1385 }
1386 
1387 /* Helper for exp_uses_objfile.  */
1388 
1389 static int
1390 exp_uses_objfile_iter (struct objfile *exp_objfile, void *objfile_voidp)
1391 {
1392   struct objfile *objfile = (struct objfile *) objfile_voidp;
1393 
1394   if (exp_objfile->separate_debug_objfile_backlink)
1395     exp_objfile = exp_objfile->separate_debug_objfile_backlink;
1396 
1397   return exp_objfile == objfile;
1398 }
1399 
1400 /* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
1401    is unloaded), otherwise return 0.  OBJFILE must not be a separate debug info
1402    file.  */
1403 
1404 int
1405 exp_uses_objfile (struct expression *exp, struct objfile *objfile)
1406 {
1407   gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
1408 
1409   return exp_iterate (exp, exp_uses_objfile_iter, objfile);
1410 }
1411 
1412 /* Reallocate the `expout' pointer inside PS so that it can accommodate
1413    at least LENELT expression elements.  This function does nothing if
1414    there is enough room for the elements.  */
1415 
1416 static void
1417 increase_expout_size (struct expr_builder *ps, size_t lenelt)
1418 {
1419   if ((ps->expout_ptr + lenelt) >= ps->expout_size)
1420     {
1421       ps->expout_size = std::max (ps->expout_size * 2,
1422 				  ps->expout_ptr + lenelt + 10);
1423       ps->expout.reset (XRESIZEVAR (expression,
1424 				    ps->expout.release (),
1425 				    (sizeof (struct expression)
1426 				     + EXP_ELEM_TO_BYTES (ps->expout_size))));
1427     }
1428 }
1429 
1430 void _initialize_parse ();
1431 void
1432 _initialize_parse ()
1433 {
1434   add_setshow_zuinteger_cmd ("expression", class_maintenance,
1435 			     &expressiondebug,
1436 			     _("Set expression debugging."),
1437 			     _("Show expression debugging."),
1438 			     _("When non-zero, the internal representation "
1439 			       "of expressions will be printed."),
1440 			     NULL,
1441 			     show_expressiondebug,
1442 			     &setdebuglist, &showdebuglist);
1443   add_setshow_boolean_cmd ("parser", class_maintenance,
1444 			    &parser_debug,
1445 			   _("Set parser debugging."),
1446 			   _("Show parser debugging."),
1447 			   _("When non-zero, expression parser "
1448 			     "tracing will be enabled."),
1449 			    NULL,
1450 			    show_parserdebug,
1451 			    &setdebuglist, &showdebuglist);
1452 }
1453