import gdb-1999-07-07 post reformat
[deliverable/binutils-gdb.git] / gdb / parser-defs.h
CommitLineData
c906108c
SS
1/* Parser definitions for GDB.
2 Copyright (C) 1986, 1989, 1990, 1991 Free Software Foundation, Inc.
3 Modified from expread.y by the Department of Computer Science at the
4 State University of New York at Buffalo.
5
6This file is part of GDB.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22#if !defined (PARSER_DEFS_H)
23#define PARSER_DEFS_H 1
24
25struct std_regs {
26 char *name;
27 int regnum;
28};
29
cce74817 30extern struct std_regs *std_regs;
c906108c
SS
31extern unsigned num_std_regs;
32
33extern struct expression *expout;
34extern int expout_size;
35extern int expout_ptr;
36
37/* If this is nonzero, this block is used as the lexical context
38 for symbol names. */
39
40extern struct block *expression_context_block;
41
42/* The innermost context required by the stack and register variables
43 we've encountered so far. */
44extern struct block *innermost_block;
45
46/* The block in which the most recently discovered symbol was found.
47 FIXME: Should be declared along with lookup_symbol in symtab.h; is not
48 related specifically to parsing. */
49extern struct block *block_found;
50
51/* Number of arguments seen so far in innermost function call. */
52extern int arglist_len;
53
54/* A string token, either a char-string or bit-string. Char-strings are
55 used, for example, for the names of symbols. */
56
57struct stoken
58 {
59 /* Pointer to first byte of char-string or first bit of bit-string */
60 char *ptr;
61 /* Length of string in bytes for char-string or bits for bit-string */
62 int length;
63 };
64
65struct ttype
66 {
67 struct stoken stoken;
68 struct type *type;
69 };
70
71struct symtoken
72 {
73 struct stoken stoken;
74 struct symbol *sym;
75 int is_a_field_of_this;
76 };
77
78/* For parsing of complicated types.
79 An array should be preceded in the list by the size of the array. */
80enum type_pieces
81 {tp_end = -1, tp_pointer, tp_reference, tp_array, tp_function};
82/* The stack can contain either an enum type_pieces or an int. */
83union type_stack_elt {
84 enum type_pieces piece;
85 int int_val;
86};
87extern union type_stack_elt *type_stack;
88extern int type_stack_depth, type_stack_size;
89
90extern void write_exp_elt PARAMS ((union exp_element));
91
92extern void write_exp_elt_opcode PARAMS ((enum exp_opcode));
93
94extern void write_exp_elt_sym PARAMS ((struct symbol *));
95
96extern void write_exp_elt_longcst PARAMS ((LONGEST));
97
98extern void write_exp_elt_dblcst PARAMS ((DOUBLEST));
99
100extern void write_exp_elt_type PARAMS ((struct type *));
101
102extern void write_exp_elt_intern PARAMS ((struct internalvar *));
103
104extern void write_exp_string PARAMS ((struct stoken));
105
106extern void write_exp_bitstring PARAMS ((struct stoken));
107
108extern void write_exp_elt_block PARAMS ((struct block *));
109
110extern void write_exp_msymbol PARAMS ((struct minimal_symbol *,
111 struct type *, struct type *));
112
113extern void write_dollar_variable PARAMS ((struct stoken str));
114
115extern struct symbol * parse_nested_classes_for_hpacc PARAMS ((char *, int, char **, int *, char **));
116
117extern char * find_template_name_end PARAMS ((char *));
118
119extern void
120start_arglist PARAMS ((void));
121
122extern int
123end_arglist PARAMS ((void));
124
125extern char *
126copy_name PARAMS ((struct stoken));
127
128extern void
129push_type PARAMS ((enum type_pieces));
130
131extern void
132push_type_int PARAMS ((int));
133
134extern enum type_pieces
135pop_type PARAMS ((void));
136
137extern int
138pop_type_int PARAMS ((void));
139
140extern int
141length_of_subexp PARAMS ((struct expression *, int));
142
143extern struct type *follow_types PARAMS ((struct type *));
144
145/* During parsing of a C expression, the pointer to the next character
146 is in this variable. */
147
148extern char *lexptr;
149
150/* Tokens that refer to names do so with explicit pointer and length,
151 so they can share the storage that lexptr is parsing.
152
153 When it is necessary to pass a name to a function that expects
154 a null-terminated string, the substring is copied out
155 into a block of storage that namecopy points to.
156
157 namecopy is allocated once, guaranteed big enough, for each parsing. */
158
159extern char *namecopy;
160
161/* Current depth in parentheses within the expression. */
162
163extern int paren_depth;
164
165/* Nonzero means stop parsing on first comma (if not within parentheses). */
166
167extern int comma_terminates;
168\f
169/* These codes indicate operator precedences for expression printing,
170 least tightly binding first. */
171/* Adding 1 to a precedence value is done for binary operators,
172 on the operand which is more tightly bound, so that operators
173 of equal precedence within that operand will get parentheses. */
174/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
175 they are used as the "surrounding precedence" to force
176 various kinds of things to be parenthesized. */
177enum precedence
178{ PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
179 PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
180 PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
181 PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION };
182
183/* Table mapping opcodes into strings for printing operators
184 and precedences of the operators. */
185
186struct op_print
187{
188 char *string;
189 enum exp_opcode opcode;
190 /* Precedence of operator. These values are used only by comparisons. */
191 enum precedence precedence;
192
193 /* For a binary operator: 1 iff right associate.
194 For a unary operator: 1 iff postfix. */
195 int right_assoc;
196};
197
392a587b
JM
198/* The generic method for targets to specify how their registers are
199 named. The mapping can be derived from three sources:
200 REGISTER_NAME; std_regs; or a target specific alias hook. */
201
202extern int target_map_name_to_register PARAMS ((char *, int));
203
c906108c 204#endif /* PARSER_DEFS_H */
This page took 0.036667 seconds and 4 git commands to generate.