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