gdb: move go_language class declaration into header file
[deliverable/binutils-gdb.git] / gdb / parser-defs.h
CommitLineData
c906108c 1/* Parser definitions for GDB.
96cb11df 2
b811d2c2 3 Copyright (C) 1986-2020 Free Software Foundation, Inc.
96cb11df 4
c906108c
SS
5 Modified from expread.y by the Department of Computer Science at the
6 State University of New York at Buffalo.
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
c5aa993b 13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b 20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
22
23#if !defined (PARSER_DEFS_H)
24#define PARSER_DEFS_H 1
25
74e5a346 26#include "expression.h"
0d12e84c 27#include "symtab.h"
d16aafd8 28
fe898f56 29struct block;
410a0ff2
SDJ
30struct language_defn;
31struct internalvar;
699bd4cf 32class innermost_block_tracker;
fe898f56 33
491144b5 34extern bool parser_debug;
92981e24 35
37eedb39
TT
36/* A class that can be used to build a "struct expression". */
37
38struct expr_builder
410a0ff2 39{
1201a264
TT
40 /* Constructor. LANG is the language used to parse the expression.
41 And GDBARCH is the gdbarch to use during parsing. */
e9d9f57e 42
37eedb39 43 expr_builder (const struct language_defn *lang,
e9d9f57e
TT
44 struct gdbarch *gdbarch);
45
37eedb39 46 DISABLE_COPY_AND_ASSIGN (expr_builder);
410a0ff2 47
e9d9f57e
TT
48 /* Resize the allocated expression to the correct size, and return
49 it as an expression_up -- passing ownership to the caller. */
41e3300a 50 ATTRIBUTE_UNUSED_RESULT expression_up release ();
410a0ff2 51
fa9f5be6
TT
52 /* Return the gdbarch that was passed to the constructor. */
53
54 struct gdbarch *gdbarch ()
55 {
56 return expout->gdbarch;
57 }
58
73923d7e
TT
59 /* Return the language that was passed to the constructor. */
60
61 const struct language_defn *language ()
62 {
63 return expout->language_defn;
64 }
65
410a0ff2
SDJ
66 /* The size of the expression above. */
67
68 size_t expout_size;
69
e9d9f57e
TT
70 /* The expression related to this parser state. */
71
72 expression_up expout;
73
410a0ff2
SDJ
74 /* The number of elements already in the expression. This is used
75 to know where to put new elements. */
76
77 size_t expout_ptr;
78};
3e79cecf 79
2a612529
TT
80/* This is used for expression completion. */
81
82struct expr_completion_state
83{
84 /* The index of the last struct expression directly before a '.' or
85 '->'. This is set when parsing and is only used when completing a
86 field name. It is -1 if no dereference operation was found. */
87 int expout_last_struct = -1;
88
89 /* If we are completing a tagged type name, this will be nonzero. */
90 enum type_code expout_tag_completion_type = TYPE_CODE_UNDEF;
91
92 /* The token for tagged type name completion. */
93 gdb::unique_xmalloc_ptr<char> expout_completion_name;
94};
95
37eedb39
TT
96/* An instance of this type is instantiated during expression parsing,
97 and passed to the appropriate parser. It holds both inputs to the
98 parser, and result. */
99
100struct parser_state : public expr_builder
101{
102 /* Constructor. LANG is the language used to parse the expression.
103 And GDBARCH is the gdbarch to use during parsing. */
104
105 parser_state (const struct language_defn *lang,
1e58a4a4
TT
106 struct gdbarch *gdbarch,
107 const struct block *context_block,
8621b685 108 CORE_ADDR context_pc,
5776fca3 109 int comma,
2a612529 110 const char *input,
699bd4cf 111 int completion,
c5c41205
TT
112 innermost_block_tracker *tracker,
113 bool void_p)
1e58a4a4
TT
114 : expr_builder (lang, gdbarch),
115 expression_context_block (context_block),
8621b685 116 expression_context_pc (context_pc),
5776fca3 117 comma_terminates (comma),
2a612529 118 lexptr (input),
699bd4cf 119 parse_completion (completion),
c5c41205
TT
120 block_tracker (tracker),
121 void_context_p (void_p)
37eedb39
TT
122 {
123 }
124
125 DISABLE_COPY_AND_ASSIGN (parser_state);
37eedb39 126
43476f0b
TT
127 /* Begin counting arguments for a function call,
128 saving the data about any containing call. */
129
130 void start_arglist ()
131 {
132 m_funcall_chain.push_back (arglist_len);
133 arglist_len = 0;
134 }
135
136 /* Return the number of arguments in a function call just terminated,
137 and restore the data for the containing function call. */
138
139 int end_arglist ()
140 {
141 int val = arglist_len;
142 arglist_len = m_funcall_chain.back ();
143 m_funcall_chain.pop_back ();
144 return val;
145 }
146
2a612529
TT
147 /* Mark the current index as the starting location of a structure
148 expression. This is used when completing on field names. */
149
150 void mark_struct_expression ();
151
152 /* Indicate that the current parser invocation is completing a tag.
153 TAG is the type code of the tag, and PTR and LENGTH represent the
154 start of the tag name. */
155
156 void mark_completion_tag (enum type_code tag, const char *ptr, int length);
157
43476f0b 158
1e58a4a4
TT
159 /* If this is nonzero, this block is used as the lexical context for
160 symbol names. */
c906108c 161
1e58a4a4 162 const struct block * const expression_context_block;
c906108c 163
1e58a4a4
TT
164 /* If expression_context_block is non-zero, then this is the PC
165 within the block that we want to evaluate expressions at. When
166 debugging C or C++ code, we use this to find the exact line we're
167 at, and then look up the macro definitions active at that
168 point. */
169 const CORE_ADDR expression_context_pc;
8621b685
TT
170
171 /* Nonzero means stop parsing on first comma (if not within parentheses). */
172
173 int comma_terminates;
5776fca3
TT
174
175 /* During parsing of a C expression, the pointer to the next character
176 is in this variable. */
177
178 const char *lexptr;
179
180 /* After a token has been recognized, this variable points to it.
181 Currently used only for error reporting. */
182 const char *prev_lexptr = nullptr;
43476f0b
TT
183
184 /* Number of arguments seen so far in innermost function call. */
185
186 int arglist_len = 0;
187
2a612529
TT
188 /* True if parsing an expression to attempt completion. */
189 int parse_completion;
190
191 /* Completion state is updated here. */
192 expr_completion_state m_completion_state;
193
699bd4cf
TT
194 /* The innermost block tracker. */
195 innermost_block_tracker *block_tracker;
196
c5c41205
TT
197 /* True if no value is expected from the expression. */
198 bool void_context_p;
199
43476f0b
TT
200private:
201
202 /* Data structure for saving values of arglist_len for function calls whose
203 arguments contain other function calls. */
204
205 std::vector<int> m_funcall_chain;
1e58a4a4 206};
84f0252a 207
aee1fcdf
AB
208/* When parsing expressions we track the innermost block that was
209 referenced. */
210
211class innermost_block_tracker
212{
213public:
699bd4cf
TT
214 innermost_block_tracker (innermost_block_tracker_types types
215 = INNERMOST_BLOCK_FOR_SYMBOLS)
216 : m_types (types),
ae451627 217 m_innermost_block (NULL)
aee1fcdf
AB
218 { /* Nothing. */ }
219
aee1fcdf 220 /* Update the stored innermost block if the new block B is more inner
ae451627
AB
221 than the currently stored block, or if no block is stored yet. The
222 type T tells us whether the block B was for a symbol or for a
223 register. The stored innermost block is only updated if the type T is
224 a type we are interested in, the types we are interested in are held
225 in M_TYPES and set during RESET. */
226 void update (const struct block *b, innermost_block_tracker_types t);
aee1fcdf
AB
227
228 /* Overload of main UPDATE method which extracts the block from BS. */
229 void update (const struct block_symbol &bs)
230 {
ae451627 231 update (bs.block, INNERMOST_BLOCK_FOR_SYMBOLS);
aee1fcdf
AB
232 }
233
234 /* Return the stored innermost block. Can be nullptr if no symbols or
235 registers were found during an expression parse, and so no innermost
236 block was defined. */
237 const struct block *block () const
238 {
239 return m_innermost_block;
240 }
241
242private:
ae451627
AB
243 /* The type of innermost block being looked for. */
244 innermost_block_tracker_types m_types;
245
aee1fcdf
AB
246 /* The currently stored innermost block found while parsing an
247 expression. */
248 const struct block *m_innermost_block;
249};
250
c906108c 251/* A string token, either a char-string or bit-string. Char-strings are
0df8b418 252 used, for example, for the names of symbols. */
c906108c
SS
253
254struct stoken
255 {
0df8b418 256 /* Pointer to first byte of char-string or first bit of bit-string. */
d7561cbb 257 const char *ptr;
0df8b418 258 /* Length of string in bytes for char-string or bits for bit-string. */
c906108c
SS
259 int length;
260 };
261
6c7a06a3
TT
262struct typed_stoken
263 {
264 /* A language-specific type field. */
265 int type;
0df8b418 266 /* Pointer to first byte of char-string or first bit of bit-string. */
6c7a06a3 267 char *ptr;
0df8b418 268 /* Length of string in bytes for char-string or bits for bit-string. */
6c7a06a3
TT
269 int length;
270 };
271
272struct stoken_vector
273 {
274 int len;
275 struct typed_stoken *tokens;
276 };
277
c906108c
SS
278struct ttype
279 {
280 struct stoken stoken;
281 struct type *type;
282 };
283
284struct symtoken
285 {
286 struct stoken stoken;
d12307c1 287 struct block_symbol sym;
c906108c
SS
288 int is_a_field_of_this;
289 };
290
379b85df
AF
291struct objc_class_str
292 {
293 struct stoken stoken;
294 struct type *type;
fe978cb0 295 int theclass;
379b85df
AF
296 };
297
55aa24fb
SDJ
298/* Reverse an expression from suffix form (in which it is constructed)
299 to prefix form (in which we can conveniently print or execute it).
2a612529 300 Ordinarily this always returns -1. However, if LAST_STRUCT
55aa24fb
SDJ
301 is not -1 (i.e., we are trying to complete a field name), it will
302 return the index of the subexpression which is the left-hand-side
2a612529 303 of the struct operation at LAST_STRUCT. */
55aa24fb 304
2a612529
TT
305extern int prefixify_expression (struct expression *expr,
306 int last_struct = -1);
55aa24fb 307
37eedb39 308extern void write_exp_elt_opcode (struct expr_builder *, enum exp_opcode);
c906108c 309
37eedb39 310extern void write_exp_elt_sym (struct expr_builder *, struct symbol *);
c906108c 311
37eedb39 312extern void write_exp_elt_longcst (struct expr_builder *, LONGEST);
c906108c 313
37eedb39 314extern void write_exp_elt_floatcst (struct expr_builder *, const gdb_byte *);
27bc4d80 315
37eedb39 316extern void write_exp_elt_type (struct expr_builder *, struct type *);
c906108c 317
37eedb39 318extern void write_exp_elt_intern (struct expr_builder *, struct internalvar *);
c906108c 319
37eedb39 320extern void write_exp_string (struct expr_builder *, struct stoken);
c906108c 321
37eedb39 322void write_exp_string_vector (struct expr_builder *, int type,
410a0ff2 323 struct stoken_vector *vec);
6c7a06a3 324
37eedb39 325extern void write_exp_bitstring (struct expr_builder *, struct stoken);
c906108c 326
37eedb39 327extern void write_exp_elt_block (struct expr_builder *, const struct block *);
c906108c 328
37eedb39 329extern void write_exp_elt_objfile (struct expr_builder *,
410a0ff2 330 struct objfile *objfile);
9e35dae4 331
37eedb39 332extern void write_exp_msymbol (struct expr_builder *,
410a0ff2 333 struct bound_minimal_symbol);
c906108c 334
1e58a4a4 335extern void write_dollar_variable (struct parser_state *, struct stoken str);
c906108c 336
d7561cbb 337extern const char *find_template_name_end (const char *);
c906108c 338
61f4b350 339extern std::string copy_name (struct stoken);
c906108c 340
5f9769d1
PH
341extern int dump_subexp (struct expression *, struct ui_file *, int);
342
343extern int dump_subexp_body_standard (struct expression *,
344 struct ui_file *, int);
345
6d816919
AB
346/* Dump (to STREAM) a function call like expression at position ELT in the
347 expression array EXP. Return a new value for ELT just after the
348 function call expression. */
349
350extern int dump_subexp_body_funcall (struct expression *exp,
351 struct ui_file *stream, int elt);
352
554794dc 353extern void operator_length (const struct expression *, int, int *, int *);
24daaebc 354
554794dc
SDJ
355extern void operator_length_standard (const struct expression *, int, int *,
356 int *);
5f9769d1 357
c0201579
JK
358extern int operator_check_standard (struct expression *exp, int pos,
359 int (*objfile_func)
360 (struct objfile *objfile, void *data),
361 void *data);
362
edd079d9
UW
363extern bool parse_float (const char *p, int len,
364 const struct type *type, gdb_byte *data);
c906108c
SS
365\f
366/* These codes indicate operator precedences for expression printing,
367 least tightly binding first. */
368/* Adding 1 to a precedence value is done for binary operators,
369 on the operand which is more tightly bound, so that operators
370 of equal precedence within that operand will get parentheses. */
371/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
372 they are used as the "surrounding precedence" to force
373 various kinds of things to be parenthesized. */
374enum precedence
c5aa993b
JM
375 {
376 PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
377 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
378 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
379 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
380 };
c906108c
SS
381
382/* Table mapping opcodes into strings for printing operators
383 and precedences of the operators. */
384
385struct op_print
c5aa993b 386 {
a121b7c1 387 const char *string;
c5aa993b
JM
388 enum exp_opcode opcode;
389 /* Precedence of operator. These values are used only by comparisons. */
390 enum precedence precedence;
391
392 /* For a binary operator: 1 iff right associate.
0df8b418 393 For a unary operator: 1 iff postfix. */
c5aa993b
JM
394 int right_assoc;
395 };
c906108c 396
5f9769d1
PH
397/* Information needed to print, prefixify, and evaluate expressions for
398 a given language. */
399
400struct exp_descriptor
401 {
402 /* Print subexpression. */
403 void (*print_subexp) (struct expression *, int *, struct ui_file *,
404 enum precedence);
405
406 /* Returns number of exp_elements needed to represent an operator and
407 the number of subexpressions it takes. */
554794dc 408 void (*operator_length) (const struct expression*, int, int*, int *);
5f9769d1 409
a1c7835a
YQ
410 /* Call OBJFILE_FUNC for any objfile found being referenced by the
411 single operator of EXP at position POS. Operator parameters are
412 located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
413 should never be called with NULL OBJFILE. OBJFILE_FUNC should
414 get passed an arbitrary caller supplied DATA pointer. If it
415 returns non-zero value then (any other) non-zero value should be
416 immediately returned to the caller. Otherwise zero should be
417 returned. */
c0201579
JK
418 int (*operator_check) (struct expression *exp, int pos,
419 int (*objfile_func) (struct objfile *objfile,
420 void *data),
421 void *data);
422
5f9769d1
PH
423 /* Dump the rest of this (prefix) expression after the operator
424 itself has been printed. See dump_subexp_body_standard in
425 (expprint.c). */
426 int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
427
428 /* Evaluate an expression. */
429 struct value *(*evaluate_exp) (struct type *, struct expression *,
430 int *, enum noside);
431 };
432
433
434/* Default descriptor containing standard definitions of all
435 elements. */
436extern const struct exp_descriptor exp_descriptor_standard;
437
438/* Functions used by language-specific extended operators to (recursively)
439 print/dump subexpressions. */
440
441extern void print_subexp (struct expression *, int *, struct ui_file *,
442 enum precedence);
443
444extern void print_subexp_standard (struct expression *, int *,
445 struct ui_file *, enum precedence);
446
6d816919
AB
447/* Print a function call like expression to STREAM. This is called as a
448 helper function by which point the expression node identifying this as a
449 function call has already been stripped off and POS should point to the
450 number of function call arguments. EXP is the object containing the
451 list of expression elements. */
452
453extern void print_subexp_funcall (struct expression *exp, int *pos,
454 struct ui_file *stream);
455
f461f5cf
PM
456/* Function used to avoid direct calls to fprintf
457 in the code generated by the bison parser. */
458
a0b31db1 459extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
f461f5cf 460
c0201579
JK
461extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
462
c5aa993b 463#endif /* PARSER_DEFS_H */
2f68a895 464
This page took 2.000173 seconds and 4 git commands to generate.