* valprint.c (print_longest): Fix a syntax error in #ifdef
[deliverable/binutils-gdb.git] / gdb / eval.c
CommitLineData
bd5635a1 1/* Evaluate expressions for GDB.
477b2425 2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995
2d67c7e9 3 Free Software Foundation, Inc.
bd5635a1
RP
4
5This file is part of GDB.
6
2ccb3837 7This program is free software; you can redistribute it and/or modify
bd5635a1 8it under the terms of the GNU General Public License as published by
2ccb3837
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
bd5635a1 11
2ccb3837 12This program is distributed in the hope that it will be useful,
bd5635a1
RP
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
2ccb3837
JG
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
20
21#include "defs.h"
2d67c7e9 22#include <string.h>
bd5635a1 23#include "symtab.h"
01be6913 24#include "gdbtypes.h"
bd5635a1
RP
25#include "value.h"
26#include "expression.h"
27#include "target.h"
2ccb3837 28#include "frame.h"
40620258 29#include "demangle.h"
fb6e675f 30#include "language.h" /* For CAST_IS_CONVERSION */
477b2425 31#include "f-lang.h" /* for array bound stuff */
bd5635a1 32
01be6913
PB
33/* Prototypes for local functions. */
34
2d67c7e9
PB
35static value_ptr evaluate_subexp_for_sizeof PARAMS ((struct expression *,
36 int *));
01be6913 37
2d67c7e9
PB
38static value_ptr evaluate_subexp_for_address PARAMS ((struct expression *,
39 int *, enum noside));
01be6913 40
7398958c
PB
41#ifdef __GNUC__
42inline
43#endif
44static value_ptr
45evaluate_subexp (expect_type, exp, pos, noside)
46 struct type *expect_type;
47 register struct expression *exp;
48 register int *pos;
49 enum noside noside;
50{
51 return (*exp->language_defn->evaluate_exp) (expect_type, exp, pos, noside);
52}
bd5635a1
RP
53\f
54/* Parse the string EXP as a C expression, evaluate it,
55 and return the result as a number. */
56
57CORE_ADDR
58parse_and_eval_address (exp)
59 char *exp;
60{
2ccb3837 61 struct expression *expr = parse_expression (exp);
bd5635a1 62 register CORE_ADDR addr;
01be6913
PB
63 register struct cleanup *old_chain =
64 make_cleanup (free_current_contents, &expr);
bd5635a1 65
2ccb3837 66 addr = value_as_pointer (evaluate_expression (expr));
bd5635a1
RP
67 do_cleanups (old_chain);
68 return addr;
69}
70
71/* Like parse_and_eval_address but takes a pointer to a char * variable
72 and advanced that variable across the characters parsed. */
73
74CORE_ADDR
75parse_and_eval_address_1 (expptr)
76 char **expptr;
77{
2ccb3837 78 struct expression *expr = parse_exp_1 (expptr, (struct block *)0, 0);
bd5635a1 79 register CORE_ADDR addr;
01be6913
PB
80 register struct cleanup *old_chain =
81 make_cleanup (free_current_contents, &expr);
bd5635a1 82
2ccb3837 83 addr = value_as_pointer (evaluate_expression (expr));
bd5635a1
RP
84 do_cleanups (old_chain);
85 return addr;
86}
87
2d67c7e9 88value_ptr
bd5635a1
RP
89parse_and_eval (exp)
90 char *exp;
91{
2ccb3837 92 struct expression *expr = parse_expression (exp);
2d67c7e9 93 register value_ptr val;
bd5635a1
RP
94 register struct cleanup *old_chain
95 = make_cleanup (free_current_contents, &expr);
96
97 val = evaluate_expression (expr);
98 do_cleanups (old_chain);
99 return val;
100}
101
102/* Parse up to a comma (or to a closeparen)
103 in the string EXPP as an expression, evaluate it, and return the value.
104 EXPP is advanced to point to the comma. */
105
2d67c7e9 106value_ptr
bd5635a1
RP
107parse_to_comma_and_eval (expp)
108 char **expp;
109{
2ccb3837 110 struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
2d67c7e9 111 register value_ptr val;
bd5635a1
RP
112 register struct cleanup *old_chain
113 = make_cleanup (free_current_contents, &expr);
114
115 val = evaluate_expression (expr);
116 do_cleanups (old_chain);
117 return val;
118}
119\f
120/* Evaluate an expression in internal prefix form
0a5d35ed 121 such as is constructed by parse.y.
bd5635a1
RP
122
123 See expression.h for info on the format of an expression. */
124
2d67c7e9 125value_ptr
bd5635a1
RP
126evaluate_expression (exp)
127 struct expression *exp;
128{
129 int pc = 0;
130 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
131}
132
133/* Evaluate an expression, avoiding all memory references
134 and getting a value whose type alone is correct. */
135
2d67c7e9 136value_ptr
bd5635a1
RP
137evaluate_type (exp)
138 struct expression *exp;
139{
140 int pc = 0;
141 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
142}
143
dcda44a0
PB
144/* Helper function called by evaluate_subexp to initialize a field
145 a structure from a tuple in Chill. This is recursive, to handle
146 more than one field name labels.
147
148 STRUCT_VAL is the structure value we are constructing.
149 (*FIELDNOP) is the field to set, if there is no label.
150 It is set to the field following this one.
151 EXP, POS, and NOSIDE are as for evaluate_subexp.
152
153 This function does not handle variant records. FIXME */
154
155static value_ptr
156evaluate_labeled_field_init (struct_val, fieldnop, exp, pos, noside)
157 value_ptr struct_val;
158 int *fieldnop;
159 register struct expression *exp;
160 register int *pos;
161 enum noside noside;
162{
163 int fieldno = *fieldnop;
164 value_ptr val;
165 int bitpos, bitsize;
166 char *addr;
167 struct type *struct_type = VALUE_TYPE (struct_val);
168 if (exp->elts[*pos].opcode == OP_LABELED)
169 {
170 int pc = (*pos)++;
171 char *name = &exp->elts[pc + 2].string;
172 int tem = longest_to_int (exp->elts[pc + 1].longconst);
173 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
174 for (fieldno = 0; ; fieldno++)
175 {
176 if (fieldno >= TYPE_NFIELDS (struct_type))
177 error ("there is no field named %s", name);
178 if (STREQ (TYPE_FIELD_NAME (struct_type, fieldno), name))
179 break;
180 }
181 *fieldnop = fieldno;
182 val = evaluate_labeled_field_init (struct_val, fieldnop,
183 exp, pos, noside);
184 }
185 else
186 {
187 fieldno = (*fieldnop)++;
188 if (fieldno >= TYPE_NFIELDS (struct_type))
189 error ("too many initializers");
190 val = evaluate_subexp (TYPE_FIELD_TYPE (struct_type, fieldno),
191 exp, pos, noside);
192 }
193
194 /* Assign val to field fieldno. */
195 if (VALUE_TYPE (val) != TYPE_FIELD_TYPE (struct_type, fieldno))
196 val = value_cast (TYPE_FIELD_TYPE (struct_type, fieldno), val);
197#if 1
198 bitsize = TYPE_FIELD_BITSIZE (struct_type, fieldno);
199 bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
200 addr = VALUE_CONTENTS (struct_val);
201 addr += bitpos / 8;
202 if (bitsize)
203 modify_field (addr, value_as_long (val),
204 bitpos % 8, bitsize);
205 else
206 memcpy (addr, VALUE_CONTENTS (val),
207 TYPE_LENGTH (VALUE_TYPE (val)));
208#else
209 value_assign (value_primitive_field (struct_val, 0, fieldno, struct_type),
210 val);
211#endif
212 return val;
213}
214
7398958c
PB
215value_ptr
216evaluate_subexp_standard (expect_type, exp, pos, noside)
bd5635a1
RP
217 struct type *expect_type;
218 register struct expression *exp;
219 register int *pos;
220 enum noside noside;
221{
222 enum exp_opcode op;
1500864f 223 int tem, tem2, tem3;
40620258 224 register int pc, pc2 = 0, oldpos;
2d67c7e9 225 register value_ptr arg1 = NULL, arg2 = NULL, arg3;
01be6913 226 struct type *type;
bd5635a1 227 int nargs;
2d67c7e9 228 value_ptr *argvec;
2d67c7e9
PB
229 struct symbol *tmp_symbol;
230 int upper, lower, retcode;
231 int code;
232 struct internalvar *var;
bd5635a1 233
764adcb4
JK
234 /* This expect_type crap should not be used for C. C expressions do
235 not have any notion of expected types, never has and (goddess
236 willing) never will. The C++ code uses it for some twisted
237 purpose (I haven't investigated but I suspect it just the usual
238 combination of Stroustrup figuring out some crazy language
239 feature and Tiemann figuring out some crazier way to try to
240 implement it). CHILL has the tuple stuff; I don't know enough
241 about CHILL to know whether expected types is the way to do it.
242 FORTRAN I don't know. */
dcda44a0
PB
243 if (exp->language_defn->la_language != language_cplus
244 && exp->language_defn->la_language != language_chill)
22b1c54a
JK
245 expect_type = NULL_TYPE;
246
bd5635a1
RP
247 pc = (*pos)++;
248 op = exp->elts[pc].opcode;
249
250 switch (op)
251 {
252 case OP_SCOPE:
a8a69e63 253 tem = longest_to_int (exp->elts[pc + 2].longconst);
1500864f 254 (*pos) += 4 + BYTES_TO_EXP_ELEM (tem + 1);
01be6913 255 arg1 = value_struct_elt_for_reference (exp->elts[pc + 1].type,
8f86a4e4 256 0,
01be6913 257 exp->elts[pc + 1].type,
a8a69e63 258 &exp->elts[pc + 3].string,
01be6913 259 expect_type);
5f00ca54 260 if (arg1 == NULL)
a8a69e63 261 error ("There is no field named %s", &exp->elts[pc + 3].string);
5f00ca54 262 return arg1;
bd5635a1
RP
263
264 case OP_LONG:
265 (*pos) += 3;
2ccb3837 266 return value_from_longest (exp->elts[pc + 1].type,
a8a69e63 267 exp->elts[pc + 2].longconst);
bd5635a1
RP
268
269 case OP_DOUBLE:
270 (*pos) += 3;
271 return value_from_double (exp->elts[pc + 1].type,
272 exp->elts[pc + 2].doubleconst);
273
274 case OP_VAR_VALUE:
479fdd26 275 (*pos) += 3;
bd5635a1
RP
276 if (noside == EVAL_SKIP)
277 goto nosideret;
278 if (noside == EVAL_AVOID_SIDE_EFFECTS)
279 {
40620258 280 struct symbol * sym = exp->elts[pc + 2].symbol;
bd5635a1
RP
281 enum lval_type lv;
282
283 switch (SYMBOL_CLASS (sym))
284 {
285 case LOC_CONST:
286 case LOC_LABEL:
287 case LOC_CONST_BYTES:
288 lv = not_lval;
289 break;
290
291 case LOC_REGISTER:
292 case LOC_REGPARM:
293 lv = lval_register;
294 break;
295
296 default:
297 lv = lval_memory;
298 break;
299 }
300
301 return value_zero (SYMBOL_TYPE (sym), lv);
302 }
303 else
479fdd26
JK
304 return value_of_variable (exp->elts[pc + 2].symbol,
305 exp->elts[pc + 1].block);
bd5635a1
RP
306
307 case OP_LAST:
308 (*pos) += 2;
2ccb3837
JG
309 return
310 access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
bd5635a1
RP
311
312 case OP_REGISTER:
313 (*pos) += 2;
2ccb3837 314 return value_of_register (longest_to_int (exp->elts[pc + 1].longconst));
bd5635a1 315
e58de8a2
FF
316 case OP_BOOL:
317 (*pos) += 2;
2d67c7e9
PB
318 if (current_language->la_language == language_fortran)
319 return value_from_longest (builtin_type_f_logical_s2,
320 exp->elts[pc + 1].longconst);
321 else
322 return value_from_longest (builtin_type_chill_bool,
323 exp->elts[pc + 1].longconst);
e58de8a2 324
bd5635a1
RP
325 case OP_INTERNALVAR:
326 (*pos) += 2;
327 return value_of_internalvar (exp->elts[pc + 1].internalvar);
328
329 case OP_STRING:
a8a69e63 330 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 331 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
332 if (noside == EVAL_SKIP)
333 goto nosideret;
a8a69e63 334 return value_string (&exp->elts[pc + 2].string, tem);
bd5635a1 335
1500864f 336 case OP_BITSTRING:
6d34c236
PB
337 tem = longest_to_int (exp->elts[pc + 1].longconst);
338 (*pos)
339 += 3 + BYTES_TO_EXP_ELEM ((tem + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
340 if (noside == EVAL_SKIP)
341 goto nosideret;
342 return value_bitstring (&exp->elts[pc + 2].string, tem);
1500864f
JK
343 break;
344
345 case OP_ARRAY:
346 (*pos) += 3;
347 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
348 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
349 nargs = tem3 - tem2 + 1;
2d67c7e9
PB
350
351 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
352 && TYPE_CODE (expect_type) == TYPE_CODE_STRUCT)
353 {
354 value_ptr rec = allocate_value (expect_type);
dcda44a0 355 int fieldno = 0;
f91a9e05 356 memset (VALUE_CONTENTS_RAW (rec), '\0', TYPE_LENGTH (expect_type));
2d67c7e9 357 for (tem = 0; tem < nargs; tem++)
dcda44a0 358 evaluate_labeled_field_init (rec, &fieldno, exp, pos, noside);
2d67c7e9
PB
359 return rec;
360 }
361
362 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
363 && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY)
364 {
365 struct type *range_type = TYPE_FIELD_TYPE (expect_type, 0);
366 struct type *element_type = TYPE_TARGET_TYPE (expect_type);
367 LONGEST low_bound = TYPE_FIELD_BITPOS (range_type, 0);
368 LONGEST high_bound = TYPE_FIELD_BITPOS (range_type, 1);
369 int element_size = TYPE_LENGTH (element_type);
f91a9e05 370 value_ptr array = allocate_value (expect_type);
2d67c7e9
PB
371 if (nargs != (high_bound - low_bound + 1))
372 error ("wrong number of initialiers for array type");
373 for (tem = low_bound; tem <= high_bound; tem++)
374 {
375 value_ptr element = evaluate_subexp (element_type,
376 exp, pos, noside);
f91a9e05
PB
377 if (VALUE_TYPE (element) != element_type)
378 element = value_cast (element_type, element);
379 memcpy (VALUE_CONTENTS_RAW (array)
2d67c7e9
PB
380 + (tem - low_bound) * element_size,
381 VALUE_CONTENTS (element),
382 element_size);
383 }
f91a9e05 384 return array;
2d67c7e9
PB
385 }
386
dcda44a0
PB
387 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
388 && TYPE_CODE (expect_type) == TYPE_CODE_SET)
389 {
390 value_ptr set = allocate_value (expect_type);
391 struct type *element_type = TYPE_INDEX_TYPE (expect_type);
392 int low_bound = TYPE_LOW_BOUND (element_type);
393 int high_bound = TYPE_HIGH_BOUND (element_type);
394 char *valaddr = VALUE_CONTENTS_RAW (set);
f91a9e05 395 memset (valaddr, '\0', TYPE_LENGTH (expect_type));
dcda44a0
PB
396 for (tem = 0; tem < nargs; tem++)
397 {
398 value_ptr element_val = evaluate_subexp (element_type,
399 exp, pos, noside);
dcda44a0
PB
400 LONGEST element = value_as_long (element_val);
401 int bit_index;
402 if (element < low_bound || element > high_bound)
403 error ("POWERSET tuple element out of range");
404 element -= low_bound;
405 bit_index = (unsigned) element % TARGET_CHAR_BIT;
406 if (BITS_BIG_ENDIAN)
407 bit_index = TARGET_CHAR_BIT - 1 - bit_index;
408 valaddr [(unsigned) element / TARGET_CHAR_BIT] |= 1 << bit_index;
409 }
410 return set;
411 }
412
2d67c7e9 413 argvec = (value_ptr *) alloca (sizeof (value_ptr) * nargs);
1500864f
JK
414 for (tem = 0; tem < nargs; tem++)
415 {
416 /* Ensure that array expressions are coerced into pointer objects. */
417 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
418 }
419 if (noside == EVAL_SKIP)
420 goto nosideret;
2d67c7e9 421 return value_array (tem2, tem3, argvec);
1500864f 422
f91a9e05
PB
423 case TERNOP_SLICE:
424 {
425 value_ptr array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
426 int lowbound
427 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
428 int upper
429 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
430 return value_slice (array, lowbound, upper - lowbound + 1);
431 }
432
433 case TERNOP_SLICE_COUNT:
434 {
435 value_ptr array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
436 int lowbound
437 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
438 int length
439 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
440 return value_slice (array, lowbound, length);
441 }
442
bd5635a1
RP
443 case TERNOP_COND:
444 /* Skip third and second args to evaluate the first one. */
445 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
e58de8a2 446 if (value_logical_not (arg1))
bd5635a1
RP
447 {
448 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
449 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
450 }
451 else
452 {
453 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
454 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
455 return arg2;
456 }
457
458 case OP_FUNCALL:
459 (*pos) += 2;
460 op = exp->elts[*pos].opcode;
461 if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
462 {
2d67c7e9 463 LONGEST fnptr;
bd5635a1 464
2ccb3837 465 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
bd5635a1
RP
466 /* First, evaluate the structure into arg2 */
467 pc2 = (*pos)++;
468
469 if (noside == EVAL_SKIP)
470 goto nosideret;
471
472 if (op == STRUCTOP_MEMBER)
473 {
474 arg2 = evaluate_subexp_for_address (exp, pos, noside);
475 }
476 else
477 {
478 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
479 }
480
481 /* If the function is a virtual function, then the
482 aggregate value (providing the structure) plays
483 its part by providing the vtable. Otherwise,
484 it is just along for the ride: call the function
485 directly. */
486
487 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
488
2d67c7e9 489 fnptr = value_as_long (arg1);
35fcebce
PB
490
491 if (METHOD_PTR_IS_VIRTUAL(fnptr))
bd5635a1 492 {
35fcebce 493 int fnoffset = METHOD_PTR_TO_VOFFSET(fnptr);
bd5635a1 494 struct type *basetype;
35fcebce
PB
495 struct type *domain_type =
496 TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
bd5635a1
RP
497 int i, j;
498 basetype = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
35fcebce
PB
499 if (domain_type != basetype)
500 arg2 = value_cast(lookup_pointer_type (domain_type), arg2);
501 basetype = TYPE_VPTR_BASETYPE (domain_type);
bd5635a1
RP
502 for (i = TYPE_NFN_FIELDS (basetype) - 1; i >= 0; i--)
503 {
504 struct fn_field *f = TYPE_FN_FIELDLIST1 (basetype, i);
505 /* If one is virtual, then all are virtual. */
506 if (TYPE_FN_FIELD_VIRTUAL_P (f, 0))
507 for (j = TYPE_FN_FIELDLIST_LENGTH (basetype, i) - 1; j >= 0; --j)
35fcebce 508 if (TYPE_FN_FIELD_VOFFSET (f, j) == fnoffset)
bd5635a1 509 {
2d67c7e9 510 value_ptr temp = value_ind (arg2);
35fcebce
PB
511 arg1 = value_virtual_fn_field (&temp, f, j, domain_type, 0);
512 arg2 = value_addr (temp);
bd5635a1
RP
513 goto got_it;
514 }
515 }
516 if (i < 0)
35fcebce 517 error ("virtual function at index %d not found", fnoffset);
bd5635a1
RP
518 }
519 else
520 {
521 VALUE_TYPE (arg1) = lookup_pointer_type (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)));
522 }
523 got_it:
524
525 /* Now, say which argument to start evaluating from */
526 tem = 2;
527 }
528 else if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
529 {
530 /* Hair for method invocations */
531 int tem2;
532
2ccb3837 533 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
bd5635a1
RP
534 /* First, evaluate the structure into arg2 */
535 pc2 = (*pos)++;
a8a69e63 536 tem2 = longest_to_int (exp->elts[pc2 + 1].longconst);
1500864f 537 *pos += 3 + BYTES_TO_EXP_ELEM (tem2 + 1);
bd5635a1
RP
538 if (noside == EVAL_SKIP)
539 goto nosideret;
540
541 if (op == STRUCTOP_STRUCT)
542 {
479fdd26
JK
543 /* If v is a variable in a register, and the user types
544 v.method (), this will produce an error, because v has
545 no address.
546
547 A possible way around this would be to allocate a
548 copy of the variable on the stack, copy in the
549 contents, call the function, and copy out the
550 contents. I.e. convert this from call by reference
551 to call by copy-return (or whatever it's called).
552 However, this does not work because it is not the
553 same: the method being called could stash a copy of
554 the address, and then future uses through that address
555 (after the method returns) would be expected to
556 use the variable itself, not some copy of it. */
bd5635a1
RP
557 arg2 = evaluate_subexp_for_address (exp, pos, noside);
558 }
559 else
560 {
561 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
562 }
563 /* Now, say which argument to start evaluating from */
564 tem = 2;
565 }
566 else
567 {
2ccb3837 568 nargs = longest_to_int (exp->elts[pc + 1].longconst);
bd5635a1
RP
569 tem = 0;
570 }
1500864f
JK
571 /* Allocate arg vector, including space for the function to be
572 called in argvec[0] and a terminating NULL */
2d67c7e9 573 argvec = (value_ptr *) alloca (sizeof (value_ptr) * (nargs + 2));
bd5635a1
RP
574 for (; tem <= nargs; tem++)
575 /* Ensure that array expressions are coerced into pointer objects. */
576 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
577
578 /* signal end of arglist */
579 argvec[tem] = 0;
580
581 if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
582 {
583 int static_memfuncp;
2d67c7e9
PB
584 value_ptr temp = arg2;
585 char tstr[64];
bd5635a1
RP
586
587 argvec[1] = arg2;
40620258
KH
588 argvec[0] = 0;
589 strcpy(tstr, &exp->elts[pc2+2].string);
40620258 590 if (!argvec[0])
bd5635a1 591 {
40620258
KH
592 temp = arg2;
593 argvec[0] =
594 value_struct_elt (&temp, argvec+1, tstr,
595 &static_memfuncp,
596 op == STRUCTOP_STRUCT
597 ? "structure" : "structure pointer");
bd5635a1 598 }
40620258
KH
599 arg2 = value_from_longest (lookup_pointer_type(VALUE_TYPE (temp)),
600 VALUE_ADDRESS (temp)+VALUE_OFFSET (temp));
601 argvec[1] = arg2;
602
bd5635a1
RP
603 if (static_memfuncp)
604 {
605 argvec[1] = argvec[0];
606 nargs--;
607 argvec++;
608 }
609 }
610 else if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
611 {
612 argvec[1] = arg2;
613 argvec[0] = arg1;
614 }
615
ead95f8a
PB
616 do_call_it:
617
bd5635a1
RP
618 if (noside == EVAL_SKIP)
619 goto nosideret;
620 if (noside == EVAL_AVOID_SIDE_EFFECTS)
621 {
622 /* If the return type doesn't look like a function type, call an
623 error. This can happen if somebody tries to turn a variable into
624 a function call. This is here because people often want to
625 call, eg, strcmp, which gdb doesn't know is a function. If
626 gdb isn't asked for it's opinion (ie. through "whatis"),
627 it won't offer it. */
628
629 struct type *ftype =
630 TYPE_TARGET_TYPE (VALUE_TYPE (argvec[0]));
631
632 if (ftype)
633 return allocate_value (TYPE_TARGET_TYPE (VALUE_TYPE (argvec[0])));
634 else
635 error ("Expression of type other than \"Function returning ...\" used as function");
636 }
e17960fb 637 return call_function_by_hand (argvec[0], nargs, argvec + 1);
bd5635a1 638
2d67c7e9
PB
639 case OP_F77_UNDETERMINED_ARGLIST:
640
2d67c7e9
PB
641 /* Remember that in F77, functions, substring ops and
642 array subscript operations cannot be disambiguated
643 at parse time. We have made all array subscript operations,
644 substring operations as well as function calls come here
645 and we now have to discover what the heck this thing actually was.
7398958c 646 If it is a function, we process just as if we got an OP_FUNCALL. */
2d67c7e9 647
ead95f8a
PB
648 nargs = longest_to_int (exp->elts[pc+1].longconst);
649 (*pos) += 2;
2d67c7e9
PB
650
651 /* First determine the type code we are dealing with. */
ead95f8a
PB
652 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
653 code = TYPE_CODE (VALUE_TYPE (arg1));
2d67c7e9
PB
654
655 switch (code)
656 {
ead95f8a
PB
657 case TYPE_CODE_ARRAY:
658 goto multi_f77_subscript;
659
2d67c7e9 660 case TYPE_CODE_STRING:
ead95f8a 661 goto op_f77_substr;
2d67c7e9
PB
662
663 case TYPE_CODE_PTR:
664 case TYPE_CODE_FUNC:
ead95f8a
PB
665 /* It's a function call. */
666 /* Allocate arg vector, including space for the function to be
667 called in argvec[0] and a terminating NULL */
668 argvec = (value_ptr *) alloca (sizeof (value_ptr) * (nargs + 2));
669 argvec[0] = arg1;
670 tem = 1;
671 for (; tem <= nargs; tem++)
672 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
673 argvec[tem] = 0; /* signal end of arglist */
674 goto do_call_it;
2d67c7e9
PB
675
676 default:
677 error ("Cannot perform substring on this type");
678 }
679
ead95f8a 680 op_f77_substr:
2d67c7e9
PB
681 /* We have a substring operation on our hands here,
682 let us get the string we will be dealing with */
683
2d67c7e9
PB
684 /* Now evaluate the 'from' and 'to' */
685
686 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
687
688 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_INT)
689 error ("Substring arguments must be of type integer");
690
ead95f8a
PB
691 if (nargs < 2)
692 return value_subscript (arg1, arg2);
693
2d67c7e9
PB
694 arg3 = evaluate_subexp_with_coercion (exp, pos, noside);
695
696 if (TYPE_CODE (VALUE_TYPE (arg3)) != TYPE_CODE_INT)
697 error ("Substring arguments must be of type integer");
698
699 tem2 = *((int *) VALUE_CONTENTS_RAW (arg2));
700 tem3 = *((int *) VALUE_CONTENTS_RAW (arg3));
701
702 if ((tem2 < 1) || (tem2 > tem3))
703 error ("Bad 'from' value %d on substring operation", tem2);
704
705 if ((tem3 < tem2) || (tem3 > (TYPE_LENGTH (VALUE_TYPE (arg1)))))
706 error ("Bad 'to' value %d on substring operation", tem3);
707
708 if (noside == EVAL_SKIP)
709 goto nosideret;
710
ead95f8a 711 return value_slice (arg1, tem2, tem3 - tem2 + 1);
2d67c7e9 712
ead95f8a 713 case OP_COMPLEX:
2d67c7e9
PB
714 /* We have a complex number, There should be 2 floating
715 point numbers that compose it */
716 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
717 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
718
ead95f8a 719 return value_literal_complex (arg1, arg2, builtin_type_f_complex_s16);
2d67c7e9 720
bd5635a1 721 case STRUCTOP_STRUCT:
a8a69e63 722 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 723 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
724 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
725 if (noside == EVAL_SKIP)
726 goto nosideret;
727 if (noside == EVAL_AVOID_SIDE_EFFECTS)
728 return value_zero (lookup_struct_elt_type (VALUE_TYPE (arg1),
a8a69e63 729 &exp->elts[pc + 2].string,
35fcebce 730 0),
bd5635a1
RP
731 lval_memory);
732 else
733 {
2d67c7e9
PB
734 value_ptr temp = arg1;
735 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
736 NULL, "structure");
bd5635a1
RP
737 }
738
739 case STRUCTOP_PTR:
a8a69e63 740 tem = longest_to_int (exp->elts[pc + 1].longconst);
1500864f 741 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
bd5635a1
RP
742 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
743 if (noside == EVAL_SKIP)
744 goto nosideret;
745 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1500864f 746 return value_zero (lookup_struct_elt_type (VALUE_TYPE (arg1),
a8a69e63 747 &exp->elts[pc + 2].string,
35fcebce 748 0),
bd5635a1
RP
749 lval_memory);
750 else
751 {
2d67c7e9
PB
752 value_ptr temp = arg1;
753 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
754 NULL, "structure pointer");
bd5635a1
RP
755 }
756
757 case STRUCTOP_MEMBER:
758 arg1 = evaluate_subexp_for_address (exp, pos, noside);
01be6913 759 goto handle_pointer_to_member;
bd5635a1
RP
760 case STRUCTOP_MPTR:
761 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
01be6913 762 handle_pointer_to_member:
bd5635a1
RP
763 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
764 if (noside == EVAL_SKIP)
765 goto nosideret;
01be6913
PB
766 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_PTR)
767 goto bad_pointer_to_member;
768 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg2));
769 if (TYPE_CODE (type) == TYPE_CODE_METHOD)
770 error ("not implemented: pointer-to-method in pointer-to-member construct");
771 if (TYPE_CODE (type) != TYPE_CODE_MEMBER)
772 goto bad_pointer_to_member;
bd5635a1 773 /* Now, convert these values to an address. */
01be6913
PB
774 arg1 = value_cast (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
775 arg1);
776 arg3 = value_from_longest (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
777 value_as_long (arg1) + value_as_long (arg2));
bd5635a1 778 return value_ind (arg3);
01be6913
PB
779 bad_pointer_to_member:
780 error("non-pointer-to-member value used in pointer-to-member construct");
bd5635a1 781
1500864f
JK
782 case BINOP_CONCAT:
783 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
784 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
785 if (noside == EVAL_SKIP)
786 goto nosideret;
787 if (binop_user_defined_p (op, arg1, arg2))
788 return value_x_binop (arg1, arg2, op, OP_NULL);
789 else
790 return value_concat (arg1, arg2);
791
bd5635a1
RP
792 case BINOP_ASSIGN:
793 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
794 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
795 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
796 return arg1;
797 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 798 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
799 else
800 return value_assign (arg1, arg2);
801
802 case BINOP_ASSIGN_MODIFY:
803 (*pos) += 2;
804 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
805 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
806 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
807 return arg1;
808 op = exp->elts[pc + 1].opcode;
809 if (binop_user_defined_p (op, arg1, arg2))
810 return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op);
811 else if (op == BINOP_ADD)
812 arg2 = value_add (arg1, arg2);
813 else if (op == BINOP_SUB)
814 arg2 = value_sub (arg1, arg2);
815 else
816 arg2 = value_binop (arg1, arg2, op);
817 return value_assign (arg1, arg2);
818
819 case BINOP_ADD:
820 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
821 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
822 if (noside == EVAL_SKIP)
823 goto nosideret;
824 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 825 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
826 else
827 return value_add (arg1, arg2);
828
829 case BINOP_SUB:
830 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
831 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
832 if (noside == EVAL_SKIP)
833 goto nosideret;
834 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 835 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
836 else
837 return value_sub (arg1, arg2);
838
839 case BINOP_MUL:
840 case BINOP_DIV:
841 case BINOP_REM:
76a0ffb4 842 case BINOP_MOD:
bd5635a1
RP
843 case BINOP_LSH:
844 case BINOP_RSH:
e58de8a2
FF
845 case BINOP_BITWISE_AND:
846 case BINOP_BITWISE_IOR:
847 case BINOP_BITWISE_XOR:
bd5635a1
RP
848 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
849 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
850 if (noside == EVAL_SKIP)
851 goto nosideret;
852 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 853 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
854 else
855 if (noside == EVAL_AVOID_SIDE_EFFECTS
76a0ffb4 856 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
bd5635a1
RP
857 return value_zero (VALUE_TYPE (arg1), not_lval);
858 else
859 return value_binop (arg1, arg2, op);
860
861 case BINOP_SUBSCRIPT:
862 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
863 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
864 if (noside == EVAL_SKIP)
865 goto nosideret;
866 if (noside == EVAL_AVOID_SIDE_EFFECTS)
35fcebce
PB
867 {
868 /* If the user attempts to subscript something that has no target
869 type (like a plain int variable for example), then report this
870 as an error. */
871
872 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg1));
873 if (type)
874 return value_zero (type, VALUE_LVAL (arg1));
875 else
876 error ("cannot subscript something of type `%s'",
877 TYPE_NAME (VALUE_TYPE (arg1)));
878 }
bd5635a1
RP
879
880 if (binop_user_defined_p (op, arg1, arg2))
2ccb3837 881 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
882 else
883 return value_subscript (arg1, arg2);
2d67c7e9
PB
884
885 case BINOP_IN:
886 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
887 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
888 if (noside == EVAL_SKIP)
889 goto nosideret;
890 return value_in (arg1, arg2);
bd5635a1 891
54bbbfb4
FF
892 case MULTI_SUBSCRIPT:
893 (*pos) += 2;
894 nargs = longest_to_int (exp->elts[pc + 1].longconst);
895 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
896 while (nargs-- > 0)
897 {
898 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
899 /* FIXME: EVAL_SKIP handling may not be correct. */
900 if (noside == EVAL_SKIP)
901 {
902 if (nargs > 0)
903 {
904 continue;
905 }
906 else
907 {
908 goto nosideret;
909 }
910 }
911 /* FIXME: EVAL_AVOID_SIDE_EFFECTS handling may not be correct. */
912 if (noside == EVAL_AVOID_SIDE_EFFECTS)
913 {
914 /* If the user attempts to subscript something that has no target
915 type (like a plain int variable for example), then report this
916 as an error. */
917
918 type = TYPE_TARGET_TYPE (VALUE_TYPE (arg1));
919 if (type != NULL)
920 {
921 arg1 = value_zero (type, VALUE_LVAL (arg1));
922 noside = EVAL_SKIP;
923 continue;
924 }
925 else
926 {
927 error ("cannot subscript something of type `%s'",
928 TYPE_NAME (VALUE_TYPE (arg1)));
929 }
930 }
931
7398958c 932 if (binop_user_defined_p (op, arg1, arg2))
54bbbfb4
FF
933 {
934 arg1 = value_x_binop (arg1, arg2, op, OP_NULL);
935 }
936 else
937 {
938 arg1 = value_subscript (arg1, arg2);
939 }
940 }
941 return (arg1);
942
ead95f8a 943 multi_f77_subscript:
2d67c7e9
PB
944 {
945 int subscript_array[MAX_FORTRAN_DIMS+1]; /* 1-based array of
946 subscripts, max == 7 */
947 int array_size_array[MAX_FORTRAN_DIMS+1];
948 int ndimensions=1,i;
949 struct type *tmp_type;
950 int offset_item; /* The array offset where the item lives */
2d67c7e9 951
2d67c7e9
PB
952 if (nargs > MAX_FORTRAN_DIMS)
953 error ("Too many subscripts for F77 (%d Max)", MAX_FORTRAN_DIMS);
2d67c7e9
PB
954
955 ndimensions = calc_f77_array_dims (VALUE_TYPE (arg1));
956
957 if (nargs != ndimensions)
958 error ("Wrong number of subscripts");
959
960 /* Now that we know we have a legal array subscript expression
961 let us actually find out where this element exists in the array. */
962
963 tmp_type = VALUE_TYPE (arg1);
964 offset_item = 0;
965 for (i = 1; i <= nargs; i++)
966 {
967 /* Evaluate each subscript, It must be a legal integer in F77 */
968 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
969
970 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_INT)
971 error ("Array subscripts must be of type integer");
972
973 /* Fill in the subscript and array size arrays */
974
975 subscript_array[i] = (* (unsigned int *) VALUE_CONTENTS(arg2));
976
977 retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
978 if (retcode == BOUND_FETCH_ERROR)
979 error ("Cannot obtain dynamic upper bound");
980
981 retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
982 if (retcode == BOUND_FETCH_ERROR)
983 error("Cannot obtain dynamic lower bound");
984
985 array_size_array[i] = upper - lower + 1;
986
987 /* Zero-normalize subscripts so that offsetting will work. */
988
989 subscript_array[i] -= lower;
990
991 /* If we are at the bottom of a multidimensional
992 array type then keep a ptr to the last ARRAY
993 type around for use when calling value_subscript()
994 below. This is done because we pretend to value_subscript
995 that we actually have a one-dimensional array
996 of base element type that we apply a simple
997 offset to. */
998
999 if (i < nargs)
1000 tmp_type = TYPE_TARGET_TYPE (tmp_type);
1001 }
1002
1003 /* Now let us calculate the offset for this item */
1004
1005 offset_item = subscript_array[ndimensions];
1006
1007 for (i = ndimensions - 1; i >= 1; i--)
1008 offset_item =
1009 array_size_array[i] * offset_item + subscript_array[i];
1010
1011 /* Construct a value node with the value of the offset */
1012
1013 arg2 = value_from_longest (builtin_type_f_integer, offset_item);
1014
1015 /* Let us now play a dirty trick: we will take arg1
1016 which is a value node pointing to the topmost level
1017 of the multidimensional array-set and pretend
1018 that it is actually a array of the final element
1019 type, this will ensure that value_subscript()
1020 returns the correct type value */
1021
1022 VALUE_TYPE (arg1) = tmp_type;
7398958c 1023 return value_ind (value_add (value_coerce_array (arg1), arg2));
2d67c7e9
PB
1024 }
1025
e58de8a2 1026 case BINOP_LOGICAL_AND:
bd5635a1
RP
1027 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1028 if (noside == EVAL_SKIP)
1029 {
1030 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1031 goto nosideret;
1032 }
1033
1034 oldpos = *pos;
1035 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
1036 *pos = oldpos;
1037
1038 if (binop_user_defined_p (op, arg1, arg2))
1039 {
1040 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2ccb3837 1041 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1042 }
1043 else
1044 {
e58de8a2 1045 tem = value_logical_not (arg1);
bd5635a1
RP
1046 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
1047 (tem ? EVAL_SKIP : noside));
2ccb3837 1048 return value_from_longest (builtin_type_int,
e58de8a2 1049 (LONGEST) (!tem && !value_logical_not (arg2)));
bd5635a1
RP
1050 }
1051
e58de8a2 1052 case BINOP_LOGICAL_OR:
bd5635a1
RP
1053 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1054 if (noside == EVAL_SKIP)
1055 {
1056 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1057 goto nosideret;
1058 }
1059
1060 oldpos = *pos;
1061 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
1062 *pos = oldpos;
1063
1064 if (binop_user_defined_p (op, arg1, arg2))
1065 {
1066 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2ccb3837 1067 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1068 }
1069 else
1070 {
e58de8a2 1071 tem = value_logical_not (arg1);
bd5635a1
RP
1072 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
1073 (!tem ? EVAL_SKIP : noside));
2ccb3837 1074 return value_from_longest (builtin_type_int,
e58de8a2 1075 (LONGEST) (!tem || !value_logical_not (arg2)));
bd5635a1
RP
1076 }
1077
1078 case BINOP_EQUAL:
1079 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1080 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1081 if (noside == EVAL_SKIP)
1082 goto nosideret;
1083 if (binop_user_defined_p (op, arg1, arg2))
1084 {
2ccb3837 1085 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1086 }
1087 else
1088 {
1089 tem = value_equal (arg1, arg2);
2ccb3837 1090 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
1091 }
1092
1093 case BINOP_NOTEQUAL:
1094 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1095 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1096 if (noside == EVAL_SKIP)
1097 goto nosideret;
1098 if (binop_user_defined_p (op, arg1, arg2))
1099 {
2ccb3837 1100 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1101 }
1102 else
1103 {
1104 tem = value_equal (arg1, arg2);
2ccb3837 1105 return value_from_longest (builtin_type_int, (LONGEST) ! tem);
bd5635a1
RP
1106 }
1107
1108 case BINOP_LESS:
1109 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1110 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1111 if (noside == EVAL_SKIP)
1112 goto nosideret;
1113 if (binop_user_defined_p (op, arg1, arg2))
1114 {
2ccb3837 1115 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1116 }
1117 else
1118 {
1119 tem = value_less (arg1, arg2);
2ccb3837 1120 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
1121 }
1122
1123 case BINOP_GTR:
1124 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1125 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1126 if (noside == EVAL_SKIP)
1127 goto nosideret;
1128 if (binop_user_defined_p (op, arg1, arg2))
1129 {
2ccb3837 1130 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1131 }
1132 else
1133 {
1134 tem = value_less (arg2, arg1);
2ccb3837 1135 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
1136 }
1137
1138 case BINOP_GEQ:
1139 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1140 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1141 if (noside == EVAL_SKIP)
1142 goto nosideret;
1143 if (binop_user_defined_p (op, arg1, arg2))
1144 {
2ccb3837 1145 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1146 }
1147 else
1148 {
8f86a4e4
JG
1149 tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
1150 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
1151 }
1152
1153 case BINOP_LEQ:
1154 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1155 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
1156 if (noside == EVAL_SKIP)
1157 goto nosideret;
1158 if (binop_user_defined_p (op, arg1, arg2))
1159 {
2ccb3837 1160 return value_x_binop (arg1, arg2, op, OP_NULL);
bd5635a1
RP
1161 }
1162 else
1163 {
8f86a4e4
JG
1164 tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
1165 return value_from_longest (builtin_type_int, (LONGEST) tem);
bd5635a1
RP
1166 }
1167
1168 case BINOP_REPEAT:
1169 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1170 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1171 if (noside == EVAL_SKIP)
1172 goto nosideret;
1173 if (TYPE_CODE (VALUE_TYPE (arg2)) != TYPE_CODE_INT)
1174 error ("Non-integral right operand for \"@\" operator.");
1175 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1176 return allocate_repeat_value (VALUE_TYPE (arg1),
2ccb3837 1177 longest_to_int (value_as_long (arg2)));
bd5635a1 1178 else
2ccb3837 1179 return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
bd5635a1
RP
1180
1181 case BINOP_COMMA:
1182 evaluate_subexp (NULL_TYPE, exp, pos, noside);
1183 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
1184
1185 case UNOP_NEG:
1186 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1187 if (noside == EVAL_SKIP)
1188 goto nosideret;
1189 if (unop_user_defined_p (op, arg1))
1190 return value_x_unop (arg1, op);
1191 else
1192 return value_neg (arg1);
1193
e58de8a2 1194 case UNOP_COMPLEMENT:
5f00ca54
JK
1195 /* C++: check for and handle destructor names. */
1196 op = exp->elts[*pos].opcode;
1197
bd5635a1
RP
1198 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1199 if (noside == EVAL_SKIP)
1200 goto nosideret;
e58de8a2
FF
1201 if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
1202 return value_x_unop (arg1, UNOP_COMPLEMENT);
bd5635a1 1203 else
e58de8a2 1204 return value_complement (arg1);
bd5635a1 1205
e58de8a2 1206 case UNOP_LOGICAL_NOT:
bd5635a1
RP
1207 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1208 if (noside == EVAL_SKIP)
1209 goto nosideret;
1210 if (unop_user_defined_p (op, arg1))
1211 return value_x_unop (arg1, op);
1212 else
2ccb3837 1213 return value_from_longest (builtin_type_int,
e58de8a2 1214 (LONGEST) value_logical_not (arg1));
bd5635a1
RP
1215
1216 case UNOP_IND:
1217 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
1218 expect_type = TYPE_TARGET_TYPE (expect_type);
1219 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1220 if (noside == EVAL_SKIP)
1221 goto nosideret;
1222 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1223 {
1224 if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_PTR
1225 || TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_REF
1226 /* In C you can dereference an array to get the 1st elt. */
1227 || TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_ARRAY
1228 )
1229 return value_zero (TYPE_TARGET_TYPE (VALUE_TYPE (arg1)),
1230 lval_memory);
1231 else if (TYPE_CODE (VALUE_TYPE (arg1)) == TYPE_CODE_INT)
1232 /* GDB allows dereferencing an int. */
1233 return value_zero (builtin_type_int, lval_memory);
1234 else
1235 error ("Attempt to take contents of a non-pointer value.");
1236 }
1237 return value_ind (arg1);
1238
1239 case UNOP_ADDR:
1240 /* C++: check for and handle pointer to members. */
1241
1242 op = exp->elts[*pos].opcode;
1243
1244 if (noside == EVAL_SKIP)
1245 {
1246 if (op == OP_SCOPE)
1247 {
a8a69e63 1248 int temm = longest_to_int (exp->elts[pc+3].longconst);
1500864f 1249 (*pos) += 3 + BYTES_TO_EXP_ELEM (temm + 1);
bd5635a1
RP
1250 }
1251 else
1252 evaluate_subexp (expect_type, exp, pos, EVAL_SKIP);
1253 goto nosideret;
1254 }
1255
01be6913 1256 return evaluate_subexp_for_address (exp, pos, noside);
bd5635a1
RP
1257
1258 case UNOP_SIZEOF:
1259 if (noside == EVAL_SKIP)
1260 {
1261 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
1262 goto nosideret;
1263 }
1264 return evaluate_subexp_for_sizeof (exp, pos);
1265
1266 case UNOP_CAST:
1267 (*pos) += 2;
2d67c7e9
PB
1268 type = exp->elts[pc + 1].type;
1269 arg1 = evaluate_subexp (type, exp, pos, noside);
bd5635a1
RP
1270 if (noside == EVAL_SKIP)
1271 goto nosideret;
2d67c7e9
PB
1272 if (type != VALUE_TYPE (arg1))
1273 arg1 = value_cast (type, arg1);
1274 return arg1;
bd5635a1
RP
1275
1276 case UNOP_MEMVAL:
1277 (*pos) += 2;
1278 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1279 if (noside == EVAL_SKIP)
1280 goto nosideret;
1281 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1282 return value_zero (exp->elts[pc + 1].type, lval_memory);
1283 else
1284 return value_at_lazy (exp->elts[pc + 1].type,
2ccb3837 1285 value_as_pointer (arg1));
bd5635a1
RP
1286
1287 case UNOP_PREINCREMENT:
1288 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1289 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1290 return arg1;
1291 else if (unop_user_defined_p (op, arg1))
1292 {
1293 return value_x_unop (arg1, op);
1294 }
1295 else
1296 {
2ccb3837 1297 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1298 (LONGEST) 1));
1299 return value_assign (arg1, arg2);
1300 }
1301
1302 case UNOP_PREDECREMENT:
1303 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1304 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1305 return arg1;
1306 else if (unop_user_defined_p (op, arg1))
1307 {
1308 return value_x_unop (arg1, op);
1309 }
1310 else
1311 {
2ccb3837 1312 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1313 (LONGEST) 1));
1314 return value_assign (arg1, arg2);
1315 }
1316
1317 case UNOP_POSTINCREMENT:
1318 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1319 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1320 return arg1;
1321 else if (unop_user_defined_p (op, arg1))
1322 {
1323 return value_x_unop (arg1, op);
1324 }
1325 else
1326 {
2ccb3837 1327 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1328 (LONGEST) 1));
1329 value_assign (arg1, arg2);
1330 return arg1;
1331 }
1332
1333 case UNOP_POSTDECREMENT:
1334 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1335 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1336 return arg1;
1337 else if (unop_user_defined_p (op, arg1))
1338 {
1339 return value_x_unop (arg1, op);
1340 }
1341 else
1342 {
2ccb3837 1343 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
bd5635a1
RP
1344 (LONGEST) 1));
1345 value_assign (arg1, arg2);
1346 return arg1;
1347 }
1348
1349 case OP_THIS:
1350 (*pos) += 1;
1351 return value_of_this (1);
1352
1500864f
JK
1353 case OP_TYPE:
1354 error ("Attempt to use a type name as an expression");
1355
bd5635a1 1356 default:
1500864f
JK
1357 /* Removing this case and compiling with gcc -Wall reveals that
1358 a lot of cases are hitting this case. Some of these should
1359 probably be removed from expression.h (e.g. do we need a BINOP_SCOPE
1360 and an OP_SCOPE?); others are legitimate expressions which are
1361 (apparently) not fully implemented.
1362
1363 If there are any cases landing here which mean a user error,
1364 then they should be separate cases, with more descriptive
1365 error messages. */
1366
1367 error ("\
2d67c7e9 1368GDB does not (yet) know how to evaluate that kind of expression");
bd5635a1
RP
1369 }
1370
1371 nosideret:
2ccb3837 1372 return value_from_longest (builtin_type_long, (LONGEST) 1);
bd5635a1
RP
1373}
1374\f
1375/* Evaluate a subexpression of EXP, at index *POS,
1376 and return the address of that subexpression.
1377 Advance *POS over the subexpression.
1378 If the subexpression isn't an lvalue, get an error.
1379 NOSIDE may be EVAL_AVOID_SIDE_EFFECTS;
1380 then only the type of the result need be correct. */
1381
2d67c7e9 1382static value_ptr
bd5635a1
RP
1383evaluate_subexp_for_address (exp, pos, noside)
1384 register struct expression *exp;
1385 register int *pos;
1386 enum noside noside;
1387{
1388 enum exp_opcode op;
1389 register int pc;
e17960fb 1390 struct symbol *var;
bd5635a1
RP
1391
1392 pc = (*pos);
1393 op = exp->elts[pc].opcode;
1394
1395 switch (op)
1396 {
1397 case UNOP_IND:
1398 (*pos)++;
1399 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
1400
1401 case UNOP_MEMVAL:
1402 (*pos) += 3;
1403 return value_cast (lookup_pointer_type (exp->elts[pc + 1].type),
1404 evaluate_subexp (NULL_TYPE, exp, pos, noside));
1405
1406 case OP_VAR_VALUE:
479fdd26 1407 var = exp->elts[pc + 2].symbol;
e17960fb
JG
1408
1409 /* C++: The "address" of a reference should yield the address
1410 * of the object pointed to. Let value_addr() deal with it. */
1411 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_REF)
1412 goto default_case;
1413
479fdd26 1414 (*pos) += 4;
bd5635a1
RP
1415 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1416 {
1417 struct type *type =
e17960fb
JG
1418 lookup_pointer_type (SYMBOL_TYPE (var));
1419 enum address_class sym_class = SYMBOL_CLASS (var);
bd5635a1
RP
1420
1421 if (sym_class == LOC_CONST
1422 || sym_class == LOC_CONST_BYTES
1423 || sym_class == LOC_REGISTER
1424 || sym_class == LOC_REGPARM)
1425 error ("Attempt to take address of register or constant.");
1426
1427 return
1428 value_zero (type, not_lval);
1429 }
1430 else
479fdd26
JK
1431 return
1432 locate_var_value
1433 (var,
1434 block_innermost_frame (exp->elts[pc + 1].block));
bd5635a1
RP
1435
1436 default:
e17960fb 1437 default_case:
bd5635a1
RP
1438 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1439 {
2d67c7e9 1440 value_ptr x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
bd5635a1 1441 if (VALUE_LVAL (x) == lval_memory)
0a5d35ed 1442 return value_zero (lookup_pointer_type (VALUE_TYPE (x)),
bd5635a1
RP
1443 not_lval);
1444 else
1445 error ("Attempt to take address of non-lval");
1446 }
1447 return value_addr (evaluate_subexp (NULL_TYPE, exp, pos, noside));
1448 }
1449}
1450
1451/* Evaluate like `evaluate_subexp' except coercing arrays to pointers.
fb6e675f
FF
1452 When used in contexts where arrays will be coerced anyway, this is
1453 equivalent to `evaluate_subexp' but much faster because it avoids
479fdd26
JK
1454 actually fetching array contents (perhaps obsolete now that we have
1455 VALUE_LAZY).
fb6e675f
FF
1456
1457 Note that we currently only do the coercion for C expressions, where
1458 arrays are zero based and the coercion is correct. For other languages,
1459 with nonzero based arrays, coercion loses. Use CAST_IS_CONVERSION
1460 to decide if coercion is appropriate.
1461
479fdd26 1462 */
bd5635a1 1463
7398958c 1464value_ptr
bd5635a1
RP
1465evaluate_subexp_with_coercion (exp, pos, noside)
1466 register struct expression *exp;
1467 register int *pos;
1468 enum noside noside;
1469{
1470 register enum exp_opcode op;
1471 register int pc;
2d67c7e9 1472 register value_ptr val;
e17960fb 1473 struct symbol *var;
bd5635a1
RP
1474
1475 pc = (*pos);
1476 op = exp->elts[pc].opcode;
1477
1478 switch (op)
1479 {
1480 case OP_VAR_VALUE:
479fdd26 1481 var = exp->elts[pc + 2].symbol;
fb6e675f
FF
1482 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_ARRAY
1483 && CAST_IS_CONVERSION)
bd5635a1 1484 {
479fdd26
JK
1485 (*pos) += 4;
1486 val =
1487 locate_var_value
1488 (var, block_innermost_frame (exp->elts[pc + 1].block));
e17960fb 1489 return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (SYMBOL_TYPE (var))),
bd5635a1
RP
1490 val);
1491 }
479fdd26
JK
1492 /* FALLTHROUGH */
1493
1494 default:
1495 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
bd5635a1
RP
1496 }
1497}
1498
1499/* Evaluate a subexpression of EXP, at index *POS,
1500 and return a value for the size of that subexpression.
1501 Advance *POS over the subexpression. */
1502
2d67c7e9 1503static value_ptr
bd5635a1
RP
1504evaluate_subexp_for_sizeof (exp, pos)
1505 register struct expression *exp;
1506 register int *pos;
1507{
1508 enum exp_opcode op;
1509 register int pc;
2d67c7e9 1510 value_ptr val;
bd5635a1
RP
1511
1512 pc = (*pos);
1513 op = exp->elts[pc].opcode;
1514
1515 switch (op)
1516 {
1517 /* This case is handled specially
1518 so that we avoid creating a value for the result type.
1519 If the result type is very big, it's desirable not to
1520 create a value unnecessarily. */
1521 case UNOP_IND:
1522 (*pos)++;
1523 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2ccb3837 1524 return value_from_longest (builtin_type_int, (LONGEST)
bd5635a1
RP
1525 TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (val))));
1526
1527 case UNOP_MEMVAL:
1528 (*pos) += 3;
2ccb3837 1529 return value_from_longest (builtin_type_int,
bd5635a1
RP
1530 (LONGEST) TYPE_LENGTH (exp->elts[pc + 1].type));
1531
1532 case OP_VAR_VALUE:
479fdd26
JK
1533 (*pos) += 4;
1534 return
1535 value_from_longest
1536 (builtin_type_int,
1537 (LONGEST) TYPE_LENGTH (SYMBOL_TYPE (exp->elts[pc + 2].symbol)));
bd5635a1
RP
1538
1539 default:
1540 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2ccb3837 1541 return value_from_longest (builtin_type_int,
bd5635a1
RP
1542 (LONGEST) TYPE_LENGTH (VALUE_TYPE (val)));
1543 }
1544}
0a5d35ed
SG
1545
1546/* Parse a type expression in the string [P..P+LENGTH). */
1547
1548struct type *
1549parse_and_eval_type (p, length)
1550 char *p;
1551 int length;
1552{
1553 char *tmp = (char *)alloca (length + 4);
1554 struct expression *expr;
1555 tmp[0] = '(';
35fcebce 1556 memcpy (tmp+1, p, length);
0a5d35ed
SG
1557 tmp[length+1] = ')';
1558 tmp[length+2] = '0';
1559 tmp[length+3] = '\0';
1560 expr = parse_expression (tmp);
1561 if (expr->elts[0].opcode != UNOP_CAST)
1562 error ("Internal error in eval_type.");
1563 return expr->elts[1].type;
1564}
2d67c7e9
PB
1565
1566int
1567calc_f77_array_dims (array_type)
1568 struct type *array_type;
1569{
1570 int ndimen = 1;
1571 struct type *tmp_type;
1572
1573 if ((TYPE_CODE(array_type) != TYPE_CODE_ARRAY))
1574 error ("Can't get dimensions for a non-array type");
1575
1576 tmp_type = array_type;
1577
477b2425 1578 while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
2d67c7e9
PB
1579 {
1580 if (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY)
1581 ++ndimen;
1582 }
1583 return ndimen;
1584}
This page took 0.274576 seconds and 4 git commands to generate.