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