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