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