7b4ac7e1 |
1 | /* Definitions for values of C expressions, for GDB. |
2 | Copyright (C) 1986, 1987 Free Software Foundation, Inc. |
3 | |
4 | GDB is distributed in the hope that it will be useful, but WITHOUT ANY |
5 | WARRANTY. No author or distributor accepts responsibility to anyone |
6 | for the consequences of using it or for whether it serves any |
7 | particular purpose or works at all, unless he says so in writing. |
8 | Refer to the GDB General Public License for full details. |
9 | |
10 | Everyone is granted permission to copy, modify and redistribute GDB, |
11 | but only under the conditions described in the GDB General Public |
12 | License. A copy of this license is supposed to have been given to you |
13 | along with GDB so you can know your rights and responsibilities. It |
14 | should be in a file named COPYING. Among other things, the copyright |
15 | notice and this notice must be preserved on all copies. |
16 | |
17 | In other words, go ahead and share GDB, but don't try to stop |
18 | anyone else from sharing it farther. Help stamp out software hoarding! |
19 | */ |
20 | |
21 | enum lval_type { not_lval, lval_memory, lval_register, lval_internalvar, |
22 | lval_internalvar_component }; |
23 | |
24 | struct value |
25 | { |
26 | enum lval_type lval; |
27 | union |
28 | { |
29 | CORE_ADDR address; |
30 | struct internalvar *internalvar; |
31 | } location; |
32 | int offset; |
33 | int bitsize; |
34 | int bitpos; |
35 | struct type *type; |
36 | struct value *next; |
37 | short repeated; |
38 | short repetitions; |
39 | short regno; |
40 | long contents[1]; |
41 | }; |
42 | |
43 | typedef struct value *value; |
44 | |
45 | #define VALUE_TYPE(val) (val)->type |
46 | #define VALUE_CONTENTS(val) ((char *) (val)->contents) |
47 | #define VALUE_LVAL(val) (val)->lval |
48 | #define VALUE_ADDRESS(val) (val)->location.address |
49 | #define VALUE_INTERNALVAR(val) (val)->location.internalvar |
50 | #define VALUE_OFFSET(val) (val)->offset |
51 | #define VALUE_BITSIZE(val) (val)->bitsize |
52 | #define VALUE_BITPOS(val) (val)->bitpos |
53 | #define VALUE_NEXT(val) (val)->next |
54 | #define VALUE_REPEATED(val) (val)->repeated |
55 | #define VALUE_REPETITIONS(val) (val)->repetitions |
56 | #define VALUE_REGNO(val) (val)->regno |
57 | |
58 | /* If ARG is an array, convert it to a pointer. |
3bf57d21 |
59 | If ARG is an enum, convert it to an integer. */ |
7b4ac7e1 |
60 | |
61 | #define COERCE_ARRAY(arg) \ |
3bf57d21 |
62 | { if (VALUE_REPEATED (arg) \ |
7b4ac7e1 |
63 | || TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ARRAY) \ |
64 | arg = value_coerce_array (arg); \ |
65 | if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM) \ |
66 | arg = value_cast (builtin_type_unsigned_int, arg); \ |
67 | } |
68 | |
69 | /* If ARG is an enum, convert it to an integer. */ |
70 | |
71 | #define COERCE_ENUM(arg) \ |
3bf57d21 |
72 | { if (TYPE_CODE (VALUE_TYPE (arg)) == TYPE_CODE_ENUM) \ |
7b4ac7e1 |
73 | arg = value_cast (builtin_type_unsigned_int, arg); \ |
74 | } |
75 | |
76 | /* Internal variables (variables for convenience of use of debugger) |
77 | are recorded as a chain of these structures. */ |
78 | |
79 | struct internalvar |
80 | { |
81 | struct internalvar *next; |
82 | char *name; |
83 | value value; |
84 | }; |
85 | \f |
86 | long value_as_long (); |
87 | double value_as_double (); |
88 | long unpack_long (); |
89 | double unpack_double (); |
90 | long unpack_field_as_long (); |
91 | value value_from_long (); |
92 | value value_from_double (); |
93 | value value_at (); |
94 | value value_of_variable (); |
95 | value value_of_register (); |
96 | value read_var_value (); |
97 | value locate_var_value (); |
98 | value allocate_value (); |
99 | value allocate_repeat_value (); |
100 | value value_string (); |
101 | |
102 | value value_binop (); |
103 | value value_add (); |
104 | value value_sub (); |
105 | value value_coerce_array (); |
106 | value value_ind (); |
107 | value value_addr (); |
108 | value value_assign (); |
109 | value value_neg (); |
110 | value value_lognot (); |
3bf57d21 |
111 | value value_struct_elt (); |
7b4ac7e1 |
112 | value value_field (); |
113 | value value_cast (); |
114 | value value_repeat (); |
115 | value value_subscript (); |
116 | |
117 | value call_function (); |
118 | value value_being_returned (); |
119 | |
120 | value evaluate_expression (); |
121 | value evaluate_type (); |
122 | value parse_and_eval (); |
632ea0cc |
123 | value parse_to_comma_and_eval (); |
7b4ac7e1 |
124 | |
125 | value access_value_history (); |
126 | value value_of_internalvar (); |
127 | struct internalvar *lookup_internalvar (); |
128 | |
129 | int value_equal (); |
130 | int value_less (); |
131 | int value_zerop (); |