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