Add gdb/python/python-value.c, which I forgot to do in my previous commit.
[deliverable/binutils-gdb.git] / gdb / eval.c
CommitLineData
c906108c 1/* Evaluate expressions for GDB.
1bac305b 2
6aba47ca 3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
9b254dd1 4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008
0d5de010 5 Free Software 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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 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 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include "gdb_string.h"
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "value.h"
27#include "expression.h"
28#include "target.h"
29#include "frame.h"
c5aa993b
JM
30#include "language.h" /* For CAST_IS_CONVERSION */
31#include "f-lang.h" /* for array bound stuff */
015a42b4 32#include "cp-abi.h"
04714b91 33#include "infcall.h"
a9fa03de
AF
34#include "objc-lang.h"
35#include "block.h"
5f9769d1 36#include "parser-defs.h"
d3cbe7ef 37#include "cp-support.h"
5e572bb4
DJ
38#include "ui-out.h"
39#include "exceptions.h"
123dc839 40#include "regcache.h"
029a67e4 41#include "user-regs.h"
c906108c 42
0d5de010
DJ
43#include "gdb_assert.h"
44
c5aa993b 45/* This is defined in valops.c */
c906108c
SS
46extern int overload_resolution;
47
070ad9f0
DB
48/* JYG: lookup rtti type of STRUCTOP_PTR when this is set to continue
49 on with successful lookup for member/method of the rtti type. */
50extern int objectprint;
c906108c
SS
51
52/* Prototypes for local functions. */
53
61051030 54static struct value *evaluate_subexp_for_sizeof (struct expression *, int *);
c906108c 55
61051030
AC
56static struct value *evaluate_subexp_for_address (struct expression *,
57 int *, enum noside);
c906108c 58
61051030
AC
59static struct value *evaluate_subexp (struct type *, struct expression *,
60 int *, enum noside);
c906108c 61
a14ed312 62static char *get_label (struct expression *, int *);
c906108c 63
61051030
AC
64static struct value *evaluate_struct_tuple (struct value *,
65 struct expression *, int *,
66 enum noside, int);
c906108c 67
61051030
AC
68static LONGEST init_array_element (struct value *, struct value *,
69 struct expression *, int *, enum noside,
70 LONGEST, LONGEST);
c906108c 71
61051030 72static struct value *
aa1ee363
AC
73evaluate_subexp (struct type *expect_type, struct expression *exp,
74 int *pos, enum noside noside)
c906108c 75{
5f9769d1
PH
76 return (*exp->language_defn->la_exp_desc->evaluate_exp)
77 (expect_type, exp, pos, noside);
c906108c
SS
78}
79\f
80/* Parse the string EXP as a C expression, evaluate it,
81 and return the result as a number. */
82
83CORE_ADDR
fba45db2 84parse_and_eval_address (char *exp)
c906108c
SS
85{
86 struct expression *expr = parse_expression (exp);
52f0bd74
AC
87 CORE_ADDR addr;
88 struct cleanup *old_chain =
62995fc4 89 make_cleanup (free_current_contents, &expr);
c906108c 90
1aa20aa8 91 addr = value_as_address (evaluate_expression (expr));
c906108c
SS
92 do_cleanups (old_chain);
93 return addr;
94}
95
96/* Like parse_and_eval_address but takes a pointer to a char * variable
97 and advanced that variable across the characters parsed. */
98
99CORE_ADDR
fba45db2 100parse_and_eval_address_1 (char **expptr)
c906108c 101{
c5aa993b 102 struct expression *expr = parse_exp_1 (expptr, (struct block *) 0, 0);
52f0bd74
AC
103 CORE_ADDR addr;
104 struct cleanup *old_chain =
62995fc4 105 make_cleanup (free_current_contents, &expr);
c906108c 106
1aa20aa8 107 addr = value_as_address (evaluate_expression (expr));
c906108c
SS
108 do_cleanups (old_chain);
109 return addr;
110}
111
bb518678
DT
112/* Like parse_and_eval_address, but treats the value of the expression
113 as an integer, not an address, returns a LONGEST, not a CORE_ADDR */
114LONGEST
115parse_and_eval_long (char *exp)
116{
117 struct expression *expr = parse_expression (exp);
52f0bd74
AC
118 LONGEST retval;
119 struct cleanup *old_chain =
bb518678
DT
120 make_cleanup (free_current_contents, &expr);
121
122 retval = value_as_long (evaluate_expression (expr));
123 do_cleanups (old_chain);
124 return (retval);
125}
126
61051030 127struct value *
fba45db2 128parse_and_eval (char *exp)
c906108c
SS
129{
130 struct expression *expr = parse_expression (exp);
61051030 131 struct value *val;
52f0bd74 132 struct cleanup *old_chain =
62995fc4 133 make_cleanup (free_current_contents, &expr);
c906108c
SS
134
135 val = evaluate_expression (expr);
136 do_cleanups (old_chain);
137 return val;
138}
139
140/* Parse up to a comma (or to a closeparen)
141 in the string EXPP as an expression, evaluate it, and return the value.
142 EXPP is advanced to point to the comma. */
143
61051030 144struct value *
fba45db2 145parse_to_comma_and_eval (char **expp)
c906108c
SS
146{
147 struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
61051030 148 struct value *val;
52f0bd74 149 struct cleanup *old_chain =
62995fc4 150 make_cleanup (free_current_contents, &expr);
c906108c
SS
151
152 val = evaluate_expression (expr);
153 do_cleanups (old_chain);
154 return val;
155}
156\f
157/* Evaluate an expression in internal prefix form
158 such as is constructed by parse.y.
159
160 See expression.h for info on the format of an expression. */
161
61051030 162struct value *
fba45db2 163evaluate_expression (struct expression *exp)
c906108c
SS
164{
165 int pc = 0;
166 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
167}
168
169/* Evaluate an expression, avoiding all memory references
170 and getting a value whose type alone is correct. */
171
61051030 172struct value *
fba45db2 173evaluate_type (struct expression *exp)
c906108c
SS
174{
175 int pc = 0;
176 return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
177}
178
65d12d83
TT
179/* Evaluate a subexpression, avoiding all memory references and
180 getting a value whose type alone is correct. */
181
182struct value *
183evaluate_subexpression_type (struct expression *exp, int subexp)
184{
185 return evaluate_subexp (NULL_TYPE, exp, &subexp, EVAL_AVOID_SIDE_EFFECTS);
186}
187
188/* Extract a field operation from an expression. If the subexpression
189 of EXP starting at *SUBEXP is not a structure dereference
190 operation, return NULL. Otherwise, return the name of the
191 dereferenced field, and advance *SUBEXP to point to the
192 subexpression of the left-hand-side of the dereference. This is
193 used when completing field names. */
194
195char *
196extract_field_op (struct expression *exp, int *subexp)
197{
198 int tem;
199 char *result;
200 if (exp->elts[*subexp].opcode != STRUCTOP_STRUCT
201 && exp->elts[*subexp].opcode != STRUCTOP_PTR)
202 return NULL;
203 tem = longest_to_int (exp->elts[*subexp + 1].longconst);
204 result = &exp->elts[*subexp + 2].string;
205 (*subexp) += 1 + 3 + BYTES_TO_EXP_ELEM (tem + 1);
206 return result;
207}
208
c906108c
SS
209/* If the next expression is an OP_LABELED, skips past it,
210 returning the label. Otherwise, does nothing and returns NULL. */
211
c5aa993b 212static char *
aa1ee363 213get_label (struct expression *exp, int *pos)
c906108c
SS
214{
215 if (exp->elts[*pos].opcode == OP_LABELED)
216 {
217 int pc = (*pos)++;
218 char *name = &exp->elts[pc + 2].string;
219 int tem = longest_to_int (exp->elts[pc + 1].longconst);
220 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
221 return name;
222 }
223 else
224 return NULL;
225}
226
1b831c93 227/* This function evaluates tuples (in (the deleted) Chill) or
db034ac5 228 brace-initializers (in C/C++) for structure types. */
c906108c 229
61051030
AC
230static struct value *
231evaluate_struct_tuple (struct value *struct_val,
aa1ee363
AC
232 struct expression *exp,
233 int *pos, enum noside noside, int nargs)
c906108c 234{
df407dfe 235 struct type *struct_type = check_typedef (value_type (struct_val));
c906108c
SS
236 struct type *substruct_type = struct_type;
237 struct type *field_type;
238 int fieldno = -1;
239 int variantno = -1;
240 int subfieldno = -1;
c5aa993b 241 while (--nargs >= 0)
c906108c
SS
242 {
243 int pc = *pos;
61051030 244 struct value *val = NULL;
c906108c
SS
245 int nlabels = 0;
246 int bitpos, bitsize;
0fd88904 247 bfd_byte *addr;
c5aa993b 248
c906108c
SS
249 /* Skip past the labels, and count them. */
250 while (get_label (exp, pos) != NULL)
251 nlabels++;
252
253 do
254 {
255 char *label = get_label (exp, &pc);
256 if (label)
257 {
258 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
259 fieldno++)
260 {
261 char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
edf8c5a3 262 if (field_name != NULL && strcmp (field_name, label) == 0)
c906108c
SS
263 {
264 variantno = -1;
265 subfieldno = fieldno;
266 substruct_type = struct_type;
267 goto found;
268 }
269 }
270 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
271 fieldno++)
272 {
273 char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
274 field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
275 if ((field_name == 0 || *field_name == '\0')
276 && TYPE_CODE (field_type) == TYPE_CODE_UNION)
277 {
278 variantno = 0;
279 for (; variantno < TYPE_NFIELDS (field_type);
280 variantno++)
281 {
282 substruct_type
283 = TYPE_FIELD_TYPE (field_type, variantno);
284 if (TYPE_CODE (substruct_type) == TYPE_CODE_STRUCT)
c5aa993b 285 {
c906108c 286 for (subfieldno = 0;
c5aa993b 287 subfieldno < TYPE_NFIELDS (substruct_type);
c906108c
SS
288 subfieldno++)
289 {
edf8c5a3 290 if (strcmp(TYPE_FIELD_NAME (substruct_type,
c906108c 291 subfieldno),
edf8c5a3 292 label) == 0)
c906108c
SS
293 {
294 goto found;
295 }
296 }
297 }
298 }
299 }
300 }
8a3fe4f8 301 error (_("there is no field named %s"), label);
c906108c
SS
302 found:
303 ;
304 }
305 else
306 {
307 /* Unlabelled tuple element - go to next field. */
308 if (variantno >= 0)
309 {
310 subfieldno++;
311 if (subfieldno >= TYPE_NFIELDS (substruct_type))
312 {
313 variantno = -1;
314 substruct_type = struct_type;
315 }
316 }
317 if (variantno < 0)
318 {
319 fieldno++;
16963cb6
DJ
320 /* Skip static fields. */
321 while (fieldno < TYPE_NFIELDS (struct_type)
d6a843b5
JK
322 && field_is_static (&TYPE_FIELD (struct_type,
323 fieldno)))
16963cb6 324 fieldno++;
c906108c
SS
325 subfieldno = fieldno;
326 if (fieldno >= TYPE_NFIELDS (struct_type))
8a3fe4f8 327 error (_("too many initializers"));
c906108c
SS
328 field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
329 if (TYPE_CODE (field_type) == TYPE_CODE_UNION
330 && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0')
8a3fe4f8 331 error (_("don't know which variant you want to set"));
c906108c
SS
332 }
333 }
334
335 /* Here, struct_type is the type of the inner struct,
336 while substruct_type is the type of the inner struct.
337 These are the same for normal structures, but a variant struct
338 contains anonymous union fields that contain substruct fields.
339 The value fieldno is the index of the top-level (normal or
340 anonymous union) field in struct_field, while the value
341 subfieldno is the index of the actual real (named inner) field
342 in substruct_type. */
343
344 field_type = TYPE_FIELD_TYPE (substruct_type, subfieldno);
345 if (val == 0)
346 val = evaluate_subexp (field_type, exp, pos, noside);
347
348 /* Now actually set the field in struct_val. */
349
350 /* Assign val to field fieldno. */
df407dfe 351 if (value_type (val) != field_type)
c906108c
SS
352 val = value_cast (field_type, val);
353
354 bitsize = TYPE_FIELD_BITSIZE (substruct_type, subfieldno);
355 bitpos = TYPE_FIELD_BITPOS (struct_type, fieldno);
356 if (variantno >= 0)
357 bitpos += TYPE_FIELD_BITPOS (substruct_type, subfieldno);
0fd88904 358 addr = value_contents_writeable (struct_val) + bitpos / 8;
c906108c
SS
359 if (bitsize)
360 modify_field (addr, value_as_long (val),
361 bitpos % 8, bitsize);
362 else
0fd88904 363 memcpy (addr, value_contents (val),
df407dfe 364 TYPE_LENGTH (value_type (val)));
c5aa993b
JM
365 }
366 while (--nlabels > 0);
c906108c
SS
367 }
368 return struct_val;
369}
370
db034ac5 371/* Recursive helper function for setting elements of array tuples for
1b831c93
AC
372 (the deleted) Chill. The target is ARRAY (which has bounds
373 LOW_BOUND to HIGH_BOUND); the element value is ELEMENT; EXP, POS
374 and NOSIDE are as usual. Evaluates index expresions and sets the
375 specified element(s) of ARRAY to ELEMENT. Returns last index
376 value. */
c906108c
SS
377
378static LONGEST
61051030 379init_array_element (struct value *array, struct value *element,
aa1ee363 380 struct expression *exp, int *pos,
fba45db2 381 enum noside noside, LONGEST low_bound, LONGEST high_bound)
c906108c
SS
382{
383 LONGEST index;
df407dfe 384 int element_size = TYPE_LENGTH (value_type (element));
c906108c
SS
385 if (exp->elts[*pos].opcode == BINOP_COMMA)
386 {
387 (*pos)++;
388 init_array_element (array, element, exp, pos, noside,
389 low_bound, high_bound);
390 return init_array_element (array, element,
391 exp, pos, noside, low_bound, high_bound);
392 }
393 else if (exp->elts[*pos].opcode == BINOP_RANGE)
394 {
395 LONGEST low, high;
396 (*pos)++;
397 low = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
398 high = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
399 if (low < low_bound || high > high_bound)
8a3fe4f8 400 error (_("tuple range index out of range"));
c5aa993b 401 for (index = low; index <= high; index++)
c906108c 402 {
990a07ab 403 memcpy (value_contents_raw (array)
c906108c 404 + (index - low_bound) * element_size,
0fd88904 405 value_contents (element), element_size);
c906108c
SS
406 }
407 }
408 else
409 {
410 index = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
411 if (index < low_bound || index > high_bound)
8a3fe4f8 412 error (_("tuple index out of range"));
990a07ab 413 memcpy (value_contents_raw (array) + (index - low_bound) * element_size,
0fd88904 414 value_contents (element), element_size);
c906108c
SS
415 }
416 return index;
417}
418
0b4e1325
WZ
419struct value *
420value_f90_subarray (struct value *array,
421 struct expression *exp, int *pos, enum noside noside)
422{
423 int pc = (*pos) + 1;
424 LONGEST low_bound, high_bound;
425 struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array)));
426 enum f90_range_type range_type = longest_to_int (exp->elts[pc].longconst);
427
428 *pos += 3;
429
430 if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
431 low_bound = TYPE_LOW_BOUND (range);
432 else
433 low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
434
435 if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
436 high_bound = TYPE_HIGH_BOUND (range);
437 else
438 high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
439
440 return value_slice (array, low_bound, high_bound - low_bound + 1);
441}
442
4066e646
UW
443
444/* Promote value ARG1 as appropriate before performing a unary operation
445 on this argument.
446 If the result is not appropriate for any particular language then it
447 needs to patch this function. */
448
449void
450unop_promote (const struct language_defn *language, struct gdbarch *gdbarch,
451 struct value **arg1)
452{
453 struct type *type1;
454
455 *arg1 = coerce_ref (*arg1);
456 type1 = check_typedef (value_type (*arg1));
457
458 if (is_integral_type (type1))
459 {
460 switch (language->la_language)
461 {
462 default:
463 /* Perform integral promotion for ANSI C/C++.
464 If not appropropriate for any particular language
465 it needs to modify this function. */
466 {
467 struct type *builtin_int = builtin_type (gdbarch)->builtin_int;
468 if (TYPE_LENGTH (type1) < TYPE_LENGTH (builtin_int))
469 *arg1 = value_cast (builtin_int, *arg1);
470 }
471 break;
472 }
473 }
474}
475
476/* Promote values ARG1 and ARG2 as appropriate before performing a binary
477 operation on those two operands.
478 If the result is not appropriate for any particular language then it
479 needs to patch this function. */
480
481void
482binop_promote (const struct language_defn *language, struct gdbarch *gdbarch,
483 struct value **arg1, struct value **arg2)
484{
485 struct type *promoted_type = NULL;
486 struct type *type1;
487 struct type *type2;
488
489 *arg1 = coerce_ref (*arg1);
490 *arg2 = coerce_ref (*arg2);
491
492 type1 = check_typedef (value_type (*arg1));
493 type2 = check_typedef (value_type (*arg2));
494
495 if ((TYPE_CODE (type1) != TYPE_CODE_FLT
496 && TYPE_CODE (type1) != TYPE_CODE_DECFLOAT
497 && !is_integral_type (type1))
498 || (TYPE_CODE (type2) != TYPE_CODE_FLT
499 && TYPE_CODE (type2) != TYPE_CODE_DECFLOAT
500 && !is_integral_type (type2)))
501 return;
502
503 if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT
504 || TYPE_CODE (type2) == TYPE_CODE_DECFLOAT)
505 {
506 /* No promotion required. */
507 }
508 else if (TYPE_CODE (type1) == TYPE_CODE_FLT
509 || TYPE_CODE (type2) == TYPE_CODE_FLT)
510 {
511 switch (language->la_language)
512 {
513 case language_c:
514 case language_cplus:
515 case language_asm:
516 case language_objc:
517 /* No promotion required. */
518 break;
519
520 default:
521 /* For other languages the result type is unchanged from gdb
522 version 6.7 for backward compatibility.
523 If either arg was long double, make sure that value is also long
524 double. Otherwise use double. */
525 if (TYPE_LENGTH (type1) * 8 > gdbarch_double_bit (gdbarch)
526 || TYPE_LENGTH (type2) * 8 > gdbarch_double_bit (gdbarch))
527 promoted_type = builtin_type (gdbarch)->builtin_long_double;
528 else
529 promoted_type = builtin_type (gdbarch)->builtin_double;
530 break;
531 }
532 }
533 else if (TYPE_CODE (type1) == TYPE_CODE_BOOL
534 && TYPE_CODE (type2) == TYPE_CODE_BOOL)
535 {
536 /* No promotion required. */
537 }
538 else
539 /* Integral operations here. */
540 /* FIXME: Also mixed integral/booleans, with result an integer. */
541 {
542 const struct builtin_type *builtin = builtin_type (gdbarch);
543 unsigned int promoted_len1 = TYPE_LENGTH (type1);
544 unsigned int promoted_len2 = TYPE_LENGTH (type2);
545 int is_unsigned1 = TYPE_UNSIGNED (type1);
546 int is_unsigned2 = TYPE_UNSIGNED (type2);
547 unsigned int result_len;
548 int unsigned_operation;
549
550 /* Determine type length and signedness after promotion for
551 both operands. */
552 if (promoted_len1 < TYPE_LENGTH (builtin->builtin_int))
553 {
554 is_unsigned1 = 0;
555 promoted_len1 = TYPE_LENGTH (builtin->builtin_int);
556 }
557 if (promoted_len2 < TYPE_LENGTH (builtin->builtin_int))
558 {
559 is_unsigned2 = 0;
560 promoted_len2 = TYPE_LENGTH (builtin->builtin_int);
561 }
562
563 if (promoted_len1 > promoted_len2)
564 {
565 unsigned_operation = is_unsigned1;
566 result_len = promoted_len1;
567 }
568 else if (promoted_len2 > promoted_len1)
569 {
570 unsigned_operation = is_unsigned2;
571 result_len = promoted_len2;
572 }
573 else
574 {
575 unsigned_operation = is_unsigned1 || is_unsigned2;
576 result_len = promoted_len1;
577 }
578
579 switch (language->la_language)
580 {
581 case language_c:
582 case language_cplus:
583 case language_asm:
584 case language_objc:
585 if (result_len <= TYPE_LENGTH (builtin->builtin_int))
586 {
587 promoted_type = (unsigned_operation
588 ? builtin->builtin_unsigned_int
589 : builtin->builtin_int);
590 }
591 else if (result_len <= TYPE_LENGTH (builtin->builtin_long))
592 {
593 promoted_type = (unsigned_operation
594 ? builtin->builtin_unsigned_long
595 : builtin->builtin_long);
596 }
597 else
598 {
599 promoted_type = (unsigned_operation
600 ? builtin->builtin_unsigned_long_long
601 : builtin->builtin_long_long);
602 }
603 break;
604
605 default:
606 /* For other languages the result type is unchanged from gdb
607 version 6.7 for backward compatibility.
608 If either arg was long long, make sure that value is also long
609 long. Otherwise use long. */
610 if (unsigned_operation)
611 {
612 if (result_len > gdbarch_long_bit (gdbarch) / HOST_CHAR_BIT)
613 promoted_type = builtin->builtin_unsigned_long_long;
614 else
615 promoted_type = builtin->builtin_unsigned_long;
616 }
617 else
618 {
619 if (result_len > gdbarch_long_bit (gdbarch) / HOST_CHAR_BIT)
620 promoted_type = builtin->builtin_long_long;
621 else
622 promoted_type = builtin->builtin_long;
623 }
624 break;
625 }
626 }
627
628 if (promoted_type)
629 {
630 /* Promote both operands to common type. */
631 *arg1 = value_cast (promoted_type, *arg1);
632 *arg2 = value_cast (promoted_type, *arg2);
633 }
634}
635
89eef114
UW
636static int
637ptrmath_type_p (struct type *type)
638{
639 type = check_typedef (type);
640 if (TYPE_CODE (type) == TYPE_CODE_REF)
641 type = TYPE_TARGET_TYPE (type);
642
643 switch (TYPE_CODE (type))
644 {
645 case TYPE_CODE_PTR:
646 case TYPE_CODE_FUNC:
647 return 1;
648
649 case TYPE_CODE_ARRAY:
650 return current_language->c_style_arrays;
651
652 default:
653 return 0;
654 }
655}
656
61051030 657struct value *
fba45db2 658evaluate_subexp_standard (struct type *expect_type,
aa1ee363 659 struct expression *exp, int *pos,
fba45db2 660 enum noside noside)
c906108c
SS
661{
662 enum exp_opcode op;
663 int tem, tem2, tem3;
52f0bd74 664 int pc, pc2 = 0, oldpos;
61051030
AC
665 struct value *arg1 = NULL;
666 struct value *arg2 = NULL;
667 struct value *arg3;
c906108c
SS
668 struct type *type;
669 int nargs;
61051030 670 struct value **argvec;
c5aa993b 671 int upper, lower, retcode;
c906108c
SS
672 int code;
673 int ix;
674 long mem_offset;
c5aa993b 675 struct type **arg_types;
c906108c
SS
676 int save_pos1;
677
c906108c
SS
678 pc = (*pos)++;
679 op = exp->elts[pc].opcode;
680
681 switch (op)
682 {
683 case OP_SCOPE:
684 tem = longest_to_int (exp->elts[pc + 2].longconst);
685 (*pos) += 4 + BYTES_TO_EXP_ELEM (tem + 1);
0d5de010
DJ
686 if (noside == EVAL_SKIP)
687 goto nosideret;
79c2c32d
DC
688 arg1 = value_aggregate_elt (exp->elts[pc + 1].type,
689 &exp->elts[pc + 3].string,
0d5de010 690 0, noside);
c906108c 691 if (arg1 == NULL)
8a3fe4f8 692 error (_("There is no field named %s"), &exp->elts[pc + 3].string);
c906108c
SS
693 return arg1;
694
695 case OP_LONG:
696 (*pos) += 3;
697 return value_from_longest (exp->elts[pc + 1].type,
698 exp->elts[pc + 2].longconst);
699
700 case OP_DOUBLE:
701 (*pos) += 3;
702 return value_from_double (exp->elts[pc + 1].type,
703 exp->elts[pc + 2].doubleconst);
704
27bc4d80
TJB
705 case OP_DECFLOAT:
706 (*pos) += 3;
4ef30785
TJB
707 return value_from_decfloat (exp->elts[pc + 1].type,
708 exp->elts[pc + 2].decfloatconst);
27bc4d80 709
c906108c
SS
710 case OP_VAR_VALUE:
711 (*pos) += 3;
712 if (noside == EVAL_SKIP)
713 goto nosideret;
c906108c 714
070ad9f0
DB
715 /* JYG: We used to just return value_zero of the symbol type
716 if we're asked to avoid side effects. Otherwise we return
717 value_of_variable (...). However I'm not sure if
718 value_of_variable () has any side effect.
719 We need a full value object returned here for whatis_exp ()
720 to call evaluate_type () and then pass the full value to
721 value_rtti_target_type () if we are dealing with a pointer
722 or reference to a base class and print object is on. */
c906108c 723
5e572bb4
DJ
724 {
725 volatile struct gdb_exception except;
726 struct value *ret = NULL;
727
728 TRY_CATCH (except, RETURN_MASK_ERROR)
729 {
730 ret = value_of_variable (exp->elts[pc + 2].symbol,
731 exp->elts[pc + 1].block);
732 }
733
734 if (except.reason < 0)
735 {
736 if (noside == EVAL_AVOID_SIDE_EFFECTS)
737 ret = value_zero (SYMBOL_TYPE (exp->elts[pc + 2].symbol), not_lval);
738 else
739 throw_exception (except);
740 }
741
742 return ret;
743 }
c906108c
SS
744
745 case OP_LAST:
746 (*pos) += 2;
747 return
748 access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
749
750 case OP_REGISTER:
751 {
67f3407f
DJ
752 const char *name = &exp->elts[pc + 2].string;
753 int regno;
123dc839 754 struct value *val;
67f3407f
DJ
755
756 (*pos) += 3 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
029a67e4
UW
757 regno = user_reg_map_name_to_regnum (current_gdbarch,
758 name, strlen (name));
67f3407f
DJ
759 if (regno == -1)
760 error (_("Register $%s not available."), name);
80f064a2
JB
761
762 /* In EVAL_AVOID_SIDE_EFFECTS mode, we only need to return
763 a value with the appropriate register type. Unfortunately,
764 we don't have easy access to the type of user registers.
765 So for these registers, we fetch the register value regardless
766 of the evaluation mode. */
767 if (noside == EVAL_AVOID_SIDE_EFFECTS
768 && regno < gdbarch_num_regs (current_gdbarch)
769 + gdbarch_num_pseudo_regs (current_gdbarch))
123dc839
DJ
770 val = value_zero (register_type (current_gdbarch, regno), not_lval);
771 else
772 val = value_of_register (regno, get_selected_frame (NULL));
c906108c 773 if (val == NULL)
67f3407f 774 error (_("Value of register %s not available."), name);
c906108c
SS
775 else
776 return val;
777 }
778 case OP_BOOL:
779 (*pos) += 2;
fbb06eb1
UW
780 type = language_bool_type (exp->language_defn, exp->gdbarch);
781 return value_from_longest (type, exp->elts[pc + 1].longconst);
c906108c
SS
782
783 case OP_INTERNALVAR:
784 (*pos) += 2;
785 return value_of_internalvar (exp->elts[pc + 1].internalvar);
786
787 case OP_STRING:
788 tem = longest_to_int (exp->elts[pc + 1].longconst);
789 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
790 if (noside == EVAL_SKIP)
791 goto nosideret;
792 return value_string (&exp->elts[pc + 2].string, tem);
793
a9fa03de
AF
794 case OP_OBJC_NSSTRING: /* Objective C Foundation Class NSString constant. */
795 tem = longest_to_int (exp->elts[pc + 1].longconst);
796 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
797 if (noside == EVAL_SKIP)
798 {
799 goto nosideret;
800 }
801 return (struct value *) value_nsstring (&exp->elts[pc + 2].string, tem + 1);
802
c906108c
SS
803 case OP_BITSTRING:
804 tem = longest_to_int (exp->elts[pc + 1].longconst);
805 (*pos)
806 += 3 + BYTES_TO_EXP_ELEM ((tem + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT);
807 if (noside == EVAL_SKIP)
808 goto nosideret;
809 return value_bitstring (&exp->elts[pc + 2].string, tem);
810 break;
811
812 case OP_ARRAY:
813 (*pos) += 3;
814 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
815 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
816 nargs = tem3 - tem2 + 1;
817 type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
818
819 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
820 && TYPE_CODE (type) == TYPE_CODE_STRUCT)
821 {
61051030 822 struct value *rec = allocate_value (expect_type);
990a07ab 823 memset (value_contents_raw (rec), '\0', TYPE_LENGTH (type));
c906108c
SS
824 return evaluate_struct_tuple (rec, exp, pos, noside, nargs);
825 }
826
827 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
828 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
829 {
830 struct type *range_type = TYPE_FIELD_TYPE (type, 0);
831 struct type *element_type = TYPE_TARGET_TYPE (type);
61051030 832 struct value *array = allocate_value (expect_type);
c906108c
SS
833 int element_size = TYPE_LENGTH (check_typedef (element_type));
834 LONGEST low_bound, high_bound, index;
835 if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
836 {
837 low_bound = 0;
838 high_bound = (TYPE_LENGTH (type) / element_size) - 1;
839 }
840 index = low_bound;
990a07ab 841 memset (value_contents_raw (array), 0, TYPE_LENGTH (expect_type));
c5aa993b 842 for (tem = nargs; --nargs >= 0;)
c906108c 843 {
61051030 844 struct value *element;
c906108c
SS
845 int index_pc = 0;
846 if (exp->elts[*pos].opcode == BINOP_RANGE)
847 {
848 index_pc = ++(*pos);
849 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
850 }
851 element = evaluate_subexp (element_type, exp, pos, noside);
df407dfe 852 if (value_type (element) != element_type)
c906108c
SS
853 element = value_cast (element_type, element);
854 if (index_pc)
855 {
856 int continue_pc = *pos;
857 *pos = index_pc;
858 index = init_array_element (array, element, exp, pos, noside,
859 low_bound, high_bound);
860 *pos = continue_pc;
861 }
862 else
863 {
864 if (index > high_bound)
865 /* to avoid memory corruption */
8a3fe4f8 866 error (_("Too many array elements"));
990a07ab 867 memcpy (value_contents_raw (array)
c906108c 868 + (index - low_bound) * element_size,
0fd88904 869 value_contents (element),
c906108c
SS
870 element_size);
871 }
872 index++;
873 }
874 return array;
875 }
876
877 if (expect_type != NULL_TYPE && noside != EVAL_SKIP
878 && TYPE_CODE (type) == TYPE_CODE_SET)
879 {
61051030 880 struct value *set = allocate_value (expect_type);
47b667de 881 gdb_byte *valaddr = value_contents_raw (set);
c906108c
SS
882 struct type *element_type = TYPE_INDEX_TYPE (type);
883 struct type *check_type = element_type;
884 LONGEST low_bound, high_bound;
885
886 /* get targettype of elementtype */
887 while (TYPE_CODE (check_type) == TYPE_CODE_RANGE ||
888 TYPE_CODE (check_type) == TYPE_CODE_TYPEDEF)
889 check_type = TYPE_TARGET_TYPE (check_type);
890
891 if (get_discrete_bounds (element_type, &low_bound, &high_bound) < 0)
8a3fe4f8 892 error (_("(power)set type with unknown size"));
c906108c
SS
893 memset (valaddr, '\0', TYPE_LENGTH (type));
894 for (tem = 0; tem < nargs; tem++)
895 {
896 LONGEST range_low, range_high;
897 struct type *range_low_type, *range_high_type;
61051030 898 struct value *elem_val;
c906108c
SS
899 if (exp->elts[*pos].opcode == BINOP_RANGE)
900 {
901 (*pos)++;
902 elem_val = evaluate_subexp (element_type, exp, pos, noside);
df407dfe 903 range_low_type = value_type (elem_val);
c906108c
SS
904 range_low = value_as_long (elem_val);
905 elem_val = evaluate_subexp (element_type, exp, pos, noside);
df407dfe 906 range_high_type = value_type (elem_val);
c906108c
SS
907 range_high = value_as_long (elem_val);
908 }
909 else
910 {
911 elem_val = evaluate_subexp (element_type, exp, pos, noside);
df407dfe 912 range_low_type = range_high_type = value_type (elem_val);
c906108c
SS
913 range_low = range_high = value_as_long (elem_val);
914 }
915 /* check types of elements to avoid mixture of elements from
c5aa993b
JM
916 different types. Also check if type of element is "compatible"
917 with element type of powerset */
c906108c
SS
918 if (TYPE_CODE (range_low_type) == TYPE_CODE_RANGE)
919 range_low_type = TYPE_TARGET_TYPE (range_low_type);
920 if (TYPE_CODE (range_high_type) == TYPE_CODE_RANGE)
921 range_high_type = TYPE_TARGET_TYPE (range_high_type);
922 if ((TYPE_CODE (range_low_type) != TYPE_CODE (range_high_type)) ||
923 (TYPE_CODE (range_low_type) == TYPE_CODE_ENUM &&
924 (range_low_type != range_high_type)))
925 /* different element modes */
8a3fe4f8 926 error (_("POWERSET tuple elements of different mode"));
c906108c
SS
927 if ((TYPE_CODE (check_type) != TYPE_CODE (range_low_type)) ||
928 (TYPE_CODE (check_type) == TYPE_CODE_ENUM &&
929 range_low_type != check_type))
8a3fe4f8 930 error (_("incompatible POWERSET tuple elements"));
c906108c
SS
931 if (range_low > range_high)
932 {
8a3fe4f8 933 warning (_("empty POWERSET tuple range"));
c906108c
SS
934 continue;
935 }
936 if (range_low < low_bound || range_high > high_bound)
8a3fe4f8 937 error (_("POWERSET tuple element out of range"));
c906108c
SS
938 range_low -= low_bound;
939 range_high -= low_bound;
c5aa993b 940 for (; range_low <= range_high; range_low++)
c906108c
SS
941 {
942 int bit_index = (unsigned) range_low % TARGET_CHAR_BIT;
32c9a795 943 if (gdbarch_bits_big_endian (current_gdbarch))
c906108c 944 bit_index = TARGET_CHAR_BIT - 1 - bit_index;
c5aa993b 945 valaddr[(unsigned) range_low / TARGET_CHAR_BIT]
c906108c
SS
946 |= 1 << bit_index;
947 }
948 }
949 return set;
950 }
951
f976f6d4 952 argvec = (struct value **) alloca (sizeof (struct value *) * nargs);
c906108c
SS
953 for (tem = 0; tem < nargs; tem++)
954 {
955 /* Ensure that array expressions are coerced into pointer objects. */
956 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
957 }
958 if (noside == EVAL_SKIP)
959 goto nosideret;
960 return value_array (tem2, tem3, argvec);
961
962 case TERNOP_SLICE:
963 {
61051030 964 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
c906108c 965 int lowbound
c5aa993b 966 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
c906108c 967 int upper
c5aa993b 968 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
c906108c
SS
969 if (noside == EVAL_SKIP)
970 goto nosideret;
971 return value_slice (array, lowbound, upper - lowbound + 1);
972 }
973
974 case TERNOP_SLICE_COUNT:
975 {
61051030 976 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
c906108c 977 int lowbound
c5aa993b 978 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
c906108c 979 int length
c5aa993b 980 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
c906108c
SS
981 return value_slice (array, lowbound, length);
982 }
983
984 case TERNOP_COND:
985 /* Skip third and second args to evaluate the first one. */
986 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
987 if (value_logical_not (arg1))
988 {
989 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
990 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
991 }
992 else
993 {
994 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
995 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
996 return arg2;
997 }
998
a9fa03de
AF
999 case OP_OBJC_SELECTOR:
1000 { /* Objective C @selector operator. */
1001 char *sel = &exp->elts[pc + 2].string;
1002 int len = longest_to_int (exp->elts[pc + 1].longconst);
d4dbb9c7 1003 struct type *selector_type;
a9fa03de
AF
1004
1005 (*pos) += 3 + BYTES_TO_EXP_ELEM (len + 1);
1006 if (noside == EVAL_SKIP)
1007 goto nosideret;
1008
1009 if (sel[len] != 0)
1010 sel[len] = 0; /* Make sure it's terminated. */
d4dbb9c7
UW
1011
1012 selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
1013 return value_from_longest (selector_type, lookup_child_selector (sel));
a9fa03de
AF
1014 }
1015
1016 case OP_OBJC_MSGCALL:
1017 { /* Objective C message (method) call. */
1018
c253954e
JB
1019 static CORE_ADDR responds_selector = 0;
1020 static CORE_ADDR method_selector = 0;
a9fa03de 1021
c253954e 1022 CORE_ADDR selector = 0;
a9fa03de 1023
a9fa03de
AF
1024 int struct_return = 0;
1025 int sub_no_side = 0;
1026
1027 static struct value *msg_send = NULL;
1028 static struct value *msg_send_stret = NULL;
1029 static int gnu_runtime = 0;
1030
1031 struct value *target = NULL;
1032 struct value *method = NULL;
1033 struct value *called_method = NULL;
1034
1035 struct type *selector_type = NULL;
d4dbb9c7 1036 struct type *long_type;
a9fa03de
AF
1037
1038 struct value *ret = NULL;
1039 CORE_ADDR addr = 0;
1040
1041 selector = exp->elts[pc + 1].longconst;
1042 nargs = exp->elts[pc + 2].longconst;
1043 argvec = (struct value **) alloca (sizeof (struct value *)
1044 * (nargs + 5));
1045
1046 (*pos) += 3;
1047
d4dbb9c7
UW
1048 long_type = builtin_type (exp->gdbarch)->builtin_long;
1049 selector_type = builtin_type (exp->gdbarch)->builtin_data_ptr;
1050
a9fa03de
AF
1051 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1052 sub_no_side = EVAL_NORMAL;
1053 else
1054 sub_no_side = noside;
1055
1056 target = evaluate_subexp (selector_type, exp, pos, sub_no_side);
1057
1058 if (value_as_long (target) == 0)
d4dbb9c7 1059 return value_from_longest (long_type, 0);
a9fa03de
AF
1060
1061 if (lookup_minimal_symbol ("objc_msg_lookup", 0, 0))
1062 gnu_runtime = 1;
1063
1064 /* Find the method dispatch (Apple runtime) or method lookup
1065 (GNU runtime) function for Objective-C. These will be used
1066 to lookup the symbol information for the method. If we
1067 can't find any symbol information, then we'll use these to
1068 call the method, otherwise we can call the method
1069 directly. The msg_send_stret function is used in the special
1070 case of a method that returns a structure (Apple runtime
1071 only). */
1072 if (gnu_runtime)
1073 {
d4dbb9c7 1074 struct type *type = selector_type;
c253954e
JB
1075 type = lookup_function_type (type);
1076 type = lookup_pointer_type (type);
1077 type = lookup_function_type (type);
1078 type = lookup_pointer_type (type);
1079
3e3b026f
UW
1080 msg_send = find_function_in_inferior ("objc_msg_lookup", NULL);
1081 msg_send_stret
1082 = find_function_in_inferior ("objc_msg_lookup", NULL);
c253954e
JB
1083
1084 msg_send = value_from_pointer (type, value_as_address (msg_send));
1085 msg_send_stret = value_from_pointer (type,
1086 value_as_address (msg_send_stret));
a9fa03de
AF
1087 }
1088 else
1089 {
3e3b026f 1090 msg_send = find_function_in_inferior ("objc_msgSend", NULL);
a9fa03de 1091 /* Special dispatcher for methods returning structs */
3e3b026f
UW
1092 msg_send_stret
1093 = find_function_in_inferior ("objc_msgSend_stret", NULL);
a9fa03de
AF
1094 }
1095
1096 /* Verify the target object responds to this method. The
1097 standard top-level 'Object' class uses a different name for
1098 the verification method than the non-standard, but more
1099 often used, 'NSObject' class. Make sure we check for both. */
1100
1101 responds_selector = lookup_child_selector ("respondsToSelector:");
1102 if (responds_selector == 0)
1103 responds_selector = lookup_child_selector ("respondsTo:");
1104
1105 if (responds_selector == 0)
8a3fe4f8 1106 error (_("no 'respondsTo:' or 'respondsToSelector:' method"));
a9fa03de
AF
1107
1108 method_selector = lookup_child_selector ("methodForSelector:");
1109 if (method_selector == 0)
1110 method_selector = lookup_child_selector ("methodFor:");
1111
1112 if (method_selector == 0)
8a3fe4f8 1113 error (_("no 'methodFor:' or 'methodForSelector:' method"));
a9fa03de
AF
1114
1115 /* Call the verification method, to make sure that the target
1116 class implements the desired method. */
1117
1118 argvec[0] = msg_send;
1119 argvec[1] = target;
d4dbb9c7
UW
1120 argvec[2] = value_from_longest (long_type, responds_selector);
1121 argvec[3] = value_from_longest (long_type, selector);
a9fa03de
AF
1122 argvec[4] = 0;
1123
1124 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
1125 if (gnu_runtime)
1126 {
1127 /* Function objc_msg_lookup returns a pointer. */
1128 argvec[0] = ret;
1129 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
1130 }
1131 if (value_as_long (ret) == 0)
8a3fe4f8 1132 error (_("Target does not respond to this message selector."));
a9fa03de
AF
1133
1134 /* Call "methodForSelector:" method, to get the address of a
1135 function method that implements this selector for this
1136 class. If we can find a symbol at that address, then we
1137 know the return type, parameter types etc. (that's a good
1138 thing). */
1139
1140 argvec[0] = msg_send;
1141 argvec[1] = target;
d4dbb9c7
UW
1142 argvec[2] = value_from_longest (long_type, method_selector);
1143 argvec[3] = value_from_longest (long_type, selector);
a9fa03de
AF
1144 argvec[4] = 0;
1145
1146 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
1147 if (gnu_runtime)
1148 {
1149 argvec[0] = ret;
1150 ret = call_function_by_hand (argvec[0], 3, argvec + 1);
1151 }
1152
1153 /* ret should now be the selector. */
1154
1155 addr = value_as_long (ret);
1156 if (addr)
1157 {
1158 struct symbol *sym = NULL;
1159 /* Is it a high_level symbol? */
1160
1161 sym = find_pc_function (addr);
1162 if (sym != NULL)
1163 method = value_of_variable (sym, 0);
1164 }
1165
1166 /* If we found a method with symbol information, check to see
1167 if it returns a struct. Otherwise assume it doesn't. */
1168
1169 if (method)
1170 {
1171 struct block *b;
1172 CORE_ADDR funaddr;
c055b101 1173 struct type *val_type;
a9fa03de 1174
c055b101 1175 funaddr = find_function_addr (method, &val_type);
a9fa03de
AF
1176
1177 b = block_for_pc (funaddr);
1178
c055b101 1179 CHECK_TYPEDEF (val_type);
a9fa03de 1180
c055b101
CV
1181 if ((val_type == NULL)
1182 || (TYPE_CODE(val_type) == TYPE_CODE_ERROR))
a9fa03de
AF
1183 {
1184 if (expect_type != NULL)
c055b101 1185 val_type = expect_type;
a9fa03de
AF
1186 }
1187
c055b101 1188 struct_return = using_struct_return (value_type (method), val_type);
a9fa03de
AF
1189 }
1190 else if (expect_type != NULL)
1191 {
c055b101
CV
1192 struct_return = using_struct_return (NULL,
1193 check_typedef (expect_type));
a9fa03de
AF
1194 }
1195
1196 /* Found a function symbol. Now we will substitute its
1197 value in place of the message dispatcher (obj_msgSend),
1198 so that we call the method directly instead of thru
1199 the dispatcher. The main reason for doing this is that
1200 we can now evaluate the return value and parameter values
1201 according to their known data types, in case we need to
1202 do things like promotion, dereferencing, special handling
1203 of structs and doubles, etc.
1204
1205 We want to use the type signature of 'method', but still
1206 jump to objc_msgSend() or objc_msgSend_stret() to better
1207 mimic the behavior of the runtime. */
1208
1209 if (method)
1210 {
df407dfe 1211 if (TYPE_CODE (value_type (method)) != TYPE_CODE_FUNC)
8a3fe4f8 1212 error (_("method address has symbol information with non-function type; skipping"));
a9fa03de
AF
1213 if (struct_return)
1214 VALUE_ADDRESS (method) = value_as_address (msg_send_stret);
1215 else
1216 VALUE_ADDRESS (method) = value_as_address (msg_send);
1217 called_method = method;
1218 }
1219 else
1220 {
1221 if (struct_return)
1222 called_method = msg_send_stret;
1223 else
1224 called_method = msg_send;
1225 }
1226
1227 if (noside == EVAL_SKIP)
1228 goto nosideret;
1229
1230 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1231 {
1232 /* If the return type doesn't look like a function type,
1233 call an error. This can happen if somebody tries to
1234 turn a variable into a function call. This is here
1235 because people often want to call, eg, strcmp, which
1236 gdb doesn't know is a function. If gdb isn't asked for
1237 it's opinion (ie. through "whatis"), it won't offer
1238 it. */
1239
df407dfe 1240 struct type *type = value_type (called_method);
a9fa03de
AF
1241 if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
1242 type = TYPE_TARGET_TYPE (type);
1243 type = TYPE_TARGET_TYPE (type);
1244
1245 if (type)
1246 {
1247 if ((TYPE_CODE (type) == TYPE_CODE_ERROR) && expect_type)
1248 return allocate_value (expect_type);
1249 else
1250 return allocate_value (type);
1251 }
1252 else
8a3fe4f8 1253 error (_("Expression of type other than \"method returning ...\" used as a method"));
a9fa03de
AF
1254 }
1255
1256 /* Now depending on whether we found a symbol for the method,
1257 we will either call the runtime dispatcher or the method
1258 directly. */
1259
1260 argvec[0] = called_method;
1261 argvec[1] = target;
d4dbb9c7 1262 argvec[2] = value_from_longest (long_type, selector);
a9fa03de
AF
1263 /* User-supplied arguments. */
1264 for (tem = 0; tem < nargs; tem++)
1265 argvec[tem + 3] = evaluate_subexp_with_coercion (exp, pos, noside);
1266 argvec[tem + 3] = 0;
1267
1268 if (gnu_runtime && (method != NULL))
1269 {
a9fa03de 1270 /* Function objc_msg_lookup returns a pointer. */
04624583
AC
1271 deprecated_set_value_type (argvec[0],
1272 lookup_function_type (lookup_pointer_type (value_type (argvec[0]))));
c253954e 1273 argvec[0] = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
a9fa03de 1274 }
a9fa03de 1275
c253954e 1276 ret = call_function_by_hand (argvec[0], nargs + 2, argvec + 1);
a9fa03de
AF
1277 return ret;
1278 }
1279 break;
1280
c906108c
SS
1281 case OP_FUNCALL:
1282 (*pos) += 2;
1283 op = exp->elts[*pos].opcode;
1284 nargs = longest_to_int (exp->elts[pc + 1].longconst);
1285 /* Allocate arg vector, including space for the function to be
c5aa993b 1286 called in argvec[0] and a terminating NULL */
f976f6d4 1287 argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 3));
c906108c
SS
1288 if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
1289 {
c906108c
SS
1290 nargs++;
1291 /* First, evaluate the structure into arg2 */
1292 pc2 = (*pos)++;
1293
1294 if (noside == EVAL_SKIP)
1295 goto nosideret;
1296
1297 if (op == STRUCTOP_MEMBER)
1298 {
1299 arg2 = evaluate_subexp_for_address (exp, pos, noside);
1300 }
1301 else
1302 {
1303 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1304 }
1305
1306 /* If the function is a virtual function, then the
1307 aggregate value (providing the structure) plays
1308 its part by providing the vtable. Otherwise,
1309 it is just along for the ride: call the function
1310 directly. */
1311
1312 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1313
0d5de010
DJ
1314 if (TYPE_CODE (check_typedef (value_type (arg1)))
1315 != TYPE_CODE_METHODPTR)
1316 error (_("Non-pointer-to-member value used in pointer-to-member "
1317 "construct"));
c906108c 1318
0d5de010 1319 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c906108c 1320 {
0d5de010
DJ
1321 struct type *method_type = check_typedef (value_type (arg1));
1322 arg1 = value_zero (method_type, not_lval);
c906108c
SS
1323 }
1324 else
0d5de010 1325 arg1 = cplus_method_ptr_to_value (&arg2, arg1);
c906108c
SS
1326
1327 /* Now, say which argument to start evaluating from */
1328 tem = 2;
1329 }
1330 else if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
1331 {
1332 /* Hair for method invocations */
1333 int tem2;
1334
1335 nargs++;
1336 /* First, evaluate the structure into arg2 */
1337 pc2 = (*pos)++;
1338 tem2 = longest_to_int (exp->elts[pc2 + 1].longconst);
1339 *pos += 3 + BYTES_TO_EXP_ELEM (tem2 + 1);
1340 if (noside == EVAL_SKIP)
1341 goto nosideret;
1342
1343 if (op == STRUCTOP_STRUCT)
1344 {
1345 /* If v is a variable in a register, and the user types
c5aa993b
JM
1346 v.method (), this will produce an error, because v has
1347 no address.
1348
1349 A possible way around this would be to allocate a
1350 copy of the variable on the stack, copy in the
1351 contents, call the function, and copy out the
1352 contents. I.e. convert this from call by reference
1353 to call by copy-return (or whatever it's called).
1354 However, this does not work because it is not the
1355 same: the method being called could stash a copy of
1356 the address, and then future uses through that address
1357 (after the method returns) would be expected to
1358 use the variable itself, not some copy of it. */
c906108c
SS
1359 arg2 = evaluate_subexp_for_address (exp, pos, noside);
1360 }
1361 else
1362 {
1363 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1364 }
1365 /* Now, say which argument to start evaluating from */
1366 tem = 2;
1367 }
1368 else
1369 {
1370 /* Non-method function call */
1371 save_pos1 = *pos;
1372 argvec[0] = evaluate_subexp_with_coercion (exp, pos, noside);
1373 tem = 1;
df407dfe 1374 type = value_type (argvec[0]);
c906108c
SS
1375 if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
1376 type = TYPE_TARGET_TYPE (type);
1377 if (type && TYPE_CODE (type) == TYPE_CODE_FUNC)
1378 {
1379 for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
1380 {
c5aa993b
JM
1381 /* pai: FIXME This seems to be coercing arguments before
1382 * overload resolution has been done! */
1383 argvec[tem] = evaluate_subexp (TYPE_FIELD_TYPE (type, tem - 1),
c906108c
SS
1384 exp, pos, noside);
1385 }
1386 }
1387 }
1388
1389 /* Evaluate arguments */
1390 for (; tem <= nargs; tem++)
1391 {
1392 /* Ensure that array expressions are coerced into pointer objects. */
1393 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
1394 }
1395
1396 /* signal end of arglist */
1397 argvec[tem] = 0;
1398
1399 if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR)
1400 {
1401 int static_memfuncp;
c906108c 1402 char tstr[256];
c5aa993b
JM
1403
1404 /* Method invocation : stuff "this" as first parameter */
9b013045 1405 argvec[1] = arg2;
c5aa993b
JM
1406 /* Name of method from expression */
1407 strcpy (tstr, &exp->elts[pc2 + 2].string);
1408
1409 if (overload_resolution && (exp->language_defn->la_language == language_cplus))
1410 {
1411 /* Language is C++, do some overload resolution before evaluation */
61051030 1412 struct value *valp = NULL;
c5aa993b
JM
1413
1414 /* Prepare list of argument types for overload resolution */
c2636352 1415 arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
c5aa993b 1416 for (ix = 1; ix <= nargs; ix++)
df407dfe 1417 arg_types[ix - 1] = value_type (argvec[ix]);
c5aa993b
JM
1418
1419 (void) find_overload_match (arg_types, nargs, tstr,
1420 1 /* method */ , 0 /* strict match */ ,
7f8c9282 1421 &arg2 /* the object */ , NULL,
c5aa993b
JM
1422 &valp, NULL, &static_memfuncp);
1423
1424
1425 argvec[1] = arg2; /* the ``this'' pointer */
1426 argvec[0] = valp; /* use the method found after overload resolution */
1427 }
1428 else
1429 /* Non-C++ case -- or no overload resolution */
1430 {
9b013045 1431 struct value *temp = arg2;
c5aa993b
JM
1432 argvec[0] = value_struct_elt (&temp, argvec + 1, tstr,
1433 &static_memfuncp,
1434 op == STRUCTOP_STRUCT
1435 ? "structure" : "structure pointer");
9b013045
PS
1436 /* value_struct_elt updates temp with the correct value
1437 of the ``this'' pointer if necessary, so modify argvec[1] to
1438 reflect any ``this'' changes. */
df407dfe
AC
1439 arg2 = value_from_longest (lookup_pointer_type(value_type (temp)),
1440 VALUE_ADDRESS (temp) + value_offset (temp)
13c3b5f5 1441 + value_embedded_offset (temp));
c5aa993b
JM
1442 argvec[1] = arg2; /* the ``this'' pointer */
1443 }
c906108c
SS
1444
1445 if (static_memfuncp)
1446 {
1447 argvec[1] = argvec[0];
1448 nargs--;
1449 argvec++;
1450 }
1451 }
1452 else if (op == STRUCTOP_MEMBER || op == STRUCTOP_MPTR)
1453 {
1454 argvec[1] = arg2;
1455 argvec[0] = arg1;
1456 }
917317f4 1457 else if (op == OP_VAR_VALUE)
c5aa993b 1458 {
c906108c 1459 /* Non-member function being called */
917317f4
JM
1460 /* fn: This can only be done for C++ functions. A C-style function
1461 in a C++ program, for instance, does not have the fields that
1462 are expected here */
c906108c 1463
c5aa993b
JM
1464 if (overload_resolution && (exp->language_defn->la_language == language_cplus))
1465 {
1466 /* Language is C++, do some overload resolution before evaluation */
1467 struct symbol *symp;
1468
1469 /* Prepare list of argument types for overload resolution */
c2636352 1470 arg_types = (struct type **) alloca (nargs * (sizeof (struct type *)));
c5aa993b 1471 for (ix = 1; ix <= nargs; ix++)
df407dfe 1472 arg_types[ix - 1] = value_type (argvec[ix]);
c5aa993b
JM
1473
1474 (void) find_overload_match (arg_types, nargs, NULL /* no need for name */ ,
1475 0 /* not method */ , 0 /* strict match */ ,
917317f4 1476 NULL, exp->elts[save_pos1+2].symbol /* the function */ ,
c5aa993b
JM
1477 NULL, &symp, NULL);
1478
1479 /* Now fix the expression being evaluated */
917317f4 1480 exp->elts[save_pos1+2].symbol = symp;
c5aa993b
JM
1481 argvec[0] = evaluate_subexp_with_coercion (exp, &save_pos1, noside);
1482 }
1483 else
1484 {
1485 /* Not C++, or no overload resolution allowed */
1486 /* nothing to be done; argvec already correctly set up */
1487 }
1488 }
917317f4
JM
1489 else
1490 {
1491 /* It is probably a C-style function */
1492 /* nothing to be done; argvec already correctly set up */
1493 }
c906108c
SS
1494
1495 do_call_it:
1496
1497 if (noside == EVAL_SKIP)
1498 goto nosideret;
0478d61c 1499 if (argvec[0] == NULL)
8a3fe4f8 1500 error (_("Cannot evaluate function -- may be inlined"));
c906108c
SS
1501 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1502 {
1503 /* If the return type doesn't look like a function type, call an
1504 error. This can happen if somebody tries to turn a variable into
1505 a function call. This is here because people often want to
1506 call, eg, strcmp, which gdb doesn't know is a function. If
1507 gdb isn't asked for it's opinion (ie. through "whatis"),
1508 it won't offer it. */
1509
1510 struct type *ftype =
df407dfe 1511 TYPE_TARGET_TYPE (value_type (argvec[0]));
c906108c
SS
1512
1513 if (ftype)
df407dfe 1514 return allocate_value (TYPE_TARGET_TYPE (value_type (argvec[0])));
c906108c 1515 else
8a3fe4f8 1516 error (_("Expression of type other than \"Function returning ...\" used as function"));
c906108c 1517 }
c906108c
SS
1518 return call_function_by_hand (argvec[0], nargs, argvec + 1);
1519 /* pai: FIXME save value from call_function_by_hand, then adjust pc by adjust_fn_pc if +ve */
1520
c5aa993b 1521 case OP_F77_UNDETERMINED_ARGLIST:
c906108c
SS
1522
1523 /* Remember that in F77, functions, substring ops and
1524 array subscript operations cannot be disambiguated
1525 at parse time. We have made all array subscript operations,
1526 substring operations as well as function calls come here
1527 and we now have to discover what the heck this thing actually was.
c5aa993b 1528 If it is a function, we process just as if we got an OP_FUNCALL. */
c906108c 1529
c5aa993b 1530 nargs = longest_to_int (exp->elts[pc + 1].longconst);
c906108c
SS
1531 (*pos) += 2;
1532
c5aa993b 1533 /* First determine the type code we are dealing with. */
c906108c 1534 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 1535 type = check_typedef (value_type (arg1));
c906108c
SS
1536 code = TYPE_CODE (type);
1537
df0ca547
WZ
1538 if (code == TYPE_CODE_PTR)
1539 {
1540 /* Fortran always passes variable to subroutines as pointer.
1541 So we need to look into its target type to see if it is
1542 array, string or function. If it is, we need to switch
1543 to the target value the original one points to. */
1544 struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type));
1545
1546 if (TYPE_CODE (target_type) == TYPE_CODE_ARRAY
1547 || TYPE_CODE (target_type) == TYPE_CODE_STRING
1548 || TYPE_CODE (target_type) == TYPE_CODE_FUNC)
1549 {
1550 arg1 = value_ind (arg1);
1551 type = check_typedef (value_type (arg1));
1552 code = TYPE_CODE (type);
1553 }
1554 }
1555
c5aa993b 1556 switch (code)
c906108c
SS
1557 {
1558 case TYPE_CODE_ARRAY:
0b4e1325
WZ
1559 if (exp->elts[*pos].opcode == OP_F90_RANGE)
1560 return value_f90_subarray (arg1, exp, pos, noside);
1561 else
1562 goto multi_f77_subscript;
c906108c
SS
1563
1564 case TYPE_CODE_STRING:
0b4e1325
WZ
1565 if (exp->elts[*pos].opcode == OP_F90_RANGE)
1566 return value_f90_subarray (arg1, exp, pos, noside);
1567 else
1568 {
1569 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1570 return value_subscript (arg1, arg2);
1571 }
c906108c
SS
1572
1573 case TYPE_CODE_PTR:
1574 case TYPE_CODE_FUNC:
1575 /* It's a function call. */
1576 /* Allocate arg vector, including space for the function to be
1577 called in argvec[0] and a terminating NULL */
f976f6d4 1578 argvec = (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
c906108c
SS
1579 argvec[0] = arg1;
1580 tem = 1;
1581 for (; tem <= nargs; tem++)
1582 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
c5aa993b 1583 argvec[tem] = 0; /* signal end of arglist */
c906108c
SS
1584 goto do_call_it;
1585
1586 default:
8a3fe4f8 1587 error (_("Cannot perform substring on this type"));
c906108c
SS
1588 }
1589
c906108c
SS
1590 case OP_COMPLEX:
1591 /* We have a complex number, There should be 2 floating
c5aa993b 1592 point numbers that compose it */
c806c55a 1593 (*pos) += 2;
c906108c 1594 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
c5aa993b 1595 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
c906108c 1596
c806c55a 1597 return value_literal_complex (arg1, arg2, exp->elts[pc + 1].type);
c906108c
SS
1598
1599 case STRUCTOP_STRUCT:
1600 tem = longest_to_int (exp->elts[pc + 1].longconst);
1601 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
1602 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1603 if (noside == EVAL_SKIP)
1604 goto nosideret;
1605 if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 1606 return value_zero (lookup_struct_elt_type (value_type (arg1),
c906108c
SS
1607 &exp->elts[pc + 2].string,
1608 0),
1609 lval_memory);
1610 else
1611 {
61051030 1612 struct value *temp = arg1;
c906108c
SS
1613 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
1614 NULL, "structure");
1615 }
1616
1617 case STRUCTOP_PTR:
1618 tem = longest_to_int (exp->elts[pc + 1].longconst);
1619 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
1620 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1621 if (noside == EVAL_SKIP)
1622 goto nosideret;
070ad9f0
DB
1623
1624 /* JYG: if print object is on we need to replace the base type
1625 with rtti type in order to continue on with successful
1626 lookup of member / method only available in the rtti type. */
1627 {
df407dfe 1628 struct type *type = value_type (arg1);
070ad9f0
DB
1629 struct type *real_type;
1630 int full, top, using_enc;
1631
1632 if (objectprint && TYPE_TARGET_TYPE(type) &&
1633 (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
1634 {
1635 real_type = value_rtti_target_type (arg1, &full, &top, &using_enc);
1636 if (real_type)
1637 {
1638 if (TYPE_CODE (type) == TYPE_CODE_PTR)
1639 real_type = lookup_pointer_type (real_type);
1640 else
1641 real_type = lookup_reference_type (real_type);
1642
1643 arg1 = value_cast (real_type, arg1);
1644 }
1645 }
1646 }
1647
c906108c 1648 if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 1649 return value_zero (lookup_struct_elt_type (value_type (arg1),
c906108c
SS
1650 &exp->elts[pc + 2].string,
1651 0),
1652 lval_memory);
1653 else
1654 {
61051030 1655 struct value *temp = arg1;
c906108c
SS
1656 return value_struct_elt (&temp, NULL, &exp->elts[pc + 2].string,
1657 NULL, "structure pointer");
1658 }
1659
1660 case STRUCTOP_MEMBER:
0d5de010
DJ
1661 case STRUCTOP_MPTR:
1662 if (op == STRUCTOP_MEMBER)
1663 arg1 = evaluate_subexp_for_address (exp, pos, noside);
1664 else
1665 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1666
c906108c
SS
1667 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1668
0d5de010
DJ
1669 if (noside == EVAL_SKIP)
1670 goto nosideret;
c5aa993b 1671
0d5de010
DJ
1672 type = check_typedef (value_type (arg2));
1673 switch (TYPE_CODE (type))
1674 {
1675 case TYPE_CODE_METHODPTR:
0d5de010
DJ
1676 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1677 return value_zero (TYPE_TARGET_TYPE (type), not_lval);
1678 else
1679 {
1680 arg2 = cplus_method_ptr_to_value (&arg1, arg2);
1681 gdb_assert (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR);
1682 return value_ind (arg2);
1683 }
c906108c 1684
0d5de010
DJ
1685 case TYPE_CODE_MEMBERPTR:
1686 /* Now, convert these values to an address. */
1687 arg1 = value_cast (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
1688 arg1);
c906108c 1689
0d5de010 1690 mem_offset = value_as_long (arg2);
c906108c 1691
0d5de010
DJ
1692 arg3 = value_from_pointer (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
1693 value_as_long (arg1) + mem_offset);
1694 return value_ind (arg3);
1695
1696 default:
1697 error (_("non-pointer-to-member value used in pointer-to-member construct"));
c5aa993b 1698 }
c906108c
SS
1699
1700 case BINOP_CONCAT:
1701 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1702 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1703 if (noside == EVAL_SKIP)
1704 goto nosideret;
1705 if (binop_user_defined_p (op, arg1, arg2))
1706 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1707 else
1708 return value_concat (arg1, arg2);
1709
1710 case BINOP_ASSIGN:
1711 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 1712 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c 1713
c906108c
SS
1714 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1715 return arg1;
1716 if (binop_user_defined_p (op, arg1, arg2))
1717 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1718 else
1719 return value_assign (arg1, arg2);
1720
1721 case BINOP_ASSIGN_MODIFY:
1722 (*pos) += 2;
1723 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 1724 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
1725 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
1726 return arg1;
1727 op = exp->elts[pc + 1].opcode;
1728 if (binop_user_defined_p (op, arg1, arg2))
1729 return value_x_binop (arg1, arg2, BINOP_ASSIGN_MODIFY, op, noside);
89eef114
UW
1730 else if (op == BINOP_ADD && ptrmath_type_p (value_type (arg1)))
1731 arg2 = value_ptradd (arg1, arg2);
1732 else if (op == BINOP_SUB && ptrmath_type_p (value_type (arg1)))
1733 arg2 = value_ptrsub (arg1, arg2);
c906108c 1734 else
f44316fa
UW
1735 {
1736 struct value *tmp = arg1;
1737
1738 /* For shift and integer exponentiation operations,
1739 only promote the first argument. */
1740 if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
1741 && is_integral_type (value_type (arg2)))
1742 unop_promote (exp->language_defn, exp->gdbarch, &tmp);
1743 else
1744 binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
1745
1746 arg2 = value_binop (tmp, arg2, op);
1747 }
c906108c
SS
1748 return value_assign (arg1, arg2);
1749
1750 case BINOP_ADD:
1751 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1752 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1753 if (noside == EVAL_SKIP)
1754 goto nosideret;
1755 if (binop_user_defined_p (op, arg1, arg2))
1756 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
89eef114
UW
1757 else if (ptrmath_type_p (value_type (arg1)))
1758 return value_ptradd (arg1, arg2);
1759 else if (ptrmath_type_p (value_type (arg2)))
1760 return value_ptradd (arg2, arg1);
c906108c 1761 else
f44316fa
UW
1762 {
1763 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1764 return value_binop (arg1, arg2, BINOP_ADD);
1765 }
c906108c
SS
1766
1767 case BINOP_SUB:
1768 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1769 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1770 if (noside == EVAL_SKIP)
1771 goto nosideret;
1772 if (binop_user_defined_p (op, arg1, arg2))
1773 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
89eef114
UW
1774 else if (ptrmath_type_p (value_type (arg1)))
1775 {
1776 if (ptrmath_type_p (value_type (arg2)))
1777 {
1778 /* FIXME -- should be ptrdiff_t */
1779 type = builtin_type (exp->gdbarch)->builtin_long;
1780 return value_from_longest (type, value_ptrdiff (arg1, arg2));
1781 }
1782 else
1783 return value_ptrsub (arg1, arg2);
1784 }
c906108c 1785 else
f44316fa
UW
1786 {
1787 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1788 return value_binop (arg1, arg2, BINOP_SUB);
1789 }
c906108c 1790
bd49c137 1791 case BINOP_EXP:
c906108c
SS
1792 case BINOP_MUL:
1793 case BINOP_DIV:
9b3442ee 1794 case BINOP_INTDIV:
c906108c
SS
1795 case BINOP_REM:
1796 case BINOP_MOD:
1797 case BINOP_LSH:
1798 case BINOP_RSH:
1799 case BINOP_BITWISE_AND:
1800 case BINOP_BITWISE_IOR:
1801 case BINOP_BITWISE_XOR:
1802 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1803 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1804 if (noside == EVAL_SKIP)
1805 goto nosideret;
1806 if (binop_user_defined_p (op, arg1, arg2))
1807 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
c906108c 1808 else
301f0ecf
DE
1809 {
1810 /* If EVAL_AVOID_SIDE_EFFECTS and we're dividing by zero,
1811 fudge arg2 to avoid division-by-zero, the caller is
1812 (theoretically) only looking for the type of the result. */
1813 if (noside == EVAL_AVOID_SIDE_EFFECTS
1814 /* ??? Do we really want to test for BINOP_MOD here?
1815 The implementation of value_binop gives it a well-defined
1816 value. */
1817 && (op == BINOP_DIV
1818 || op == BINOP_INTDIV
1819 || op == BINOP_REM
1820 || op == BINOP_MOD)
1821 && value_logical_not (arg2))
1822 {
1823 struct value *v_one, *retval;
1824
1825 v_one = value_one (value_type (arg2), not_lval);
f44316fa 1826 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &v_one);
301f0ecf
DE
1827 retval = value_binop (arg1, v_one, op);
1828 return retval;
1829 }
1830 else
f44316fa
UW
1831 {
1832 /* For shift and integer exponentiation operations,
1833 only promote the first argument. */
1834 if ((op == BINOP_LSH || op == BINOP_RSH || op == BINOP_EXP)
1835 && is_integral_type (value_type (arg2)))
1836 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
1837 else
1838 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
1839
1840 return value_binop (arg1, arg2, op);
1841 }
301f0ecf 1842 }
c906108c
SS
1843
1844 case BINOP_RANGE:
1845 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1846 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
1847 if (noside == EVAL_SKIP)
1848 goto nosideret;
8a3fe4f8 1849 error (_("':' operator used in invalid context"));
c906108c
SS
1850
1851 case BINOP_SUBSCRIPT:
1852 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1853 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1854 if (noside == EVAL_SKIP)
1855 goto nosideret;
1856 if (binop_user_defined_p (op, arg1, arg2))
1857 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
1858 else
c5aa993b 1859 {
c906108c
SS
1860 /* If the user attempts to subscript something that is not an
1861 array or pointer type (like a plain int variable for example),
1862 then report this as an error. */
1863
994b9211 1864 arg1 = coerce_ref (arg1);
df407dfe 1865 type = check_typedef (value_type (arg1));
c906108c
SS
1866 if (TYPE_CODE (type) != TYPE_CODE_ARRAY
1867 && TYPE_CODE (type) != TYPE_CODE_PTR)
1868 {
1869 if (TYPE_NAME (type))
8a3fe4f8 1870 error (_("cannot subscript something of type `%s'"),
c906108c
SS
1871 TYPE_NAME (type));
1872 else
8a3fe4f8 1873 error (_("cannot subscript requested type"));
c906108c
SS
1874 }
1875
1876 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1877 return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
1878 else
1879 return value_subscript (arg1, arg2);
c5aa993b 1880 }
c906108c
SS
1881
1882 case BINOP_IN:
1883 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1884 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1885 if (noside == EVAL_SKIP)
1886 goto nosideret;
fbb06eb1
UW
1887 type = language_bool_type (exp->language_defn, exp->gdbarch);
1888 return value_from_longest (type, (LONGEST) value_in (arg1, arg2));
c5aa993b 1889
c906108c
SS
1890 case MULTI_SUBSCRIPT:
1891 (*pos) += 2;
1892 nargs = longest_to_int (exp->elts[pc + 1].longconst);
1893 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
1894 while (nargs-- > 0)
1895 {
1896 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1897 /* FIXME: EVAL_SKIP handling may not be correct. */
1898 if (noside == EVAL_SKIP)
1899 {
1900 if (nargs > 0)
1901 {
1902 continue;
1903 }
1904 else
1905 {
1906 goto nosideret;
1907 }
1908 }
1909 /* FIXME: EVAL_AVOID_SIDE_EFFECTS handling may not be correct. */
1910 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1911 {
1912 /* If the user attempts to subscript something that has no target
c5aa993b
JM
1913 type (like a plain int variable for example), then report this
1914 as an error. */
1915
df407dfe 1916 type = TYPE_TARGET_TYPE (check_typedef (value_type (arg1)));
c906108c
SS
1917 if (type != NULL)
1918 {
1919 arg1 = value_zero (type, VALUE_LVAL (arg1));
1920 noside = EVAL_SKIP;
1921 continue;
1922 }
1923 else
1924 {
8a3fe4f8 1925 error (_("cannot subscript something of type `%s'"),
df407dfe 1926 TYPE_NAME (value_type (arg1)));
c906108c
SS
1927 }
1928 }
c5aa993b 1929
c906108c
SS
1930 if (binop_user_defined_p (op, arg1, arg2))
1931 {
1932 arg1 = value_x_binop (arg1, arg2, op, OP_NULL, noside);
1933 }
1934 else
1935 {
afc05acb
UW
1936 arg1 = coerce_ref (arg1);
1937 type = check_typedef (value_type (arg1));
1938
1939 switch (TYPE_CODE (type))
1940 {
1941 case TYPE_CODE_PTR:
1942 case TYPE_CODE_ARRAY:
1943 case TYPE_CODE_STRING:
1944 arg1 = value_subscript (arg1, arg2);
1945 break;
1946
1947 case TYPE_CODE_BITSTRING:
fbb06eb1
UW
1948 type = language_bool_type (exp->language_defn, exp->gdbarch);
1949 arg1 = value_bitstring_subscript (type, arg1, arg2);
afc05acb
UW
1950 break;
1951
1952 default:
1953 if (TYPE_NAME (type))
1954 error (_("cannot subscript something of type `%s'"),
1955 TYPE_NAME (type));
1956 else
1957 error (_("cannot subscript requested type"));
1958 }
c906108c
SS
1959 }
1960 }
1961 return (arg1);
1962
1963 multi_f77_subscript:
c5aa993b 1964 {
7ca2d3a3
DL
1965 int subscript_array[MAX_FORTRAN_DIMS];
1966 int array_size_array[MAX_FORTRAN_DIMS];
c5aa993b
JM
1967 int ndimensions = 1, i;
1968 struct type *tmp_type;
1969 int offset_item; /* The array offset where the item lives */
c906108c
SS
1970
1971 if (nargs > MAX_FORTRAN_DIMS)
8a3fe4f8 1972 error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS);
c906108c 1973
df407dfe 1974 tmp_type = check_typedef (value_type (arg1));
c906108c
SS
1975 ndimensions = calc_f77_array_dims (type);
1976
1977 if (nargs != ndimensions)
8a3fe4f8 1978 error (_("Wrong number of subscripts"));
c906108c
SS
1979
1980 /* Now that we know we have a legal array subscript expression
c5aa993b 1981 let us actually find out where this element exists in the array. */
c906108c 1982
c5aa993b 1983 offset_item = 0;
7ca2d3a3
DL
1984 /* Take array indices left to right */
1985 for (i = 0; i < nargs; i++)
c906108c 1986 {
c5aa993b 1987 /* Evaluate each subscript, It must be a legal integer in F77 */
c906108c
SS
1988 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
1989
c5aa993b 1990 /* Fill in the subscript and array size arrays */
c906108c
SS
1991
1992 subscript_array[i] = value_as_long (arg2);
7ca2d3a3 1993 }
c5aa993b 1994
7ca2d3a3
DL
1995 /* Internal type of array is arranged right to left */
1996 for (i = 0; i < nargs; i++)
1997 {
d78df370
JK
1998 upper = f77_get_upperbound (tmp_type);
1999 lower = f77_get_lowerbound (tmp_type);
c906108c 2000
7ca2d3a3 2001 array_size_array[nargs - i - 1] = upper - lower + 1;
c5aa993b
JM
2002
2003 /* Zero-normalize subscripts so that offsetting will work. */
2004
7ca2d3a3 2005 subscript_array[nargs - i - 1] -= lower;
c906108c
SS
2006
2007 /* If we are at the bottom of a multidimensional
2008 array type then keep a ptr to the last ARRAY
2009 type around for use when calling value_subscript()
2010 below. This is done because we pretend to value_subscript
2011 that we actually have a one-dimensional array
2012 of base element type that we apply a simple
c5aa993b 2013 offset to. */
c906108c 2014
7ca2d3a3 2015 if (i < nargs - 1)
c5aa993b 2016 tmp_type = check_typedef (TYPE_TARGET_TYPE (tmp_type));
c906108c
SS
2017 }
2018
2019 /* Now let us calculate the offset for this item */
2020
7ca2d3a3 2021 offset_item = subscript_array[ndimensions - 1];
c5aa993b 2022
7ca2d3a3 2023 for (i = ndimensions - 1; i > 0; --i)
c5aa993b 2024 offset_item =
7ca2d3a3 2025 array_size_array[i - 1] * offset_item + subscript_array[i - 1];
c906108c 2026
962d6d93
DL
2027 /* Construct a value node with the value of the offset */
2028
6d84d3d8 2029 arg2 = value_from_longest (builtin_type_int32, offset_item);
962d6d93 2030
c906108c
SS
2031 /* Let us now play a dirty trick: we will take arg1
2032 which is a value node pointing to the topmost level
2033 of the multidimensional array-set and pretend
2034 that it is actually a array of the final element
2035 type, this will ensure that value_subscript()
2036 returns the correct type value */
2037
04624583 2038 deprecated_set_value_type (arg1, tmp_type);
9eec4d1e 2039 return value_subscripted_rvalue (arg1, arg2, 0);
c906108c
SS
2040 }
2041
2042 case BINOP_LOGICAL_AND:
2043 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2044 if (noside == EVAL_SKIP)
2045 {
2046 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2047 goto nosideret;
2048 }
c5aa993b 2049
c906108c
SS
2050 oldpos = *pos;
2051 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2052 *pos = oldpos;
c5aa993b
JM
2053
2054 if (binop_user_defined_p (op, arg1, arg2))
c906108c
SS
2055 {
2056 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2057 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2058 }
2059 else
2060 {
2061 tem = value_logical_not (arg1);
2062 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
2063 (tem ? EVAL_SKIP : noside));
fbb06eb1
UW
2064 type = language_bool_type (exp->language_defn, exp->gdbarch);
2065 return value_from_longest (type,
c5aa993b 2066 (LONGEST) (!tem && !value_logical_not (arg2)));
c906108c
SS
2067 }
2068
2069 case BINOP_LOGICAL_OR:
2070 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2071 if (noside == EVAL_SKIP)
2072 {
2073 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2074 goto nosideret;
2075 }
c5aa993b 2076
c906108c
SS
2077 oldpos = *pos;
2078 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
2079 *pos = oldpos;
c5aa993b
JM
2080
2081 if (binop_user_defined_p (op, arg1, arg2))
c906108c
SS
2082 {
2083 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2084 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2085 }
2086 else
2087 {
2088 tem = value_logical_not (arg1);
2089 arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
2090 (!tem ? EVAL_SKIP : noside));
fbb06eb1
UW
2091 type = language_bool_type (exp->language_defn, exp->gdbarch);
2092 return value_from_longest (type,
c5aa993b 2093 (LONGEST) (!tem || !value_logical_not (arg2)));
c906108c
SS
2094 }
2095
2096 case BINOP_EQUAL:
2097 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2098 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2099 if (noside == EVAL_SKIP)
2100 goto nosideret;
2101 if (binop_user_defined_p (op, arg1, arg2))
2102 {
2103 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2104 }
2105 else
2106 {
f44316fa 2107 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2108 tem = value_equal (arg1, arg2);
fbb06eb1
UW
2109 type = language_bool_type (exp->language_defn, exp->gdbarch);
2110 return value_from_longest (type, (LONGEST) tem);
c906108c
SS
2111 }
2112
2113 case BINOP_NOTEQUAL:
2114 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2115 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2116 if (noside == EVAL_SKIP)
2117 goto nosideret;
2118 if (binop_user_defined_p (op, arg1, arg2))
2119 {
2120 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2121 }
2122 else
2123 {
f44316fa 2124 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2125 tem = value_equal (arg1, arg2);
fbb06eb1
UW
2126 type = language_bool_type (exp->language_defn, exp->gdbarch);
2127 return value_from_longest (type, (LONGEST) ! tem);
c906108c
SS
2128 }
2129
2130 case BINOP_LESS:
2131 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2132 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2133 if (noside == EVAL_SKIP)
2134 goto nosideret;
2135 if (binop_user_defined_p (op, arg1, arg2))
2136 {
2137 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2138 }
2139 else
2140 {
f44316fa 2141 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2142 tem = value_less (arg1, arg2);
fbb06eb1
UW
2143 type = language_bool_type (exp->language_defn, exp->gdbarch);
2144 return value_from_longest (type, (LONGEST) tem);
c906108c
SS
2145 }
2146
2147 case BINOP_GTR:
2148 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2149 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2150 if (noside == EVAL_SKIP)
2151 goto nosideret;
2152 if (binop_user_defined_p (op, arg1, arg2))
2153 {
2154 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2155 }
2156 else
2157 {
f44316fa 2158 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2159 tem = value_less (arg2, arg1);
fbb06eb1
UW
2160 type = language_bool_type (exp->language_defn, exp->gdbarch);
2161 return value_from_longest (type, (LONGEST) tem);
c906108c
SS
2162 }
2163
2164 case BINOP_GEQ:
2165 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2166 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2167 if (noside == EVAL_SKIP)
2168 goto nosideret;
2169 if (binop_user_defined_p (op, arg1, arg2))
2170 {
2171 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2172 }
2173 else
2174 {
f44316fa 2175 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2176 tem = value_less (arg2, arg1) || value_equal (arg1, arg2);
fbb06eb1
UW
2177 type = language_bool_type (exp->language_defn, exp->gdbarch);
2178 return value_from_longest (type, (LONGEST) tem);
c906108c
SS
2179 }
2180
2181 case BINOP_LEQ:
2182 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 2183 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
c906108c
SS
2184 if (noside == EVAL_SKIP)
2185 goto nosideret;
2186 if (binop_user_defined_p (op, arg1, arg2))
2187 {
2188 return value_x_binop (arg1, arg2, op, OP_NULL, noside);
2189 }
c5aa993b 2190 else
c906108c 2191 {
f44316fa 2192 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
c906108c 2193 tem = value_less (arg1, arg2) || value_equal (arg1, arg2);
fbb06eb1
UW
2194 type = language_bool_type (exp->language_defn, exp->gdbarch);
2195 return value_from_longest (type, (LONGEST) tem);
c906108c
SS
2196 }
2197
2198 case BINOP_REPEAT:
2199 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2200 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2201 if (noside == EVAL_SKIP)
2202 goto nosideret;
df407dfe 2203 type = check_typedef (value_type (arg2));
c906108c 2204 if (TYPE_CODE (type) != TYPE_CODE_INT)
8a3fe4f8 2205 error (_("Non-integral right operand for \"@\" operator."));
c906108c
SS
2206 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2207 {
df407dfe 2208 return allocate_repeat_value (value_type (arg1),
c5aa993b 2209 longest_to_int (value_as_long (arg2)));
c906108c
SS
2210 }
2211 else
2212 return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
2213
2214 case BINOP_COMMA:
2215 evaluate_subexp (NULL_TYPE, exp, pos, noside);
2216 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
2217
36e9969c
NS
2218 case UNOP_PLUS:
2219 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2220 if (noside == EVAL_SKIP)
2221 goto nosideret;
2222 if (unop_user_defined_p (op, arg1))
2223 return value_x_unop (arg1, op, noside);
2224 else
f44316fa
UW
2225 {
2226 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
2227 return value_pos (arg1);
2228 }
36e9969c 2229
c906108c
SS
2230 case UNOP_NEG:
2231 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2232 if (noside == EVAL_SKIP)
2233 goto nosideret;
2234 if (unop_user_defined_p (op, arg1))
2235 return value_x_unop (arg1, op, noside);
2236 else
f44316fa
UW
2237 {
2238 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
2239 return value_neg (arg1);
2240 }
c906108c
SS
2241
2242 case UNOP_COMPLEMENT:
2243 /* C++: check for and handle destructor names. */
2244 op = exp->elts[*pos].opcode;
2245
2246 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2247 if (noside == EVAL_SKIP)
2248 goto nosideret;
2249 if (unop_user_defined_p (UNOP_COMPLEMENT, arg1))
2250 return value_x_unop (arg1, UNOP_COMPLEMENT, noside);
2251 else
f44316fa
UW
2252 {
2253 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
2254 return value_complement (arg1);
2255 }
c906108c
SS
2256
2257 case UNOP_LOGICAL_NOT:
2258 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2259 if (noside == EVAL_SKIP)
2260 goto nosideret;
2261 if (unop_user_defined_p (op, arg1))
2262 return value_x_unop (arg1, op, noside);
2263 else
fbb06eb1
UW
2264 {
2265 type = language_bool_type (exp->language_defn, exp->gdbarch);
2266 return value_from_longest (type, (LONGEST) value_logical_not (arg1));
2267 }
c906108c
SS
2268
2269 case UNOP_IND:
2270 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
c5aa993b 2271 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
c906108c 2272 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
0d5de010
DJ
2273 type = check_typedef (value_type (arg1));
2274 if (TYPE_CODE (type) == TYPE_CODE_METHODPTR
2275 || TYPE_CODE (type) == TYPE_CODE_MEMBERPTR)
8a3fe4f8 2276 error (_("Attempt to dereference pointer to member without an object"));
c906108c
SS
2277 if (noside == EVAL_SKIP)
2278 goto nosideret;
2279 if (unop_user_defined_p (op, arg1))
2280 return value_x_unop (arg1, op, noside);
2281 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
2282 {
df407dfe 2283 type = check_typedef (value_type (arg1));
c906108c
SS
2284 if (TYPE_CODE (type) == TYPE_CODE_PTR
2285 || TYPE_CODE (type) == TYPE_CODE_REF
c5aa993b 2286 /* In C you can dereference an array to get the 1st elt. */
c906108c 2287 || TYPE_CODE (type) == TYPE_CODE_ARRAY
c5aa993b 2288 )
c906108c
SS
2289 return value_zero (TYPE_TARGET_TYPE (type),
2290 lval_memory);
2291 else if (TYPE_CODE (type) == TYPE_CODE_INT)
2292 /* GDB allows dereferencing an int. */
22fe0fbb
UW
2293 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
2294 lval_memory);
c906108c 2295 else
8a3fe4f8 2296 error (_("Attempt to take contents of a non-pointer value."));
c906108c 2297 }
22fe0fbb
UW
2298
2299 /* Allow * on an integer so we can cast it to whatever we want.
2300 This returns an int, which seems like the most C-like thing to
2301 do. "long long" variables are rare enough that
2302 BUILTIN_TYPE_LONGEST would seem to be a mistake. */
2303 if (TYPE_CODE (type) == TYPE_CODE_INT)
2304 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
2305 (CORE_ADDR) value_as_address (arg1));
c906108c
SS
2306 return value_ind (arg1);
2307
2308 case UNOP_ADDR:
2309 /* C++: check for and handle pointer to members. */
c5aa993b 2310
c906108c
SS
2311 op = exp->elts[*pos].opcode;
2312
2313 if (noside == EVAL_SKIP)
2314 {
0d5de010 2315 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
c906108c
SS
2316 goto nosideret;
2317 }
c5aa993b
JM
2318 else
2319 {
61051030 2320 struct value *retvalp = evaluate_subexp_for_address (exp, pos, noside);
c5aa993b
JM
2321 return retvalp;
2322 }
2323
c906108c
SS
2324 case UNOP_SIZEOF:
2325 if (noside == EVAL_SKIP)
2326 {
2327 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
2328 goto nosideret;
2329 }
2330 return evaluate_subexp_for_sizeof (exp, pos);
2331
2332 case UNOP_CAST:
2333 (*pos) += 2;
2334 type = exp->elts[pc + 1].type;
2335 arg1 = evaluate_subexp (type, exp, pos, noside);
2336 if (noside == EVAL_SKIP)
2337 goto nosideret;
df407dfe 2338 if (type != value_type (arg1))
c906108c
SS
2339 arg1 = value_cast (type, arg1);
2340 return arg1;
2341
2342 case UNOP_MEMVAL:
2343 (*pos) += 2;
2344 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2345 if (noside == EVAL_SKIP)
2346 goto nosideret;
2347 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2348 return value_zero (exp->elts[pc + 1].type, lval_memory);
2349 else
2350 return value_at_lazy (exp->elts[pc + 1].type,
00a4c844 2351 value_as_address (arg1));
c906108c 2352
9e35dae4
DJ
2353 case UNOP_MEMVAL_TLS:
2354 (*pos) += 3;
2355 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2356 if (noside == EVAL_SKIP)
2357 goto nosideret;
2358 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2359 return value_zero (exp->elts[pc + 2].type, lval_memory);
2360 else
2361 {
2362 CORE_ADDR tls_addr;
2363 tls_addr = target_translate_tls_address (exp->elts[pc + 1].objfile,
2364 value_as_address (arg1));
2365 return value_at_lazy (exp->elts[pc + 2].type, tls_addr);
2366 }
2367
c906108c
SS
2368 case UNOP_PREINCREMENT:
2369 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2370 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2371 return arg1;
2372 else if (unop_user_defined_p (op, arg1))
2373 {
2374 return value_x_unop (arg1, op, noside);
2375 }
2376 else
2377 {
89eef114
UW
2378 arg2 = value_from_longest (builtin_type_uint8, (LONGEST) 1);
2379 if (ptrmath_type_p (value_type (arg1)))
2380 arg2 = value_ptradd (arg1, arg2);
2381 else
f44316fa
UW
2382 {
2383 struct value *tmp = arg1;
2384 binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
2385 arg2 = value_binop (tmp, arg2, BINOP_ADD);
2386 }
89eef114 2387
c906108c
SS
2388 return value_assign (arg1, arg2);
2389 }
2390
2391 case UNOP_PREDECREMENT:
2392 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2393 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2394 return arg1;
2395 else if (unop_user_defined_p (op, arg1))
2396 {
2397 return value_x_unop (arg1, op, noside);
2398 }
2399 else
2400 {
89eef114
UW
2401 arg2 = value_from_longest (builtin_type_uint8, (LONGEST) 1);
2402 if (ptrmath_type_p (value_type (arg1)))
2403 arg2 = value_ptrsub (arg1, arg2);
2404 else
f44316fa
UW
2405 {
2406 struct value *tmp = arg1;
2407 binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
2408 arg2 = value_binop (tmp, arg2, BINOP_SUB);
2409 }
89eef114 2410
c906108c
SS
2411 return value_assign (arg1, arg2);
2412 }
2413
2414 case UNOP_POSTINCREMENT:
2415 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2416 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2417 return arg1;
2418 else if (unop_user_defined_p (op, arg1))
2419 {
2420 return value_x_unop (arg1, op, noside);
2421 }
2422 else
2423 {
89eef114
UW
2424 arg2 = value_from_longest (builtin_type_uint8, (LONGEST) 1);
2425 if (ptrmath_type_p (value_type (arg1)))
2426 arg2 = value_ptradd (arg1, arg2);
2427 else
f44316fa
UW
2428 {
2429 struct value *tmp = arg1;
2430 binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
2431 arg2 = value_binop (tmp, arg2, BINOP_ADD);
2432 }
89eef114 2433
c906108c
SS
2434 value_assign (arg1, arg2);
2435 return arg1;
2436 }
2437
2438 case UNOP_POSTDECREMENT:
2439 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
2440 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
2441 return arg1;
2442 else if (unop_user_defined_p (op, arg1))
2443 {
2444 return value_x_unop (arg1, op, noside);
2445 }
2446 else
2447 {
89eef114
UW
2448 arg2 = value_from_longest (builtin_type_uint8, (LONGEST) 1);
2449 if (ptrmath_type_p (value_type (arg1)))
2450 arg2 = value_ptrsub (arg1, arg2);
2451 else
f44316fa
UW
2452 {
2453 struct value *tmp = arg1;
2454 binop_promote (exp->language_defn, exp->gdbarch, &tmp, &arg2);
2455 arg2 = value_binop (tmp, arg2, BINOP_SUB);
2456 }
89eef114 2457
c906108c
SS
2458 value_assign (arg1, arg2);
2459 return arg1;
2460 }
c5aa993b 2461
c906108c
SS
2462 case OP_THIS:
2463 (*pos) += 1;
2464 return value_of_this (1);
2465
a9fa03de
AF
2466 case OP_OBJC_SELF:
2467 (*pos) += 1;
2468 return value_of_local ("self", 1);
2469
c906108c 2470 case OP_TYPE:
d843c49c
FF
2471 /* The value is not supposed to be used. This is here to make it
2472 easier to accommodate expressions that contain types. */
2473 (*pos) += 2;
2474 if (noside == EVAL_SKIP)
2475 goto nosideret;
2476 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
2477 return allocate_value (exp->elts[pc + 1].type);
2478 else
2479 error (_("Attempt to use a type name as an expression"));
c906108c
SS
2480
2481 default:
2482 /* Removing this case and compiling with gcc -Wall reveals that
c5aa993b 2483 a lot of cases are hitting this case. Some of these should
2df3850c
JM
2484 probably be removed from expression.h; others are legitimate
2485 expressions which are (apparently) not fully implemented.
c906108c 2486
c5aa993b
JM
2487 If there are any cases landing here which mean a user error,
2488 then they should be separate cases, with more descriptive
2489 error messages. */
c906108c 2490
8a3fe4f8
AC
2491 error (_("\
2492GDB does not (yet) know how to evaluate that kind of expression"));
c906108c
SS
2493 }
2494
c5aa993b 2495nosideret:
cb18ec49 2496 return value_from_longest (builtin_type_int8, (LONGEST) 1);
c906108c
SS
2497}
2498\f
2499/* Evaluate a subexpression of EXP, at index *POS,
2500 and return the address of that subexpression.
2501 Advance *POS over the subexpression.
2502 If the subexpression isn't an lvalue, get an error.
2503 NOSIDE may be EVAL_AVOID_SIDE_EFFECTS;
2504 then only the type of the result need be correct. */
2505
61051030 2506static struct value *
aa1ee363 2507evaluate_subexp_for_address (struct expression *exp, int *pos,
fba45db2 2508 enum noside noside)
c906108c
SS
2509{
2510 enum exp_opcode op;
52f0bd74 2511 int pc;
c906108c 2512 struct symbol *var;
ab5c9f60 2513 struct value *x;
0d5de010 2514 int tem;
c906108c
SS
2515
2516 pc = (*pos);
2517 op = exp->elts[pc].opcode;
2518
2519 switch (op)
2520 {
2521 case UNOP_IND:
2522 (*pos)++;
ab5c9f60
DJ
2523 x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
2524
2525 /* We can't optimize out "&*" if there's a user-defined operator*. */
2526 if (unop_user_defined_p (op, x))
2527 {
2528 x = value_x_unop (x, op, noside);
0d5de010 2529 goto default_case_after_eval;
ab5c9f60
DJ
2530 }
2531
2532 return x;
c906108c
SS
2533
2534 case UNOP_MEMVAL:
2535 (*pos) += 3;
2536 return value_cast (lookup_pointer_type (exp->elts[pc + 1].type),
2537 evaluate_subexp (NULL_TYPE, exp, pos, noside));
2538
2539 case OP_VAR_VALUE:
2540 var = exp->elts[pc + 2].symbol;
2541
2542 /* C++: The "address" of a reference should yield the address
2543 * of the object pointed to. Let value_addr() deal with it. */
2544 if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_REF)
c5aa993b 2545 goto default_case;
c906108c
SS
2546
2547 (*pos) += 4;
2548 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2549 {
2550 struct type *type =
c5aa993b 2551 lookup_pointer_type (SYMBOL_TYPE (var));
c906108c
SS
2552 enum address_class sym_class = SYMBOL_CLASS (var);
2553
2554 if (sym_class == LOC_CONST
2555 || sym_class == LOC_CONST_BYTES
2a2d4dc3 2556 || sym_class == LOC_REGISTER)
8a3fe4f8 2557 error (_("Attempt to take address of register or constant."));
c906108c 2558
c5aa993b
JM
2559 return
2560 value_zero (type, not_lval);
c906108c 2561 }
ceef53c1 2562 else if (symbol_read_needs_frame (var))
c906108c
SS
2563 return
2564 locate_var_value
c5aa993b
JM
2565 (var,
2566 block_innermost_frame (exp->elts[pc + 1].block));
ceef53c1
JB
2567 else
2568 return locate_var_value (var, NULL);
c906108c 2569
0d5de010
DJ
2570 case OP_SCOPE:
2571 tem = longest_to_int (exp->elts[pc + 2].longconst);
2572 (*pos) += 5 + BYTES_TO_EXP_ELEM (tem + 1);
2573 x = value_aggregate_elt (exp->elts[pc + 1].type,
2574 &exp->elts[pc + 3].string,
2575 1, noside);
2576 if (x == NULL)
2577 error (_("There is no field named %s"), &exp->elts[pc + 3].string);
2578 return x;
2579
c906108c
SS
2580 default:
2581 default_case:
ab5c9f60 2582 x = evaluate_subexp (NULL_TYPE, exp, pos, noside);
0d5de010 2583 default_case_after_eval:
c906108c
SS
2584 if (noside == EVAL_AVOID_SIDE_EFFECTS)
2585 {
0d5de010
DJ
2586 struct type *type = check_typedef (value_type (x));
2587
63092375 2588 if (VALUE_LVAL (x) == lval_memory || value_must_coerce_to_target (x))
df407dfe 2589 return value_zero (lookup_pointer_type (value_type (x)),
c906108c 2590 not_lval);
0d5de010
DJ
2591 else if (TYPE_CODE (type) == TYPE_CODE_REF)
2592 return value_zero (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2593 not_lval);
c906108c 2594 else
63092375 2595 error (_("Attempt to take address of value not located in memory."));
c906108c 2596 }
ab5c9f60 2597 return value_addr (x);
c906108c
SS
2598 }
2599}
2600
2601/* Evaluate like `evaluate_subexp' except coercing arrays to pointers.
2602 When used in contexts where arrays will be coerced anyway, this is
2603 equivalent to `evaluate_subexp' but much faster because it avoids
2604 actually fetching array contents (perhaps obsolete now that we have
d69fe07e 2605 value_lazy()).
c906108c
SS
2606
2607 Note that we currently only do the coercion for C expressions, where
2608 arrays are zero based and the coercion is correct. For other languages,
2609 with nonzero based arrays, coercion loses. Use CAST_IS_CONVERSION
2610 to decide if coercion is appropriate.
2611
c5aa993b 2612 */
c906108c 2613
61051030 2614struct value *
aa1ee363
AC
2615evaluate_subexp_with_coercion (struct expression *exp,
2616 int *pos, enum noside noside)
c906108c 2617{
52f0bd74
AC
2618 enum exp_opcode op;
2619 int pc;
61051030 2620 struct value *val;
c906108c
SS
2621 struct symbol *var;
2622
2623 pc = (*pos);
2624 op = exp->elts[pc].opcode;
2625
2626 switch (op)
2627 {
2628 case OP_VAR_VALUE:
2629 var = exp->elts[pc + 2].symbol;
2630 if (TYPE_CODE (check_typedef (SYMBOL_TYPE (var))) == TYPE_CODE_ARRAY
2631 && CAST_IS_CONVERSION)
2632 {
2633 (*pos) += 4;
2634 val =
2635 locate_var_value
c5aa993b 2636 (var, block_innermost_frame (exp->elts[pc + 1].block));
751a959b 2637 return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (check_typedef (SYMBOL_TYPE (var)))),
c906108c
SS
2638 val);
2639 }
2640 /* FALLTHROUGH */
2641
2642 default:
2643 return evaluate_subexp (NULL_TYPE, exp, pos, noside);
2644 }
2645}
2646
2647/* Evaluate a subexpression of EXP, at index *POS,
2648 and return a value for the size of that subexpression.
2649 Advance *POS over the subexpression. */
2650
61051030 2651static struct value *
aa1ee363 2652evaluate_subexp_for_sizeof (struct expression *exp, int *pos)
c906108c 2653{
98b90dd8
UW
2654 /* FIXME: This should be size_t. */
2655 struct type *size_type = builtin_type (exp->gdbarch)->builtin_int;
c906108c 2656 enum exp_opcode op;
52f0bd74 2657 int pc;
c906108c 2658 struct type *type;
61051030 2659 struct value *val;
c906108c
SS
2660
2661 pc = (*pos);
2662 op = exp->elts[pc].opcode;
2663
2664 switch (op)
2665 {
2666 /* This case is handled specially
c5aa993b
JM
2667 so that we avoid creating a value for the result type.
2668 If the result type is very big, it's desirable not to
2669 create a value unnecessarily. */
c906108c
SS
2670 case UNOP_IND:
2671 (*pos)++;
2672 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
df407dfe 2673 type = check_typedef (value_type (val));
c906108c
SS
2674 if (TYPE_CODE (type) != TYPE_CODE_PTR
2675 && TYPE_CODE (type) != TYPE_CODE_REF
2676 && TYPE_CODE (type) != TYPE_CODE_ARRAY)
8a3fe4f8 2677 error (_("Attempt to take contents of a non-pointer value."));
c906108c 2678 type = check_typedef (TYPE_TARGET_TYPE (type));
98b90dd8 2679 return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
c906108c
SS
2680
2681 case UNOP_MEMVAL:
2682 (*pos) += 3;
2683 type = check_typedef (exp->elts[pc + 1].type);
98b90dd8 2684 return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
c906108c
SS
2685
2686 case OP_VAR_VALUE:
2687 (*pos) += 4;
2688 type = check_typedef (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
2689 return
98b90dd8 2690 value_from_longest (size_type, (LONGEST) TYPE_LENGTH (type));
c906108c
SS
2691
2692 default:
2693 val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
98b90dd8 2694 return value_from_longest (size_type,
df407dfe 2695 (LONGEST) TYPE_LENGTH (value_type (val)));
c906108c
SS
2696 }
2697}
2698
2699/* Parse a type expression in the string [P..P+LENGTH). */
2700
2701struct type *
fba45db2 2702parse_and_eval_type (char *p, int length)
c906108c 2703{
c5aa993b
JM
2704 char *tmp = (char *) alloca (length + 4);
2705 struct expression *expr;
2706 tmp[0] = '(';
2707 memcpy (tmp + 1, p, length);
2708 tmp[length + 1] = ')';
2709 tmp[length + 2] = '0';
2710 tmp[length + 3] = '\0';
2711 expr = parse_expression (tmp);
2712 if (expr->elts[0].opcode != UNOP_CAST)
8a3fe4f8 2713 error (_("Internal error in eval_type."));
c5aa993b 2714 return expr->elts[1].type;
c906108c
SS
2715}
2716
2717int
fba45db2 2718calc_f77_array_dims (struct type *array_type)
c906108c
SS
2719{
2720 int ndimen = 1;
2721 struct type *tmp_type;
2722
c5aa993b 2723 if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY))
8a3fe4f8 2724 error (_("Can't get dimensions for a non-array type"));
c5aa993b
JM
2725
2726 tmp_type = array_type;
c906108c
SS
2727
2728 while ((tmp_type = TYPE_TARGET_TYPE (tmp_type)))
2729 {
2730 if (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY)
2731 ++ndimen;
2732 }
c5aa993b 2733 return ndimen;
c906108c 2734}
This page took 0.794231 seconds and 4 git commands to generate.