Introduce common/common-defs.h
[deliverable/binutils-gdb.git] / gdb / parser-defs.h
CommitLineData
c906108c 1/* Parser definitions for GDB.
96cb11df 2
ecd75fc8 3 Copyright (C) 1986-2014 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
d16aafd8 26#include "doublest.h"
71918a86 27#include "vec.h"
74e5a346 28#include "expression.h"
d16aafd8 29
fe898f56 30struct block;
410a0ff2
SDJ
31struct language_defn;
32struct internalvar;
fe898f56 33
92981e24
TT
34extern int parser_debug;
35
410a0ff2
SDJ
36#define parse_gdbarch(ps) ((ps)->expout->gdbarch)
37#define parse_language(ps) ((ps)->expout->language_defn)
c906108c 38
410a0ff2
SDJ
39struct parser_state
40{
41 /* The expression related to this parser state. */
42
43 struct expression *expout;
44
45 /* The size of the expression above. */
46
47 size_t expout_size;
48
49 /* The number of elements already in the expression. This is used
50 to know where to put new elements. */
51
52 size_t expout_ptr;
53};
3e79cecf 54
c906108c
SS
55/* If this is nonzero, this block is used as the lexical context
56 for symbol names. */
57
270140bd 58extern const struct block *expression_context_block;
c906108c 59
84f0252a
JB
60/* If expression_context_block is non-zero, then this is the PC within
61 the block that we want to evaluate expressions at. When debugging
62 C or C++ code, we use this to find the exact line we're at, and
63 then look up the macro definitions active at that point. */
f7321c06 64extern CORE_ADDR expression_context_pc;
84f0252a 65
c906108c 66/* The innermost context required by the stack and register variables
0df8b418 67 we've encountered so far. */
270140bd 68extern const struct block *innermost_block;
c906108c
SS
69
70/* The block in which the most recently discovered symbol was found.
71 FIXME: Should be declared along with lookup_symbol in symtab.h; is not
72 related specifically to parsing. */
270140bd 73extern const struct block *block_found;
c906108c
SS
74
75/* Number of arguments seen so far in innermost function call. */
76extern int arglist_len;
77
78/* A string token, either a char-string or bit-string. Char-strings are
0df8b418 79 used, for example, for the names of symbols. */
c906108c
SS
80
81struct stoken
82 {
0df8b418 83 /* Pointer to first byte of char-string or first bit of bit-string. */
d7561cbb 84 const char *ptr;
0df8b418 85 /* Length of string in bytes for char-string or bits for bit-string. */
c906108c
SS
86 int length;
87 };
88
6c7a06a3
TT
89struct typed_stoken
90 {
91 /* A language-specific type field. */
92 int type;
0df8b418 93 /* Pointer to first byte of char-string or first bit of bit-string. */
6c7a06a3 94 char *ptr;
0df8b418 95 /* Length of string in bytes for char-string or bits for bit-string. */
6c7a06a3
TT
96 int length;
97 };
98
99struct stoken_vector
100 {
101 int len;
102 struct typed_stoken *tokens;
103 };
104
c906108c
SS
105struct ttype
106 {
107 struct stoken stoken;
108 struct type *type;
109 };
110
111struct symtoken
112 {
113 struct stoken stoken;
114 struct symbol *sym;
115 int is_a_field_of_this;
116 };
117
379b85df
AF
118struct objc_class_str
119 {
120 struct stoken stoken;
121 struct type *type;
122 int class;
123 };
124
71918a86
TT
125typedef struct type *type_ptr;
126DEF_VEC_P (type_ptr);
379b85df 127
c906108c
SS
128/* For parsing of complicated types.
129 An array should be preceded in the list by the size of the array. */
130enum type_pieces
c5aa993b 131 {
2e2394a0
MS
132 tp_end = -1,
133 tp_pointer,
134 tp_reference,
135 tp_array,
71918a86
TT
136 tp_function,
137 tp_function_with_arguments,
2e2394a0 138 tp_const,
47663de5 139 tp_volatile,
fcde5961
TT
140 tp_space_identifier,
141 tp_type_stack
c5aa993b 142 };
c906108c 143/* The stack can contain either an enum type_pieces or an int. */
c5aa993b
JM
144union type_stack_elt
145 {
146 enum type_pieces piece;
147 int int_val;
fcde5961 148 struct type_stack *stack_val;
71918a86 149 VEC (type_ptr) *typelist_val;
c5aa993b 150 };
1a7d0ce4
TT
151
152/* The type stack is an instance of this structure. */
153
154struct type_stack
155{
156 /* Elements on the stack. */
157 union type_stack_elt *elements;
158 /* Current stack depth. */
159 int depth;
160 /* Allocated size of stack. */
161 int size;
162};
c906108c 163
55aa24fb 164/* Helper function to initialize the expout, expout_size, expout_ptr
410a0ff2
SDJ
165 trio inside PS before it is used to store expression elements created
166 during the parsing of an expression. INITIAL_SIZE is the initial size of
55aa24fb
SDJ
167 the expout array. LANG is the language used to parse the expression.
168 And GDBARCH is the gdbarch to use during parsing. */
169
410a0ff2
SDJ
170extern void initialize_expout (struct parser_state *ps,
171 size_t initial_size,
172 const struct language_defn *lang,
173 struct gdbarch *gdbarch);
55aa24fb 174
410a0ff2
SDJ
175/* Helper function that reallocates the EXPOUT inside PS in order to
176 eliminate any unused space. It is generally used when the expression
177 has just been parsed and created. */
55aa24fb 178
410a0ff2 179extern void reallocate_expout (struct parser_state *ps);
55aa24fb
SDJ
180
181/* Reverse an expression from suffix form (in which it is constructed)
182 to prefix form (in which we can conveniently print or execute it).
183 Ordinarily this always returns -1. However, if EXPOUT_LAST_STRUCT
184 is not -1 (i.e., we are trying to complete a field name), it will
185 return the index of the subexpression which is the left-hand-side
186 of the struct operation at EXPOUT_LAST_STRUCT. */
187
188extern int prefixify_expression (struct expression *expr);
189
410a0ff2 190extern void write_exp_elt_opcode (struct parser_state *, enum exp_opcode);
c906108c 191
410a0ff2 192extern void write_exp_elt_sym (struct parser_state *, struct symbol *);
c906108c 193
410a0ff2 194extern void write_exp_elt_longcst (struct parser_state *, LONGEST);
c906108c 195
410a0ff2 196extern void write_exp_elt_dblcst (struct parser_state *, DOUBLEST);
c906108c 197
410a0ff2 198extern void write_exp_elt_decfloatcst (struct parser_state *, gdb_byte *);
27bc4d80 199
410a0ff2 200extern void write_exp_elt_type (struct parser_state *, struct type *);
c906108c 201
410a0ff2 202extern void write_exp_elt_intern (struct parser_state *, struct internalvar *);
c906108c 203
410a0ff2 204extern void write_exp_string (struct parser_state *, struct stoken);
c906108c 205
410a0ff2
SDJ
206void write_exp_string_vector (struct parser_state *, int type,
207 struct stoken_vector *vec);
6c7a06a3 208
410a0ff2 209extern void write_exp_bitstring (struct parser_state *, struct stoken);
c906108c 210
410a0ff2 211extern void write_exp_elt_block (struct parser_state *, const struct block *);
c906108c 212
410a0ff2
SDJ
213extern void write_exp_elt_objfile (struct parser_state *,
214 struct objfile *objfile);
9e35dae4 215
410a0ff2
SDJ
216extern void write_exp_msymbol (struct parser_state *,
217 struct bound_minimal_symbol);
c906108c 218
410a0ff2 219extern void write_dollar_variable (struct parser_state *, struct stoken str);
c906108c 220
410a0ff2 221extern void mark_struct_expression (struct parser_state *);
65d12d83 222
d7561cbb 223extern const char *find_template_name_end (const char *);
c906108c 224
a14ed312 225extern void start_arglist (void);
c906108c 226
a14ed312 227extern int end_arglist (void);
c906108c 228
a14ed312 229extern char *copy_name (struct stoken);
c906108c 230
95c391b6
TT
231extern void insert_type (enum type_pieces);
232
a14ed312 233extern void push_type (enum type_pieces);
c906108c 234
a14ed312 235extern void push_type_int (int);
c906108c 236
410a0ff2 237extern void insert_type_address_space (struct parser_state *, char *);
47663de5 238
a14ed312 239extern enum type_pieces pop_type (void);
c906108c 240
a14ed312 241extern int pop_type_int (void);
c906108c 242
fcde5961
TT
243extern struct type_stack *get_type_stack (void);
244
245extern struct type_stack *append_type_stack (struct type_stack *to,
246 struct type_stack *from);
247
248extern void push_type_stack (struct type_stack *stack);
249
250extern void type_stack_cleanup (void *arg);
251
71918a86
TT
252extern void push_typelist (VEC (type_ptr) *typelist);
253
a14ed312 254extern int length_of_subexp (struct expression *, int);
c906108c 255
5f9769d1
PH
256extern int dump_subexp (struct expression *, struct ui_file *, int);
257
258extern int dump_subexp_body_standard (struct expression *,
259 struct ui_file *, int);
260
554794dc 261extern void operator_length (const struct expression *, int, int *, int *);
24daaebc 262
554794dc
SDJ
263extern void operator_length_standard (const struct expression *, int, int *,
264 int *);
5f9769d1 265
c0201579
JK
266extern int operator_check_standard (struct expression *exp, int pos,
267 int (*objfile_func)
268 (struct objfile *objfile, void *data),
269 void *data);
270
5f9769d1
PH
271extern char *op_name_standard (enum exp_opcode);
272
a14ed312 273extern struct type *follow_types (struct type *);
c906108c 274
e85c3284
PH
275extern void null_post_parser (struct expression **, int);
276
d30f5e1f
DE
277extern int parse_float (const char *p, int len, DOUBLEST *d,
278 const char **suffix);
279
280extern int parse_c_float (struct gdbarch *gdbarch, const char *p, int len,
281 DOUBLEST *d, struct type **t);
282
c906108c
SS
283/* During parsing of a C expression, the pointer to the next character
284 is in this variable. */
285
d7561cbb 286extern const char *lexptr;
c906108c 287
0df8b418 288/* After a token has been recognized, this variable points to it.
665132f9 289 Currently used only for error reporting. */
d7561cbb 290extern const char *prev_lexptr;
665132f9 291
c906108c
SS
292/* Current depth in parentheses within the expression. */
293
294extern int paren_depth;
295
296/* Nonzero means stop parsing on first comma (if not within parentheses). */
297
298extern int comma_terminates;
299\f
300/* These codes indicate operator precedences for expression printing,
301 least tightly binding first. */
302/* Adding 1 to a precedence value is done for binary operators,
303 on the operand which is more tightly bound, so that operators
304 of equal precedence within that operand will get parentheses. */
305/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
306 they are used as the "surrounding precedence" to force
307 various kinds of things to be parenthesized. */
308enum precedence
c5aa993b
JM
309 {
310 PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
311 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
312 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
313 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
314 };
c906108c
SS
315
316/* Table mapping opcodes into strings for printing operators
317 and precedences of the operators. */
318
319struct op_print
c5aa993b
JM
320 {
321 char *string;
322 enum exp_opcode opcode;
323 /* Precedence of operator. These values are used only by comparisons. */
324 enum precedence precedence;
325
326 /* For a binary operator: 1 iff right associate.
0df8b418 327 For a unary operator: 1 iff postfix. */
c5aa993b
JM
328 int right_assoc;
329 };
c906108c 330
5f9769d1
PH
331/* Information needed to print, prefixify, and evaluate expressions for
332 a given language. */
333
334struct exp_descriptor
335 {
336 /* Print subexpression. */
337 void (*print_subexp) (struct expression *, int *, struct ui_file *,
338 enum precedence);
339
340 /* Returns number of exp_elements needed to represent an operator and
341 the number of subexpressions it takes. */
554794dc 342 void (*operator_length) (const struct expression*, int, int*, int *);
5f9769d1 343
c0201579
JK
344 /* Call TYPE_FUNC and OBJFILE_FUNC for any TYPE and OBJFILE found being
345 referenced by the single operator of EXP at position POS. Operator
346 parameters are located at positive (POS + number) offsets in EXP.
347 The functions should never be called with NULL TYPE or NULL OBJFILE.
348 Functions should get passed an arbitrary caller supplied DATA pointer.
349 If any of the functions returns non-zero value then (any other) non-zero
350 value should be immediately returned to the caller. Otherwise zero
351 should be returned. */
352 int (*operator_check) (struct expression *exp, int pos,
353 int (*objfile_func) (struct objfile *objfile,
354 void *data),
355 void *data);
356
a5b12627
JB
357 /* Name of this operator for dumping purposes.
358 The returned value should never be NULL, even if EXP_OPCODE is
359 an unknown opcode (a string containing an image of the numeric
360 value of the opcode can be returned, for instance). */
5f9769d1
PH
361 char *(*op_name) (enum exp_opcode);
362
363 /* Dump the rest of this (prefix) expression after the operator
364 itself has been printed. See dump_subexp_body_standard in
365 (expprint.c). */
366 int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
367
368 /* Evaluate an expression. */
369 struct value *(*evaluate_exp) (struct type *, struct expression *,
370 int *, enum noside);
371 };
372
373
374/* Default descriptor containing standard definitions of all
375 elements. */
376extern const struct exp_descriptor exp_descriptor_standard;
377
378/* Functions used by language-specific extended operators to (recursively)
379 print/dump subexpressions. */
380
381extern void print_subexp (struct expression *, int *, struct ui_file *,
382 enum precedence);
383
384extern void print_subexp_standard (struct expression *, int *,
385 struct ui_file *, enum precedence);
386
f461f5cf
PM
387/* Function used to avoid direct calls to fprintf
388 in the code generated by the bison parser. */
389
a0b31db1 390extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
f461f5cf 391
c0201579
JK
392extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
393
2f68a895
TT
394extern void mark_completion_tag (enum type_code, const char *ptr,
395 int length);
396
410a0ff2
SDJ
397/* Reallocate the `expout' pointer inside PS so that it can accommodate
398 at least LENELT expression elements. This function does nothing if
399 there is enough room for the elements. */
400
401extern void increase_expout_size (struct parser_state *ps, size_t lenelt);
402
c5aa993b 403#endif /* PARSER_DEFS_H */
2f68a895 404
This page took 2.272611 seconds and 4 git commands to generate.