OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [eval.c] - Blame information for rev 1772

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.