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