2005-02-10 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / eval.c
1 /* Evaluate expressions for GDB.
2
3 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
4 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 Free
5 Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
23
24 #include "defs.h"
25 #include "gdb_string.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "value.h"
29 #include "expression.h"
30 #include "target.h"
31 #include "frame.h"
32 #include "language.h" /* For CAST_IS_CONVERSION */
33 #include "f-lang.h" /* for array bound stuff */
34 #include "cp-abi.h"
35 #include "infcall.h"
36 #include "objc-lang.h"
37 #include "block.h"
38 #include "parser-defs.h"
39 #include "cp-support.h"
40
41 /* This is defined in valops.c */
42 extern int overload_resolution;
43
44 /* JYG: lookup rtti type of STRUCTOP_PTR when this is set to continue
45 on with successful lookup for member/method of the rtti type. */
46 extern int objectprint;
47
48 /* Prototypes for local functions. */
49
50 static struct value *evaluate_subexp_for_sizeof (struct expression *, int *);
51
52 static struct value *evaluate_subexp_for_address (struct expression *,
53 int *, enum noside);
54
55 static struct value *evaluate_subexp (struct type *, struct expression *,
56 int *, enum noside);
57
58 static char *get_label (struct expression *, int *);
59
60 static struct value *evaluate_struct_tuple (struct value *,
61 struct expression *, int *,
62 enum noside, int);
63
64 static LONGEST init_array_element (struct value *, struct value *,
65 struct expression *, int *, enum noside,
66 LONGEST, LONGEST);
67
68 static struct value *
69 evaluate_subexp (struct type *expect_type, struct expression *exp,
70 int *pos, enum noside noside)
71 {
72 return (*exp->language_defn->la_exp_desc->evaluate_exp)
73 (expect_type, exp, pos, noside);
74 }
75 \f
76 /* Parse the string EXP as a C expression, evaluate it,
77 and return the result as a number. */
78
79 CORE_ADDR
80 parse_and_eval_address (char *exp)
81 {
82 struct expression *expr = parse_expression (exp);
83 CORE_ADDR addr;
84 struct cleanup *old_chain =
85 make_cleanup (free_current_contents, &expr);
86
87 addr = value_as_address (evaluate_expression (expr));
88 do_cleanups (old_chain);
89 return addr;
90 }
91
92 /* Like parse_and_eval_address but takes a pointer to a char * variable
93 and advanced that variable across the characters parsed. */
94
95 CORE_ADDR
96 parse_and_eval_address_1 (char **expptr)
97 {
98 struct expression *expr = parse_exp_1 (expptr, (struct block *) 0, 0);
99 CORE_ADDR addr;
100 struct cleanup *old_chain =
101 make_cleanup (free_current_contents, &expr);
102
103 addr = value_as_address (evaluate_expression (expr));
104 do_cleanups (old_chain);
105 return addr;
106 }
107
108 /* Like parse_and_eval_address, but treats the value of the expression
109 as an integer, not an address, returns a LONGEST, not a CORE_ADDR */
110 LONGEST
111 parse_and_eval_long (char *exp)
112 {
113 struct expression *expr = parse_expression (exp);
114 LONGEST retval;
115 struct cleanup *old_chain =
116 make_cleanup (free_current_contents, &expr);
117
118 retval = value_as_long (evaluate_expression (expr));
119 do_cleanups (old_chain);
120 return (retval);
121 }
122
123 struct value *
124 parse_and_eval (char *exp)
125 {
126 struct expression *expr = parse_expression (exp);
127 struct value *val;
128 struct cleanup *old_chain =
129 make_cleanup (free_current_contents, &expr);
130
131 val = evaluate_expression (expr);
132 do_cleanups (old_chain);
133 return val;
134 }
135
136 /* Parse up to a comma (or to a closeparen)
137 in the string EXPP as an expression, evaluate it, and return the value.
138 EXPP is advanced to point to the comma. */
139
140 struct value *
141 parse_to_comma_and_eval (char **expp)
142 {
143 struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
144 struct value *val;
145 struct cleanup *old_chain =
146 make_cleanup (free_current_contents, &expr);
147
148 val = evaluate_expression (expr);
149 do_cleanups (old_chain);
150 return val;
151 }
152 \f
153 /* Evaluate an expression in internal prefix form
154 such as is constructed by parse.y.
155
156 See expression.h for info on the format of an expression. */
157
158 struct value *
159 evaluate_expression (struct expression *exp)
160 {
161 int pc = 0;
162 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
163 }
164
165 /* Evaluate an expression, avoiding all memory references
166 and getting a value whose type alone is correct. */
167
168 struct value *
169 evaluate_type (struct expression *exp)
170 {
171 int pc = 0;
172 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
173 }
174
175 /* If the next expression is an OP_LABELED, skips past it,
176 returning the label. Otherwise, does nothing and returns NULL. */
177
178 static char *
179 get_label (struct expression *exp, int *pos)
180 {
181 if (exp->elts[*pos].opcode == OP_LABELED)
182 {
183 int pc = (*pos)++;
184 char *name = &exp->elts[pc + 2].string;
185 int tem = longest_to_int (exp->elts[pc + 1].longconst);
186 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
187 return name;
188 }
189 else
190 return NULL;
191 }
192
193 /* This function evaluates tuples (in (the deleted) Chill) or
194 brace-initializers (in C/C++) for structure types. */
195
196 static struct value *
197 evaluate_struct_tuple (struct value *struct_val,
198 struct expression *exp,
199 int *pos, enum noside noside, int nargs)
200 {
201 struct type *struct_type = check_typedef (value_type (struct_val));
202 struct type *substruct_type = struct_type;
203 struct type *field_type;
204 int fieldno = -1;
205 int variantno = -1;
206 int subfieldno = -1;
207 while (--nargs >= 0)
208 {
209 int pc = *pos;
210 struct value *val = NULL;
211 int nlabels = 0;
212 int bitpos, bitsize;
213 bfd_byte *addr;
214
215 /* Skip past the labels, and count them. */
216 while (get_label (exp, pos) != NULL)
217 nlabels++;
218
219 do
220 {
221 char *label = get_label (exp, &pc);
222 if (label)
223 {
224 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
225 fieldno++)
226 {
227 char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
228 if (field_name != NULL && DEPRECATED_STREQ (field_name, label))
229 {
230 variantno = -1;
231 subfieldno = fieldno;
232 substruct_type = struct_type;
233 goto found;
234 }
235 }
236 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
237 fieldno++)
238 {
239 char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
240 field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
241 if ((field_name == 0 || *field_name == '\0')
242 && TYPE_CODE (field_type) == TYPE_CODE_UNION)
243 {
244 variantno = 0;
245 for (; variantno < TYPE_NFIELDS (field_type);
246 variantno++)
247 {
248 substruct_type
249 = TYPE_FIELD_TYPE (field_type, variantno);
250 if (TYPE_CODE (substruct_type) == TYPE_CODE_STRUCT)
251 {
252 for (subfieldno = 0;
253 subfieldno < TYPE_NFIELDS (substruct_type);
254 subfieldno++)
255 {
256 if (DEPRECATED_STREQ (TYPE_FIELD_NAME (substruct_type,
257 subfieldno),
258 label))
259 {
260 goto found;
261 }
262 }
263 }
264 }
265 }
266 }
267 error (_("there is no field named %s"), label);
268 found:
269 ;
270 }
271 else
272 {
273 /* Unlabelled tuple element - go to next field. */
274 if (variantno >= 0)
275 {
276 subfieldno++;
277 if (subfieldno >= TYPE_NFIELDS (substruct_type))
278 {
279 variantno = -1;
280 substruct_type = struct_type;
281 }
282 }
283 if (variantno < 0)
284 {
285 fieldno++;
286 subfieldno = fieldno;
287 if (fieldno >= TYPE_NFIELDS (struct_type))
288 error (_("too many initializers"));
289 field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
290 if (TYPE_CODE (field_type) == TYPE_CODE_UNION
291 && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0')
292 error (_("don't know which variant you want to set"));
293 }
294 }
295
296 /* Here, struct_type is the type of the inner struct,
297 while substruct_type is the type of the inner struct.
298 These are the same for normal structures, but a variant struct
299 contains anonymous union fields that contain substruct fields.
300 The value fieldno is the index of the top-level (normal or
301 anonymous union) field in struct_field, while the value
302 subfieldno is the index of the actual real (named inner) field
303 in substruct_type. */
304
305 field_type = TYPE_FIELD_TYPE (substruct_type, subfieldno);
306 if (val == 0)
307 val = evaluate_subexp (field_type, exp, pos, noside);
308
309 /* Now actually set the field in struct_val. */
310
311 /* Assign val to field fieldno. */
312 if (value_type (val) != field_type)
313 val = value_cast (field_type, val);
314
315 bitsize = TYPE_FIELD_BITSIZE (substruct_type, subfieldno);
316 bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
317 if (variantno >= 0)
318 bitpos += TYPE_FIELD_BITPOS (substruct_type, subfieldno);
319 addr = value_contents_writeable (struct_val) + bitpos / 8;
320 if (bitsize)
321 modify_field (addr, value_as_long (val),
322 bitpos % 8, bitsize);
323 else
324 memcpy (addr, value_contents (val),
325 TYPE_LENGTH (value_type (val)));
326 }
327 while (--nlabels > 0);
328 }
329 return struct_val;
330 }
331
332 /* Recursive helper function for setting elements of array tuples for
333 (the deleted) Chill. The target is ARRAY (which has bounds
334 LOW_BOUND to HIGH_BOUND); the element value is ELEMENT; EXP, POS
335 and NOSIDE are as usual. Evaluates index expresions and sets the
336 specified element(s) of ARRAY to ELEMENT. Returns last index
337 value. */
338
339 static LONGEST
340 init_array_element (struct value *array, struct value *element,
341 struct expression *exp, int *pos,
342 enum noside noside, LONGEST low_bound, LONGEST high_bound)
343 {
344 LONGEST index;
345 int element_size = TYPE_LENGTH (value_type (element));
346 if (exp->elts[*pos].opcode == BINOP_COMMA)
347 {
348 (*pos)++;
349 init_array_element (array, element, exp, pos, noside,
350 low_bound, high_bound);
351 return init_array_element (array, element,
352 exp, pos, noside, low_bound, high_bound);
353 }
354 else if (exp->elts[*pos].opcode == BINOP_RANGE)
355 {
356 LONGEST low, high;
357 (*pos)++;
358 low = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
359 high = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
360 if (low < low_bound || high > high_bound)
361 error (_("tuple range index out of range"));
362 for (index = low; index <= high; index++)
363 {
364 memcpy (value_contents_raw (array)
365 + (index - low_bound) * element_size,
366 value_contents (element), element_size);
367 }
368 }
369 else
370 {
371 index = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
372 if (index < low_bound || index > high_bound)
373 error (_("tuple index out of range"));
374 memcpy (value_contents_raw (array) + (index - low_bound) * element_size,
375 value_contents (element), element_size);
376 }
377 return index;
378 }
379
380 struct value *
381 evaluate_subexp_standard (struct type *expect_type,
382 struct expression *exp, int *pos,
383 enum noside noside)
384 {
385 enum exp_opcode op;
386 int tem, tem2, tem3;
387 int pc, pc2 = 0, oldpos;
388 struct value *arg1 = NULL;
389 struct value *arg2 = NULL;
390 struct value *arg3;
391 struct type *type;
392 int nargs;
393 struct value **argvec;
394 int upper, lower, retcode;
395 int code;
396 int ix;
397 long mem_offset;
398 struct type **arg_types;
399 int save_pos1;
400
401 pc = (*pos)++;
402 op = exp->elts[pc].opcode;
403
404 switch (op)
405 {
406 case OP_SCOPE:
407 tem = longest_to_int (exp->elts[pc + 2].longconst);
408 (*pos) += 4 + BYTES_TO_EXP_ELEM (tem + 1);
409 arg1 = value_aggregate_elt (exp->elts[pc + 1].type,
410 &exp->elts[pc + 3].string,
411 noside);
412 if (arg1 == NULL)
413 error (_("There is no field named %s"), &exp->elts[pc + 3].string);
414 return arg1;
415
416 case OP_LONG:
417 (*pos) += 3;
418 return value_from_longest (exp->elts[pc + 1].type,
419 exp->elts[pc + 2].longconst);
420
421 case OP_DOUBLE:
422 (*pos) += 3;
423 return value_from_double (exp->elts[pc + 1].type,
424 exp->elts[pc + 2].doubleconst);
425
426 case OP_VAR_VALUE:
427 (*pos) += 3;
428 if (noside == EVAL_SKIP)
429 goto nosideret;
430
431 /* JYG: We used to just return value_zero of the symbol type
432 if we're asked to avoid side effects. Otherwise we return
433 value_of_variable (...). However I'm not sure if
434 value_of_variable () has any side effect.
435 We need a full value object returned here for whatis_exp ()
436 to call evaluate_type () and then pass the full value to
437 value_rtti_target_type () if we are dealing with a pointer
438 or reference to a base class and print object is on. */
439
440 return value_of_variable (exp->elts[pc + 2].symbol,
441 exp->elts[pc + 1].block);
442
443 case OP_LAST:
444 (*pos) += 2;
445 return
446 access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
447
448 case OP_REGISTER:
449 {
450 int regno = longest_to_int (exp->elts[pc + 1].longconst);
451 struct value *val = value_of_register (regno, get_selected_frame (NULL));
452 (*pos) += 2;
453 if (val == NULL)
454 error (_("Value of register %s not available."),
455 frame_map_regnum_to_name (get_selected_frame (NULL), regno));
456 else
457 return val;
458 }
459 case OP_BOOL:
460 (*pos) += 2;
461 return value_from_longest (LA_BOOL_TYPE,
462 exp->elts[pc + 1].longconst);
463
464 case OP_INTERNALVAR:
465 (*pos) += 2;
466 return value_of_internalvar (exp->elts[pc + 1].internalvar);
467
468 case OP_STRING:
469 tem = longest_to_int (exp->elts[pc + 1].longconst);
470 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
471 if (noside == EVAL_SKIP)
472 goto nosideret;
473 return value_string (&exp->elts[pc + 2].string, tem);
474
475 case OP_OBJC_NSSTRING: /* Objective C Foundation Class NSString constant. */
476 tem = longest_to_int (exp->elts[pc + 1].longconst);
477 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
478 if (noside == EVAL_SKIP)
479 {
480 goto nosideret;
481 }
482 return (struct value *) value_nsstring (&exp->elts[pc + 2].string, tem + 1);
483
484 case OP_BITSTRING:
485 tem = longest_to_int (exp->elts[pc + 1].longconst);
486 (*pos)
487 += 3 + BYTES_TO_EXP_ELEM ((tem + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
488 if (noside == EVAL_SKIP)
489 goto nosideret;
490 return value_bitstring (&exp->elts[pc + 2].string, tem);
491 break;
492
493 case OP_ARRAY:
494 (*pos) += 3;
495 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
496 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
497 nargs = tem3 - tem2 + 1;
498 type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
499
500 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
501 && TYPE_CODE (type) == TYPE_CODE_STRUCT)
502 {
503 struct value *rec = allocate_value (expect_type);
504 memset (value_contents_raw (rec), '\0', TYPE_LENGTH (type));
505 return evaluate_struct_tuple (rec, exp, pos, noside, nargs);
506 }
507
508 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
509 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
510 {
511 struct type *range_type = TYPE_FIELD_TYPE (type, 0);
512 struct type *element_type = TYPE_TARGET_TYPE (type);
513 struct value *array = allocate_value (expect_type);
514 int element_size = TYPE_LENGTH (check_typedef (element_type));
515 LONGEST low_bound, high_bound, index;
516 if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
517 {
518 low_bound = 0;
519 high_bound = (TYPE_LENGTH (type) / element_size) - 1;
520 }
521 index = low_bound;
522 memset (value_contents_raw (array), 0, TYPE_LENGTH (expect_type));
523 for (tem = nargs; --nargs >= 0;)
524 {
525 struct value *element;
526 int index_pc = 0;
527 if (exp->elts[*pos].opcode == BINOP_RANGE)
528 {
529 index_pc = ++(*pos);
530 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
531 }
532 element = evaluate_subexp (element_type, exp, pos, noside);
533 if (value_type (element) != element_type)
534 element = value_cast (element_type, element);
535 if (index_pc)
536 {
537 int continue_pc = *pos;
538 *pos = index_pc;
539 index = init_array_element (array, element, exp, pos, noside,
540 low_bound, high_bound);
541 *pos = continue_pc;
542 }
543 else
544 {
545 if (index > high_bound)
546 /* to avoid memory corruption */
547 error (_("Too many array elements"));
548 memcpy (value_contents_raw (array)
549 + (index - low_bound) * element_size,
550 value_contents (element),
551 element_size);
552 }
553 index++;
554 }
555 return array;
556 }
557
558 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
559 && TYPE_CODE (type) == TYPE_CODE_SET)
560 {
561 struct value *set = allocate_value (expect_type);
562 char *valaddr = value_contents_raw (set);
563 struct type *element_type = TYPE_INDEX_TYPE (type);
564 struct type *check_type = element_type;
565 LONGEST low_bound, high_bound;
566
567 /* get targettype of elementtype */
568 while (TYPE_CODE (check_type) == TYPE_CODE_RANGE ||
569 TYPE_CODE (check_type) == TYPE_CODE_TYPEDEF)
570 check_type = TYPE_TARGET_TYPE (check_type);
571
572 if (get_discrete_bounds (element_type, &low_bound, &high_bound) < 0)
573 error (_("(power)set type with unknown size"));
574 memset (valaddr, '\0', TYPE_LENGTH (type));
575 for (tem = 0; tem < nargs; tem++)
576 {
577 LONGEST range_low, range_high;
578 struct type *range_low_type, *range_high_type;
579 struct value *elem_val;
580 if (exp->elts[*pos].opcode == BINOP_RANGE)
581 {
582 (*pos)++;
583 elem_val = evaluate_subexp (element_type, exp, pos, noside);
584 range_low_type = value_type (elem_val);
585 range_low = value_as_long (elem_val);
586 elem_val = evaluate_subexp (element_type, exp, pos, noside);
587 range_high_type = value_type (elem_val);
588 range_high = value_as_long (elem_val);
589 }
590 else
591 {
592 elem_val = evaluate_subexp (element_type, exp, pos, noside);
593 range_low_type = range_high_type = value_type (elem_val);
594 range_low = range_high = value_as_long (elem_val);
595 }
596 /* check types of elements to avoid mixture of elements from
597 different types. Also check if type of element is "compatible"
598 with element type of powerset */
599 if (TYPE_CODE (range_low_type) == TYPE_CODE_RANGE)
600 range_low_type = TYPE_TARGET_TYPE (range_low_type);
601 if (TYPE_CODE (range_high_type) == TYPE_CODE_RANGE)
602 range_high_type = TYPE_TARGET_TYPE (range_high_type);
603 if ((TYPE_CODE (range_low_type) != TYPE_CODE (range_high_type)) ||
604 (TYPE_CODE (range_low_type) == TYPE_CODE_ENUM &&
605 (range_low_type != range_high_type)))
606 /* different element modes */
607 error (_("POWERSET tuple elements of different mode"));
608 if ((TYPE_CODE (check_type) != TYPE_CODE (range_low_type)) ||
609 (TYPE_CODE (check_type) == TYPE_CODE_ENUM &&
610 range_low_type != check_type))
611 error (_("incompatible POWERSET tuple elements"));
612 if (range_low > range_high)
613 {
614 warning (_("empty POWERSET tuple range"));
615 continue;
616 }
617 if (range_low < low_bound || range_high > high_bound)
618 error (_("POWERSET tuple element out of range"));
619 range_low -= low_bound;
620 range_high -= low_bound;
621 for (; range_low <= range_high; range_low++)
622 {
623 int bit_index = (unsigned) range_low % TARGET_CHAR_BIT;
624 if (BITS_BIG_ENDIAN)
625 bit_index = TARGET_CHAR_BIT - 1 - bit_index;
626 valaddr[(unsigned) range_low / TARGET_CHAR_BIT]
627 |= 1 << bit_index;
628 }
629 }
630 return set;
631 }
632
633 argvec = (struct value **) alloca (sizeof (struct value *) * nargs);
634 for (tem = 0; tem < nargs; tem++)
635 {
636 /* Ensure that array expressions are coerced into pointer objects. */
637 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
638 }
639 if (noside == EVAL_SKIP)
640 goto nosideret;
641 return value_array (tem2, tem3, argvec);
642
643 case TERNOP_SLICE:
644 {
645 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
646 int lowbound
647 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
648 int upper
649 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
650 if (noside == EVAL_SKIP)
651 goto nosideret;
652 return value_slice (array, lowbound, upper - lowbound + 1);
653 }
654
655 case TERNOP_SLICE_COUNT:
656 {
657 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
658 int lowbound
659 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
660 int length
661 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
662 return value_slice (array, lowbound, length);
663 }
664
665 case TERNOP_COND:
666 /* Skip third and second args to evaluate the first one. */
667 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
668 if (value_logical_not (arg1))
669 {
670 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
671 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
672 }
673 else
674 {
675 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
676 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
677 return arg2;
678 }
679
680 case OP_OBJC_SELECTOR:
681 { /* Objective C @selector operator. */
682 char *sel = &exp->elts[pc + 2].string;
683 int len = longest_to_int (exp->elts[pc + 1].longconst);
684
685 (*pos) += 3 + BYTES_TO_EXP_ELEM (len + 1);
686 if (noside == EVAL_SKIP)
687 goto nosideret;
688
689 if (sel[len] != 0)
690 sel[len] = 0; /* Make sure it's terminated. */
691 return value_from_longest (lookup_pointer_type (builtin_type_void),
692 lookup_child_selector (sel));
693 }
694
695 case OP_OBJC_MSGCALL:
696 { /* Objective C message (method) call. */
697
698 static CORE_ADDR responds_selector = 0;
699 static CORE_ADDR method_selector = 0;
700
701 CORE_ADDR selector = 0;
702
703 int using_gcc = 0;
704 int struct_return = 0;
705 int sub_no_side = 0;
706
707 static struct value *msg_send = NULL;
708 static struct value *msg_send_stret = NULL;
709 static int gnu_runtime = 0;
710
711 struct value *target = NULL;
712 struct value *method = NULL;
713 struct value *called_method = NULL;
714
715 struct type *selector_type = NULL;
716
717 struct value *ret = NULL;
718 CORE_ADDR addr = 0;
719
720 selector = exp->elts[pc + 1].longconst;
721 nargs = exp->elts[pc + 2].longconst;
722 argvec = (struct value **) alloca (sizeof (struct value *)
723 * (nargs + 5));
724
725 (*pos) += 3;
726
727 selector_type = lookup_pointer_type (builtin_type_void);
728 if (noside == EVAL_AVOID_SIDE_EFFECTS)
729 sub_no_side = EVAL_NORMAL;
730 else
731 sub_no_side = noside;
732
733 target = evaluate_subexp (selector_type, exp, pos, sub_no_side);
734
735 if (value_as_long (target) == 0)
736 return value_from_longest (builtin_type_long, 0);
737
738 if (lookup_minimal_symbol ("objc_msg_lookup", 0, 0))
739 gnu_runtime = 1;
740
741 /* Find the method dispatch (Apple runtime) or method lookup
742 (GNU runtime) function for Objective-C. These will be used
743 to lookup the symbol information for the method. If we
744 can't find any symbol information, then we'll use these to
745 call the method, otherwise we can call the method
746 directly. The msg_send_stret function is used in the special
747 case of a method that returns a structure (Apple runtime
748 only). */
749 if (gnu_runtime)
750 {
751 struct type *type;
752 type = lookup_pointer_type (builtin_type_void);
753 type = lookup_function_type (type);
754 type = lookup_pointer_type (type);
755 type = lookup_function_type (type);
756 type = lookup_pointer_type (type);
757
758 msg_send = find_function_in_inferior ("objc_msg_lookup");
759 msg_send_stret = find_function_in_inferior ("objc_msg_lookup");
760
761 msg_send = value_from_pointer (type, value_as_address (msg_send));
762 msg_send_stret = value_from_pointer (type,
763 value_as_address (msg_send_stret));
764 }
765 else
766 {
767 msg_send = find_function_in_inferior ("objc_msgSend");
768 /* Special dispatcher for methods returning structs */
769 msg_send_stret = find_function_in_inferior ("objc_msgSend_stret");
770 }
771
772 /* Verify the target object responds to this method. The
773 standard top-level 'Object' class uses a different name for
774 the verification method than the non-standard, but more
775 often used, 'NSObject' class. Make sure we check for both. */
776
777 responds_selector = lookup_child_selector ("respondsToSelector:");
778 if (responds_selector == 0)
779 responds_selector = lookup_child_selector ("respondsTo:");
780
781 if (responds_selector == 0)
782 error (_("no 'respondsTo:' or 'respondsToSelector:' method"));
783
784 method_selector = lookup_child_selector ("methodForSelector:");
785 if (method_selector == 0)
786 method_selector = lookup_child_selector ("methodFor:");
787
788 if (method_selector == 0)
789 error (_("no 'methodFor:' or 'methodForSelector:' method"));
790
791 /* Call the verification method, to make sure that the target
792 class implements the desired method. */
793
794 argvec[0] = msg_send;
795 argvec[1] = target;
796 argvec[2] = value_from_longest (builtin_type_long, responds_selector);
797 argvec[3] = value_from_longest (builtin_type_long, selector);
798 argvec[4] = 0;
799
800 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
801 if (gnu_runtime)
802 {
803 /* Function objc_msg_lookup returns a pointer. */
804 argvec[0] = ret;
805 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
806 }
807 if (value_as_long (ret) == 0)
808 error (_("Target does not respond to this message selector."));
809
810 /* Call "methodForSelector:" method, to get the address of a
811 function method that implements this selector for this
812 class. If we can find a symbol at that address, then we
813 know the return type, parameter types etc. (that's a good
814 thing). */
815
816 argvec[0] = msg_send;
817 argvec[1] = target;
818 argvec[2] = value_from_longest (builtin_type_long, method_selector);
819 argvec[3] = value_from_longest (builtin_type_long, selector);
820 argvec[4] = 0;
821
822 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
823 if (gnu_runtime)
824 {
825 argvec[0] = ret;
826 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
827 }
828
829 /* ret should now be the selector. */
830
831 addr = value_as_long (ret);
832 if (addr)
833 {
834 struct symbol *sym = NULL;
835 /* Is it a high_level symbol? */
836
837 sym = find_pc_function (addr);
838 if (sym != NULL)
839 method = value_of_variable (sym, 0);
840 }
841
842 /* If we found a method with symbol information, check to see
843 if it returns a struct. Otherwise assume it doesn't. */
844
845 if (method)
846 {
847 struct block *b;
848 CORE_ADDR funaddr;
849 struct type *value_type;
850
851 funaddr = find_function_addr (method, &value_type);
852
853 b = block_for_pc (funaddr);
854
855 /* If compiled without -g, assume GCC 2. */
856 using_gcc = (b == NULL ? 2 : BLOCK_GCC_COMPILED (b));
857
858 CHECK_TYPEDEF (value_type);
859
860 if ((value_type == NULL)
861 || (TYPE_CODE(value_type) == TYPE_CODE_ERROR))
862 {
863 if (expect_type != NULL)
864 value_type = expect_type;
865 }
866
867 struct_return = using_struct_return (value_type, using_gcc);
868 }
869 else if (expect_type != NULL)
870 {
871 struct_return = using_struct_return (check_typedef (expect_type), using_gcc);
872 }
873
874 /* Found a function symbol. Now we will substitute its
875 value in place of the message dispatcher (obj_msgSend),
876 so that we call the method directly instead of thru
877 the dispatcher. The main reason for doing this is that
878 we can now evaluate the return value and parameter values
879 according to their known data types, in case we need to
880 do things like promotion, dereferencing, special handling
881 of structs and doubles, etc.
882
883 We want to use the type signature of 'method', but still
884 jump to objc_msgSend() or objc_msgSend_stret() to better
885 mimic the behavior of the runtime. */
886
887 if (method)
888 {
889 if (TYPE_CODE (value_type (method)) != TYPE_CODE_FUNC)
890 error (_("method address has symbol information with non-function type; skipping"));
891 if (struct_return)
892 VALUE_ADDRESS (method) = value_as_address (msg_send_stret);
893 else
894 VALUE_ADDRESS (method) = value_as_address (msg_send);
895 called_method = method;
896 }
897 else
898 {
899 if (struct_return)
900 called_method = msg_send_stret;
901 else
902 called_method = msg_send;
903 }
904
905 if (noside == EVAL_SKIP)
906 goto nosideret;
907
908 if (noside == EVAL_AVOID_SIDE_EFFECTS)
909 {
910 /* If the return type doesn't look like a function type,
911 call an error. This can happen if somebody tries to
912 turn a variable into a function call. This is here
913 because people often want to call, eg, strcmp, which
914 gdb doesn't know is a function. If gdb isn't asked for
915 it's opinion (ie. through "whatis"), it won't offer
916 it. */
917
918 struct type *type = value_type (called_method);
919 if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
920 type = TYPE_TARGET_TYPE (type);
921 type = TYPE_TARGET_TYPE (type);
922
923 if (type)
924 {
925 if ((TYPE_CODE (type) == TYPE_CODE_ERROR) && expect_type)
926 return allocate_value (expect_type);
927 else
928 return allocate_value (type);
929 }
930 else
931 error (_("Expression of type other than \"method returning ...\" used as a method"));
932 }
933
934 /* Now depending on whether we found a symbol for the method,
935 we will either call the runtime dispatcher or the method
936 directly. */
937
938 argvec[0] = called_method;
939 argvec[1] = target;
940 argvec[2] = value_from_longest (builtin_type_long, selector);
941 /* User-supplied arguments. */
942 for (tem = 0; tem < nargs; tem++)
943 argvec[tem + 3] = evaluate_subexp_with_coercion (exp, pos, noside);
944 argvec[tem + 3] = 0;
945
946 if (gnu_runtime && (method != NULL))
947 {
948 /* Function objc_msg_lookup returns a pointer. */
949 deprecated_set_value_type (argvec[0],
950 lookup_function_type (lookup_pointer_type (value_type (argvec[0]))));
951 argvec[0] = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
952 }
953
954 ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
955 return ret;
956 }
957 break;
958
959 case OP_FUNCALL:
960 (*pos) += 2;
961 op = exp->elts[*pos].opcode;
962 nargs = longest_to_int (exp->elts[pc + 1].longconst);
963 /* Allocate arg vector, including space for the function to be
964 called in argvec[0] and a terminating NULL */
965 argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 3));
966 if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
967 {
968 LONGEST fnptr;
969
970 /* 1997-08-01 Currently we do not support function invocation
971 via pointers-to-methods with HP aCC. Pointer does not point
972 to the function, but possibly to some thunk. */
973 if (deprecated_hp_som_som_object_present)
974 {
975 error (_("Not implemented: function invocation through pointer to method with HP aCC"));
976 }
977
978 nargs++;
979 /* First, evaluate the structure into arg2 */
980 pc2 = (*pos)++;
981
982 if (noside == EVAL_SKIP)
983 goto nosideret;
984
985 if (op == STRUCTOP_MEMBER)
986 {
987 arg2 = evaluate_subexp_for_address (exp, pos, noside);
988 }
989 else
990 {
991 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
992 }
993
994 /* If the function is a virtual function, then the
995 aggregate value (providing the structure) plays
996 its part by providing the vtable. Otherwise,
997 it is just along for the ride: call the function
998 directly. */
999
1000 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1001
1002 fnptr = value_as_long (arg1);
1003
1004 if (METHOD_PTR_IS_VIRTUAL (fnptr))
1005 {
1006 int fnoffset = METHOD_PTR_TO_VOFFSET (fnptr);
1007 struct type *basetype;
1008 struct type *domain_type =
1009 TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (value_type (arg1)));
1010 int i, j;
1011 basetype = TYPE_TARGET_TYPE (value_type (arg2));
1012 if (domain_type != basetype)
1013 arg2 = value_cast (lookup_pointer_type (domain_type), arg2);
1014 basetype = TYPE_VPTR_BASETYPE (domain_type);
1015 for (i = TYPE_NFN_FIELDS (basetype) - 1; i >= 0; i--)
1016 {
1017 struct fn_field *f = TYPE_FN_FIELDLIST1 (basetype, i);
1018 /* If one is virtual, then all are virtual. */
1019 if (TYPE_FN_FIELD_VIRTUAL_P (f, 0))
1020 for (j = TYPE_FN_FIELDLIST_LENGTH (basetype, i) - 1; j >= 0; --j)
1021 if ((int) TYPE_FN_FIELD_VOFFSET (f, j) == fnoffset)
1022 {
1023 struct value *temp = value_ind (arg2);
1024 arg1 = value_virtual_fn_field (&temp, f, j, domain_type, 0);
1025 arg2 = value_addr (temp);
1026 goto got_it;
1027 }
1028 }
1029 if (i < 0)
1030 error (_("virtual function at index %d not found"), fnoffset);
1031 }
1032 else
1033 {
1034 deprecated_set_value_type (arg1, lookup_pointer_type (TYPE_TARGET_TYPE (value_type (arg1))));
1035 }
1036 got_it:
1037
1038 /* Now, say which argument to start evaluating from */
1039 tem = 2;
1040 }
1041 else if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
1042 {
1043 /* Hair for method invocations */
1044 int tem2;
1045
1046 nargs++;
1047 /* First, evaluate the structure into arg2 */
1048 pc2 = (*pos)++;
1049 tem2 = longest_to_int (exp->elts[pc2 + 1].longconst);
1050 *pos += 3 + BYTES_TO_EXP_ELEM (tem2 + 1);
1051 if (noside == EVAL_SKIP)
1052 goto nosideret;
1053
1054 if (op == STRUCTOP_STRUCT)
1055 {
1056 /* If v is a variable in a register, and the user types
1057 v.method (), this will produce an error, because v has
1058 no address.
1059
1060 A possible way around this would be to allocate a
1061 copy of the variable on the stack, copy in the
1062 contents, call the function, and copy out the
1063 contents. I.e. convert this from call by reference
1064 to call by copy-return (or whatever it's called).
1065 However, this does not work because it is not the
1066 same: the method being called could stash a copy of
1067 the address, and then future uses through that address
1068 (after the method returns) would be expected to
1069 use the variable itself, not some copy of it. */
1070 arg2 = evaluate_subexp_for_address (exp, pos, noside);
1071 }
1072 else
1073 {
1074 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1075 }
1076 /* Now, say which argument to start evaluating from */
1077 tem = 2;
1078 }
1079 else
1080 {
1081 /* Non-method function call */
1082 save_pos1 = *pos;
1083 argvec[0] = evaluate_subexp_with_coercion (exp, pos, noside);
1084 tem = 1;
1085 type = value_type (argvec[0]);
1086 if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
1087 type = TYPE_TARGET_TYPE (type);
1088 if (type && TYPE_CODE (type) == TYPE_CODE_FUNC)
1089 {
1090 for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
1091 {
1092 /* pai: FIXME This seems to be coercing arguments before
1093 * overload resolution has been done! */
1094 argvec[tem] = evaluate_subexp (TYPE_FIELD_TYPE (type, tem - 1),
1095 exp, pos, noside);
1096 }
1097 }
1098 }
1099
1100 /* Evaluate arguments */
1101 for (; tem <= nargs; tem++)
1102 {
1103 /* Ensure that array expressions are coerced into pointer objects. */
1104 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
1105 }
1106
1107 /* signal end of arglist */
1108 argvec[tem] = 0;
1109
1110 if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
1111 {
1112 int static_memfuncp;
1113 char tstr[256];
1114
1115 /* Method invocation : stuff "this" as first parameter */
1116 argvec[1] = arg2;
1117 /* Name of method from expression */
1118 strcpy (tstr, &exp->elts[pc2 + 2].string);
1119
1120 if (overload_resolution && (exp->language_defn->la_language == language_cplus))
1121 {
1122 /* Language is C++, do some overload resolution before evaluation */
1123 struct value *valp = NULL;
1124
1125 /* Prepare list of argument types for overload resolution */
1126 arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
1127 for (ix = 1; ix <= nargs; ix++)
1128 arg_types[ix - 1] = value_type (argvec[ix]);
1129
1130 (void) find_overload_match (arg_types, nargs, tstr,
1131 1 /* method */ , 0 /* strict match */ ,
1132 &arg2 /* the object */ , NULL,
1133 &valp, NULL, &static_memfuncp);
1134
1135
1136 argvec[1] = arg2; /* the ``this'' pointer */
1137 argvec[0] = valp; /* use the method found after overload resolution */
1138 }
1139 else
1140 /* Non-C++ case -- or no overload resolution */
1141 {
1142 struct value *temp = arg2;
1143 argvec[0] = value_struct_elt (&temp, argvec + 1, tstr,
1144 &static_memfuncp,
1145 op == STRUCTOP_STRUCT
1146 ? "structure" : "structure pointer");
1147 /* value_struct_elt updates temp with the correct value
1148 of the ``this'' pointer if necessary, so modify argvec[1] to
1149 reflect any ``this'' changes. */
1150 arg2 = value_from_longest (lookup_pointer_type(value_type (temp)),
1151 VALUE_ADDRESS (temp) + value_offset (temp)
1152 + value_embedded_offset (temp));
1153 argvec[1] = arg2; /* the ``this'' pointer */
1154 }
1155
1156 if (static_memfuncp)
1157 {
1158 argvec[1] = argvec[0];
1159 nargs--;
1160 argvec++;
1161 }
1162 }
1163 else if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
1164 {
1165 argvec[1] = arg2;
1166 argvec[0] = arg1;
1167 }
1168 else if (op == OP_VAR_VALUE)
1169 {
1170 /* Non-member function being called */
1171 /* fn: This can only be done for C++ functions. A C-style function
1172 in a C++ program, for instance, does not have the fields that
1173 are expected here */
1174
1175 if (overload_resolution && (exp->language_defn->la_language == language_cplus))
1176 {
1177 /* Language is C++, do some overload resolution before evaluation */
1178 struct symbol *symp;
1179
1180 /* Prepare list of argument types for overload resolution */
1181 arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
1182 for (ix = 1; ix <= nargs; ix++)
1183 arg_types[ix - 1] = value_type (argvec[ix]);
1184
1185 (void) find_overload_match (arg_types, nargs, NULL /* no need for name */ ,
1186 0 /* not method */ , 0 /* strict match */ ,
1187 NULL, exp->elts[save_pos1+2].symbol /* the function */ ,
1188 NULL, &symp, NULL);
1189
1190 /* Now fix the expression being evaluated */
1191 exp->elts[save_pos1+2].symbol = symp;
1192 argvec[0] = evaluate_subexp_with_coercion (exp, &save_pos1, noside);
1193 }
1194 else
1195 {
1196 /* Not C++, or no overload resolution allowed */
1197 /* nothing to be done; argvec already correctly set up */
1198 }
1199 }
1200 else
1201 {
1202 /* It is probably a C-style function */
1203 /* nothing to be done; argvec already correctly set up */
1204 }
1205
1206 do_call_it:
1207
1208 if (noside == EVAL_SKIP)
1209 goto nosideret;
1210 if (argvec[0] == NULL)
1211 error (_("Cannot evaluate function -- may be inlined"));
1212 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1213 {
1214 /* If the return type doesn't look like a function type, call an
1215 error. This can happen if somebody tries to turn a variable into
1216 a function call. This is here because people often want to
1217 call, eg, strcmp, which gdb doesn't know is a function. If
1218 gdb isn't asked for it's opinion (ie. through "whatis"),
1219 it won't offer it. */
1220
1221 struct type *ftype =
1222 TYPE_TARGET_TYPE (value_type (argvec[0]));
1223
1224 if (ftype)
1225 return allocate_value (TYPE_TARGET_TYPE (value_type (argvec[0])));
1226 else
1227 error (_("Expression of type other than \"Function returning ...\" used as function"));
1228 }
1229 return call_function_by_hand (argvec[0], nargs, argvec + 1);
1230 /* pai: FIXME save value from call_function_by_hand, then adjust pc by adjust_fn_pc if +ve */
1231
1232 case OP_F77_UNDETERMINED_ARGLIST:
1233
1234 /* Remember that in F77, functions, substring ops and
1235 array subscript operations cannot be disambiguated
1236 at parse time. We have made all array subscript operations,
1237 substring operations as well as function calls come here
1238 and we now have to discover what the heck this thing actually was.
1239 If it is a function, we process just as if we got an OP_FUNCALL. */
1240
1241 nargs = longest_to_int (exp->elts[pc + 1].longconst);
1242 (*pos) += 2;
1243
1244 /* First determine the type code we are dealing with. */
1245 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1246 type = check_typedef (value_type (arg1));
1247 code = TYPE_CODE (type);
1248
1249 switch (code)
1250 {
1251 case TYPE_CODE_ARRAY:
1252 goto multi_f77_subscript;
1253
1254 case TYPE_CODE_STRING:
1255 goto op_f77_substr;
1256
1257 case TYPE_CODE_PTR:
1258 case TYPE_CODE_FUNC:
1259 /* It's a function call. */
1260 /* Allocate arg vector, including space for the function to be
1261 called in argvec[0] and a terminating NULL */
1262 argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
1263 argvec[0] = arg1;
1264 tem = 1;
1265 for (; tem <= nargs; tem++)
1266 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
1267 argvec[tem] = 0; /* signal end of arglist */
1268 goto do_call_it;
1269
1270 default:
1271 error (_("Cannot perform substring on this type"));
1272 }
1273
1274 op_f77_substr:
1275 /* We have a substring operation on our hands here,
1276 let us get the string we will be dealing with */
1277
1278 /* Now evaluate the 'from' and 'to' */
1279
1280 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1281
1282 if (nargs < 2)
1283 return value_subscript (arg1, arg2);
1284
1285 arg3 = evaluate_subexp_with_coercion (exp, pos, noside);
1286
1287 if (noside == EVAL_SKIP)
1288 goto nosideret;
1289
1290 tem2 = value_as_long (arg2);
1291 tem3 = value_as_long (arg3);
1292
1293 return value_slice (arg1, tem2, tem3 - tem2 + 1);
1294
1295 case OP_COMPLEX:
1296 /* We have a complex number, There should be 2 floating
1297 point numbers that compose it */
1298 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1299 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1300
1301 return value_literal_complex (arg1, arg2, builtin_type_f_complex_s16);
1302
1303 case STRUCTOP_STRUCT:
1304 tem = longest_to_int (exp->elts[pc + 1].longconst);
1305 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
1306 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1307 if (noside == EVAL_SKIP)
1308 goto nosideret;
1309 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1310 return value_zero (lookup_struct_elt_type (value_type (arg1),
1311 &exp->elts[pc + 2].string,
1312 0),
1313 lval_memory);
1314 else
1315 {
1316 struct value *temp = arg1;
1317 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
1318 NULL, "structure");
1319 }
1320
1321 case STRUCTOP_PTR:
1322 tem = longest_to_int (exp->elts[pc + 1].longconst);
1323 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
1324 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1325 if (noside == EVAL_SKIP)
1326 goto nosideret;
1327
1328 /* JYG: if print object is on we need to replace the base type
1329 with rtti type in order to continue on with successful
1330 lookup of member / method only available in the rtti type. */
1331 {
1332 struct type *type = value_type (arg1);
1333 struct type *real_type;
1334 int full, top, using_enc;
1335
1336 if (objectprint && TYPE_TARGET_TYPE(type) &&
1337 (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
1338 {
1339 real_type = value_rtti_target_type (arg1, &full, &top, &using_enc);
1340 if (real_type)
1341 {
1342 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1343 real_type = lookup_pointer_type (real_type);
1344 else
1345 real_type = lookup_reference_type (real_type);
1346
1347 arg1 = value_cast (real_type, arg1);
1348 }
1349 }
1350 }
1351
1352 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1353 return value_zero (lookup_struct_elt_type (value_type (arg1),
1354 &exp->elts[pc + 2].string,
1355 0),
1356 lval_memory);
1357 else
1358 {
1359 struct value *temp = arg1;
1360 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
1361 NULL, "structure pointer");
1362 }
1363
1364 case STRUCTOP_MEMBER:
1365 arg1 = evaluate_subexp_for_address (exp, pos, noside);
1366 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1367
1368 /* With HP aCC, pointers to methods do not point to the function code */
1369 if (deprecated_hp_som_som_object_present &&
1370 (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR) &&
1371 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg2))) == TYPE_CODE_METHOD))
1372 error (_("Pointers to methods not supported with HP aCC")); /* 1997-08-19 */
1373
1374 mem_offset = value_as_long (arg2);
1375 goto handle_pointer_to_member;
1376
1377 case STRUCTOP_MPTR:
1378 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1379 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1380
1381 /* With HP aCC, pointers to methods do not point to the function code */
1382 if (deprecated_hp_som_som_object_present &&
1383 (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR) &&
1384 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg2))) == TYPE_CODE_METHOD))
1385 error (_("Pointers to methods not supported with HP aCC")); /* 1997-08-19 */
1386
1387 mem_offset = value_as_long (arg2);
1388
1389 handle_pointer_to_member:
1390 /* HP aCC generates offsets that have bit #29 set; turn it off to get
1391 a real offset to the member. */
1392 if (deprecated_hp_som_som_object_present)
1393 {
1394 if (!mem_offset) /* no bias -> really null */
1395 error (_("Attempted dereference of null pointer-to-member"));
1396 mem_offset &= ~0x20000000;
1397 }
1398 if (noside == EVAL_SKIP)
1399 goto nosideret;
1400 type = check_typedef (value_type (arg2));
1401 if (TYPE_CODE (type) != TYPE_CODE_PTR)
1402 goto bad_pointer_to_member;
1403 type = check_typedef (TYPE_TARGET_TYPE (type));
1404 if (TYPE_CODE (type) == TYPE_CODE_METHOD)
1405 error (_("not implemented: pointer-to-method in pointer-to-member construct"));
1406 if (TYPE_CODE (type) != TYPE_CODE_MEMBER)
1407 goto bad_pointer_to_member;
1408 /* Now, convert these values to an address. */
1409 arg1 = value_cast (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
1410 arg1);
1411 arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
1412 value_as_long (arg1) + mem_offset);
1413 return value_ind (arg3);
1414 bad_pointer_to_member:
1415 error (_("non-pointer-to-member value used in pointer-to-member construct"));
1416
1417 case BINOP_CONCAT:
1418 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1419 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1420 if (noside == EVAL_SKIP)
1421 goto nosideret;
1422 if (binop_user_defined_p (op, arg1, arg2))
1423 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1424 else
1425 return value_concat (arg1, arg2);
1426
1427 case BINOP_ASSIGN:
1428 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1429 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1430
1431 /* Do special stuff for HP aCC pointers to members */
1432 if (deprecated_hp_som_som_object_present)
1433 {
1434 /* 1997-08-19 Can't assign HP aCC pointers to methods. No details of
1435 the implementation yet; but the pointer appears to point to a code
1436 sequence (thunk) in memory -- in any case it is *not* the address
1437 of the function as it would be in a naive implementation. */
1438 if ((TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR) &&
1439 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg1))) == TYPE_CODE_METHOD))
1440 error (_("Assignment to pointers to methods not implemented with HP aCC"));
1441
1442 /* HP aCC pointers to data members require a constant bias */
1443 if ((TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR) &&
1444 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg1))) == TYPE_CODE_MEMBER))
1445 {
1446 unsigned int *ptr = (unsigned int *) value_contents (arg2); /* forces evaluation */
1447 *ptr |= 0x20000000; /* set 29th bit */
1448 }
1449 }
1450
1451 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1452 return arg1;
1453 if (binop_user_defined_p (op, arg1, arg2))
1454 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1455 else
1456 return value_assign (arg1, arg2);
1457
1458 case BINOP_ASSIGN_MODIFY:
1459 (*pos) += 2;
1460 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1461 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1462 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1463 return arg1;
1464 op = exp->elts[pc + 1].opcode;
1465 if (binop_user_defined_p (op, arg1, arg2))
1466 return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op, noside);
1467 else if (op == BINOP_ADD)
1468 arg2 = value_add (arg1, arg2);
1469 else if (op == BINOP_SUB)
1470 arg2 = value_sub (arg1, arg2);
1471 else
1472 arg2 = value_binop (arg1, arg2, op);
1473 return value_assign (arg1, arg2);
1474
1475 case BINOP_ADD:
1476 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1477 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1478 if (noside == EVAL_SKIP)
1479 goto nosideret;
1480 if (binop_user_defined_p (op, arg1, arg2))
1481 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1482 else
1483 return value_add (arg1, arg2);
1484
1485 case BINOP_SUB:
1486 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1487 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1488 if (noside == EVAL_SKIP)
1489 goto nosideret;
1490 if (binop_user_defined_p (op, arg1, arg2))
1491 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1492 else
1493 return value_sub (arg1, arg2);
1494
1495 case BINOP_MUL:
1496 case BINOP_DIV:
1497 case BINOP_REM:
1498 case BINOP_MOD:
1499 case BINOP_LSH:
1500 case BINOP_RSH:
1501 case BINOP_BITWISE_AND:
1502 case BINOP_BITWISE_IOR:
1503 case BINOP_BITWISE_XOR:
1504 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1505 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1506 if (noside == EVAL_SKIP)
1507 goto nosideret;
1508 if (binop_user_defined_p (op, arg1, arg2))
1509 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1510 else if (noside == EVAL_AVOID_SIDE_EFFECTS
1511 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
1512 return value_zero (value_type (arg1), not_lval);
1513 else
1514 return value_binop (arg1, arg2, op);
1515
1516 case BINOP_RANGE:
1517 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1518 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1519 if (noside == EVAL_SKIP)
1520 goto nosideret;
1521 error (_("':' operator used in invalid context"));
1522
1523 case BINOP_SUBSCRIPT:
1524 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1525 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1526 if (noside == EVAL_SKIP)
1527 goto nosideret;
1528 if (binop_user_defined_p (op, arg1, arg2))
1529 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1530 else
1531 {
1532 /* If the user attempts to subscript something that is not an
1533 array or pointer type (like a plain int variable for example),
1534 then report this as an error. */
1535
1536 arg1 = coerce_ref (arg1);
1537 type = check_typedef (value_type (arg1));
1538 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
1539 && TYPE_CODE (type) != TYPE_CODE_PTR)
1540 {
1541 if (TYPE_NAME (type))
1542 error (_("cannot subscript something of type `%s'"),
1543 TYPE_NAME (type));
1544 else
1545 error (_("cannot subscript requested type"));
1546 }
1547
1548 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1549 return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
1550 else
1551 return value_subscript (arg1, arg2);
1552 }
1553
1554 case BINOP_IN:
1555 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1556 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1557 if (noside == EVAL_SKIP)
1558 goto nosideret;
1559 return value_in (arg1, arg2);
1560
1561 case MULTI_SUBSCRIPT:
1562 (*pos) += 2;
1563 nargs = longest_to_int (exp->elts[pc + 1].longconst);
1564 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1565 while (nargs-- > 0)
1566 {
1567 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1568 /* FIXME: EVAL_SKIP handling may not be correct. */
1569 if (noside == EVAL_SKIP)
1570 {
1571 if (nargs > 0)
1572 {
1573 continue;
1574 }
1575 else
1576 {
1577 goto nosideret;
1578 }
1579 }
1580 /* FIXME: EVAL_AVOID_SIDE_EFFECTS handling may not be correct. */
1581 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1582 {
1583 /* If the user attempts to subscript something that has no target
1584 type (like a plain int variable for example), then report this
1585 as an error. */
1586
1587 type = TYPE_TARGET_TYPE (check_typedef (value_type (arg1)));
1588 if (type != NULL)
1589 {
1590 arg1 = value_zero (type, VALUE_LVAL (arg1));
1591 noside = EVAL_SKIP;
1592 continue;
1593 }
1594 else
1595 {
1596 error (_("cannot subscript something of type `%s'"),
1597 TYPE_NAME (value_type (arg1)));
1598 }
1599 }
1600
1601 if (binop_user_defined_p (op, arg1, arg2))
1602 {
1603 arg1 = value_x_binop (arg1, arg2, op, OP_NULL, noside);
1604 }
1605 else
1606 {
1607 arg1 = value_subscript (arg1, arg2);
1608 }
1609 }
1610 return (arg1);
1611
1612 multi_f77_subscript:
1613 {
1614 int subscript_array[MAX_FORTRAN_DIMS];
1615 int array_size_array[MAX_FORTRAN_DIMS];
1616 int ndimensions = 1, i;
1617 struct type *tmp_type;
1618 int offset_item; /* The array offset where the item lives */
1619
1620 if (nargs > MAX_FORTRAN_DIMS)
1621 error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS);
1622
1623 tmp_type = check_typedef (value_type (arg1));
1624 ndimensions = calc_f77_array_dims (type);
1625
1626 if (nargs != ndimensions)
1627 error (_("Wrong number of subscripts"));
1628
1629 /* Now that we know we have a legal array subscript expression
1630 let us actually find out where this element exists in the array. */
1631
1632 offset_item = 0;
1633 /* Take array indices left to right */
1634 for (i = 0; i < nargs; i++)
1635 {
1636 /* Evaluate each subscript, It must be a legal integer in F77 */
1637 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1638
1639 /* Fill in the subscript and array size arrays */
1640
1641 subscript_array[i] = value_as_long (arg2);
1642 }
1643
1644 /* Internal type of array is arranged right to left */
1645 for (i = 0; i < nargs; i++)
1646 {
1647 retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
1648 if (retcode == BOUND_FETCH_ERROR)
1649 error (_("Cannot obtain dynamic upper bound"));
1650
1651 retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
1652 if (retcode == BOUND_FETCH_ERROR)
1653 error (_("Cannot obtain dynamic lower bound"));
1654
1655 array_size_array[nargs - i - 1] = upper - lower + 1;
1656
1657 /* Zero-normalize subscripts so that offsetting will work. */
1658
1659 subscript_array[nargs - i - 1] -= lower;
1660
1661 /* If we are at the bottom of a multidimensional
1662 array type then keep a ptr to the last ARRAY
1663 type around for use when calling value_subscript()
1664 below. This is done because we pretend to value_subscript
1665 that we actually have a one-dimensional array
1666 of base element type that we apply a simple
1667 offset to. */
1668
1669 if (i < nargs - 1)
1670 tmp_type = check_typedef (TYPE_TARGET_TYPE (tmp_type));
1671 }
1672
1673 /* Now let us calculate the offset for this item */
1674
1675 offset_item = subscript_array[ndimensions - 1];
1676
1677 for (i = ndimensions - 1; i > 0; --i)
1678 offset_item =
1679 array_size_array[i - 1] * offset_item + subscript_array[i - 1];
1680
1681 /* Construct a value node with the value of the offset */
1682
1683 arg2 = value_from_longest (builtin_type_f_integer, offset_item);
1684
1685 /* Let us now play a dirty trick: we will take arg1
1686 which is a value node pointing to the topmost level
1687 of the multidimensional array-set and pretend
1688 that it is actually a array of the final element
1689 type, this will ensure that value_subscript()
1690 returns the correct type value */
1691
1692 deprecated_set_value_type (arg1, tmp_type);
1693 return value_ind (value_add (value_coerce_array (arg1), arg2));
1694 }
1695
1696 case BINOP_LOGICAL_AND:
1697 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1698 if (noside == EVAL_SKIP)
1699 {
1700 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1701 goto nosideret;
1702 }
1703
1704 oldpos = *pos;
1705 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
1706 *pos = oldpos;
1707
1708 if (binop_user_defined_p (op, arg1, arg2))
1709 {
1710 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1711 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1712 }
1713 else
1714 {
1715 tem = value_logical_not (arg1);
1716 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
1717 (tem ? EVAL_SKIP : noside));
1718 return value_from_longest (LA_BOOL_TYPE,
1719 (LONGEST) (!tem && !value_logical_not (arg2)));
1720 }
1721
1722 case BINOP_LOGICAL_OR:
1723 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1724 if (noside == EVAL_SKIP)
1725 {
1726 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1727 goto nosideret;
1728 }
1729
1730 oldpos = *pos;
1731 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
1732 *pos = oldpos;
1733
1734 if (binop_user_defined_p (op, arg1, arg2))
1735 {
1736 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1737 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1738 }
1739 else
1740 {
1741 tem = value_logical_not (arg1);
1742 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
1743 (!tem ? EVAL_SKIP : noside));
1744 return value_from_longest (LA_BOOL_TYPE,
1745 (LONGEST) (!tem || !value_logical_not (arg2)));
1746 }
1747
1748 case BINOP_EQUAL:
1749 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1750 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1751 if (noside == EVAL_SKIP)
1752 goto nosideret;
1753 if (binop_user_defined_p (op, arg1, arg2))
1754 {
1755 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1756 }
1757 else
1758 {
1759 tem = value_equal (arg1, arg2);
1760 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
1761 }
1762
1763 case BINOP_NOTEQUAL:
1764 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1765 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1766 if (noside == EVAL_SKIP)
1767 goto nosideret;
1768 if (binop_user_defined_p (op, arg1, arg2))
1769 {
1770 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1771 }
1772 else
1773 {
1774 tem = value_equal (arg1, arg2);
1775 return value_from_longest (LA_BOOL_TYPE, (LONGEST) ! tem);
1776 }
1777
1778 case BINOP_LESS:
1779 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1780 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1781 if (noside == EVAL_SKIP)
1782 goto nosideret;
1783 if (binop_user_defined_p (op, arg1, arg2))
1784 {
1785 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1786 }
1787 else
1788 {
1789 tem = value_less (arg1, arg2);
1790 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
1791 }
1792
1793 case BINOP_GTR:
1794 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1795 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1796 if (noside == EVAL_SKIP)
1797 goto nosideret;
1798 if (binop_user_defined_p (op, arg1, arg2))
1799 {
1800 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1801 }
1802 else
1803 {
1804 tem = value_less (arg2, arg1);
1805 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
1806 }
1807
1808 case BINOP_GEQ:
1809 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1810 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1811 if (noside == EVAL_SKIP)
1812 goto nosideret;
1813 if (binop_user_defined_p (op, arg1, arg2))
1814 {
1815 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1816 }
1817 else
1818 {
1819 tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
1820 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
1821 }
1822
1823 case BINOP_LEQ:
1824 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1825 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
1826 if (noside == EVAL_SKIP)
1827 goto nosideret;
1828 if (binop_user_defined_p (op, arg1, arg2))
1829 {
1830 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1831 }
1832 else
1833 {
1834 tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
1835 return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
1836 }
1837
1838 case BINOP_REPEAT:
1839 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1840 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1841 if (noside == EVAL_SKIP)
1842 goto nosideret;
1843 type = check_typedef (value_type (arg2));
1844 if (TYPE_CODE (type) != TYPE_CODE_INT)
1845 error (_("Non-integral right operand for \"@\" operator."));
1846 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1847 {
1848 return allocate_repeat_value (value_type (arg1),
1849 longest_to_int (value_as_long (arg2)));
1850 }
1851 else
1852 return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
1853
1854 case BINOP_COMMA:
1855 evaluate_subexp (NULL_TYPE, exp, pos, noside);
1856 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
1857
1858 case UNOP_NEG:
1859 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1860 if (noside == EVAL_SKIP)
1861 goto nosideret;
1862 if (unop_user_defined_p (op, arg1))
1863 return value_x_unop (arg1, op, noside);
1864 else
1865 return value_neg (arg1);
1866
1867 case UNOP_COMPLEMENT:
1868 /* C++: check for and handle destructor names. */
1869 op = exp->elts[*pos].opcode;
1870
1871 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1872 if (noside == EVAL_SKIP)
1873 goto nosideret;
1874 if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
1875 return value_x_unop (arg1, UNOP_COMPLEMENT, noside);
1876 else
1877 return value_complement (arg1);
1878
1879 case UNOP_LOGICAL_NOT:
1880 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1881 if (noside == EVAL_SKIP)
1882 goto nosideret;
1883 if (unop_user_defined_p (op, arg1))
1884 return value_x_unop (arg1, op, noside);
1885 else
1886 return value_from_longest (LA_BOOL_TYPE,
1887 (LONGEST) value_logical_not (arg1));
1888
1889 case UNOP_IND:
1890 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
1891 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
1892 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1893 if ((TYPE_TARGET_TYPE (value_type (arg1))) &&
1894 ((TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg1))) == TYPE_CODE_METHOD) ||
1895 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (arg1))) == TYPE_CODE_MEMBER)))
1896 error (_("Attempt to dereference pointer to member without an object"));
1897 if (noside == EVAL_SKIP)
1898 goto nosideret;
1899 if (unop_user_defined_p (op, arg1))
1900 return value_x_unop (arg1, op, noside);
1901 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
1902 {
1903 type = check_typedef (value_type (arg1));
1904 if (TYPE_CODE (type) == TYPE_CODE_PTR
1905 || TYPE_CODE (type) == TYPE_CODE_REF
1906 /* In C you can dereference an array to get the 1st elt. */
1907 || TYPE_CODE (type) == TYPE_CODE_ARRAY
1908 )
1909 return value_zero (TYPE_TARGET_TYPE (type),
1910 lval_memory);
1911 else if (TYPE_CODE (type) == TYPE_CODE_INT)
1912 /* GDB allows dereferencing an int. */
1913 return value_zero (builtin_type_int, lval_memory);
1914 else
1915 error (_("Attempt to take contents of a non-pointer value."));
1916 }
1917 return value_ind (arg1);
1918
1919 case UNOP_ADDR:
1920 /* C++: check for and handle pointer to members. */
1921
1922 op = exp->elts[*pos].opcode;
1923
1924 if (noside == EVAL_SKIP)
1925 {
1926 if (op == OP_SCOPE)
1927 {
1928 int temm = longest_to_int (exp->elts[pc + 3].longconst);
1929 (*pos) += 3 + BYTES_TO_EXP_ELEM (temm + 1);
1930 }
1931 else
1932 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
1933 goto nosideret;
1934 }
1935 else
1936 {
1937 struct value *retvalp = evaluate_subexp_for_address (exp, pos, noside);
1938 /* If HP aCC object, use bias for pointers to members */
1939 if (deprecated_hp_som_som_object_present &&
1940 (TYPE_CODE (value_type (retvalp)) == TYPE_CODE_PTR) &&
1941 (TYPE_CODE (TYPE_TARGET_TYPE (value_type (retvalp))) == TYPE_CODE_MEMBER))
1942 {
1943 unsigned int *ptr = (unsigned int *) value_contents (retvalp); /* forces evaluation */
1944 *ptr |= 0x20000000; /* set 29th bit */
1945 }
1946 return retvalp;
1947 }
1948
1949 case UNOP_SIZEOF:
1950 if (noside == EVAL_SKIP)
1951 {
1952 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
1953 goto nosideret;
1954 }
1955 return evaluate_subexp_for_sizeof (exp, pos);
1956
1957 case UNOP_CAST:
1958 (*pos) += 2;
1959 type = exp->elts[pc + 1].type;
1960 arg1 = evaluate_subexp (type, exp, pos, noside);
1961 if (noside == EVAL_SKIP)
1962 goto nosideret;
1963 if (type != value_type (arg1))
1964 arg1 = value_cast (type, arg1);
1965 return arg1;
1966
1967 case UNOP_MEMVAL:
1968 (*pos) += 2;
1969 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1970 if (noside == EVAL_SKIP)
1971 goto nosideret;
1972 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1973 return value_zero (exp->elts[pc + 1].type, lval_memory);
1974 else
1975 return value_at_lazy (exp->elts[pc + 1].type,
1976 value_as_address (arg1));
1977
1978 case UNOP_PREINCREMENT:
1979 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1980 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1981 return arg1;
1982 else if (unop_user_defined_p (op, arg1))
1983 {
1984 return value_x_unop (arg1, op, noside);
1985 }
1986 else
1987 {
1988 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
1989 (LONGEST) 1));
1990 return value_assign (arg1, arg2);
1991 }
1992
1993 case UNOP_PREDECREMENT:
1994 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
1995 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1996 return arg1;
1997 else if (unop_user_defined_p (op, arg1))
1998 {
1999 return value_x_unop (arg1, op, noside);
2000 }
2001 else
2002 {
2003 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
2004 (LONGEST) 1));
2005 return value_assign (arg1, arg2);
2006 }
2007
2008 case UNOP_POSTINCREMENT:
2009 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2010 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2011 return arg1;
2012 else if (unop_user_defined_p (op, arg1))
2013 {
2014 return value_x_unop (arg1, op, noside);
2015 }
2016 else
2017 {
2018 arg2 = value_add (arg1, value_from_longest (builtin_type_char,
2019 (LONGEST) 1));
2020 value_assign (arg1, arg2);
2021 return arg1;
2022 }
2023
2024 case UNOP_POSTDECREMENT:
2025 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2026 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2027 return arg1;
2028 else if (unop_user_defined_p (op, arg1))
2029 {
2030 return value_x_unop (arg1, op, noside);
2031 }
2032 else
2033 {
2034 arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
2035 (LONGEST) 1));
2036 value_assign (arg1, arg2);
2037 return arg1;
2038 }
2039
2040 case OP_THIS:
2041 (*pos) += 1;
2042 return value_of_this (1);
2043
2044 case OP_OBJC_SELF:
2045 (*pos) += 1;
2046 return value_of_local ("self", 1);
2047
2048 case OP_TYPE:
2049 error (_("Attempt to use a type name as an expression"));
2050
2051 default:
2052 /* Removing this case and compiling with gcc -Wall reveals that
2053 a lot of cases are hitting this case. Some of these should
2054 probably be removed from expression.h; others are legitimate
2055 expressions which are (apparently) not fully implemented.
2056
2057 If there are any cases landing here which mean a user error,
2058 then they should be separate cases, with more descriptive
2059 error messages. */
2060
2061 error (_("\
2062 GDB does not (yet) know how to evaluate that kind of expression"));
2063 }
2064
2065 nosideret:
2066 return value_from_longest (builtin_type_long, (LONGEST) 1);
2067 }
2068 \f
2069 /* Evaluate a subexpression of EXP, at index *POS,
2070 and return the address of that subexpression.
2071 Advance *POS over the subexpression.
2072 If the subexpression isn't an lvalue, get an error.
2073 NOSIDE may be EVAL_AVOID_SIDE_EFFECTS;
2074 then only the type of the result need be correct. */
2075
2076 static struct value *
2077 evaluate_subexp_for_address (struct expression *exp, int *pos,
2078 enum noside noside)
2079 {
2080 enum exp_opcode op;
2081 int pc;
2082 struct symbol *var;
2083
2084 pc = (*pos);
2085 op = exp->elts[pc].opcode;
2086
2087 switch (op)
2088 {
2089 case UNOP_IND:
2090 (*pos)++;
2091 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
2092
2093 case UNOP_MEMVAL:
2094 (*pos) += 3;
2095 return value_cast (lookup_pointer_type (exp->elts[pc + 1].type),
2096 evaluate_subexp (NULL_TYPE, exp, pos, noside));
2097
2098 case OP_VAR_VALUE:
2099 var = exp->elts[pc + 2].symbol;
2100
2101 /* C++: The "address" of a reference should yield the address
2102 * of the object pointed to. Let value_addr() deal with it. */
2103 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_REF)
2104 goto default_case;
2105
2106 (*pos) += 4;
2107 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2108 {
2109 struct type *type =
2110 lookup_pointer_type (SYMBOL_TYPE (var));
2111 enum address_class sym_class = SYMBOL_CLASS (var);
2112
2113 if (sym_class == LOC_CONST
2114 || sym_class == LOC_CONST_BYTES
2115 || sym_class == LOC_REGISTER
2116 || sym_class == LOC_REGPARM)
2117 error (_("Attempt to take address of register or constant."));
2118
2119 return
2120 value_zero (type, not_lval);
2121 }
2122 else
2123 return
2124 locate_var_value
2125 (var,
2126 block_innermost_frame (exp->elts[pc + 1].block));
2127
2128 default:
2129 default_case:
2130 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2131 {
2132 struct value *x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2133 if (VALUE_LVAL (x) == lval_memory)
2134 return value_zero (lookup_pointer_type (value_type (x)),
2135 not_lval);
2136 else
2137 error (_("Attempt to take address of non-lval"));
2138 }
2139 return value_addr (evaluate_subexp (NULL_TYPE, exp, pos, noside));
2140 }
2141 }
2142
2143 /* Evaluate like `evaluate_subexp' except coercing arrays to pointers.
2144 When used in contexts where arrays will be coerced anyway, this is
2145 equivalent to `evaluate_subexp' but much faster because it avoids
2146 actually fetching array contents (perhaps obsolete now that we have
2147 value_lazy()).
2148
2149 Note that we currently only do the coercion for C expressions, where
2150 arrays are zero based and the coercion is correct. For other languages,
2151 with nonzero based arrays, coercion loses. Use CAST_IS_CONVERSION
2152 to decide if coercion is appropriate.
2153
2154 */
2155
2156 struct value *
2157 evaluate_subexp_with_coercion (struct expression *exp,
2158 int *pos, enum noside noside)
2159 {
2160 enum exp_opcode op;
2161 int pc;
2162 struct value *val;
2163 struct symbol *var;
2164
2165 pc = (*pos);
2166 op = exp->elts[pc].opcode;
2167
2168 switch (op)
2169 {
2170 case OP_VAR_VALUE:
2171 var = exp->elts[pc + 2].symbol;
2172 if (TYPE_CODE (check_typedef (SYMBOL_TYPE (var))) == TYPE_CODE_ARRAY
2173 && CAST_IS_CONVERSION)
2174 {
2175 (*pos) += 4;
2176 val =
2177 locate_var_value
2178 (var, block_innermost_frame (exp->elts[pc + 1].block));
2179 return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (check_typedef (SYMBOL_TYPE (var)))),
2180 val);
2181 }
2182 /* FALLTHROUGH */
2183
2184 default:
2185 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
2186 }
2187 }
2188
2189 /* Evaluate a subexpression of EXP, at index *POS,
2190 and return a value for the size of that subexpression.
2191 Advance *POS over the subexpression. */
2192
2193 static struct value *
2194 evaluate_subexp_for_sizeof (struct expression *exp, int *pos)
2195 {
2196 enum exp_opcode op;
2197 int pc;
2198 struct type *type;
2199 struct value *val;
2200
2201 pc = (*pos);
2202 op = exp->elts[pc].opcode;
2203
2204 switch (op)
2205 {
2206 /* This case is handled specially
2207 so that we avoid creating a value for the result type.
2208 If the result type is very big, it's desirable not to
2209 create a value unnecessarily. */
2210 case UNOP_IND:
2211 (*pos)++;
2212 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2213 type = check_typedef (value_type (val));
2214 if (TYPE_CODE (type) != TYPE_CODE_PTR
2215 && TYPE_CODE (type) != TYPE_CODE_REF
2216 && TYPE_CODE (type) != TYPE_CODE_ARRAY)
2217 error (_("Attempt to take contents of a non-pointer value."));
2218 type = check_typedef (TYPE_TARGET_TYPE (type));
2219 return value_from_longest (builtin_type_int, (LONGEST)
2220 TYPE_LENGTH (type));
2221
2222 case UNOP_MEMVAL:
2223 (*pos) += 3;
2224 type = check_typedef (exp->elts[pc + 1].type);
2225 return value_from_longest (builtin_type_int,
2226 (LONGEST) TYPE_LENGTH (type));
2227
2228 case OP_VAR_VALUE:
2229 (*pos) += 4;
2230 type = check_typedef (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
2231 return
2232 value_from_longest (builtin_type_int, (LONGEST) TYPE_LENGTH (type));
2233
2234 default:
2235 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2236 return value_from_longest (builtin_type_int,
2237 (LONGEST) TYPE_LENGTH (value_type (val)));
2238 }
2239 }
2240
2241 /* Parse a type expression in the string [P..P+LENGTH). */
2242
2243 struct type *
2244 parse_and_eval_type (char *p, int length)
2245 {
2246 char *tmp = (char *) alloca (length + 4);
2247 struct expression *expr;
2248 tmp[0] = '(';
2249 memcpy (tmp + 1, p, length);
2250 tmp[length + 1] = ')';
2251 tmp[length + 2] = '0';
2252 tmp[length + 3] = '\0';
2253 expr = parse_expression (tmp);
2254 if (expr->elts[0].opcode != UNOP_CAST)
2255 error (_("Internal error in eval_type."));
2256 return expr->elts[1].type;
2257 }
2258
2259 int
2260 calc_f77_array_dims (struct type *array_type)
2261 {
2262 int ndimen = 1;
2263 struct type *tmp_type;
2264
2265 if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY))
2266 error (_("Can't get dimensions for a non-array type"));
2267
2268 tmp_type = array_type;
2269
2270 while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
2271 {
2272 if (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY)
2273 ++ndimen;
2274 }
2275 return ndimen;
2276 }
This page took 0.112621 seconds and 4 git commands to generate.