Oh GACK! src-clean doesn't quite work that easily since cleandist rebuilds the
[unix-history] / gnu / usr.bin / gdb / value.h
CommitLineData
04497f0b
NW
1/* Definitions for values of C expressions, for GDB.
2 Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6GDB is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GDB is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GDB; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20/*
21 * The structure which defines the type of a value. It should never
22 * be possible for a program lval value to survive over a call to the inferior
23 * (ie to be put into the history list or an internal variable).
24 */
25enum lval_type {
26 /* Not an lval. */
27 not_lval,
28 /* In memory. Could be a saved register. */
29 lval_memory,
30 /* In a register. */
31 lval_register,
32 /* In a gdb internal variable. */
33 lval_internalvar,
34 /* Part of a gdb internal variable (structure field). */
35 lval_internalvar_component,
36 /* In a register series in a frame not the current one, which may have been
37 partially saved or saved in different places (otherwise would be
38 lval_register or lval_memory). */
39 lval_reg_frame_relative,
40};
41
42struct value
43 {
44 /* Type of value; either not an lval, or one of the various
45 different possible kinds of lval. */
46 enum lval_type lval;
47 /* Location of value (if lval). */
48 union
49 {
50 /* Address in inferior or byte of registers structure. */
51 CORE_ADDR address;
52 /* Pointer to interrnal variable. */
53 struct internalvar *internalvar;
54 /* Number of register. Only used with
55 lval_reg_frame_relative. */
56 int regnum;
57 } location;
58 /* Describes offset of a value within lval a structure in bytes. */
59 int offset;
60 /* Only used for bitfields; number of bits contained in them. */
61 int bitsize;
62 /* Only used for bitfields; position of start of field. */
63 int bitpos;
64 /* Frame value is relative to. In practice, this address is only
65 used if the value is stored in several registers in other than
66 the current frame, and these registers have not all been saved
67 at the same place in memory. This will be described in the
68 lval enum above as "lval_reg_frame_relative". */
69 CORE_ADDR frame_addr;
70 /* Type of the value. */
71 struct type *type;
72 /* Values are stored in a chain, so that they can be deleted
73 easily over calls to the inferior. Values assigned to internal
74 variables or put into the value history are taken off this
75 list. */
76 struct value *next;
77 /* If an lval is forced to repeat, a new value is created with
78 these fields set. The new value is not an lval. */
79 short repeated;
80 short repetitions;
81 /* Register number if the value is from a register. Is not kept
82 if you take a field of a structure that is stored in a
83 register. Shouldn't it be? */
84 short regno;
85 /* Actual contents of the value. For use of this value; setting
86 it uses the stuff above. */
87 long contents[1];
88 };
89
90typedef struct value *value;
91
92#define VALUE_TYPE(val) (val)->type
93#define VALUE_CONTENTS(val) ((char *) (val)->contents)
94#define VALUE_LVAL(val) (val)->lval
95#define VALUE_ADDRESS(val) (val)->location.address
96#define VALUE_INTERNALVAR(val) (val)->location.internalvar
97#define VALUE_FRAME_REGNUM(val) ((val)->location.regnum)
98#define VALUE_FRAME(val) ((val)->frame_addr)
99#define VALUE_OFFSET(val) (val)->offset
100#define VALUE_BITSIZE(val) (val)->bitsize
101#define VALUE_BITPOS(val) (val)->bitpos
102#define VALUE_NEXT(val) (val)->next
103#define VALUE_REPEATED(val) (val)->repeated
104#define VALUE_REPETITIONS(val) (val)->repetitions
105#define VALUE_REGNO(val) (val)->regno
106
107/* If ARG is an array, convert it to a pointer.
108 If ARG is an enum, convert it to an integer.
109
110 References are dereferenced. */
111
112#define COERCE_ARRAY(arg) \
113{ if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF) \
114 arg = value_ind (arg); \
115 if (VALUE_REPEATED (arg) \
116 || TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ARRAY) \
117 arg = value_coerce_array (arg); \
118 if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM) \
119 arg = value_cast (builtin_type_unsigned_int, arg); \
120}
121
122/* If ARG is an enum, convert it to an integer. */
123
124#define COERCE_ENUM(arg) \
125{ if (TYPE_CODE ( VALUE_TYPE (arg)) == TYPE_CODE_REF) \
126 arg = value_ind (arg); \
127 if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM) \
128 arg = value_cast (builtin_type_unsigned_int, arg); \
129}
130
131/* Internal variables (variables for convenience of use of debugger)
132 are recorded as a chain of these structures. */
133
134struct internalvar
135{
136 struct internalvar *next;
137 char *name;
138 value value;
139};
140\f
141LONGEST value_as_long ();
142double value_as_double ();
143LONGEST unpack_long ();
144double unpack_double ();
145long unpack_field_as_long ();
146value value_from_long ();
147value value_from_double ();
148value value_at ();
149value value_from_register ();
150value value_of_variable ();
151value value_of_register ();
152value read_var_value ();
153value locate_var_value ();
154value allocate_value ();
155value allocate_repeat_value ();
156value value_string ();
157
158value value_binop ();
159value value_add ();
160value value_sub ();
161value value_coerce_array ();
162value value_ind ();
163value value_addr ();
164value value_assign ();
165value value_neg ();
166value value_lognot ();
167value value_struct_elt (), value_struct_elt_for_address ();
168value value_field ();
169value value_cast ();
170value value_zero ();
171value value_repeat ();
172value value_subscript ();
173
174value call_function ();
175value value_being_returned ();
176int using_struct_return ();
177
178value evaluate_expression ();
179value evaluate_type ();
180value parse_and_eval ();
181value parse_to_comma_and_eval ();
182
183value access_value_history ();
184value value_of_internalvar ();
185struct internalvar *lookup_internalvar ();
186
187int value_equal ();
188int value_less ();
189int value_zerop ();
190
191/* C++ */
192value value_of_this ();
193value value_static_field ();
194value value_x_binop ();
195value value_x_unop ();
196int binop_user_defined_p ();
197int unop_user_defined_p ();
198
199void read_register_bytes ();
200void modify_field ();
201void type_print ();
202void type_print_1 ();
203
204/* Possibilities for prettyprint parameters to routines which print
205 things. */
206enum val_prettyprint {
207 Val_no_prettyprint = 0,
208 Val_prettyprint,
209 /* Use the default setting which the user has specified. */
210 Val_pretty_default
211 };
212