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