2010-05-11 Pierre Muller <muller@ics.u-strasbg.fr>
[platform/upstream/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.  Copyright (C)
2
3    1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007, 2008,
4    2009 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21
22 #include "defs.h"
23 #include <stdio.h>
24 #include "gdb_string.h"
25 #include <ctype.h>
26 #include <stdarg.h>
27 #include "demangle.h"
28 #include "gdb_regex.h"
29 #include "frame.h"
30 #include "symtab.h"
31 #include "gdbtypes.h"
32 #include "gdbcmd.h"
33 #include "expression.h"
34 #include "parser-defs.h"
35 #include "language.h"
36 #include "c-lang.h"
37 #include "inferior.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40 #include "breakpoint.h"
41 #include "gdbcore.h"
42 #include "hashtab.h"
43 #include "gdb_obstack.h"
44 #include "ada-lang.h"
45 #include "completer.h"
46 #include "gdb_stat.h"
47 #ifdef UI_OUT
48 #include "ui-out.h"
49 #endif
50 #include "block.h"
51 #include "infcall.h"
52 #include "dictionary.h"
53 #include "exceptions.h"
54 #include "annotate.h"
55 #include "valprint.h"
56 #include "source.h"
57 #include "observer.h"
58 #include "vec.h"
59 #include "stack.h"
60
61 #include "psymtab.h"
62
63 /* Define whether or not the C operator '/' truncates towards zero for
64    differently signed operands (truncation direction is undefined in C). 
65    Copied from valarith.c.  */
66
67 #ifndef TRUNCATION_TOWARDS_ZERO
68 #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69 #endif
70
71 static void modify_general_field (struct type *, char *, LONGEST, int, int);
72
73 static struct type *desc_base_type (struct type *);
74
75 static struct type *desc_bounds_type (struct type *);
76
77 static struct value *desc_bounds (struct value *);
78
79 static int fat_pntr_bounds_bitpos (struct type *);
80
81 static int fat_pntr_bounds_bitsize (struct type *);
82
83 static struct type *desc_data_target_type (struct type *);
84
85 static struct value *desc_data (struct value *);
86
87 static int fat_pntr_data_bitpos (struct type *);
88
89 static int fat_pntr_data_bitsize (struct type *);
90
91 static struct value *desc_one_bound (struct value *, int, int);
92
93 static int desc_bound_bitpos (struct type *, int, int);
94
95 static int desc_bound_bitsize (struct type *, int, int);
96
97 static struct type *desc_index_type (struct type *, int);
98
99 static int desc_arity (struct type *);
100
101 static int ada_type_match (struct type *, struct type *, int);
102
103 static int ada_args_match (struct symbol *, struct value **, int);
104
105 static struct value *ensure_lval (struct value *,
106                                   struct gdbarch *, CORE_ADDR *);
107
108 static struct value *make_array_descriptor (struct type *, struct value *,
109                                             struct gdbarch *, CORE_ADDR *);
110
111 static void ada_add_block_symbols (struct obstack *,
112                                    struct block *, const char *,
113                                    domain_enum, struct objfile *, int);
114
115 static int is_nonfunction (struct ada_symbol_info *, int);
116
117 static void add_defn_to_vec (struct obstack *, struct symbol *,
118                              struct block *);
119
120 static int num_defns_collected (struct obstack *);
121
122 static struct ada_symbol_info *defns_collected (struct obstack *, int);
123
124 static struct value *resolve_subexp (struct expression **, int *, int,
125                                      struct type *);
126
127 static void replace_operator_with_call (struct expression **, int, int, int,
128                                         struct symbol *, struct block *);
129
130 static int possible_user_operator_p (enum exp_opcode, struct value **);
131
132 static char *ada_op_name (enum exp_opcode);
133
134 static const char *ada_decoded_op_name (enum exp_opcode);
135
136 static int numeric_type_p (struct type *);
137
138 static int integer_type_p (struct type *);
139
140 static int scalar_type_p (struct type *);
141
142 static int discrete_type_p (struct type *);
143
144 static enum ada_renaming_category parse_old_style_renaming (struct type *,
145                                                             const char **,
146                                                             int *,
147                                                             const char **);
148
149 static struct symbol *find_old_style_renaming_symbol (const char *,
150                                                       struct block *);
151
152 static struct type *ada_lookup_struct_elt_type (struct type *, char *,
153                                                 int, int, int *);
154
155 static struct value *evaluate_subexp_type (struct expression *, int *);
156
157 static struct type *ada_find_parallel_type_with_name (struct type *,
158                                                       const char *);
159
160 static int is_dynamic_field (struct type *, int);
161
162 static struct type *to_fixed_variant_branch_type (struct type *,
163                                                   const gdb_byte *,
164                                                   CORE_ADDR, struct value *);
165
166 static struct type *to_fixed_array_type (struct type *, struct value *, int);
167
168 static struct type *to_fixed_range_type (char *, struct value *,
169                                          struct type *);
170
171 static struct type *to_static_fixed_type (struct type *);
172 static struct type *static_unwrap_type (struct type *type);
173
174 static struct value *unwrap_value (struct value *);
175
176 static struct type *constrained_packed_array_type (struct type *, long *);
177
178 static struct type *decode_constrained_packed_array_type (struct type *);
179
180 static long decode_packed_array_bitsize (struct type *);
181
182 static struct value *decode_constrained_packed_array (struct value *);
183
184 static int ada_is_packed_array_type  (struct type *);
185
186 static int ada_is_unconstrained_packed_array_type (struct type *);
187
188 static struct value *value_subscript_packed (struct value *, int,
189                                              struct value **);
190
191 static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
192
193 static struct value *coerce_unspec_val_to_type (struct value *,
194                                                 struct type *);
195
196 static struct value *get_var_value (char *, char *);
197
198 static int lesseq_defined_than (struct symbol *, struct symbol *);
199
200 static int equiv_types (struct type *, struct type *);
201
202 static int is_name_suffix (const char *);
203
204 static int wild_match (const char *, int, const char *);
205
206 static struct value *ada_coerce_ref (struct value *);
207
208 static LONGEST pos_atr (struct value *);
209
210 static struct value *value_pos_atr (struct type *, struct value *);
211
212 static struct value *value_val_atr (struct type *, struct value *);
213
214 static struct symbol *standard_lookup (const char *, const struct block *,
215                                        domain_enum);
216
217 static struct value *ada_search_struct_field (char *, struct value *, int,
218                                               struct type *);
219
220 static struct value *ada_value_primitive_field (struct value *, int, int,
221                                                 struct type *);
222
223 static int find_struct_field (char *, struct type *, int,
224                               struct type **, int *, int *, int *, int *);
225
226 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
227                                                 struct value *);
228
229 static int ada_resolve_function (struct ada_symbol_info *, int,
230                                  struct value **, int, const char *,
231                                  struct type *);
232
233 static struct value *ada_coerce_to_simple_array (struct value *);
234
235 static int ada_is_direct_array_type (struct type *);
236
237 static void ada_language_arch_info (struct gdbarch *,
238                                     struct language_arch_info *);
239
240 static void check_size (const struct type *);
241
242 static struct value *ada_index_struct_field (int, struct value *, int,
243                                              struct type *);
244
245 static struct value *assign_aggregate (struct value *, struct value *, 
246                                        struct expression *, int *, enum noside);
247
248 static void aggregate_assign_from_choices (struct value *, struct value *, 
249                                            struct expression *,
250                                            int *, LONGEST *, int *,
251                                            int, LONGEST, LONGEST);
252
253 static void aggregate_assign_positional (struct value *, struct value *,
254                                          struct expression *,
255                                          int *, LONGEST *, int *, int,
256                                          LONGEST, LONGEST);
257
258
259 static void aggregate_assign_others (struct value *, struct value *,
260                                      struct expression *,
261                                      int *, LONGEST *, int, LONGEST, LONGEST);
262
263
264 static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
265
266
267 static struct value *ada_evaluate_subexp (struct type *, struct expression *,
268                                           int *, enum noside);
269
270 static void ada_forward_operator_length (struct expression *, int, int *,
271                                          int *);
272 \f
273
274
275 /* Maximum-sized dynamic type.  */
276 static unsigned int varsize_limit;
277
278 /* FIXME: brobecker/2003-09-17: No longer a const because it is
279    returned by a function that does not return a const char *.  */
280 static char *ada_completer_word_break_characters =
281 #ifdef VMS
282   " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
283 #else
284   " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
285 #endif
286
287 /* The name of the symbol to use to get the name of the main subprogram.  */
288 static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
289   = "__gnat_ada_main_program_name";
290
291 /* Limit on the number of warnings to raise per expression evaluation.  */
292 static int warning_limit = 2;
293
294 /* Number of warning messages issued; reset to 0 by cleanups after
295    expression evaluation.  */
296 static int warnings_issued = 0;
297
298 static const char *known_runtime_file_name_patterns[] = {
299   ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
300 };
301
302 static const char *known_auxiliary_function_name_patterns[] = {
303   ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
304 };
305
306 /* Space for allocating results of ada_lookup_symbol_list.  */
307 static struct obstack symbol_list_obstack;
308
309                         /* Utilities */
310
311 /* Given DECODED_NAME a string holding a symbol name in its
312    decoded form (ie using the Ada dotted notation), returns
313    its unqualified name.  */
314
315 static const char *
316 ada_unqualified_name (const char *decoded_name)
317 {
318   const char *result = strrchr (decoded_name, '.');
319
320   if (result != NULL)
321     result++;                   /* Skip the dot...  */
322   else
323     result = decoded_name;
324
325   return result;
326 }
327
328 /* Return a string starting with '<', followed by STR, and '>'.
329    The result is good until the next call.  */
330
331 static char *
332 add_angle_brackets (const char *str)
333 {
334   static char *result = NULL;
335
336   xfree (result);
337   result = xstrprintf ("<%s>", str);
338   return result;
339 }
340
341 static char *
342 ada_get_gdb_completer_word_break_characters (void)
343 {
344   return ada_completer_word_break_characters;
345 }
346
347 /* Print an array element index using the Ada syntax.  */
348
349 static void
350 ada_print_array_index (struct value *index_value, struct ui_file *stream,
351                        const struct value_print_options *options)
352 {
353   LA_VALUE_PRINT (index_value, stream, options);
354   fprintf_filtered (stream, " => ");
355 }
356
357 /* Assuming VECT points to an array of *SIZE objects of size
358    ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
359    updating *SIZE as necessary and returning the (new) array.  */
360
361 void *
362 grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
363 {
364   if (*size < min_size)
365     {
366       *size *= 2;
367       if (*size < min_size)
368         *size = min_size;
369       vect = xrealloc (vect, *size * element_size);
370     }
371   return vect;
372 }
373
374 /* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
375    suffix of FIELD_NAME beginning "___".  */
376
377 static int
378 field_name_match (const char *field_name, const char *target)
379 {
380   int len = strlen (target);
381   return
382     (strncmp (field_name, target, len) == 0
383      && (field_name[len] == '\0'
384          || (strncmp (field_name + len, "___", 3) == 0
385              && strcmp (field_name + strlen (field_name) - 6,
386                         "___XVN") != 0)));
387 }
388
389
390 /* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
391    a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
392    and return its index.  This function also handles fields whose name
393    have ___ suffixes because the compiler sometimes alters their name
394    by adding such a suffix to represent fields with certain constraints.
395    If the field could not be found, return a negative number if
396    MAYBE_MISSING is set.  Otherwise raise an error.  */
397
398 int
399 ada_get_field_index (const struct type *type, const char *field_name,
400                      int maybe_missing)
401 {
402   int fieldno;
403   struct type *struct_type = check_typedef ((struct type *) type);
404
405   for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
406     if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
407       return fieldno;
408
409   if (!maybe_missing)
410     error (_("Unable to find field %s in struct %s.  Aborting"),
411            field_name, TYPE_NAME (struct_type));
412
413   return -1;
414 }
415
416 /* The length of the prefix of NAME prior to any "___" suffix.  */
417
418 int
419 ada_name_prefix_len (const char *name)
420 {
421   if (name == NULL)
422     return 0;
423   else
424     {
425       const char *p = strstr (name, "___");
426       if (p == NULL)
427         return strlen (name);
428       else
429         return p - name;
430     }
431 }
432
433 /* Return non-zero if SUFFIX is a suffix of STR.
434    Return zero if STR is null.  */
435
436 static int
437 is_suffix (const char *str, const char *suffix)
438 {
439   int len1, len2;
440   if (str == NULL)
441     return 0;
442   len1 = strlen (str);
443   len2 = strlen (suffix);
444   return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
445 }
446
447 /* The contents of value VAL, treated as a value of type TYPE.  The
448    result is an lval in memory if VAL is.  */
449
450 static struct value *
451 coerce_unspec_val_to_type (struct value *val, struct type *type)
452 {
453   type = ada_check_typedef (type);
454   if (value_type (val) == type)
455     return val;
456   else
457     {
458       struct value *result;
459
460       /* Make sure that the object size is not unreasonable before
461          trying to allocate some memory for it.  */
462       check_size (type);
463
464       result = allocate_value (type);
465       set_value_component_location (result, val);
466       set_value_bitsize (result, value_bitsize (val));
467       set_value_bitpos (result, value_bitpos (val));
468       set_value_address (result, value_address (val));
469       if (value_lazy (val)
470           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
471         set_value_lazy (result, 1);
472       else
473         memcpy (value_contents_raw (result), value_contents (val),
474                 TYPE_LENGTH (type));
475       return result;
476     }
477 }
478
479 static const gdb_byte *
480 cond_offset_host (const gdb_byte *valaddr, long offset)
481 {
482   if (valaddr == NULL)
483     return NULL;
484   else
485     return valaddr + offset;
486 }
487
488 static CORE_ADDR
489 cond_offset_target (CORE_ADDR address, long offset)
490 {
491   if (address == 0)
492     return 0;
493   else
494     return address + offset;
495 }
496
497 /* Issue a warning (as for the definition of warning in utils.c, but
498    with exactly one argument rather than ...), unless the limit on the
499    number of warnings has passed during the evaluation of the current
500    expression.  */
501
502 /* FIXME: cagney/2004-10-10: This function is mimicking the behavior
503    provided by "complaint".  */
504 static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
505
506 static void
507 lim_warning (const char *format, ...)
508 {
509   va_list args;
510   va_start (args, format);
511
512   warnings_issued += 1;
513   if (warnings_issued <= warning_limit)
514     vwarning (format, args);
515
516   va_end (args);
517 }
518
519 /* Issue an error if the size of an object of type T is unreasonable,
520    i.e. if it would be a bad idea to allocate a value of this type in
521    GDB.  */
522
523 static void
524 check_size (const struct type *type)
525 {
526   if (TYPE_LENGTH (type) > varsize_limit)
527     error (_("object size is larger than varsize-limit"));
528 }
529
530 /* Maximum value of a SIZE-byte signed integer type. */
531 static LONGEST
532 max_of_size (int size)
533 {
534   LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
535   return top_bit | (top_bit - 1);
536 }
537
538 /* Minimum value of a SIZE-byte signed integer type. */
539 static LONGEST
540 min_of_size (int size)
541 {
542   return -max_of_size (size) - 1;
543 }
544
545 /* Maximum value of a SIZE-byte unsigned integer type. */
546 static ULONGEST
547 umax_of_size (int size)
548 {
549   ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
550   return top_bit | (top_bit - 1);
551 }
552
553 /* Maximum value of integral type T, as a signed quantity. */
554 static LONGEST
555 max_of_type (struct type *t)
556 {
557   if (TYPE_UNSIGNED (t))
558     return (LONGEST) umax_of_size (TYPE_LENGTH (t));
559   else
560     return max_of_size (TYPE_LENGTH (t));
561 }
562
563 /* Minimum value of integral type T, as a signed quantity. */
564 static LONGEST
565 min_of_type (struct type *t)
566 {
567   if (TYPE_UNSIGNED (t)) 
568     return 0;
569   else
570     return min_of_size (TYPE_LENGTH (t));
571 }
572
573 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
574 LONGEST
575 ada_discrete_type_high_bound (struct type *type)
576 {
577   switch (TYPE_CODE (type))
578     {
579     case TYPE_CODE_RANGE:
580       return TYPE_HIGH_BOUND (type);
581     case TYPE_CODE_ENUM:
582       return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
583     case TYPE_CODE_BOOL:
584       return 1;
585     case TYPE_CODE_CHAR:
586     case TYPE_CODE_INT:
587       return max_of_type (type);
588     default:
589       error (_("Unexpected type in ada_discrete_type_high_bound."));
590     }
591 }
592
593 /* The largest value in the domain of TYPE, a discrete type, as an integer.  */
594 LONGEST
595 ada_discrete_type_low_bound (struct type *type)
596 {
597   switch (TYPE_CODE (type))
598     {
599     case TYPE_CODE_RANGE:
600       return TYPE_LOW_BOUND (type);
601     case TYPE_CODE_ENUM:
602       return TYPE_FIELD_BITPOS (type, 0);
603     case TYPE_CODE_BOOL:
604       return 0;
605     case TYPE_CODE_CHAR:
606     case TYPE_CODE_INT:
607       return min_of_type (type);
608     default:
609       error (_("Unexpected type in ada_discrete_type_low_bound."));
610     }
611 }
612
613 /* The identity on non-range types.  For range types, the underlying
614    non-range scalar type.  */
615
616 static struct type *
617 base_type (struct type *type)
618 {
619   while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
620     {
621       if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
622         return type;
623       type = TYPE_TARGET_TYPE (type);
624     }
625   return type;
626 }
627 \f
628
629                                 /* Language Selection */
630
631 /* If the main program is in Ada, return language_ada, otherwise return LANG
632    (the main program is in Ada iif the adainit symbol is found).  */
633
634 enum language
635 ada_update_initial_language (enum language lang)
636 {
637   if (lookup_minimal_symbol ("adainit", (const char *) NULL,
638                              (struct objfile *) NULL) != NULL)
639     return language_ada;
640
641   return lang;
642 }
643
644 /* If the main procedure is written in Ada, then return its name.
645    The result is good until the next call.  Return NULL if the main
646    procedure doesn't appear to be in Ada.  */
647
648 char *
649 ada_main_name (void)
650 {
651   struct minimal_symbol *msym;
652   static char *main_program_name = NULL;
653
654   /* For Ada, the name of the main procedure is stored in a specific
655      string constant, generated by the binder.  Look for that symbol,
656      extract its address, and then read that string.  If we didn't find
657      that string, then most probably the main procedure is not written
658      in Ada.  */
659   msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
660
661   if (msym != NULL)
662     {
663       CORE_ADDR main_program_name_addr;
664       int err_code;
665
666       main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
667       if (main_program_name_addr == 0)
668         error (_("Invalid address for Ada main program name."));
669
670       xfree (main_program_name);
671       target_read_string (main_program_name_addr, &main_program_name,
672                           1024, &err_code);
673
674       if (err_code != 0)
675         return NULL;
676       return main_program_name;
677     }
678
679   /* The main procedure doesn't seem to be in Ada.  */
680   return NULL;
681 }
682 \f
683                                 /* Symbols */
684
685 /* Table of Ada operators and their GNAT-encoded names.  Last entry is pair
686    of NULLs.  */
687
688 const struct ada_opname_map ada_opname_table[] = {
689   {"Oadd", "\"+\"", BINOP_ADD},
690   {"Osubtract", "\"-\"", BINOP_SUB},
691   {"Omultiply", "\"*\"", BINOP_MUL},
692   {"Odivide", "\"/\"", BINOP_DIV},
693   {"Omod", "\"mod\"", BINOP_MOD},
694   {"Orem", "\"rem\"", BINOP_REM},
695   {"Oexpon", "\"**\"", BINOP_EXP},
696   {"Olt", "\"<\"", BINOP_LESS},
697   {"Ole", "\"<=\"", BINOP_LEQ},
698   {"Ogt", "\">\"", BINOP_GTR},
699   {"Oge", "\">=\"", BINOP_GEQ},
700   {"Oeq", "\"=\"", BINOP_EQUAL},
701   {"One", "\"/=\"", BINOP_NOTEQUAL},
702   {"Oand", "\"and\"", BINOP_BITWISE_AND},
703   {"Oor", "\"or\"", BINOP_BITWISE_IOR},
704   {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
705   {"Oconcat", "\"&\"", BINOP_CONCAT},
706   {"Oabs", "\"abs\"", UNOP_ABS},
707   {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
708   {"Oadd", "\"+\"", UNOP_PLUS},
709   {"Osubtract", "\"-\"", UNOP_NEG},
710   {NULL, NULL}
711 };
712
713 /* The "encoded" form of DECODED, according to GNAT conventions.
714    The result is valid until the next call to ada_encode.  */
715
716 char *
717 ada_encode (const char *decoded)
718 {
719   static char *encoding_buffer = NULL;
720   static size_t encoding_buffer_size = 0;
721   const char *p;
722   int k;
723
724   if (decoded == NULL)
725     return NULL;
726
727   GROW_VECT (encoding_buffer, encoding_buffer_size,
728              2 * strlen (decoded) + 10);
729
730   k = 0;
731   for (p = decoded; *p != '\0'; p += 1)
732     {
733       if (*p == '.')
734         {
735           encoding_buffer[k] = encoding_buffer[k + 1] = '_';
736           k += 2;
737         }
738       else if (*p == '"')
739         {
740           const struct ada_opname_map *mapping;
741
742           for (mapping = ada_opname_table;
743                mapping->encoded != NULL
744                && strncmp (mapping->decoded, p,
745                            strlen (mapping->decoded)) != 0; mapping += 1)
746             ;
747           if (mapping->encoded == NULL)
748             error (_("invalid Ada operator name: %s"), p);
749           strcpy (encoding_buffer + k, mapping->encoded);
750           k += strlen (mapping->encoded);
751           break;
752         }
753       else
754         {
755           encoding_buffer[k] = *p;
756           k += 1;
757         }
758     }
759
760   encoding_buffer[k] = '\0';
761   return encoding_buffer;
762 }
763
764 /* Return NAME folded to lower case, or, if surrounded by single
765    quotes, unfolded, but with the quotes stripped away.  Result good
766    to next call.  */
767
768 char *
769 ada_fold_name (const char *name)
770 {
771   static char *fold_buffer = NULL;
772   static size_t fold_buffer_size = 0;
773
774   int len = strlen (name);
775   GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
776
777   if (name[0] == '\'')
778     {
779       strncpy (fold_buffer, name + 1, len - 2);
780       fold_buffer[len - 2] = '\000';
781     }
782   else
783     {
784       int i;
785       for (i = 0; i <= len; i += 1)
786         fold_buffer[i] = tolower (name[i]);
787     }
788
789   return fold_buffer;
790 }
791
792 /* Return nonzero if C is either a digit or a lowercase alphabet character.  */
793
794 static int
795 is_lower_alphanum (const char c)
796 {
797   return (isdigit (c) || (isalpha (c) && islower (c)));
798 }
799
800 /* Remove either of these suffixes:
801      . .{DIGIT}+
802      . ${DIGIT}+
803      . ___{DIGIT}+
804      . __{DIGIT}+.
805    These are suffixes introduced by the compiler for entities such as
806    nested subprogram for instance, in order to avoid name clashes.
807    They do not serve any purpose for the debugger.  */
808
809 static void
810 ada_remove_trailing_digits (const char *encoded, int *len)
811 {
812   if (*len > 1 && isdigit (encoded[*len - 1]))
813     {
814       int i = *len - 2;
815       while (i > 0 && isdigit (encoded[i]))
816         i--;
817       if (i >= 0 && encoded[i] == '.')
818         *len = i;
819       else if (i >= 0 && encoded[i] == '$')
820         *len = i;
821       else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
822         *len = i - 2;
823       else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
824         *len = i - 1;
825     }
826 }
827
828 /* Remove the suffix introduced by the compiler for protected object
829    subprograms.  */
830
831 static void
832 ada_remove_po_subprogram_suffix (const char *encoded, int *len)
833 {
834   /* Remove trailing N.  */
835
836   /* Protected entry subprograms are broken into two
837      separate subprograms: The first one is unprotected, and has
838      a 'N' suffix; the second is the protected version, and has
839      the 'P' suffix. The second calls the first one after handling
840      the protection.  Since the P subprograms are internally generated,
841      we leave these names undecoded, giving the user a clue that this
842      entity is internal.  */
843
844   if (*len > 1
845       && encoded[*len - 1] == 'N'
846       && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
847     *len = *len - 1;
848 }
849
850 /* Remove trailing X[bn]* suffixes (indicating names in package bodies).  */
851
852 static void
853 ada_remove_Xbn_suffix (const char *encoded, int *len)
854 {
855   int i = *len - 1;
856
857   while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
858     i--;
859
860   if (encoded[i] != 'X')
861     return;
862
863   if (i == 0)
864     return;
865
866   if (isalnum (encoded[i-1]))
867     *len = i;
868 }
869
870 /* If ENCODED follows the GNAT entity encoding conventions, then return
871    the decoded form of ENCODED.  Otherwise, return "<%s>" where "%s" is
872    replaced by ENCODED.
873
874    The resulting string is valid until the next call of ada_decode.
875    If the string is unchanged by decoding, the original string pointer
876    is returned.  */
877
878 const char *
879 ada_decode (const char *encoded)
880 {
881   int i, j;
882   int len0;
883   const char *p;
884   char *decoded;
885   int at_start_name;
886   static char *decoding_buffer = NULL;
887   static size_t decoding_buffer_size = 0;
888
889   /* The name of the Ada main procedure starts with "_ada_".
890      This prefix is not part of the decoded name, so skip this part
891      if we see this prefix.  */
892   if (strncmp (encoded, "_ada_", 5) == 0)
893     encoded += 5;
894
895   /* If the name starts with '_', then it is not a properly encoded
896      name, so do not attempt to decode it.  Similarly, if the name
897      starts with '<', the name should not be decoded.  */
898   if (encoded[0] == '_' || encoded[0] == '<')
899     goto Suppress;
900
901   len0 = strlen (encoded);
902
903   ada_remove_trailing_digits (encoded, &len0);
904   ada_remove_po_subprogram_suffix (encoded, &len0);
905
906   /* Remove the ___X.* suffix if present.  Do not forget to verify that
907      the suffix is located before the current "end" of ENCODED.  We want
908      to avoid re-matching parts of ENCODED that have previously been
909      marked as discarded (by decrementing LEN0).  */
910   p = strstr (encoded, "___");
911   if (p != NULL && p - encoded < len0 - 3)
912     {
913       if (p[3] == 'X')
914         len0 = p - encoded;
915       else
916         goto Suppress;
917     }
918
919   /* Remove any trailing TKB suffix.  It tells us that this symbol
920      is for the body of a task, but that information does not actually
921      appear in the decoded name.  */
922
923   if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
924     len0 -= 3;
925
926   /* Remove any trailing TB suffix.  The TB suffix is slightly different
927      from the TKB suffix because it is used for non-anonymous task
928      bodies.  */
929
930   if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
931     len0 -= 2;
932
933   /* Remove trailing "B" suffixes.  */
934   /* FIXME: brobecker/2006-04-19: Not sure what this are used for...  */
935
936   if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
937     len0 -= 1;
938
939   /* Make decoded big enough for possible expansion by operator name.  */
940
941   GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
942   decoded = decoding_buffer;
943
944   /* Remove trailing __{digit}+ or trailing ${digit}+.  */
945
946   if (len0 > 1 && isdigit (encoded[len0 - 1]))
947     {
948       i = len0 - 2;
949       while ((i >= 0 && isdigit (encoded[i]))
950              || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
951         i -= 1;
952       if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
953         len0 = i - 1;
954       else if (encoded[i] == '$')
955         len0 = i;
956     }
957
958   /* The first few characters that are not alphabetic are not part
959      of any encoding we use, so we can copy them over verbatim.  */
960
961   for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
962     decoded[j] = encoded[i];
963
964   at_start_name = 1;
965   while (i < len0)
966     {
967       /* Is this a symbol function?  */
968       if (at_start_name && encoded[i] == 'O')
969         {
970           int k;
971           for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
972             {
973               int op_len = strlen (ada_opname_table[k].encoded);
974               if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
975                             op_len - 1) == 0)
976                   && !isalnum (encoded[i + op_len]))
977                 {
978                   strcpy (decoded + j, ada_opname_table[k].decoded);
979                   at_start_name = 0;
980                   i += op_len;
981                   j += strlen (ada_opname_table[k].decoded);
982                   break;
983                 }
984             }
985           if (ada_opname_table[k].encoded != NULL)
986             continue;
987         }
988       at_start_name = 0;
989
990       /* Replace "TK__" with "__", which will eventually be translated
991          into "." (just below).  */
992
993       if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
994         i += 2;
995
996       /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
997          be translated into "." (just below).  These are internal names
998          generated for anonymous blocks inside which our symbol is nested.  */
999
1000       if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1001           && encoded [i+2] == 'B' && encoded [i+3] == '_'
1002           && isdigit (encoded [i+4]))
1003         {
1004           int k = i + 5;
1005           
1006           while (k < len0 && isdigit (encoded[k]))
1007             k++;  /* Skip any extra digit.  */
1008
1009           /* Double-check that the "__B_{DIGITS}+" sequence we found
1010              is indeed followed by "__".  */
1011           if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1012             i = k;
1013         }
1014
1015       /* Remove _E{DIGITS}+[sb] */
1016
1017       /* Just as for protected object subprograms, there are 2 categories
1018          of subprograms created by the compiler for each entry. The first
1019          one implements the actual entry code, and has a suffix following
1020          the convention above; the second one implements the barrier and
1021          uses the same convention as above, except that the 'E' is replaced
1022          by a 'B'.
1023
1024          Just as above, we do not decode the name of barrier functions
1025          to give the user a clue that the code he is debugging has been
1026          internally generated.  */
1027
1028       if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1029           && isdigit (encoded[i+2]))
1030         {
1031           int k = i + 3;
1032
1033           while (k < len0 && isdigit (encoded[k]))
1034             k++;
1035
1036           if (k < len0
1037               && (encoded[k] == 'b' || encoded[k] == 's'))
1038             {
1039               k++;
1040               /* Just as an extra precaution, make sure that if this
1041                  suffix is followed by anything else, it is a '_'.
1042                  Otherwise, we matched this sequence by accident.  */
1043               if (k == len0
1044                   || (k < len0 && encoded[k] == '_'))
1045                 i = k;
1046             }
1047         }
1048
1049       /* Remove trailing "N" in [a-z0-9]+N__.  The N is added by
1050          the GNAT front-end in protected object subprograms.  */
1051
1052       if (i < len0 + 3
1053           && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1054         {
1055           /* Backtrack a bit up until we reach either the begining of
1056              the encoded name, or "__".  Make sure that we only find
1057              digits or lowercase characters.  */
1058           const char *ptr = encoded + i - 1;
1059
1060           while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1061             ptr--;
1062           if (ptr < encoded
1063               || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1064             i++;
1065         }
1066
1067       if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1068         {
1069           /* This is a X[bn]* sequence not separated from the previous
1070              part of the name with a non-alpha-numeric character (in other
1071              words, immediately following an alpha-numeric character), then
1072              verify that it is placed at the end of the encoded name.  If
1073              not, then the encoding is not valid and we should abort the
1074              decoding.  Otherwise, just skip it, it is used in body-nested
1075              package names.  */
1076           do
1077             i += 1;
1078           while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1079           if (i < len0)
1080             goto Suppress;
1081         }
1082       else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
1083         {
1084          /* Replace '__' by '.'.  */
1085           decoded[j] = '.';
1086           at_start_name = 1;
1087           i += 2;
1088           j += 1;
1089         }
1090       else
1091         {
1092           /* It's a character part of the decoded name, so just copy it
1093              over.  */
1094           decoded[j] = encoded[i];
1095           i += 1;
1096           j += 1;
1097         }
1098     }
1099   decoded[j] = '\000';
1100
1101   /* Decoded names should never contain any uppercase character.
1102      Double-check this, and abort the decoding if we find one.  */
1103
1104   for (i = 0; decoded[i] != '\0'; i += 1)
1105     if (isupper (decoded[i]) || decoded[i] == ' ')
1106       goto Suppress;
1107
1108   if (strcmp (decoded, encoded) == 0)
1109     return encoded;
1110   else
1111     return decoded;
1112
1113 Suppress:
1114   GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1115   decoded = decoding_buffer;
1116   if (encoded[0] == '<')
1117     strcpy (decoded, encoded);
1118   else
1119     xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
1120   return decoded;
1121
1122 }
1123
1124 /* Table for keeping permanent unique copies of decoded names.  Once
1125    allocated, names in this table are never released.  While this is a
1126    storage leak, it should not be significant unless there are massive
1127    changes in the set of decoded names in successive versions of a 
1128    symbol table loaded during a single session.  */
1129 static struct htab *decoded_names_store;
1130
1131 /* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1132    in the language-specific part of GSYMBOL, if it has not been
1133    previously computed.  Tries to save the decoded name in the same
1134    obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1135    in any case, the decoded symbol has a lifetime at least that of
1136    GSYMBOL).  
1137    The GSYMBOL parameter is "mutable" in the C++ sense: logically
1138    const, but nevertheless modified to a semantically equivalent form
1139    when a decoded name is cached in it.
1140 */
1141
1142 char *
1143 ada_decode_symbol (const struct general_symbol_info *gsymbol)
1144 {
1145   char **resultp =
1146     (char **) &gsymbol->language_specific.cplus_specific.demangled_name;
1147   if (*resultp == NULL)
1148     {
1149       const char *decoded = ada_decode (gsymbol->name);
1150       if (gsymbol->obj_section != NULL)
1151         {
1152           struct objfile *objf = gsymbol->obj_section->objfile;
1153           *resultp = obsavestring (decoded, strlen (decoded),
1154                                    &objf->objfile_obstack);
1155         }
1156       /* Sometimes, we can't find a corresponding objfile, in which
1157          case, we put the result on the heap.  Since we only decode
1158          when needed, we hope this usually does not cause a
1159          significant memory leak (FIXME).  */
1160       if (*resultp == NULL)
1161         {
1162           char **slot = (char **) htab_find_slot (decoded_names_store,
1163                                                   decoded, INSERT);
1164           if (*slot == NULL)
1165             *slot = xstrdup (decoded);
1166           *resultp = *slot;
1167         }
1168     }
1169
1170   return *resultp;
1171 }
1172
1173 static char *
1174 ada_la_decode (const char *encoded, int options)
1175 {
1176   return xstrdup (ada_decode (encoded));
1177 }
1178
1179 /* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
1180    suffixes that encode debugging information or leading _ada_ on
1181    SYM_NAME (see is_name_suffix commentary for the debugging
1182    information that is ignored).  If WILD, then NAME need only match a
1183    suffix of SYM_NAME minus the same suffixes.  Also returns 0 if
1184    either argument is NULL.  */
1185
1186 static int
1187 ada_match_name (const char *sym_name, const char *name, int wild)
1188 {
1189   if (sym_name == NULL || name == NULL)
1190     return 0;
1191   else if (wild)
1192     return wild_match (name, strlen (name), sym_name);
1193   else
1194     {
1195       int len_name = strlen (name);
1196       return (strncmp (sym_name, name, len_name) == 0
1197               && is_name_suffix (sym_name + len_name))
1198         || (strncmp (sym_name, "_ada_", 5) == 0
1199             && strncmp (sym_name + 5, name, len_name) == 0
1200             && is_name_suffix (sym_name + len_name + 5));
1201     }
1202 }
1203 \f
1204
1205                                 /* Arrays */
1206
1207 /* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors.  */
1208
1209 static char *bound_name[] = {
1210   "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
1211   "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1212 };
1213
1214 /* Maximum number of array dimensions we are prepared to handle.  */
1215
1216 #define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
1217
1218 /* Like modify_field, but allows bitpos > wordlength.  */
1219
1220 static void
1221 modify_general_field (struct type *type, char *addr,
1222                       LONGEST fieldval, int bitpos, int bitsize)
1223 {
1224   modify_field (type, addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
1225 }
1226
1227
1228 /* The desc_* routines return primitive portions of array descriptors
1229    (fat pointers).  */
1230
1231 /* The descriptor or array type, if any, indicated by TYPE; removes
1232    level of indirection, if needed.  */
1233
1234 static struct type *
1235 desc_base_type (struct type *type)
1236 {
1237   if (type == NULL)
1238     return NULL;
1239   type = ada_check_typedef (type);
1240   if (type != NULL
1241       && (TYPE_CODE (type) == TYPE_CODE_PTR
1242           || TYPE_CODE (type) == TYPE_CODE_REF))
1243     return ada_check_typedef (TYPE_TARGET_TYPE (type));
1244   else
1245     return type;
1246 }
1247
1248 /* True iff TYPE indicates a "thin" array pointer type.  */
1249
1250 static int
1251 is_thin_pntr (struct type *type)
1252 {
1253   return
1254     is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1255     || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1256 }
1257
1258 /* The descriptor type for thin pointer type TYPE.  */
1259
1260 static struct type *
1261 thin_descriptor_type (struct type *type)
1262 {
1263   struct type *base_type = desc_base_type (type);
1264   if (base_type == NULL)
1265     return NULL;
1266   if (is_suffix (ada_type_name (base_type), "___XVE"))
1267     return base_type;
1268   else
1269     {
1270       struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
1271       if (alt_type == NULL)
1272         return base_type;
1273       else
1274         return alt_type;
1275     }
1276 }
1277
1278 /* A pointer to the array data for thin-pointer value VAL.  */
1279
1280 static struct value *
1281 thin_data_pntr (struct value *val)
1282 {
1283   struct type *type = value_type (val);
1284   struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
1285   data_type = lookup_pointer_type (data_type);
1286
1287   if (TYPE_CODE (type) == TYPE_CODE_PTR)
1288     return value_cast (data_type, value_copy (val));
1289   else
1290     return value_from_longest (data_type, value_address (val));
1291 }
1292
1293 /* True iff TYPE indicates a "thick" array pointer type.  */
1294
1295 static int
1296 is_thick_pntr (struct type *type)
1297 {
1298   type = desc_base_type (type);
1299   return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
1300           && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
1301 }
1302
1303 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1304    pointer to one, the type of its bounds data; otherwise, NULL.  */
1305
1306 static struct type *
1307 desc_bounds_type (struct type *type)
1308 {
1309   struct type *r;
1310
1311   type = desc_base_type (type);
1312
1313   if (type == NULL)
1314     return NULL;
1315   else if (is_thin_pntr (type))
1316     {
1317       type = thin_descriptor_type (type);
1318       if (type == NULL)
1319         return NULL;
1320       r = lookup_struct_elt_type (type, "BOUNDS", 1);
1321       if (r != NULL)
1322         return ada_check_typedef (r);
1323     }
1324   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1325     {
1326       r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1327       if (r != NULL)
1328         return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
1329     }
1330   return NULL;
1331 }
1332
1333 /* If ARR is an array descriptor (fat or thin pointer), or pointer to
1334    one, a pointer to its bounds data.   Otherwise NULL.  */
1335
1336 static struct value *
1337 desc_bounds (struct value *arr)
1338 {
1339   struct type *type = ada_check_typedef (value_type (arr));
1340   if (is_thin_pntr (type))
1341     {
1342       struct type *bounds_type =
1343         desc_bounds_type (thin_descriptor_type (type));
1344       LONGEST addr;
1345
1346       if (bounds_type == NULL)
1347         error (_("Bad GNAT array descriptor"));
1348
1349       /* NOTE: The following calculation is not really kosher, but
1350          since desc_type is an XVE-encoded type (and shouldn't be),
1351          the correct calculation is a real pain.  FIXME (and fix GCC).  */
1352       if (TYPE_CODE (type) == TYPE_CODE_PTR)
1353         addr = value_as_long (arr);
1354       else
1355         addr = value_address (arr);
1356
1357       return
1358         value_from_longest (lookup_pointer_type (bounds_type),
1359                             addr - TYPE_LENGTH (bounds_type));
1360     }
1361
1362   else if (is_thick_pntr (type))
1363     return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1364                              _("Bad GNAT array descriptor"));
1365   else
1366     return NULL;
1367 }
1368
1369 /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
1370    position of the field containing the address of the bounds data.  */
1371
1372 static int
1373 fat_pntr_bounds_bitpos (struct type *type)
1374 {
1375   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1376 }
1377
1378 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1379    size of the field containing the address of the bounds data.  */
1380
1381 static int
1382 fat_pntr_bounds_bitsize (struct type *type)
1383 {
1384   type = desc_base_type (type);
1385
1386   if (TYPE_FIELD_BITSIZE (type, 1) > 0)
1387     return TYPE_FIELD_BITSIZE (type, 1);
1388   else
1389     return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
1390 }
1391
1392 /* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1393    pointer to one, the type of its array data (a array-with-no-bounds type);
1394    otherwise, NULL.  Use ada_type_of_array to get an array type with bounds
1395    data.  */
1396
1397 static struct type *
1398 desc_data_target_type (struct type *type)
1399 {
1400   type = desc_base_type (type);
1401
1402   /* NOTE: The following is bogus; see comment in desc_bounds.  */
1403   if (is_thin_pntr (type))
1404     return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
1405   else if (is_thick_pntr (type))
1406     {
1407       struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1408
1409       if (data_type
1410           && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
1411         return TYPE_TARGET_TYPE (data_type);
1412     }
1413
1414   return NULL;
1415 }
1416
1417 /* If ARR is an array descriptor (fat or thin pointer), a pointer to
1418    its array data.  */
1419
1420 static struct value *
1421 desc_data (struct value *arr)
1422 {
1423   struct type *type = value_type (arr);
1424   if (is_thin_pntr (type))
1425     return thin_data_pntr (arr);
1426   else if (is_thick_pntr (type))
1427     return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
1428                              _("Bad GNAT array descriptor"));
1429   else
1430     return NULL;
1431 }
1432
1433
1434 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1435    position of the field containing the address of the data.  */
1436
1437 static int
1438 fat_pntr_data_bitpos (struct type *type)
1439 {
1440   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1441 }
1442
1443 /* If TYPE is the type of an array-descriptor (fat pointer), the bit
1444    size of the field containing the address of the data.  */
1445
1446 static int
1447 fat_pntr_data_bitsize (struct type *type)
1448 {
1449   type = desc_base_type (type);
1450
1451   if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1452     return TYPE_FIELD_BITSIZE (type, 0);
1453   else
1454     return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1455 }
1456
1457 /* If BOUNDS is an array-bounds structure (or pointer to one), return
1458    the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1459    bound, if WHICH is 1.  The first bound is I=1.  */
1460
1461 static struct value *
1462 desc_one_bound (struct value *bounds, int i, int which)
1463 {
1464   return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
1465                            _("Bad GNAT array descriptor bounds"));
1466 }
1467
1468 /* If BOUNDS is an array-bounds structure type, return the bit position
1469    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1470    bound, if WHICH is 1.  The first bound is I=1.  */
1471
1472 static int
1473 desc_bound_bitpos (struct type *type, int i, int which)
1474 {
1475   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
1476 }
1477
1478 /* If BOUNDS is an array-bounds structure type, return the bit field size
1479    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
1480    bound, if WHICH is 1.  The first bound is I=1.  */
1481
1482 static int
1483 desc_bound_bitsize (struct type *type, int i, int which)
1484 {
1485   type = desc_base_type (type);
1486
1487   if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1488     return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1489   else
1490     return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
1491 }
1492
1493 /* If TYPE is the type of an array-bounds structure, the type of its
1494    Ith bound (numbering from 1).  Otherwise, NULL.  */
1495
1496 static struct type *
1497 desc_index_type (struct type *type, int i)
1498 {
1499   type = desc_base_type (type);
1500
1501   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1502     return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1503   else
1504     return NULL;
1505 }
1506
1507 /* The number of index positions in the array-bounds type TYPE.
1508    Return 0 if TYPE is NULL.  */
1509
1510 static int
1511 desc_arity (struct type *type)
1512 {
1513   type = desc_base_type (type);
1514
1515   if (type != NULL)
1516     return TYPE_NFIELDS (type) / 2;
1517   return 0;
1518 }
1519
1520 /* Non-zero iff TYPE is a simple array type (not a pointer to one) or 
1521    an array descriptor type (representing an unconstrained array
1522    type).  */
1523
1524 static int
1525 ada_is_direct_array_type (struct type *type)
1526 {
1527   if (type == NULL)
1528     return 0;
1529   type = ada_check_typedef (type);
1530   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1531           || ada_is_array_descriptor_type (type));
1532 }
1533
1534 /* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1535  * to one. */
1536
1537 static int
1538 ada_is_array_type (struct type *type)
1539 {
1540   while (type != NULL 
1541          && (TYPE_CODE (type) == TYPE_CODE_PTR 
1542              || TYPE_CODE (type) == TYPE_CODE_REF))
1543     type = TYPE_TARGET_TYPE (type);
1544   return ada_is_direct_array_type (type);
1545 }
1546
1547 /* Non-zero iff TYPE is a simple array type or pointer to one.  */
1548
1549 int
1550 ada_is_simple_array_type (struct type *type)
1551 {
1552   if (type == NULL)
1553     return 0;
1554   type = ada_check_typedef (type);
1555   return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1556           || (TYPE_CODE (type) == TYPE_CODE_PTR
1557               && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1558 }
1559
1560 /* Non-zero iff TYPE belongs to a GNAT array descriptor.  */
1561
1562 int
1563 ada_is_array_descriptor_type (struct type *type)
1564 {
1565   struct type *data_type = desc_data_target_type (type);
1566
1567   if (type == NULL)
1568     return 0;
1569   type = ada_check_typedef (type);
1570   return (data_type != NULL
1571           && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1572           && desc_arity (desc_bounds_type (type)) > 0);
1573 }
1574
1575 /* Non-zero iff type is a partially mal-formed GNAT array
1576    descriptor.  FIXME: This is to compensate for some problems with
1577    debugging output from GNAT.  Re-examine periodically to see if it
1578    is still needed.  */
1579
1580 int
1581 ada_is_bogus_array_descriptor (struct type *type)
1582 {
1583   return
1584     type != NULL
1585     && TYPE_CODE (type) == TYPE_CODE_STRUCT
1586     && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1587         || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1588     && !ada_is_array_descriptor_type (type);
1589 }
1590
1591
1592 /* If ARR has a record type in the form of a standard GNAT array descriptor,
1593    (fat pointer) returns the type of the array data described---specifically,
1594    a pointer-to-array type.  If BOUNDS is non-zero, the bounds data are filled
1595    in from the descriptor; otherwise, they are left unspecified.  If
1596    the ARR denotes a null array descriptor and BOUNDS is non-zero,
1597    returns NULL.  The result is simply the type of ARR if ARR is not
1598    a descriptor.  */
1599 struct type *
1600 ada_type_of_array (struct value *arr, int bounds)
1601 {
1602   if (ada_is_constrained_packed_array_type (value_type (arr)))
1603     return decode_constrained_packed_array_type (value_type (arr));
1604
1605   if (!ada_is_array_descriptor_type (value_type (arr)))
1606     return value_type (arr);
1607
1608   if (!bounds)
1609     {
1610       struct type *array_type =
1611         ada_check_typedef (desc_data_target_type (value_type (arr)));
1612
1613       if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1614         TYPE_FIELD_BITSIZE (array_type, 0) =
1615           decode_packed_array_bitsize (value_type (arr));
1616       
1617       return array_type;
1618     }
1619   else
1620     {
1621       struct type *elt_type;
1622       int arity;
1623       struct value *descriptor;
1624
1625       elt_type = ada_array_element_type (value_type (arr), -1);
1626       arity = ada_array_arity (value_type (arr));
1627
1628       if (elt_type == NULL || arity == 0)
1629         return ada_check_typedef (value_type (arr));
1630
1631       descriptor = desc_bounds (arr);
1632       if (value_as_long (descriptor) == 0)
1633         return NULL;
1634       while (arity > 0)
1635         {
1636           struct type *range_type = alloc_type_copy (value_type (arr));
1637           struct type *array_type = alloc_type_copy (value_type (arr));
1638           struct value *low = desc_one_bound (descriptor, arity, 0);
1639           struct value *high = desc_one_bound (descriptor, arity, 1);
1640           arity -= 1;
1641
1642           create_range_type (range_type, value_type (low),
1643                              longest_to_int (value_as_long (low)),
1644                              longest_to_int (value_as_long (high)));
1645           elt_type = create_array_type (array_type, elt_type, range_type);
1646
1647           if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1648             TYPE_FIELD_BITSIZE (elt_type, 0) =
1649               decode_packed_array_bitsize (value_type (arr));
1650         }
1651
1652       return lookup_pointer_type (elt_type);
1653     }
1654 }
1655
1656 /* If ARR does not represent an array, returns ARR unchanged.
1657    Otherwise, returns either a standard GDB array with bounds set
1658    appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1659    GDB array.  Returns NULL if ARR is a null fat pointer.  */
1660
1661 struct value *
1662 ada_coerce_to_simple_array_ptr (struct value *arr)
1663 {
1664   if (ada_is_array_descriptor_type (value_type (arr)))
1665     {
1666       struct type *arrType = ada_type_of_array (arr, 1);
1667       if (arrType == NULL)
1668         return NULL;
1669       return value_cast (arrType, value_copy (desc_data (arr)));
1670     }
1671   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1672     return decode_constrained_packed_array (arr);
1673   else
1674     return arr;
1675 }
1676
1677 /* If ARR does not represent an array, returns ARR unchanged.
1678    Otherwise, returns a standard GDB array describing ARR (which may
1679    be ARR itself if it already is in the proper form).  */
1680
1681 static struct value *
1682 ada_coerce_to_simple_array (struct value *arr)
1683 {
1684   if (ada_is_array_descriptor_type (value_type (arr)))
1685     {
1686       struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
1687       if (arrVal == NULL)
1688         error (_("Bounds unavailable for null array pointer."));
1689       check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
1690       return value_ind (arrVal);
1691     }
1692   else if (ada_is_constrained_packed_array_type (value_type (arr)))
1693     return decode_constrained_packed_array (arr);
1694   else
1695     return arr;
1696 }
1697
1698 /* If TYPE represents a GNAT array type, return it translated to an
1699    ordinary GDB array type (possibly with BITSIZE fields indicating
1700    packing).  For other types, is the identity.  */
1701
1702 struct type *
1703 ada_coerce_to_simple_array_type (struct type *type)
1704 {
1705   if (ada_is_constrained_packed_array_type (type))
1706     return decode_constrained_packed_array_type (type);
1707
1708   if (ada_is_array_descriptor_type (type))
1709     return ada_check_typedef (desc_data_target_type (type));
1710
1711   return type;
1712 }
1713
1714 /* Non-zero iff TYPE represents a standard GNAT packed-array type.  */
1715
1716 static int
1717 ada_is_packed_array_type  (struct type *type)
1718 {
1719   if (type == NULL)
1720     return 0;
1721   type = desc_base_type (type);
1722   type = ada_check_typedef (type);
1723   return
1724     ada_type_name (type) != NULL
1725     && strstr (ada_type_name (type), "___XP") != NULL;
1726 }
1727
1728 /* Non-zero iff TYPE represents a standard GNAT constrained
1729    packed-array type.  */
1730
1731 int
1732 ada_is_constrained_packed_array_type (struct type *type)
1733 {
1734   return ada_is_packed_array_type (type)
1735     && !ada_is_array_descriptor_type (type);
1736 }
1737
1738 /* Non-zero iff TYPE represents an array descriptor for a
1739    unconstrained packed-array type.  */
1740
1741 static int
1742 ada_is_unconstrained_packed_array_type (struct type *type)
1743 {
1744   return ada_is_packed_array_type (type)
1745     && ada_is_array_descriptor_type (type);
1746 }
1747
1748 /* Given that TYPE encodes a packed array type (constrained or unconstrained),
1749    return the size of its elements in bits.  */
1750
1751 static long
1752 decode_packed_array_bitsize (struct type *type)
1753 {
1754   char *raw_name = ada_type_name (ada_check_typedef (type));
1755   char *tail;
1756   long bits;
1757
1758   if (!raw_name)
1759     raw_name = ada_type_name (desc_base_type (type));
1760
1761   if (!raw_name)
1762     return 0;
1763
1764   tail = strstr (raw_name, "___XP");
1765
1766   if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1767     {
1768       lim_warning
1769         (_("could not understand bit size information on packed array"));
1770       return 0;
1771     }
1772
1773   return bits;
1774 }
1775
1776 /* Given that TYPE is a standard GDB array type with all bounds filled
1777    in, and that the element size of its ultimate scalar constituents
1778    (that is, either its elements, or, if it is an array of arrays, its
1779    elements' elements, etc.) is *ELT_BITS, return an identical type,
1780    but with the bit sizes of its elements (and those of any
1781    constituent arrays) recorded in the BITSIZE components of its
1782    TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1783    in bits.  */
1784
1785 static struct type *
1786 constrained_packed_array_type (struct type *type, long *elt_bits)
1787 {
1788   struct type *new_elt_type;
1789   struct type *new_type;
1790   LONGEST low_bound, high_bound;
1791
1792   type = ada_check_typedef (type);
1793   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1794     return type;
1795
1796   new_type = alloc_type_copy (type);
1797   new_elt_type =
1798     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
1799                                    elt_bits);
1800   create_array_type (new_type, new_elt_type, TYPE_INDEX_TYPE (type));
1801   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1802   TYPE_NAME (new_type) = ada_type_name (type);
1803
1804   if (get_discrete_bounds (TYPE_INDEX_TYPE (type),
1805                            &low_bound, &high_bound) < 0)
1806     low_bound = high_bound = 0;
1807   if (high_bound < low_bound)
1808     *elt_bits = TYPE_LENGTH (new_type) = 0;
1809   else
1810     {
1811       *elt_bits *= (high_bound - low_bound + 1);
1812       TYPE_LENGTH (new_type) =
1813         (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1814     }
1815
1816   TYPE_FIXED_INSTANCE (new_type) = 1;
1817   return new_type;
1818 }
1819
1820 /* The array type encoded by TYPE, where
1821    ada_is_constrained_packed_array_type (TYPE).  */
1822
1823 static struct type *
1824 decode_constrained_packed_array_type (struct type *type)
1825 {
1826   char *raw_name = ada_type_name (ada_check_typedef (type));
1827   char *name;
1828   char *tail;
1829   struct type *shadow_type;
1830   long bits;
1831
1832   if (!raw_name)
1833     raw_name = ada_type_name (desc_base_type (type));
1834
1835   if (!raw_name)
1836     return NULL;
1837
1838   name = (char *) alloca (strlen (raw_name) + 1);
1839   tail = strstr (raw_name, "___XP");
1840   type = desc_base_type (type);
1841
1842   memcpy (name, raw_name, tail - raw_name);
1843   name[tail - raw_name] = '\000';
1844
1845   shadow_type = ada_find_parallel_type_with_name (type, name);
1846
1847   if (shadow_type == NULL)
1848     {
1849       lim_warning (_("could not find bounds information on packed array"));
1850       return NULL;
1851     }
1852   CHECK_TYPEDEF (shadow_type);
1853
1854   if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1855     {
1856       lim_warning (_("could not understand bounds information on packed array"));
1857       return NULL;
1858     }
1859
1860   bits = decode_packed_array_bitsize (type);
1861   return constrained_packed_array_type (shadow_type, &bits);
1862 }
1863
1864 /* Given that ARR is a struct value *indicating a GNAT constrained packed
1865    array, returns a simple array that denotes that array.  Its type is a
1866    standard GDB array type except that the BITSIZEs of the array
1867    target types are set to the number of bits in each element, and the
1868    type length is set appropriately.  */
1869
1870 static struct value *
1871 decode_constrained_packed_array (struct value *arr)
1872 {
1873   struct type *type;
1874
1875   arr = ada_coerce_ref (arr);
1876
1877   /* If our value is a pointer, then dererence it.  Make sure that
1878      this operation does not cause the target type to be fixed, as
1879      this would indirectly cause this array to be decoded.  The rest
1880      of the routine assumes that the array hasn't been decoded yet,
1881      so we use the basic "value_ind" routine to perform the dereferencing,
1882      as opposed to using "ada_value_ind".  */
1883   if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
1884     arr = value_ind (arr);
1885
1886   type = decode_constrained_packed_array_type (value_type (arr));
1887   if (type == NULL)
1888     {
1889       error (_("can't unpack array"));
1890       return NULL;
1891     }
1892
1893   if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
1894       && ada_is_modular_type (value_type (arr)))
1895     {
1896        /* This is a (right-justified) modular type representing a packed
1897          array with no wrapper.  In order to interpret the value through
1898          the (left-justified) packed array type we just built, we must
1899          first left-justify it.  */
1900       int bit_size, bit_pos;
1901       ULONGEST mod;
1902
1903       mod = ada_modulus (value_type (arr)) - 1;
1904       bit_size = 0;
1905       while (mod > 0)
1906         {
1907           bit_size += 1;
1908           mod >>= 1;
1909         }
1910       bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
1911       arr = ada_value_primitive_packed_val (arr, NULL,
1912                                             bit_pos / HOST_CHAR_BIT,
1913                                             bit_pos % HOST_CHAR_BIT,
1914                                             bit_size,
1915                                             type);
1916     }
1917
1918   return coerce_unspec_val_to_type (arr, type);
1919 }
1920
1921
1922 /* The value of the element of packed array ARR at the ARITY indices
1923    given in IND.   ARR must be a simple array.  */
1924
1925 static struct value *
1926 value_subscript_packed (struct value *arr, int arity, struct value **ind)
1927 {
1928   int i;
1929   int bits, elt_off, bit_off;
1930   long elt_total_bit_offset;
1931   struct type *elt_type;
1932   struct value *v;
1933
1934   bits = 0;
1935   elt_total_bit_offset = 0;
1936   elt_type = ada_check_typedef (value_type (arr));
1937   for (i = 0; i < arity; i += 1)
1938     {
1939       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1940           || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1941         error
1942           (_("attempt to do packed indexing of something other than a packed array"));
1943       else
1944         {
1945           struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1946           LONGEST lowerbound, upperbound;
1947           LONGEST idx;
1948
1949           if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
1950             {
1951               lim_warning (_("don't know bounds of array"));
1952               lowerbound = upperbound = 0;
1953             }
1954
1955           idx = pos_atr (ind[i]);
1956           if (idx < lowerbound || idx > upperbound)
1957             lim_warning (_("packed array index %ld out of bounds"), (long) idx);
1958           bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1959           elt_total_bit_offset += (idx - lowerbound) * bits;
1960           elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
1961         }
1962     }
1963   elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1964   bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1965
1966   v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1967                                       bits, elt_type);
1968   return v;
1969 }
1970
1971 /* Non-zero iff TYPE includes negative integer values.  */
1972
1973 static int
1974 has_negatives (struct type *type)
1975 {
1976   switch (TYPE_CODE (type))
1977     {
1978     default:
1979       return 0;
1980     case TYPE_CODE_INT:
1981       return !TYPE_UNSIGNED (type);
1982     case TYPE_CODE_RANGE:
1983       return TYPE_LOW_BOUND (type) < 0;
1984     }
1985 }
1986
1987
1988 /* Create a new value of type TYPE from the contents of OBJ starting
1989    at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1990    proceeding for BIT_SIZE bits.  If OBJ is an lval in memory, then
1991    assigning through the result will set the field fetched from.  
1992    VALADDR is ignored unless OBJ is NULL, in which case,
1993    VALADDR+OFFSET must address the start of storage containing the 
1994    packed value.  The value returned  in this case is never an lval.
1995    Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT.  */
1996
1997 struct value *
1998 ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
1999                                 long offset, int bit_offset, int bit_size,
2000                                 struct type *type)
2001 {
2002   struct value *v;
2003   int src,                      /* Index into the source area */
2004     targ,                       /* Index into the target area */
2005     srcBitsLeft,                /* Number of source bits left to move */
2006     nsrc, ntarg,                /* Number of source and target bytes */
2007     unusedLS,                   /* Number of bits in next significant
2008                                    byte of source that are unused */
2009     accumSize;                  /* Number of meaningful bits in accum */
2010   unsigned char *bytes;         /* First byte containing data to unpack */
2011   unsigned char *unpacked;
2012   unsigned long accum;          /* Staging area for bits being transferred */
2013   unsigned char sign;
2014   int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2015   /* Transmit bytes from least to most significant; delta is the direction
2016      the indices move.  */
2017   int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
2018
2019   type = ada_check_typedef (type);
2020
2021   if (obj == NULL)
2022     {
2023       v = allocate_value (type);
2024       bytes = (unsigned char *) (valaddr + offset);
2025     }
2026   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2027     {
2028       v = value_at (type,
2029                     value_address (obj) + offset);
2030       bytes = (unsigned char *) alloca (len);
2031       read_memory (value_address (v), bytes, len);
2032     }
2033   else
2034     {
2035       v = allocate_value (type);
2036       bytes = (unsigned char *) value_contents (obj) + offset;
2037     }
2038
2039   if (obj != NULL)
2040     {
2041       CORE_ADDR new_addr;
2042       set_value_component_location (v, obj);
2043       new_addr = value_address (obj) + offset;
2044       set_value_bitpos (v, bit_offset + value_bitpos (obj));
2045       set_value_bitsize (v, bit_size);
2046       if (value_bitpos (v) >= HOST_CHAR_BIT)
2047         {
2048           ++new_addr;
2049           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2050         }
2051       set_value_address (v, new_addr);
2052     }
2053   else
2054     set_value_bitsize (v, bit_size);
2055   unpacked = (unsigned char *) value_contents (v);
2056
2057   srcBitsLeft = bit_size;
2058   nsrc = len;
2059   ntarg = TYPE_LENGTH (type);
2060   sign = 0;
2061   if (bit_size == 0)
2062     {
2063       memset (unpacked, 0, TYPE_LENGTH (type));
2064       return v;
2065     }
2066   else if (gdbarch_bits_big_endian (get_type_arch (type)))
2067     {
2068       src = len - 1;
2069       if (has_negatives (type)
2070           && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
2071         sign = ~0;
2072
2073       unusedLS =
2074         (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2075         % HOST_CHAR_BIT;
2076
2077       switch (TYPE_CODE (type))
2078         {
2079         case TYPE_CODE_ARRAY:
2080         case TYPE_CODE_UNION:
2081         case TYPE_CODE_STRUCT:
2082           /* Non-scalar values must be aligned at a byte boundary...  */
2083           accumSize =
2084             (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2085           /* ... And are placed at the beginning (most-significant) bytes
2086              of the target.  */
2087           targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2088           ntarg = targ + 1;
2089           break;
2090         default:
2091           accumSize = 0;
2092           targ = TYPE_LENGTH (type) - 1;
2093           break;
2094         }
2095     }
2096   else
2097     {
2098       int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2099
2100       src = targ = 0;
2101       unusedLS = bit_offset;
2102       accumSize = 0;
2103
2104       if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
2105         sign = ~0;
2106     }
2107
2108   accum = 0;
2109   while (nsrc > 0)
2110     {
2111       /* Mask for removing bits of the next source byte that are not
2112          part of the value.  */
2113       unsigned int unusedMSMask =
2114         (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2115         1;
2116       /* Sign-extend bits for this byte.  */
2117       unsigned int signMask = sign & ~unusedMSMask;
2118       accum |=
2119         (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
2120       accumSize += HOST_CHAR_BIT - unusedLS;
2121       if (accumSize >= HOST_CHAR_BIT)
2122         {
2123           unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2124           accumSize -= HOST_CHAR_BIT;
2125           accum >>= HOST_CHAR_BIT;
2126           ntarg -= 1;
2127           targ += delta;
2128         }
2129       srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2130       unusedLS = 0;
2131       nsrc -= 1;
2132       src += delta;
2133     }
2134   while (ntarg > 0)
2135     {
2136       accum |= sign << accumSize;
2137       unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2138       accumSize -= HOST_CHAR_BIT;
2139       accum >>= HOST_CHAR_BIT;
2140       ntarg -= 1;
2141       targ += delta;
2142     }
2143
2144   return v;
2145 }
2146
2147 /* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2148    TARGET, starting at bit offset TARG_OFFSET.  SOURCE and TARGET must
2149    not overlap.  */
2150 static void
2151 move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
2152            int src_offset, int n, int bits_big_endian_p)
2153 {
2154   unsigned int accum, mask;
2155   int accum_bits, chunk_size;
2156
2157   target += targ_offset / HOST_CHAR_BIT;
2158   targ_offset %= HOST_CHAR_BIT;
2159   source += src_offset / HOST_CHAR_BIT;
2160   src_offset %= HOST_CHAR_BIT;
2161   if (bits_big_endian_p)
2162     {
2163       accum = (unsigned char) *source;
2164       source += 1;
2165       accum_bits = HOST_CHAR_BIT - src_offset;
2166
2167       while (n > 0)
2168         {
2169           int unused_right;
2170           accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2171           accum_bits += HOST_CHAR_BIT;
2172           source += 1;
2173           chunk_size = HOST_CHAR_BIT - targ_offset;
2174           if (chunk_size > n)
2175             chunk_size = n;
2176           unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2177           mask = ((1 << chunk_size) - 1) << unused_right;
2178           *target =
2179             (*target & ~mask)
2180             | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2181           n -= chunk_size;
2182           accum_bits -= chunk_size;
2183           target += 1;
2184           targ_offset = 0;
2185         }
2186     }
2187   else
2188     {
2189       accum = (unsigned char) *source >> src_offset;
2190       source += 1;
2191       accum_bits = HOST_CHAR_BIT - src_offset;
2192
2193       while (n > 0)
2194         {
2195           accum = accum + ((unsigned char) *source << accum_bits);
2196           accum_bits += HOST_CHAR_BIT;
2197           source += 1;
2198           chunk_size = HOST_CHAR_BIT - targ_offset;
2199           if (chunk_size > n)
2200             chunk_size = n;
2201           mask = ((1 << chunk_size) - 1) << targ_offset;
2202           *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2203           n -= chunk_size;
2204           accum_bits -= chunk_size;
2205           accum >>= chunk_size;
2206           target += 1;
2207           targ_offset = 0;
2208         }
2209     }
2210 }
2211
2212 /* Store the contents of FROMVAL into the location of TOVAL.
2213    Return a new value with the location of TOVAL and contents of
2214    FROMVAL.   Handles assignment into packed fields that have
2215    floating-point or non-scalar types.  */
2216
2217 static struct value *
2218 ada_value_assign (struct value *toval, struct value *fromval)
2219 {
2220   struct type *type = value_type (toval);
2221   int bits = value_bitsize (toval);
2222
2223   toval = ada_coerce_ref (toval);
2224   fromval = ada_coerce_ref (fromval);
2225
2226   if (ada_is_direct_array_type (value_type (toval)))
2227     toval = ada_coerce_to_simple_array (toval);
2228   if (ada_is_direct_array_type (value_type (fromval)))
2229     fromval = ada_coerce_to_simple_array (fromval);
2230
2231   if (!deprecated_value_modifiable (toval))
2232     error (_("Left operand of assignment is not a modifiable lvalue."));
2233
2234   if (VALUE_LVAL (toval) == lval_memory
2235       && bits > 0
2236       && (TYPE_CODE (type) == TYPE_CODE_FLT
2237           || TYPE_CODE (type) == TYPE_CODE_STRUCT))
2238     {
2239       int len = (value_bitpos (toval)
2240                  + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2241       int from_size;
2242       char *buffer = (char *) alloca (len);
2243       struct value *val;
2244       CORE_ADDR to_addr = value_address (toval);
2245
2246       if (TYPE_CODE (type) == TYPE_CODE_FLT)
2247         fromval = value_cast (type, fromval);
2248
2249       read_memory (to_addr, buffer, len);
2250       from_size = value_bitsize (fromval);
2251       if (from_size == 0)
2252         from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
2253       if (gdbarch_bits_big_endian (get_type_arch (type)))
2254         move_bits (buffer, value_bitpos (toval),
2255                    value_contents (fromval), from_size - bits, bits, 1);
2256       else
2257         move_bits (buffer, value_bitpos (toval),
2258                    value_contents (fromval), 0, bits, 0);
2259       write_memory (to_addr, buffer, len);
2260       observer_notify_memory_changed (to_addr, len, buffer);
2261
2262       val = value_copy (toval);
2263       memcpy (value_contents_raw (val), value_contents (fromval),
2264               TYPE_LENGTH (type));
2265       deprecated_set_value_type (val, type);
2266
2267       return val;
2268     }
2269
2270   return value_assign (toval, fromval);
2271 }
2272
2273
2274 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2275  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2276  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2277  * COMPONENT, and not the inferior's memory.  The current contents 
2278  * of COMPONENT are ignored.  */
2279 static void
2280 value_assign_to_component (struct value *container, struct value *component,
2281                            struct value *val)
2282 {
2283   LONGEST offset_in_container =
2284     (LONGEST)  (value_address (component) - value_address (container));
2285   int bit_offset_in_container = 
2286     value_bitpos (component) - value_bitpos (container);
2287   int bits;
2288   
2289   val = value_cast (value_type (component), val);
2290
2291   if (value_bitsize (component) == 0)
2292     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2293   else
2294     bits = value_bitsize (component);
2295
2296   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2297     move_bits (value_contents_writeable (container) + offset_in_container, 
2298                value_bitpos (container) + bit_offset_in_container,
2299                value_contents (val),
2300                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2301                bits, 1);
2302   else
2303     move_bits (value_contents_writeable (container) + offset_in_container, 
2304                value_bitpos (container) + bit_offset_in_container,
2305                value_contents (val), 0, bits, 0);
2306 }              
2307                         
2308 /* The value of the element of array ARR at the ARITY indices given in IND.
2309    ARR may be either a simple array, GNAT array descriptor, or pointer
2310    thereto.  */
2311
2312 struct value *
2313 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2314 {
2315   int k;
2316   struct value *elt;
2317   struct type *elt_type;
2318
2319   elt = ada_coerce_to_simple_array (arr);
2320
2321   elt_type = ada_check_typedef (value_type (elt));
2322   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2323       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2324     return value_subscript_packed (elt, arity, ind);
2325
2326   for (k = 0; k < arity; k += 1)
2327     {
2328       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2329         error (_("too many subscripts (%d expected)"), k);
2330       elt = value_subscript (elt, pos_atr (ind[k]));
2331     }
2332   return elt;
2333 }
2334
2335 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2336    value of the element of *ARR at the ARITY indices given in
2337    IND.  Does not read the entire array into memory.  */
2338
2339 static struct value *
2340 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2341                          struct value **ind)
2342 {
2343   int k;
2344
2345   for (k = 0; k < arity; k += 1)
2346     {
2347       LONGEST lwb, upb;
2348
2349       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2350         error (_("too many subscripts (%d expected)"), k);
2351       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2352                         value_copy (arr));
2353       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2354       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2355       type = TYPE_TARGET_TYPE (type);
2356     }
2357
2358   return value_ind (arr);
2359 }
2360
2361 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2362    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2363    elements starting at index LOW.  The lower bound of this array is LOW, as
2364    per Ada rules. */
2365 static struct value *
2366 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2367                           int low, int high)
2368 {
2369   CORE_ADDR base = value_as_address (array_ptr)
2370     + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type)))
2371        * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2372   struct type *index_type =
2373     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2374                        low, high);
2375   struct type *slice_type =
2376     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2377   return value_at_lazy (slice_type, base);
2378 }
2379
2380
2381 static struct value *
2382 ada_value_slice (struct value *array, int low, int high)
2383 {
2384   struct type *type = value_type (array);
2385   struct type *index_type =
2386     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2387   struct type *slice_type =
2388     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2389   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2390 }
2391
2392 /* If type is a record type in the form of a standard GNAT array
2393    descriptor, returns the number of dimensions for type.  If arr is a
2394    simple array, returns the number of "array of"s that prefix its
2395    type designation.  Otherwise, returns 0.  */
2396
2397 int
2398 ada_array_arity (struct type *type)
2399 {
2400   int arity;
2401
2402   if (type == NULL)
2403     return 0;
2404
2405   type = desc_base_type (type);
2406
2407   arity = 0;
2408   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2409     return desc_arity (desc_bounds_type (type));
2410   else
2411     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2412       {
2413         arity += 1;
2414         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2415       }
2416
2417   return arity;
2418 }
2419
2420 /* If TYPE is a record type in the form of a standard GNAT array
2421    descriptor or a simple array type, returns the element type for
2422    TYPE after indexing by NINDICES indices, or by all indices if
2423    NINDICES is -1.  Otherwise, returns NULL.  */
2424
2425 struct type *
2426 ada_array_element_type (struct type *type, int nindices)
2427 {
2428   type = desc_base_type (type);
2429
2430   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2431     {
2432       int k;
2433       struct type *p_array_type;
2434
2435       p_array_type = desc_data_target_type (type);
2436
2437       k = ada_array_arity (type);
2438       if (k == 0)
2439         return NULL;
2440
2441       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2442       if (nindices >= 0 && k > nindices)
2443         k = nindices;
2444       while (k > 0 && p_array_type != NULL)
2445         {
2446           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2447           k -= 1;
2448         }
2449       return p_array_type;
2450     }
2451   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2452     {
2453       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2454         {
2455           type = TYPE_TARGET_TYPE (type);
2456           nindices -= 1;
2457         }
2458       return type;
2459     }
2460
2461   return NULL;
2462 }
2463
2464 /* The type of nth index in arrays of given type (n numbering from 1).
2465    Does not examine memory.  Throws an error if N is invalid or TYPE
2466    is not an array type.  NAME is the name of the Ada attribute being
2467    evaluated ('range, 'first, 'last, or 'length); it is used in building
2468    the error message.  */
2469
2470 static struct type *
2471 ada_index_type (struct type *type, int n, const char *name)
2472 {
2473   struct type *result_type;
2474
2475   type = desc_base_type (type);
2476
2477   if (n < 0 || n > ada_array_arity (type))
2478     error (_("invalid dimension number to '%s"), name);
2479
2480   if (ada_is_simple_array_type (type))
2481     {
2482       int i;
2483
2484       for (i = 1; i < n; i += 1)
2485         type = TYPE_TARGET_TYPE (type);
2486       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2487       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2488          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2489          perhaps stabsread.c would make more sense.  */
2490       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2491         result_type = NULL;
2492     }
2493   else
2494     {
2495       result_type = desc_index_type (desc_bounds_type (type), n);
2496       if (result_type == NULL)
2497         error (_("attempt to take bound of something that is not an array"));
2498     }
2499
2500   return result_type;
2501 }
2502
2503 /* Given that arr is an array type, returns the lower bound of the
2504    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2505    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2506    array-descriptor type.  It works for other arrays with bounds supplied
2507    by run-time quantities other than discriminants.  */
2508
2509 static LONGEST
2510 ada_array_bound_from_type (struct type * arr_type, int n, int which)
2511 {
2512   struct type *type, *elt_type, *index_type_desc, *index_type;
2513   int i;
2514
2515   gdb_assert (which == 0 || which == 1);
2516
2517   if (ada_is_constrained_packed_array_type (arr_type))
2518     arr_type = decode_constrained_packed_array_type (arr_type);
2519
2520   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2521     return (LONGEST) - which;
2522
2523   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2524     type = TYPE_TARGET_TYPE (arr_type);
2525   else
2526     type = arr_type;
2527
2528   elt_type = type;
2529   for (i = n; i > 1; i--)
2530     elt_type = TYPE_TARGET_TYPE (type);
2531
2532   index_type_desc = ada_find_parallel_type (type, "___XA");
2533   if (index_type_desc != NULL)
2534     index_type = to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2535                                       NULL, TYPE_INDEX_TYPE (elt_type));
2536   else
2537     index_type = TYPE_INDEX_TYPE (elt_type);
2538
2539   return
2540     (LONGEST) (which == 0
2541                ? ada_discrete_type_low_bound (index_type)
2542                : ada_discrete_type_high_bound (index_type));
2543 }
2544
2545 /* Given that arr is an array value, returns the lower bound of the
2546    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2547    WHICH is 1.  This routine will also work for arrays with bounds
2548    supplied by run-time quantities other than discriminants.  */
2549
2550 static LONGEST
2551 ada_array_bound (struct value *arr, int n, int which)
2552 {
2553   struct type *arr_type = value_type (arr);
2554
2555   if (ada_is_constrained_packed_array_type (arr_type))
2556     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2557   else if (ada_is_simple_array_type (arr_type))
2558     return ada_array_bound_from_type (arr_type, n, which);
2559   else
2560     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2561 }
2562
2563 /* Given that arr is an array value, returns the length of the
2564    nth index.  This routine will also work for arrays with bounds
2565    supplied by run-time quantities other than discriminants.
2566    Does not work for arrays indexed by enumeration types with representation
2567    clauses at the moment.  */
2568
2569 static LONGEST
2570 ada_array_length (struct value *arr, int n)
2571 {
2572   struct type *arr_type = ada_check_typedef (value_type (arr));
2573
2574   if (ada_is_constrained_packed_array_type (arr_type))
2575     return ada_array_length (decode_constrained_packed_array (arr), n);
2576
2577   if (ada_is_simple_array_type (arr_type))
2578     return (ada_array_bound_from_type (arr_type, n, 1)
2579             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2580   else
2581     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2582             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2583 }
2584
2585 /* An empty array whose type is that of ARR_TYPE (an array type),
2586    with bounds LOW to LOW-1.  */
2587
2588 static struct value *
2589 empty_array (struct type *arr_type, int low)
2590 {
2591   struct type *index_type =
2592     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2593                        low, low - 1);
2594   struct type *elt_type = ada_array_element_type (arr_type, 1);
2595   return allocate_value (create_array_type (NULL, elt_type, index_type));
2596 }
2597 \f
2598
2599                                 /* Name resolution */
2600
2601 /* The "decoded" name for the user-definable Ada operator corresponding
2602    to OP.  */
2603
2604 static const char *
2605 ada_decoded_op_name (enum exp_opcode op)
2606 {
2607   int i;
2608
2609   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2610     {
2611       if (ada_opname_table[i].op == op)
2612         return ada_opname_table[i].decoded;
2613     }
2614   error (_("Could not find operator name for opcode"));
2615 }
2616
2617
2618 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2619    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2620    undefined namespace) and converts operators that are
2621    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2622    non-null, it provides a preferred result type [at the moment, only
2623    type void has any effect---causing procedures to be preferred over
2624    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2625    return type is preferred.  May change (expand) *EXP.  */
2626
2627 static void
2628 resolve (struct expression **expp, int void_context_p)
2629 {
2630   struct type *context_type = NULL;
2631   int pc = 0;
2632
2633   if (void_context_p)
2634     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2635
2636   resolve_subexp (expp, &pc, 1, context_type);
2637 }
2638
2639 /* Resolve the operator of the subexpression beginning at
2640    position *POS of *EXPP.  "Resolving" consists of replacing
2641    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2642    with their resolutions, replacing built-in operators with
2643    function calls to user-defined operators, where appropriate, and,
2644    when DEPROCEDURE_P is non-zero, converting function-valued variables
2645    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2646    are as in ada_resolve, above.  */
2647
2648 static struct value *
2649 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2650                 struct type *context_type)
2651 {
2652   int pc = *pos;
2653   int i;
2654   struct expression *exp;       /* Convenience: == *expp.  */
2655   enum exp_opcode op = (*expp)->elts[pc].opcode;
2656   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2657   int nargs;                    /* Number of operands.  */
2658   int oplen;
2659
2660   argvec = NULL;
2661   nargs = 0;
2662   exp = *expp;
2663
2664   /* Pass one: resolve operands, saving their types and updating *pos,
2665      if needed.  */
2666   switch (op)
2667     {
2668     case OP_FUNCALL:
2669       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2670           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2671         *pos += 7;
2672       else
2673         {
2674           *pos += 3;
2675           resolve_subexp (expp, pos, 0, NULL);
2676         }
2677       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2678       break;
2679
2680     case UNOP_ADDR:
2681       *pos += 1;
2682       resolve_subexp (expp, pos, 0, NULL);
2683       break;
2684
2685     case UNOP_QUAL:
2686       *pos += 3;
2687       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
2688       break;
2689
2690     case OP_ATR_MODULUS:
2691     case OP_ATR_SIZE:
2692     case OP_ATR_TAG:
2693     case OP_ATR_FIRST:
2694     case OP_ATR_LAST:
2695     case OP_ATR_LENGTH:
2696     case OP_ATR_POS:
2697     case OP_ATR_VAL:
2698     case OP_ATR_MIN:
2699     case OP_ATR_MAX:
2700     case TERNOP_IN_RANGE:
2701     case BINOP_IN_BOUNDS:
2702     case UNOP_IN_RANGE:
2703     case OP_AGGREGATE:
2704     case OP_OTHERS:
2705     case OP_CHOICES:
2706     case OP_POSITIONAL:
2707     case OP_DISCRETE_RANGE:
2708     case OP_NAME:
2709       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2710       *pos += oplen;
2711       break;
2712
2713     case BINOP_ASSIGN:
2714       {
2715         struct value *arg1;
2716
2717         *pos += 1;
2718         arg1 = resolve_subexp (expp, pos, 0, NULL);
2719         if (arg1 == NULL)
2720           resolve_subexp (expp, pos, 1, NULL);
2721         else
2722           resolve_subexp (expp, pos, 1, value_type (arg1));
2723         break;
2724       }
2725
2726     case UNOP_CAST:
2727       *pos += 3;
2728       nargs = 1;
2729       break;
2730
2731     case BINOP_ADD:
2732     case BINOP_SUB:
2733     case BINOP_MUL:
2734     case BINOP_DIV:
2735     case BINOP_REM:
2736     case BINOP_MOD:
2737     case BINOP_EXP:
2738     case BINOP_CONCAT:
2739     case BINOP_LOGICAL_AND:
2740     case BINOP_LOGICAL_OR:
2741     case BINOP_BITWISE_AND:
2742     case BINOP_BITWISE_IOR:
2743     case BINOP_BITWISE_XOR:
2744
2745     case BINOP_EQUAL:
2746     case BINOP_NOTEQUAL:
2747     case BINOP_LESS:
2748     case BINOP_GTR:
2749     case BINOP_LEQ:
2750     case BINOP_GEQ:
2751
2752     case BINOP_REPEAT:
2753     case BINOP_SUBSCRIPT:
2754     case BINOP_COMMA:
2755       *pos += 1;
2756       nargs = 2;
2757       break;
2758
2759     case UNOP_NEG:
2760     case UNOP_PLUS:
2761     case UNOP_LOGICAL_NOT:
2762     case UNOP_ABS:
2763     case UNOP_IND:
2764       *pos += 1;
2765       nargs = 1;
2766       break;
2767
2768     case OP_LONG:
2769     case OP_DOUBLE:
2770     case OP_VAR_VALUE:
2771       *pos += 4;
2772       break;
2773
2774     case OP_TYPE:
2775     case OP_BOOL:
2776     case OP_LAST:
2777     case OP_INTERNALVAR:
2778       *pos += 3;
2779       break;
2780
2781     case UNOP_MEMVAL:
2782       *pos += 3;
2783       nargs = 1;
2784       break;
2785
2786     case OP_REGISTER:
2787       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2788       break;
2789
2790     case STRUCTOP_STRUCT:
2791       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2792       nargs = 1;
2793       break;
2794
2795     case TERNOP_SLICE:
2796       *pos += 1;
2797       nargs = 3;
2798       break;
2799
2800     case OP_STRING:
2801       break;
2802
2803     default:
2804       error (_("Unexpected operator during name resolution"));
2805     }
2806
2807   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2808   for (i = 0; i < nargs; i += 1)
2809     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2810   argvec[i] = NULL;
2811   exp = *expp;
2812
2813   /* Pass two: perform any resolution on principal operator.  */
2814   switch (op)
2815     {
2816     default:
2817       break;
2818
2819     case OP_VAR_VALUE:
2820       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2821         {
2822           struct ada_symbol_info *candidates;
2823           int n_candidates;
2824
2825           n_candidates =
2826             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2827                                     (exp->elts[pc + 2].symbol),
2828                                     exp->elts[pc + 1].block, VAR_DOMAIN,
2829                                     &candidates);
2830
2831           if (n_candidates > 1)
2832             {
2833               /* Types tend to get re-introduced locally, so if there
2834                  are any local symbols that are not types, first filter
2835                  out all types.  */
2836               int j;
2837               for (j = 0; j < n_candidates; j += 1)
2838                 switch (SYMBOL_CLASS (candidates[j].sym))
2839                   {
2840                   case LOC_REGISTER:
2841                   case LOC_ARG:
2842                   case LOC_REF_ARG:
2843                   case LOC_REGPARM_ADDR:
2844                   case LOC_LOCAL:
2845                   case LOC_COMPUTED:
2846                     goto FoundNonType;
2847                   default:
2848                     break;
2849                   }
2850             FoundNonType:
2851               if (j < n_candidates)
2852                 {
2853                   j = 0;
2854                   while (j < n_candidates)
2855                     {
2856                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2857                         {
2858                           candidates[j] = candidates[n_candidates - 1];
2859                           n_candidates -= 1;
2860                         }
2861                       else
2862                         j += 1;
2863                     }
2864                 }
2865             }
2866
2867           if (n_candidates == 0)
2868             error (_("No definition found for %s"),
2869                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2870           else if (n_candidates == 1)
2871             i = 0;
2872           else if (deprocedure_p
2873                    && !is_nonfunction (candidates, n_candidates))
2874             {
2875               i = ada_resolve_function
2876                 (candidates, n_candidates, NULL, 0,
2877                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2878                  context_type);
2879               if (i < 0)
2880                 error (_("Could not find a match for %s"),
2881                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2882             }
2883           else
2884             {
2885               printf_filtered (_("Multiple matches for %s\n"),
2886                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2887               user_select_syms (candidates, n_candidates, 1);
2888               i = 0;
2889             }
2890
2891           exp->elts[pc + 1].block = candidates[i].block;
2892           exp->elts[pc + 2].symbol = candidates[i].sym;
2893           if (innermost_block == NULL
2894               || contained_in (candidates[i].block, innermost_block))
2895             innermost_block = candidates[i].block;
2896         }
2897
2898       if (deprocedure_p
2899           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2900               == TYPE_CODE_FUNC))
2901         {
2902           replace_operator_with_call (expp, pc, 0, 0,
2903                                       exp->elts[pc + 2].symbol,
2904                                       exp->elts[pc + 1].block);
2905           exp = *expp;
2906         }
2907       break;
2908
2909     case OP_FUNCALL:
2910       {
2911         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2912             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2913           {
2914             struct ada_symbol_info *candidates;
2915             int n_candidates;
2916
2917             n_candidates =
2918               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2919                                       (exp->elts[pc + 5].symbol),
2920                                       exp->elts[pc + 4].block, VAR_DOMAIN,
2921                                       &candidates);
2922             if (n_candidates == 1)
2923               i = 0;
2924             else
2925               {
2926                 i = ada_resolve_function
2927                   (candidates, n_candidates,
2928                    argvec, nargs,
2929                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2930                    context_type);
2931                 if (i < 0)
2932                   error (_("Could not find a match for %s"),
2933                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2934               }
2935
2936             exp->elts[pc + 4].block = candidates[i].block;
2937             exp->elts[pc + 5].symbol = candidates[i].sym;
2938             if (innermost_block == NULL
2939                 || contained_in (candidates[i].block, innermost_block))
2940               innermost_block = candidates[i].block;
2941           }
2942       }
2943       break;
2944     case BINOP_ADD:
2945     case BINOP_SUB:
2946     case BINOP_MUL:
2947     case BINOP_DIV:
2948     case BINOP_REM:
2949     case BINOP_MOD:
2950     case BINOP_CONCAT:
2951     case BINOP_BITWISE_AND:
2952     case BINOP_BITWISE_IOR:
2953     case BINOP_BITWISE_XOR:
2954     case BINOP_EQUAL:
2955     case BINOP_NOTEQUAL:
2956     case BINOP_LESS:
2957     case BINOP_GTR:
2958     case BINOP_LEQ:
2959     case BINOP_GEQ:
2960     case BINOP_EXP:
2961     case UNOP_NEG:
2962     case UNOP_PLUS:
2963     case UNOP_LOGICAL_NOT:
2964     case UNOP_ABS:
2965       if (possible_user_operator_p (op, argvec))
2966         {
2967           struct ada_symbol_info *candidates;
2968           int n_candidates;
2969
2970           n_candidates =
2971             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2972                                     (struct block *) NULL, VAR_DOMAIN,
2973                                     &candidates);
2974           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2975                                     ada_decoded_op_name (op), NULL);
2976           if (i < 0)
2977             break;
2978
2979           replace_operator_with_call (expp, pc, nargs, 1,
2980                                       candidates[i].sym, candidates[i].block);
2981           exp = *expp;
2982         }
2983       break;
2984
2985     case OP_TYPE:
2986     case OP_REGISTER:
2987       return NULL;
2988     }
2989
2990   *pos = pc;
2991   return evaluate_subexp_type (exp, pos);
2992 }
2993
2994 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
2995    MAY_DEREF is non-zero, the formal may be a pointer and the actual
2996    a non-pointer.  */
2997 /* The term "match" here is rather loose.  The match is heuristic and
2998    liberal.  */
2999
3000 static int
3001 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3002 {
3003   ftype = ada_check_typedef (ftype);
3004   atype = ada_check_typedef (atype);
3005
3006   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3007     ftype = TYPE_TARGET_TYPE (ftype);
3008   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3009     atype = TYPE_TARGET_TYPE (atype);
3010
3011   switch (TYPE_CODE (ftype))
3012     {
3013     default:
3014       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3015     case TYPE_CODE_PTR:
3016       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3017         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3018                                TYPE_TARGET_TYPE (atype), 0);
3019       else
3020         return (may_deref
3021                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3022     case TYPE_CODE_INT:
3023     case TYPE_CODE_ENUM:
3024     case TYPE_CODE_RANGE:
3025       switch (TYPE_CODE (atype))
3026         {
3027         case TYPE_CODE_INT:
3028         case TYPE_CODE_ENUM:
3029         case TYPE_CODE_RANGE:
3030           return 1;
3031         default:
3032           return 0;
3033         }
3034
3035     case TYPE_CODE_ARRAY:
3036       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3037               || ada_is_array_descriptor_type (atype));
3038
3039     case TYPE_CODE_STRUCT:
3040       if (ada_is_array_descriptor_type (ftype))
3041         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3042                 || ada_is_array_descriptor_type (atype));
3043       else
3044         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3045                 && !ada_is_array_descriptor_type (atype));
3046
3047     case TYPE_CODE_UNION:
3048     case TYPE_CODE_FLT:
3049       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3050     }
3051 }
3052
3053 /* Return non-zero if the formals of FUNC "sufficiently match" the
3054    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3055    may also be an enumeral, in which case it is treated as a 0-
3056    argument function.  */
3057
3058 static int
3059 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3060 {
3061   int i;
3062   struct type *func_type = SYMBOL_TYPE (func);
3063
3064   if (SYMBOL_CLASS (func) == LOC_CONST
3065       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3066     return (n_actuals == 0);
3067   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3068     return 0;
3069
3070   if (TYPE_NFIELDS (func_type) != n_actuals)
3071     return 0;
3072
3073   for (i = 0; i < n_actuals; i += 1)
3074     {
3075       if (actuals[i] == NULL)
3076         return 0;
3077       else
3078         {
3079           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3080           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3081
3082           if (!ada_type_match (ftype, atype, 1))
3083             return 0;
3084         }
3085     }
3086   return 1;
3087 }
3088
3089 /* False iff function type FUNC_TYPE definitely does not produce a value
3090    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3091    FUNC_TYPE is not a valid function type with a non-null return type
3092    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3093
3094 static int
3095 return_match (struct type *func_type, struct type *context_type)
3096 {
3097   struct type *return_type;
3098
3099   if (func_type == NULL)
3100     return 1;
3101
3102   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3103     return_type = base_type (TYPE_TARGET_TYPE (func_type));
3104   else
3105     return_type = base_type (func_type);
3106   if (return_type == NULL)
3107     return 1;
3108
3109   context_type = base_type (context_type);
3110
3111   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3112     return context_type == NULL || return_type == context_type;
3113   else if (context_type == NULL)
3114     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3115   else
3116     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3117 }
3118
3119
3120 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3121    function (if any) that matches the types of the NARGS arguments in
3122    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3123    that returns that type, then eliminate matches that don't.  If
3124    CONTEXT_TYPE is void and there is at least one match that does not
3125    return void, eliminate all matches that do.
3126
3127    Asks the user if there is more than one match remaining.  Returns -1
3128    if there is no such symbol or none is selected.  NAME is used
3129    solely for messages.  May re-arrange and modify SYMS in
3130    the process; the index returned is for the modified vector.  */
3131
3132 static int
3133 ada_resolve_function (struct ada_symbol_info syms[],
3134                       int nsyms, struct value **args, int nargs,
3135                       const char *name, struct type *context_type)
3136 {
3137   int fallback;
3138   int k;
3139   int m;                        /* Number of hits */
3140
3141   m = 0;
3142   /* In the first pass of the loop, we only accept functions matching
3143      context_type.  If none are found, we add a second pass of the loop
3144      where every function is accepted.  */
3145   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3146     {
3147       for (k = 0; k < nsyms; k += 1)
3148         {
3149           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3150
3151           if (ada_args_match (syms[k].sym, args, nargs)
3152               && (fallback || return_match (type, context_type)))
3153             {
3154               syms[m] = syms[k];
3155               m += 1;
3156             }
3157         }
3158     }
3159
3160   if (m == 0)
3161     return -1;
3162   else if (m > 1)
3163     {
3164       printf_filtered (_("Multiple matches for %s\n"), name);
3165       user_select_syms (syms, m, 1);
3166       return 0;
3167     }
3168   return 0;
3169 }
3170
3171 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3172    in a listing of choices during disambiguation (see sort_choices, below).
3173    The idea is that overloadings of a subprogram name from the
3174    same package should sort in their source order.  We settle for ordering
3175    such symbols by their trailing number (__N  or $N).  */
3176
3177 static int
3178 encoded_ordered_before (char *N0, char *N1)
3179 {
3180   if (N1 == NULL)
3181     return 0;
3182   else if (N0 == NULL)
3183     return 1;
3184   else
3185     {
3186       int k0, k1;
3187       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3188         ;
3189       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3190         ;
3191       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3192           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3193         {
3194           int n0, n1;
3195           n0 = k0;
3196           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3197             n0 -= 1;
3198           n1 = k1;
3199           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3200             n1 -= 1;
3201           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3202             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3203         }
3204       return (strcmp (N0, N1) < 0);
3205     }
3206 }
3207
3208 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3209    encoded names.  */
3210
3211 static void
3212 sort_choices (struct ada_symbol_info syms[], int nsyms)
3213 {
3214   int i;
3215   for (i = 1; i < nsyms; i += 1)
3216     {
3217       struct ada_symbol_info sym = syms[i];
3218       int j;
3219
3220       for (j = i - 1; j >= 0; j -= 1)
3221         {
3222           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3223                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3224             break;
3225           syms[j + 1] = syms[j];
3226         }
3227       syms[j + 1] = sym;
3228     }
3229 }
3230
3231 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3232    by asking the user (if necessary), returning the number selected, 
3233    and setting the first elements of SYMS items.  Error if no symbols
3234    selected.  */
3235
3236 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3237    to be re-integrated one of these days.  */
3238
3239 int
3240 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3241 {
3242   int i;
3243   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3244   int n_chosen;
3245   int first_choice = (max_results == 1) ? 1 : 2;
3246   const char *select_mode = multiple_symbols_select_mode ();
3247
3248   if (max_results < 1)
3249     error (_("Request to select 0 symbols!"));
3250   if (nsyms <= 1)
3251     return nsyms;
3252
3253   if (select_mode == multiple_symbols_cancel)
3254     error (_("\
3255 canceled because the command is ambiguous\n\
3256 See set/show multiple-symbol."));
3257   
3258   /* If select_mode is "all", then return all possible symbols.
3259      Only do that if more than one symbol can be selected, of course.
3260      Otherwise, display the menu as usual.  */
3261   if (select_mode == multiple_symbols_all && max_results > 1)
3262     return nsyms;
3263
3264   printf_unfiltered (_("[0] cancel\n"));
3265   if (max_results > 1)
3266     printf_unfiltered (_("[1] all\n"));
3267
3268   sort_choices (syms, nsyms);
3269
3270   for (i = 0; i < nsyms; i += 1)
3271     {
3272       if (syms[i].sym == NULL)
3273         continue;
3274
3275       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3276         {
3277           struct symtab_and_line sal =
3278             find_function_start_sal (syms[i].sym, 1);
3279           if (sal.symtab == NULL)
3280             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3281                                i + first_choice,
3282                                SYMBOL_PRINT_NAME (syms[i].sym),
3283                                sal.line);
3284           else
3285             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3286                                SYMBOL_PRINT_NAME (syms[i].sym),
3287                                sal.symtab->filename, sal.line);
3288           continue;
3289         }
3290       else
3291         {
3292           int is_enumeral =
3293             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3294              && SYMBOL_TYPE (syms[i].sym) != NULL
3295              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3296           struct symtab *symtab = syms[i].sym->symtab;
3297
3298           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3299             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3300                                i + first_choice,
3301                                SYMBOL_PRINT_NAME (syms[i].sym),
3302                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3303           else if (is_enumeral
3304                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3305             {
3306               printf_unfiltered (("[%d] "), i + first_choice);
3307               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3308                               gdb_stdout, -1, 0);
3309               printf_unfiltered (_("'(%s) (enumeral)\n"),
3310                                  SYMBOL_PRINT_NAME (syms[i].sym));
3311             }
3312           else if (symtab != NULL)
3313             printf_unfiltered (is_enumeral
3314                                ? _("[%d] %s in %s (enumeral)\n")
3315                                : _("[%d] %s at %s:?\n"),
3316                                i + first_choice,
3317                                SYMBOL_PRINT_NAME (syms[i].sym),
3318                                symtab->filename);
3319           else
3320             printf_unfiltered (is_enumeral
3321                                ? _("[%d] %s (enumeral)\n")
3322                                : _("[%d] %s at ?\n"),
3323                                i + first_choice,
3324                                SYMBOL_PRINT_NAME (syms[i].sym));
3325         }
3326     }
3327
3328   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3329                              "overload-choice");
3330
3331   for (i = 0; i < n_chosen; i += 1)
3332     syms[i] = syms[chosen[i]];
3333
3334   return n_chosen;
3335 }
3336
3337 /* Read and validate a set of numeric choices from the user in the
3338    range 0 .. N_CHOICES-1.  Place the results in increasing
3339    order in CHOICES[0 .. N-1], and return N.
3340
3341    The user types choices as a sequence of numbers on one line
3342    separated by blanks, encoding them as follows:
3343
3344      + A choice of 0 means to cancel the selection, throwing an error.
3345      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3346      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3347
3348    The user is not allowed to choose more than MAX_RESULTS values.
3349
3350    ANNOTATION_SUFFIX, if present, is used to annotate the input
3351    prompts (for use with the -f switch).  */
3352
3353 int
3354 get_selections (int *choices, int n_choices, int max_results,
3355                 int is_all_choice, char *annotation_suffix)
3356 {
3357   char *args;
3358   char *prompt;
3359   int n_chosen;
3360   int first_choice = is_all_choice ? 2 : 1;
3361
3362   prompt = getenv ("PS2");
3363   if (prompt == NULL)
3364     prompt = "> ";
3365
3366   args = command_line_input (prompt, 0, annotation_suffix);
3367
3368   if (args == NULL)
3369     error_no_arg (_("one or more choice numbers"));
3370
3371   n_chosen = 0;
3372
3373   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3374      order, as given in args.  Choices are validated.  */
3375   while (1)
3376     {
3377       char *args2;
3378       int choice, j;
3379
3380       while (isspace (*args))
3381         args += 1;
3382       if (*args == '\0' && n_chosen == 0)
3383         error_no_arg (_("one or more choice numbers"));
3384       else if (*args == '\0')
3385         break;
3386
3387       choice = strtol (args, &args2, 10);
3388       if (args == args2 || choice < 0
3389           || choice > n_choices + first_choice - 1)
3390         error (_("Argument must be choice number"));
3391       args = args2;
3392
3393       if (choice == 0)
3394         error (_("cancelled"));
3395
3396       if (choice < first_choice)
3397         {
3398           n_chosen = n_choices;
3399           for (j = 0; j < n_choices; j += 1)
3400             choices[j] = j;
3401           break;
3402         }
3403       choice -= first_choice;
3404
3405       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3406         {
3407         }
3408
3409       if (j < 0 || choice != choices[j])
3410         {
3411           int k;
3412           for (k = n_chosen - 1; k > j; k -= 1)
3413             choices[k + 1] = choices[k];
3414           choices[j + 1] = choice;
3415           n_chosen += 1;
3416         }
3417     }
3418
3419   if (n_chosen > max_results)
3420     error (_("Select no more than %d of the above"), max_results);
3421
3422   return n_chosen;
3423 }
3424
3425 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3426    on the function identified by SYM and BLOCK, and taking NARGS
3427    arguments.  Update *EXPP as needed to hold more space.  */
3428
3429 static void
3430 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3431                             int oplen, struct symbol *sym,
3432                             struct block *block)
3433 {
3434   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3435      symbol, -oplen for operator being replaced).  */
3436   struct expression *newexp = (struct expression *)
3437     xmalloc (sizeof (struct expression)
3438              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3439   struct expression *exp = *expp;
3440
3441   newexp->nelts = exp->nelts + 7 - oplen;
3442   newexp->language_defn = exp->language_defn;
3443   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3444   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3445           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3446
3447   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3448   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3449
3450   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3451   newexp->elts[pc + 4].block = block;
3452   newexp->elts[pc + 5].symbol = sym;
3453
3454   *expp = newexp;
3455   xfree (exp);
3456 }
3457
3458 /* Type-class predicates */
3459
3460 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3461    or FLOAT).  */
3462
3463 static int
3464 numeric_type_p (struct type *type)
3465 {
3466   if (type == NULL)
3467     return 0;
3468   else
3469     {
3470       switch (TYPE_CODE (type))
3471         {
3472         case TYPE_CODE_INT:
3473         case TYPE_CODE_FLT:
3474           return 1;
3475         case TYPE_CODE_RANGE:
3476           return (type == TYPE_TARGET_TYPE (type)
3477                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3478         default:
3479           return 0;
3480         }
3481     }
3482 }
3483
3484 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3485
3486 static int
3487 integer_type_p (struct type *type)
3488 {
3489   if (type == NULL)
3490     return 0;
3491   else
3492     {
3493       switch (TYPE_CODE (type))
3494         {
3495         case TYPE_CODE_INT:
3496           return 1;
3497         case TYPE_CODE_RANGE:
3498           return (type == TYPE_TARGET_TYPE (type)
3499                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3500         default:
3501           return 0;
3502         }
3503     }
3504 }
3505
3506 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3507
3508 static int
3509 scalar_type_p (struct type *type)
3510 {
3511   if (type == NULL)
3512     return 0;
3513   else
3514     {
3515       switch (TYPE_CODE (type))
3516         {
3517         case TYPE_CODE_INT:
3518         case TYPE_CODE_RANGE:
3519         case TYPE_CODE_ENUM:
3520         case TYPE_CODE_FLT:
3521           return 1;
3522         default:
3523           return 0;
3524         }
3525     }
3526 }
3527
3528 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3529
3530 static int
3531 discrete_type_p (struct type *type)
3532 {
3533   if (type == NULL)
3534     return 0;
3535   else
3536     {
3537       switch (TYPE_CODE (type))
3538         {
3539         case TYPE_CODE_INT:
3540         case TYPE_CODE_RANGE:
3541         case TYPE_CODE_ENUM:
3542         case TYPE_CODE_BOOL:
3543           return 1;
3544         default:
3545           return 0;
3546         }
3547     }
3548 }
3549
3550 /* Returns non-zero if OP with operands in the vector ARGS could be
3551    a user-defined function.  Errs on the side of pre-defined operators
3552    (i.e., result 0).  */
3553
3554 static int
3555 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3556 {
3557   struct type *type0 =
3558     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3559   struct type *type1 =
3560     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3561
3562   if (type0 == NULL)
3563     return 0;
3564
3565   switch (op)
3566     {
3567     default:
3568       return 0;
3569
3570     case BINOP_ADD:
3571     case BINOP_SUB:
3572     case BINOP_MUL:
3573     case BINOP_DIV:
3574       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3575
3576     case BINOP_REM:
3577     case BINOP_MOD:
3578     case BINOP_BITWISE_AND:
3579     case BINOP_BITWISE_IOR:
3580     case BINOP_BITWISE_XOR:
3581       return (!(integer_type_p (type0) && integer_type_p (type1)));
3582
3583     case BINOP_EQUAL:
3584     case BINOP_NOTEQUAL:
3585     case BINOP_LESS:
3586     case BINOP_GTR:
3587     case BINOP_LEQ:
3588     case BINOP_GEQ:
3589       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3590
3591     case BINOP_CONCAT:
3592       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3593
3594     case BINOP_EXP:
3595       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3596
3597     case UNOP_NEG:
3598     case UNOP_PLUS:
3599     case UNOP_LOGICAL_NOT:
3600     case UNOP_ABS:
3601       return (!numeric_type_p (type0));
3602
3603     }
3604 }
3605 \f
3606                                 /* Renaming */
3607
3608 /* NOTES: 
3609
3610    1. In the following, we assume that a renaming type's name may
3611       have an ___XD suffix.  It would be nice if this went away at some
3612       point.
3613    2. We handle both the (old) purely type-based representation of 
3614       renamings and the (new) variable-based encoding.  At some point,
3615       it is devoutly to be hoped that the former goes away 
3616       (FIXME: hilfinger-2007-07-09).
3617    3. Subprogram renamings are not implemented, although the XRS
3618       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3619
3620 /* If SYM encodes a renaming, 
3621
3622        <renaming> renames <renamed entity>,
3623
3624    sets *LEN to the length of the renamed entity's name,
3625    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3626    the string describing the subcomponent selected from the renamed
3627    entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3628    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3629    are undefined).  Otherwise, returns a value indicating the category
3630    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3631    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3632    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3633    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3634    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3635    may be NULL, in which case they are not assigned.
3636
3637    [Currently, however, GCC does not generate subprogram renamings.]  */
3638
3639 enum ada_renaming_category
3640 ada_parse_renaming (struct symbol *sym,
3641                     const char **renamed_entity, int *len, 
3642                     const char **renaming_expr)
3643 {
3644   enum ada_renaming_category kind;
3645   const char *info;
3646   const char *suffix;
3647
3648   if (sym == NULL)
3649     return ADA_NOT_RENAMING;
3650   switch (SYMBOL_CLASS (sym)) 
3651     {
3652     default:
3653       return ADA_NOT_RENAMING;
3654     case LOC_TYPEDEF:
3655       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3656                                        renamed_entity, len, renaming_expr);
3657     case LOC_LOCAL:
3658     case LOC_STATIC:
3659     case LOC_COMPUTED:
3660     case LOC_OPTIMIZED_OUT:
3661       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3662       if (info == NULL)
3663         return ADA_NOT_RENAMING;
3664       switch (info[5])
3665         {
3666         case '_':
3667           kind = ADA_OBJECT_RENAMING;
3668           info += 6;
3669           break;
3670         case 'E':
3671           kind = ADA_EXCEPTION_RENAMING;
3672           info += 7;
3673           break;
3674         case 'P':
3675           kind = ADA_PACKAGE_RENAMING;
3676           info += 7;
3677           break;
3678         case 'S':
3679           kind = ADA_SUBPROGRAM_RENAMING;
3680           info += 7;
3681           break;
3682         default:
3683           return ADA_NOT_RENAMING;
3684         }
3685     }
3686
3687   if (renamed_entity != NULL)
3688     *renamed_entity = info;
3689   suffix = strstr (info, "___XE");
3690   if (suffix == NULL || suffix == info)
3691     return ADA_NOT_RENAMING;
3692   if (len != NULL)
3693     *len = strlen (info) - strlen (suffix);
3694   suffix += 5;
3695   if (renaming_expr != NULL)
3696     *renaming_expr = suffix;
3697   return kind;
3698 }
3699
3700 /* Assuming TYPE encodes a renaming according to the old encoding in
3701    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3702    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3703    ADA_NOT_RENAMING otherwise.  */
3704 static enum ada_renaming_category
3705 parse_old_style_renaming (struct type *type,
3706                           const char **renamed_entity, int *len, 
3707                           const char **renaming_expr)
3708 {
3709   enum ada_renaming_category kind;
3710   const char *name;
3711   const char *info;
3712   const char *suffix;
3713
3714   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
3715       || TYPE_NFIELDS (type) != 1)
3716     return ADA_NOT_RENAMING;
3717
3718   name = type_name_no_tag (type);
3719   if (name == NULL)
3720     return ADA_NOT_RENAMING;
3721   
3722   name = strstr (name, "___XR");
3723   if (name == NULL)
3724     return ADA_NOT_RENAMING;
3725   switch (name[5])
3726     {
3727     case '\0':
3728     case '_':
3729       kind = ADA_OBJECT_RENAMING;
3730       break;
3731     case 'E':
3732       kind = ADA_EXCEPTION_RENAMING;
3733       break;
3734     case 'P':
3735       kind = ADA_PACKAGE_RENAMING;
3736       break;
3737     case 'S':
3738       kind = ADA_SUBPROGRAM_RENAMING;
3739       break;
3740     default:
3741       return ADA_NOT_RENAMING;
3742     }
3743
3744   info = TYPE_FIELD_NAME (type, 0);
3745   if (info == NULL)
3746     return ADA_NOT_RENAMING;
3747   if (renamed_entity != NULL)
3748     *renamed_entity = info;
3749   suffix = strstr (info, "___XE");
3750   if (renaming_expr != NULL)
3751     *renaming_expr = suffix + 5;
3752   if (suffix == NULL || suffix == info)
3753     return ADA_NOT_RENAMING;
3754   if (len != NULL)
3755     *len = suffix - info;
3756   return kind;
3757 }  
3758
3759 \f
3760
3761                                 /* Evaluation: Function Calls */
3762
3763 /* Return an lvalue containing the value VAL.  This is the identity on
3764    lvalues, and otherwise has the side-effect of pushing a copy of VAL 
3765    on the stack, using and updating *SP as the stack pointer, and 
3766    returning an lvalue whose value_address points to the copy.  */
3767
3768 static struct value *
3769 ensure_lval (struct value *val, struct gdbarch *gdbarch, CORE_ADDR *sp)
3770 {
3771   if (! VALUE_LVAL (val))
3772     {
3773       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3774
3775       /* The following is taken from the structure-return code in
3776          call_function_by_hand. FIXME: Therefore, some refactoring seems 
3777          indicated. */
3778       if (gdbarch_inner_than (gdbarch, 1, 2))
3779         {
3780           /* Stack grows downward.  Align SP and value_address (val) after
3781              reserving sufficient space. */
3782           *sp -= len;
3783           if (gdbarch_frame_align_p (gdbarch))
3784             *sp = gdbarch_frame_align (gdbarch, *sp);
3785           set_value_address (val, *sp);
3786         }
3787       else
3788         {
3789           /* Stack grows upward.  Align the frame, allocate space, and
3790              then again, re-align the frame. */
3791           if (gdbarch_frame_align_p (gdbarch))
3792             *sp = gdbarch_frame_align (gdbarch, *sp);
3793           set_value_address (val, *sp);
3794           *sp += len;
3795           if (gdbarch_frame_align_p (gdbarch))
3796             *sp = gdbarch_frame_align (gdbarch, *sp);
3797         }
3798       VALUE_LVAL (val) = lval_memory;
3799
3800       write_memory (value_address (val), value_contents_raw (val), len);
3801     }
3802
3803   return val;
3804 }
3805
3806 /* Return the value ACTUAL, converted to be an appropriate value for a
3807    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
3808    allocating any necessary descriptors (fat pointers), or copies of
3809    values not residing in memory, updating it as needed.  */
3810
3811 struct value *
3812 ada_convert_actual (struct value *actual, struct type *formal_type0,
3813                     struct gdbarch *gdbarch, CORE_ADDR *sp)
3814 {
3815   struct type *actual_type = ada_check_typedef (value_type (actual));
3816   struct type *formal_type = ada_check_typedef (formal_type0);
3817   struct type *formal_target =
3818     TYPE_CODE (formal_type) == TYPE_CODE_PTR
3819     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3820   struct type *actual_target =
3821     TYPE_CODE (actual_type) == TYPE_CODE_PTR
3822     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3823
3824   if (ada_is_array_descriptor_type (formal_target)
3825       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3826     return make_array_descriptor (formal_type, actual, gdbarch, sp);
3827   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3828            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
3829     {
3830       struct value *result;
3831       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3832           && ada_is_array_descriptor_type (actual_target))
3833         result = desc_data (actual);
3834       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3835         {
3836           if (VALUE_LVAL (actual) != lval_memory)
3837             {
3838               struct value *val;
3839               actual_type = ada_check_typedef (value_type (actual));
3840               val = allocate_value (actual_type);
3841               memcpy ((char *) value_contents_raw (val),
3842                       (char *) value_contents (actual),
3843                       TYPE_LENGTH (actual_type));
3844               actual = ensure_lval (val, gdbarch, sp);
3845             }
3846           result = value_addr (actual);
3847         }
3848       else
3849         return actual;
3850       return value_cast_pointers (formal_type, result);
3851     }
3852   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3853     return ada_value_ind (actual);
3854
3855   return actual;
3856 }
3857
3858 /* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
3859    type TYPE.  This is usually an inefficient no-op except on some targets
3860    (such as AVR) where the representation of a pointer and an address
3861    differs.  */
3862
3863 static CORE_ADDR
3864 value_pointer (struct value *value, struct type *type)
3865 {
3866   struct gdbarch *gdbarch = get_type_arch (type);
3867   unsigned len = TYPE_LENGTH (type);
3868   gdb_byte *buf = alloca (len);
3869   CORE_ADDR addr;
3870
3871   addr = value_address (value);
3872   gdbarch_address_to_pointer (gdbarch, type, buf, addr);
3873   addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
3874   return addr;
3875 }
3876
3877
3878 /* Push a descriptor of type TYPE for array value ARR on the stack at
3879    *SP, updating *SP to reflect the new descriptor.  Return either
3880    an lvalue representing the new descriptor, or (if TYPE is a pointer-
3881    to-descriptor type rather than a descriptor type), a struct value *
3882    representing a pointer to this descriptor.  */
3883
3884 static struct value *
3885 make_array_descriptor (struct type *type, struct value *arr,
3886                        struct gdbarch *gdbarch, CORE_ADDR *sp)
3887 {
3888   struct type *bounds_type = desc_bounds_type (type);
3889   struct type *desc_type = desc_base_type (type);
3890   struct value *descriptor = allocate_value (desc_type);
3891   struct value *bounds = allocate_value (bounds_type);
3892   int i;
3893
3894   for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3895     {
3896       modify_general_field (value_type (bounds),
3897                             value_contents_writeable (bounds),
3898                             ada_array_bound (arr, i, 0),
3899                             desc_bound_bitpos (bounds_type, i, 0),
3900                             desc_bound_bitsize (bounds_type, i, 0));
3901       modify_general_field (value_type (bounds),
3902                             value_contents_writeable (bounds),
3903                             ada_array_bound (arr, i, 1),
3904                             desc_bound_bitpos (bounds_type, i, 1),
3905                             desc_bound_bitsize (bounds_type, i, 1));
3906     }
3907
3908   bounds = ensure_lval (bounds, gdbarch, sp);
3909
3910   modify_general_field (value_type (descriptor),
3911                         value_contents_writeable (descriptor),
3912                         value_pointer (ensure_lval (arr, gdbarch, sp),
3913                                        TYPE_FIELD_TYPE (desc_type, 0)),
3914                         fat_pntr_data_bitpos (desc_type),
3915                         fat_pntr_data_bitsize (desc_type));
3916
3917   modify_general_field (value_type (descriptor),
3918                         value_contents_writeable (descriptor),
3919                         value_pointer (bounds,
3920                                        TYPE_FIELD_TYPE (desc_type, 1)),
3921                         fat_pntr_bounds_bitpos (desc_type),
3922                         fat_pntr_bounds_bitsize (desc_type));
3923
3924   descriptor = ensure_lval (descriptor, gdbarch, sp);
3925
3926   if (TYPE_CODE (type) == TYPE_CODE_PTR)
3927     return value_addr (descriptor);
3928   else
3929     return descriptor;
3930 }
3931 \f
3932 /* Dummy definitions for an experimental caching module that is not
3933  * used in the public sources. */
3934
3935 static int
3936 lookup_cached_symbol (const char *name, domain_enum namespace,
3937                       struct symbol **sym, struct block **block)
3938 {
3939   return 0;
3940 }
3941
3942 static void
3943 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3944               struct block *block)
3945 {
3946 }
3947 \f
3948                                 /* Symbol Lookup */
3949
3950 /* Return the result of a standard (literal, C-like) lookup of NAME in
3951    given DOMAIN, visible from lexical block BLOCK.  */
3952
3953 static struct symbol *
3954 standard_lookup (const char *name, const struct block *block,
3955                  domain_enum domain)
3956 {
3957   struct symbol *sym;
3958
3959   if (lookup_cached_symbol (name, domain, &sym, NULL))
3960     return sym;
3961   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
3962   cache_symbol (name, domain, sym, block_found);
3963   return sym;
3964 }
3965
3966
3967 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3968    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
3969    since they contend in overloading in the same way.  */
3970 static int
3971 is_nonfunction (struct ada_symbol_info syms[], int n)
3972 {
3973   int i;
3974
3975   for (i = 0; i < n; i += 1)
3976     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
3977         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
3978             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
3979       return 1;
3980
3981   return 0;
3982 }
3983
3984 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3985    struct types.  Otherwise, they may not.  */
3986
3987 static int
3988 equiv_types (struct type *type0, struct type *type1)
3989 {
3990   if (type0 == type1)
3991     return 1;
3992   if (type0 == NULL || type1 == NULL
3993       || TYPE_CODE (type0) != TYPE_CODE (type1))
3994     return 0;
3995   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3996        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3997       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3998       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
3999     return 1;
4000
4001   return 0;
4002 }
4003
4004 /* True iff SYM0 represents the same entity as SYM1, or one that is
4005    no more defined than that of SYM1.  */
4006
4007 static int
4008 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4009 {
4010   if (sym0 == sym1)
4011     return 1;
4012   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4013       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4014     return 0;
4015
4016   switch (SYMBOL_CLASS (sym0))
4017     {
4018     case LOC_UNDEF:
4019       return 1;
4020     case LOC_TYPEDEF:
4021       {
4022         struct type *type0 = SYMBOL_TYPE (sym0);
4023         struct type *type1 = SYMBOL_TYPE (sym1);
4024         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4025         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4026         int len0 = strlen (name0);
4027         return
4028           TYPE_CODE (type0) == TYPE_CODE (type1)
4029           && (equiv_types (type0, type1)
4030               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4031                   && strncmp (name1 + len0, "___XV", 5) == 0));
4032       }
4033     case LOC_CONST:
4034       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4035         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4036     default:
4037       return 0;
4038     }
4039 }
4040
4041 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4042    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4043
4044 static void
4045 add_defn_to_vec (struct obstack *obstackp,
4046                  struct symbol *sym,
4047                  struct block *block)
4048 {
4049   int i;
4050   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4051
4052   /* Do not try to complete stub types, as the debugger is probably
4053      already scanning all symbols matching a certain name at the
4054      time when this function is called.  Trying to replace the stub
4055      type by its associated full type will cause us to restart a scan
4056      which may lead to an infinite recursion.  Instead, the client
4057      collecting the matching symbols will end up collecting several
4058      matches, with at least one of them complete.  It can then filter
4059      out the stub ones if needed.  */
4060
4061   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4062     {
4063       if (lesseq_defined_than (sym, prevDefns[i].sym))
4064         return;
4065       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4066         {
4067           prevDefns[i].sym = sym;
4068           prevDefns[i].block = block;
4069           return;
4070         }
4071     }
4072
4073   {
4074     struct ada_symbol_info info;
4075
4076     info.sym = sym;
4077     info.block = block;
4078     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4079   }
4080 }
4081
4082 /* Number of ada_symbol_info structures currently collected in 
4083    current vector in *OBSTACKP.  */
4084
4085 static int
4086 num_defns_collected (struct obstack *obstackp)
4087 {
4088   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4089 }
4090
4091 /* Vector of ada_symbol_info structures currently collected in current 
4092    vector in *OBSTACKP.  If FINISH, close off the vector and return
4093    its final address.  */
4094
4095 static struct ada_symbol_info *
4096 defns_collected (struct obstack *obstackp, int finish)
4097 {
4098   if (finish)
4099     return obstack_finish (obstackp);
4100   else
4101     return (struct ada_symbol_info *) obstack_base (obstackp);
4102 }
4103
4104 /* Return a minimal symbol matching NAME according to Ada decoding
4105    rules.  Returns NULL if there is no such minimal symbol.  Names 
4106    prefixed with "standard__" are handled specially: "standard__" is 
4107    first stripped off, and only static and global symbols are searched.  */
4108
4109 struct minimal_symbol *
4110 ada_lookup_simple_minsym (const char *name)
4111 {
4112   struct objfile *objfile;
4113   struct minimal_symbol *msymbol;
4114   int wild_match;
4115
4116   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4117     {
4118       name += sizeof ("standard__") - 1;
4119       wild_match = 0;
4120     }
4121   else
4122     wild_match = (strstr (name, "__") == NULL);
4123
4124   ALL_MSYMBOLS (objfile, msymbol)
4125   {
4126     if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4127         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4128       return msymbol;
4129   }
4130
4131   return NULL;
4132 }
4133
4134 /* For all subprograms that statically enclose the subprogram of the
4135    selected frame, add symbols matching identifier NAME in DOMAIN
4136    and their blocks to the list of data in OBSTACKP, as for
4137    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4138    wildcard prefix.  */
4139
4140 static void
4141 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4142                                   const char *name, domain_enum namespace,
4143                                   int wild_match)
4144 {
4145 }
4146
4147 /* True if TYPE is definitely an artificial type supplied to a symbol
4148    for which no debugging information was given in the symbol file.  */
4149
4150 static int
4151 is_nondebugging_type (struct type *type)
4152 {
4153   char *name = ada_type_name (type);
4154   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4155 }
4156
4157 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4158    duplicate other symbols in the list (The only case I know of where
4159    this happens is when object files containing stabs-in-ecoff are
4160    linked with files containing ordinary ecoff debugging symbols (or no
4161    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4162    Returns the number of items in the modified list.  */
4163
4164 static int
4165 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4166 {
4167   int i, j;
4168
4169   i = 0;
4170   while (i < nsyms)
4171     {
4172       int remove = 0;
4173
4174       /* If two symbols have the same name and one of them is a stub type,
4175          the get rid of the stub.  */
4176
4177       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4178           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4179         {
4180           for (j = 0; j < nsyms; j++)
4181             {
4182               if (j != i
4183                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4184                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4185                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4186                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4187                 remove = 1;
4188             }
4189         }
4190
4191       /* Two symbols with the same name, same class and same address
4192          should be identical.  */
4193
4194       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4195           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4196           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4197         {
4198           for (j = 0; j < nsyms; j += 1)
4199             {
4200               if (i != j
4201                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4202                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4203                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4204                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4205                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4206                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4207                 remove = 1;
4208             }
4209         }
4210       
4211       if (remove)
4212         {
4213           for (j = i + 1; j < nsyms; j += 1)
4214             syms[j - 1] = syms[j];
4215           nsyms -= 1;
4216         }
4217
4218       i += 1;
4219     }
4220   return nsyms;
4221 }
4222
4223 /* Given a type that corresponds to a renaming entity, use the type name
4224    to extract the scope (package name or function name, fully qualified,
4225    and following the GNAT encoding convention) where this renaming has been
4226    defined.  The string returned needs to be deallocated after use.  */
4227
4228 static char *
4229 xget_renaming_scope (struct type *renaming_type)
4230 {
4231   /* The renaming types adhere to the following convention:
4232      <scope>__<rename>___<XR extension>. 
4233      So, to extract the scope, we search for the "___XR" extension,
4234      and then backtrack until we find the first "__".  */
4235
4236   const char *name = type_name_no_tag (renaming_type);
4237   char *suffix = strstr (name, "___XR");
4238   char *last;
4239   int scope_len;
4240   char *scope;
4241
4242   /* Now, backtrack a bit until we find the first "__".  Start looking
4243      at suffix - 3, as the <rename> part is at least one character long.  */
4244
4245   for (last = suffix - 3; last > name; last--)
4246     if (last[0] == '_' && last[1] == '_')
4247       break;
4248
4249   /* Make a copy of scope and return it.  */
4250
4251   scope_len = last - name;
4252   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4253
4254   strncpy (scope, name, scope_len);
4255   scope[scope_len] = '\0';
4256
4257   return scope;
4258 }
4259
4260 /* Return nonzero if NAME corresponds to a package name.  */
4261
4262 static int
4263 is_package_name (const char *name)
4264 {
4265   /* Here, We take advantage of the fact that no symbols are generated
4266      for packages, while symbols are generated for each function.
4267      So the condition for NAME represent a package becomes equivalent
4268      to NAME not existing in our list of symbols.  There is only one
4269      small complication with library-level functions (see below).  */
4270
4271   char *fun_name;
4272
4273   /* If it is a function that has not been defined at library level,
4274      then we should be able to look it up in the symbols.  */
4275   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4276     return 0;
4277
4278   /* Library-level function names start with "_ada_".  See if function
4279      "_ada_" followed by NAME can be found.  */
4280
4281   /* Do a quick check that NAME does not contain "__", since library-level
4282      functions names cannot contain "__" in them.  */
4283   if (strstr (name, "__") != NULL)
4284     return 0;
4285
4286   fun_name = xstrprintf ("_ada_%s", name);
4287
4288   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4289 }
4290
4291 /* Return nonzero if SYM corresponds to a renaming entity that is
4292    not visible from FUNCTION_NAME.  */
4293
4294 static int
4295 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4296 {
4297   char *scope;
4298
4299   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4300     return 0;
4301
4302   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4303
4304   make_cleanup (xfree, scope);
4305
4306   /* If the rename has been defined in a package, then it is visible.  */
4307   if (is_package_name (scope))
4308     return 0;
4309
4310   /* Check that the rename is in the current function scope by checking
4311      that its name starts with SCOPE.  */
4312
4313   /* If the function name starts with "_ada_", it means that it is
4314      a library-level function.  Strip this prefix before doing the
4315      comparison, as the encoding for the renaming does not contain
4316      this prefix.  */
4317   if (strncmp (function_name, "_ada_", 5) == 0)
4318     function_name += 5;
4319
4320   return (strncmp (function_name, scope, strlen (scope)) != 0);
4321 }
4322
4323 /* Remove entries from SYMS that corresponds to a renaming entity that
4324    is not visible from the function associated with CURRENT_BLOCK or
4325    that is superfluous due to the presence of more specific renaming
4326    information.  Places surviving symbols in the initial entries of
4327    SYMS and returns the number of surviving symbols.
4328    
4329    Rationale:
4330    First, in cases where an object renaming is implemented as a
4331    reference variable, GNAT may produce both the actual reference
4332    variable and the renaming encoding.  In this case, we discard the
4333    latter.
4334
4335    Second, GNAT emits a type following a specified encoding for each renaming
4336    entity.  Unfortunately, STABS currently does not support the definition
4337    of types that are local to a given lexical block, so all renamings types
4338    are emitted at library level.  As a consequence, if an application
4339    contains two renaming entities using the same name, and a user tries to
4340    print the value of one of these entities, the result of the ada symbol
4341    lookup will also contain the wrong renaming type.
4342
4343    This function partially covers for this limitation by attempting to
4344    remove from the SYMS list renaming symbols that should be visible
4345    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4346    method with the current information available.  The implementation
4347    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4348    
4349       - When the user tries to print a rename in a function while there
4350         is another rename entity defined in a package:  Normally, the
4351         rename in the function has precedence over the rename in the
4352         package, so the latter should be removed from the list.  This is
4353         currently not the case.
4354         
4355       - This function will incorrectly remove valid renames if
4356         the CURRENT_BLOCK corresponds to a function which symbol name
4357         has been changed by an "Export" pragma.  As a consequence,
4358         the user will be unable to print such rename entities.  */
4359
4360 static int
4361 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4362                              int nsyms, const struct block *current_block)
4363 {
4364   struct symbol *current_function;
4365   char *current_function_name;
4366   int i;
4367   int is_new_style_renaming;
4368
4369   /* If there is both a renaming foo___XR... encoded as a variable and
4370      a simple variable foo in the same block, discard the latter.
4371      First, zero out such symbols, then compress. */
4372   is_new_style_renaming = 0;
4373   for (i = 0; i < nsyms; i += 1)
4374     {
4375       struct symbol *sym = syms[i].sym;
4376       struct block *block = syms[i].block;
4377       const char *name;
4378       const char *suffix;
4379
4380       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4381         continue;
4382       name = SYMBOL_LINKAGE_NAME (sym);
4383       suffix = strstr (name, "___XR");
4384
4385       if (suffix != NULL)
4386         {
4387           int name_len = suffix - name;
4388           int j;
4389           is_new_style_renaming = 1;
4390           for (j = 0; j < nsyms; j += 1)
4391             if (i != j && syms[j].sym != NULL
4392                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4393                             name_len) == 0
4394                 && block == syms[j].block)
4395               syms[j].sym = NULL;
4396         }
4397     }
4398   if (is_new_style_renaming)
4399     {
4400       int j, k;
4401
4402       for (j = k = 0; j < nsyms; j += 1)
4403         if (syms[j].sym != NULL)
4404             {
4405               syms[k] = syms[j];
4406               k += 1;
4407             }
4408       return k;
4409     }
4410
4411   /* Extract the function name associated to CURRENT_BLOCK.
4412      Abort if unable to do so.  */
4413
4414   if (current_block == NULL)
4415     return nsyms;
4416
4417   current_function = block_linkage_function (current_block);
4418   if (current_function == NULL)
4419     return nsyms;
4420
4421   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4422   if (current_function_name == NULL)
4423     return nsyms;
4424
4425   /* Check each of the symbols, and remove it from the list if it is
4426      a type corresponding to a renaming that is out of the scope of
4427      the current block.  */
4428
4429   i = 0;
4430   while (i < nsyms)
4431     {
4432       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4433           == ADA_OBJECT_RENAMING
4434           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4435         {
4436           int j;
4437           for (j = i + 1; j < nsyms; j += 1)
4438             syms[j - 1] = syms[j];
4439           nsyms -= 1;
4440         }
4441       else
4442         i += 1;
4443     }
4444
4445   return nsyms;
4446 }
4447
4448 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4449    whose name and domain match NAME and DOMAIN respectively.
4450    If no match was found, then extend the search to "enclosing"
4451    routines (in other words, if we're inside a nested function,
4452    search the symbols defined inside the enclosing functions).
4453
4454    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
4455
4456 static void
4457 ada_add_local_symbols (struct obstack *obstackp, const char *name,
4458                        struct block *block, domain_enum domain,
4459                        int wild_match)
4460 {
4461   int block_depth = 0;
4462
4463   while (block != NULL)
4464     {
4465       block_depth += 1;
4466       ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4467
4468       /* If we found a non-function match, assume that's the one.  */
4469       if (is_nonfunction (defns_collected (obstackp, 0),
4470                           num_defns_collected (obstackp)))
4471         return;
4472
4473       block = BLOCK_SUPERBLOCK (block);
4474     }
4475
4476   /* If no luck so far, try to find NAME as a local symbol in some lexically
4477      enclosing subprogram.  */
4478   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4479     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4480 }
4481
4482 /* An object of this type is used as the user_data argument when
4483    calling the map_ada_symtabs method.  */
4484
4485 struct ada_psym_data
4486 {
4487   struct obstack *obstackp;
4488   const char *name;
4489   domain_enum domain;
4490   int global;
4491   int wild_match;
4492 };
4493
4494 /* Callback function for map_ada_symtabs.  */
4495
4496 static void
4497 ada_add_psyms (struct objfile *objfile, struct symtab *s, void *user_data)
4498 {
4499   struct ada_psym_data *data = user_data;
4500   const int block_kind = data->global ? GLOBAL_BLOCK : STATIC_BLOCK;
4501   ada_add_block_symbols (data->obstackp,
4502                          BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind),
4503                          data->name, data->domain, objfile, data->wild_match);
4504 }
4505
4506 /* Add to OBSTACKP all non-local symbols whose name and domain match
4507    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
4508    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
4509
4510 static void
4511 ada_add_non_local_symbols (struct obstack *obstackp, const char *name,
4512                            domain_enum domain, int global,
4513                            int is_wild_match)
4514 {
4515   struct objfile *objfile;
4516   struct ada_psym_data data;
4517
4518   data.obstackp = obstackp;
4519   data.name = name;
4520   data.domain = domain;
4521   data.global = global;
4522   data.wild_match = is_wild_match;
4523
4524   ALL_OBJFILES (objfile)
4525   {
4526     if (objfile->sf)
4527       objfile->sf->qf->map_ada_symtabs (objfile, wild_match, is_name_suffix,
4528                                         ada_add_psyms, name,
4529                                         global, domain,
4530                                         is_wild_match, &data);
4531   }
4532 }
4533
4534 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4535    scope and in global scopes, returning the number of matches.  Sets
4536    *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4537    indicating the symbols found and the blocks and symbol tables (if
4538    any) in which they were found.  This vector are transient---good only to 
4539    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
4540    symbol match within the nest of blocks whose innermost member is BLOCK0,
4541    is the one match returned (no other matches in that or
4542      enclosing blocks is returned).  If there are any matches in or
4543    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4544    search extends to global and file-scope (static) symbol tables.
4545    Names prefixed with "standard__" are handled specially: "standard__" 
4546    is first stripped off, and only static and global symbols are searched.  */
4547
4548 int
4549 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4550                         domain_enum namespace,
4551                         struct ada_symbol_info **results)
4552 {
4553   struct symbol *sym;
4554   struct block *block;
4555   const char *name;
4556   int wild_match;
4557   int cacheIfUnique;
4558   int ndefns;
4559
4560   obstack_free (&symbol_list_obstack, NULL);
4561   obstack_init (&symbol_list_obstack);
4562
4563   cacheIfUnique = 0;
4564
4565   /* Search specified block and its superiors.  */
4566
4567   wild_match = (strstr (name0, "__") == NULL);
4568   name = name0;
4569   block = (struct block *) block0;      /* FIXME: No cast ought to be
4570                                            needed, but adding const will
4571                                            have a cascade effect.  */
4572
4573   /* Special case: If the user specifies a symbol name inside package
4574      Standard, do a non-wild matching of the symbol name without
4575      the "standard__" prefix.  This was primarily introduced in order
4576      to allow the user to specifically access the standard exceptions
4577      using, for instance, Standard.Constraint_Error when Constraint_Error
4578      is ambiguous (due to the user defining its own Constraint_Error
4579      entity inside its program).  */
4580   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4581     {
4582       wild_match = 0;
4583       block = NULL;
4584       name = name0 + sizeof ("standard__") - 1;
4585     }
4586
4587   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
4588
4589   ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
4590                          wild_match);
4591   if (num_defns_collected (&symbol_list_obstack) > 0)
4592     goto done;
4593
4594   /* No non-global symbols found.  Check our cache to see if we have
4595      already performed this search before.  If we have, then return
4596      the same result.  */
4597
4598   cacheIfUnique = 1;
4599   if (lookup_cached_symbol (name0, namespace, &sym, &block))
4600     {
4601       if (sym != NULL)
4602         add_defn_to_vec (&symbol_list_obstack, sym, block);
4603       goto done;
4604     }
4605
4606   /* Search symbols from all global blocks.  */
4607  
4608   ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 1,
4609                              wild_match);
4610
4611   /* Now add symbols from all per-file blocks if we've gotten no hits
4612      (not strictly correct, but perhaps better than an error).  */
4613
4614   if (num_defns_collected (&symbol_list_obstack) == 0)
4615     ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 0,
4616                                wild_match);
4617
4618 done:
4619   ndefns = num_defns_collected (&symbol_list_obstack);
4620   *results = defns_collected (&symbol_list_obstack, 1);
4621
4622   ndefns = remove_extra_symbols (*results, ndefns);
4623
4624   if (ndefns == 0)
4625     cache_symbol (name0, namespace, NULL, NULL);
4626
4627   if (ndefns == 1 && cacheIfUnique)
4628     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
4629
4630   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4631
4632   return ndefns;
4633 }
4634
4635 struct symbol *
4636 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4637                            domain_enum namespace, struct block **block_found)
4638 {
4639   struct ada_symbol_info *candidates;
4640   int n_candidates;
4641
4642   n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4643
4644   if (n_candidates == 0)
4645     return NULL;
4646
4647   if (block_found != NULL)
4648     *block_found = candidates[0].block;
4649
4650   return fixup_symbol_section (candidates[0].sym, NULL);
4651 }  
4652
4653 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4654    scope and in global scopes, or NULL if none.  NAME is folded and
4655    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4656    choosing the first symbol if there are multiple choices.  
4657    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4658    table in which the symbol was found (in both cases, these
4659    assignments occur only if the pointers are non-null).  */
4660 struct symbol *
4661 ada_lookup_symbol (const char *name, const struct block *block0,
4662                    domain_enum namespace, int *is_a_field_of_this)
4663 {
4664   if (is_a_field_of_this != NULL)
4665     *is_a_field_of_this = 0;
4666
4667   return
4668     ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4669                                block0, namespace, NULL);
4670 }
4671
4672 static struct symbol *
4673 ada_lookup_symbol_nonlocal (const char *name,
4674                             const struct block *block,
4675                             const domain_enum domain)
4676 {
4677   return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
4678 }
4679
4680
4681 /* True iff STR is a possible encoded suffix of a normal Ada name
4682    that is to be ignored for matching purposes.  Suffixes of parallel
4683    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4684    are given by any of the regular expressions:
4685
4686    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
4687    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
4688    _E[0-9]+[bs]$    [protected object entry suffixes]
4689    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4690
4691    Also, any leading "__[0-9]+" sequence is skipped before the suffix
4692    match is performed.  This sequence is used to differentiate homonyms,
4693    is an optional part of a valid name suffix.  */
4694
4695 static int
4696 is_name_suffix (const char *str)
4697 {
4698   int k;
4699   const char *matching;
4700   const int len = strlen (str);
4701
4702   /* Skip optional leading __[0-9]+.  */
4703
4704   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4705     {
4706       str += 3;
4707       while (isdigit (str[0]))
4708         str += 1;
4709     }
4710   
4711   /* [.$][0-9]+ */
4712
4713   if (str[0] == '.' || str[0] == '$')
4714     {
4715       matching = str + 1;
4716       while (isdigit (matching[0]))
4717         matching += 1;
4718       if (matching[0] == '\0')
4719         return 1;
4720     }
4721
4722   /* ___[0-9]+ */
4723
4724   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4725     {
4726       matching = str + 3;
4727       while (isdigit (matching[0]))
4728         matching += 1;
4729       if (matching[0] == '\0')
4730         return 1;
4731     }
4732
4733 #if 0
4734   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4735      with a N at the end. Unfortunately, the compiler uses the same
4736      convention for other internal types it creates. So treating
4737      all entity names that end with an "N" as a name suffix causes
4738      some regressions. For instance, consider the case of an enumerated
4739      type. To support the 'Image attribute, it creates an array whose
4740      name ends with N.
4741      Having a single character like this as a suffix carrying some
4742      information is a bit risky. Perhaps we should change the encoding
4743      to be something like "_N" instead.  In the meantime, do not do
4744      the following check.  */
4745   /* Protected Object Subprograms */
4746   if (len == 1 && str [0] == 'N')
4747     return 1;
4748 #endif
4749
4750   /* _E[0-9]+[bs]$ */
4751   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4752     {
4753       matching = str + 3;
4754       while (isdigit (matching[0]))
4755         matching += 1;
4756       if ((matching[0] == 'b' || matching[0] == 's')
4757           && matching [1] == '\0')
4758         return 1;
4759     }
4760
4761   /* ??? We should not modify STR directly, as we are doing below.  This
4762      is fine in this case, but may become problematic later if we find
4763      that this alternative did not work, and want to try matching
4764      another one from the begining of STR.  Since we modified it, we
4765      won't be able to find the begining of the string anymore!  */
4766   if (str[0] == 'X')
4767     {
4768       str += 1;
4769       while (str[0] != '_' && str[0] != '\0')
4770         {
4771           if (str[0] != 'n' && str[0] != 'b')
4772             return 0;
4773           str += 1;
4774         }
4775     }
4776
4777   if (str[0] == '\000')
4778     return 1;
4779
4780   if (str[0] == '_')
4781     {
4782       if (str[1] != '_' || str[2] == '\000')
4783         return 0;
4784       if (str[2] == '_')
4785         {
4786           if (strcmp (str + 3, "JM") == 0)
4787             return 1;
4788           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4789              the LJM suffix in favor of the JM one.  But we will
4790              still accept LJM as a valid suffix for a reasonable
4791              amount of time, just to allow ourselves to debug programs
4792              compiled using an older version of GNAT.  */
4793           if (strcmp (str + 3, "LJM") == 0)
4794             return 1;
4795           if (str[3] != 'X')
4796             return 0;
4797           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
4798               || str[4] == 'U' || str[4] == 'P')
4799             return 1;
4800           if (str[4] == 'R' && str[5] != 'T')
4801             return 1;
4802           return 0;
4803         }
4804       if (!isdigit (str[2]))
4805         return 0;
4806       for (k = 3; str[k] != '\0'; k += 1)
4807         if (!isdigit (str[k]) && str[k] != '_')
4808           return 0;
4809       return 1;
4810     }
4811   if (str[0] == '$' && isdigit (str[1]))
4812     {
4813       for (k = 2; str[k] != '\0'; k += 1)
4814         if (!isdigit (str[k]) && str[k] != '_')
4815           return 0;
4816       return 1;
4817     }
4818   return 0;
4819 }
4820
4821 /* Return non-zero if the string starting at NAME and ending before
4822    NAME_END contains no capital letters.  */
4823
4824 static int
4825 is_valid_name_for_wild_match (const char *name0)
4826 {
4827   const char *decoded_name = ada_decode (name0);
4828   int i;
4829
4830   /* If the decoded name starts with an angle bracket, it means that
4831      NAME0 does not follow the GNAT encoding format.  It should then
4832      not be allowed as a possible wild match.  */
4833   if (decoded_name[0] == '<')
4834     return 0;
4835
4836   for (i=0; decoded_name[i] != '\0'; i++)
4837     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
4838       return 0;
4839
4840   return 1;
4841 }
4842
4843 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
4844    PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1.  Ignores
4845    informational suffixes of NAME (i.e., for which is_name_suffix is
4846    true).  */
4847
4848 static int
4849 wild_match (const char *patn0, int patn_len, const char *name0)
4850 {
4851   char* match;
4852   const char* start;
4853   start = name0;
4854   while (1)
4855     {
4856       match = strstr (start, patn0);
4857       if (match == NULL)
4858         return 0;
4859       if ((match == name0 
4860            || match[-1] == '.' 
4861            || (match > name0 + 1 && match[-1] == '_' && match[-2] == '_')
4862            || (match == name0 + 5 && strncmp ("_ada_", name0, 5) == 0))
4863           && is_name_suffix (match + patn_len))
4864         return (match == name0 || is_valid_name_for_wild_match (name0));
4865       start = match + 1;
4866     }
4867 }
4868
4869 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
4870    vector *defn_symbols, updating the list of symbols in OBSTACKP 
4871    (if necessary).  If WILD, treat as NAME with a wildcard prefix. 
4872    OBJFILE is the section containing BLOCK.
4873    SYMTAB is recorded with each symbol added.  */
4874
4875 static void
4876 ada_add_block_symbols (struct obstack *obstackp,
4877                        struct block *block, const char *name,
4878                        domain_enum domain, struct objfile *objfile,
4879                        int wild)
4880 {
4881   struct dict_iterator iter;
4882   int name_len = strlen (name);
4883   /* A matching argument symbol, if any.  */
4884   struct symbol *arg_sym;
4885   /* Set true when we find a matching non-argument symbol.  */
4886   int found_sym;
4887   struct symbol *sym;
4888
4889   arg_sym = NULL;
4890   found_sym = 0;
4891   if (wild)
4892     {
4893       struct symbol *sym;
4894       ALL_BLOCK_SYMBOLS (block, iter, sym)
4895       {
4896         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4897                                    SYMBOL_DOMAIN (sym), domain)
4898             && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
4899           {
4900             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4901               continue;
4902             else if (SYMBOL_IS_ARGUMENT (sym))
4903               arg_sym = sym;
4904             else
4905               {
4906                 found_sym = 1;
4907                 add_defn_to_vec (obstackp,
4908                                  fixup_symbol_section (sym, objfile),
4909                                  block);
4910               }
4911           }
4912       }
4913     }
4914   else
4915     {
4916       ALL_BLOCK_SYMBOLS (block, iter, sym)
4917       {
4918         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4919                                    SYMBOL_DOMAIN (sym), domain))
4920           {
4921             int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
4922             if (cmp == 0
4923                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
4924               {
4925                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
4926                   {
4927                     if (SYMBOL_IS_ARGUMENT (sym))
4928                       arg_sym = sym;
4929                     else
4930                       {
4931                         found_sym = 1;
4932                         add_defn_to_vec (obstackp,
4933                                          fixup_symbol_section (sym, objfile),
4934                                          block);
4935                       }
4936                   }
4937               }
4938           }
4939       }
4940     }
4941
4942   if (!found_sym && arg_sym != NULL)
4943     {
4944       add_defn_to_vec (obstackp,
4945                        fixup_symbol_section (arg_sym, objfile),
4946                        block);
4947     }
4948
4949   if (!wild)
4950     {
4951       arg_sym = NULL;
4952       found_sym = 0;
4953
4954       ALL_BLOCK_SYMBOLS (block, iter, sym)
4955       {
4956         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4957                                    SYMBOL_DOMAIN (sym), domain))
4958           {
4959             int cmp;
4960
4961             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
4962             if (cmp == 0)
4963               {
4964                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
4965                 if (cmp == 0)
4966                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
4967                                  name_len);
4968               }
4969
4970             if (cmp == 0
4971                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
4972               {
4973                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
4974                   {
4975                     if (SYMBOL_IS_ARGUMENT (sym))
4976                       arg_sym = sym;
4977                     else
4978                       {
4979                         found_sym = 1;
4980                         add_defn_to_vec (obstackp,
4981                                          fixup_symbol_section (sym, objfile),
4982                                          block);
4983                       }
4984                   }
4985               }
4986           }
4987       }
4988
4989       /* NOTE: This really shouldn't be needed for _ada_ symbols.
4990          They aren't parameters, right?  */
4991       if (!found_sym && arg_sym != NULL)
4992         {
4993           add_defn_to_vec (obstackp,
4994                            fixup_symbol_section (arg_sym, objfile),
4995                            block);
4996         }
4997     }
4998 }
4999 \f
5000
5001                                 /* Symbol Completion */
5002
5003 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5004    name in a form that's appropriate for the completion.  The result
5005    does not need to be deallocated, but is only good until the next call.
5006
5007    TEXT_LEN is equal to the length of TEXT.
5008    Perform a wild match if WILD_MATCH is set.
5009    ENCODED should be set if TEXT represents the start of a symbol name
5010    in its encoded form.  */
5011
5012 static const char *
5013 symbol_completion_match (const char *sym_name,
5014                          const char *text, int text_len,
5015                          int wild_match, int encoded)
5016 {
5017   const int verbatim_match = (text[0] == '<');
5018   int match = 0;
5019
5020   if (verbatim_match)
5021     {
5022       /* Strip the leading angle bracket.  */
5023       text = text + 1;
5024       text_len--;
5025     }
5026
5027   /* First, test against the fully qualified name of the symbol.  */
5028
5029   if (strncmp (sym_name, text, text_len) == 0)
5030     match = 1;
5031
5032   if (match && !encoded)
5033     {
5034       /* One needed check before declaring a positive match is to verify
5035          that iff we are doing a verbatim match, the decoded version
5036          of the symbol name starts with '<'.  Otherwise, this symbol name
5037          is not a suitable completion.  */
5038       const char *sym_name_copy = sym_name;
5039       int has_angle_bracket;
5040
5041       sym_name = ada_decode (sym_name);
5042       has_angle_bracket = (sym_name[0] == '<');
5043       match = (has_angle_bracket == verbatim_match);
5044       sym_name = sym_name_copy;
5045     }
5046
5047   if (match && !verbatim_match)
5048     {
5049       /* When doing non-verbatim match, another check that needs to
5050          be done is to verify that the potentially matching symbol name
5051          does not include capital letters, because the ada-mode would
5052          not be able to understand these symbol names without the
5053          angle bracket notation.  */
5054       const char *tmp;
5055
5056       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5057       if (*tmp != '\0')
5058         match = 0;
5059     }
5060
5061   /* Second: Try wild matching...  */
5062
5063   if (!match && wild_match)
5064     {
5065       /* Since we are doing wild matching, this means that TEXT
5066          may represent an unqualified symbol name.  We therefore must
5067          also compare TEXT against the unqualified name of the symbol.  */
5068       sym_name = ada_unqualified_name (ada_decode (sym_name));
5069
5070       if (strncmp (sym_name, text, text_len) == 0)
5071         match = 1;
5072     }
5073
5074   /* Finally: If we found a mach, prepare the result to return.  */
5075
5076   if (!match)
5077     return NULL;
5078
5079   if (verbatim_match)
5080     sym_name = add_angle_brackets (sym_name);
5081
5082   if (!encoded)
5083     sym_name = ada_decode (sym_name);
5084
5085   return sym_name;
5086 }
5087
5088 DEF_VEC_P (char_ptr);
5089
5090 /* A companion function to ada_make_symbol_completion_list().
5091    Check if SYM_NAME represents a symbol which name would be suitable
5092    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5093    it is appended at the end of the given string vector SV.
5094
5095    ORIG_TEXT is the string original string from the user command
5096    that needs to be completed.  WORD is the entire command on which
5097    completion should be performed.  These two parameters are used to
5098    determine which part of the symbol name should be added to the
5099    completion vector.
5100    if WILD_MATCH is set, then wild matching is performed.
5101    ENCODED should be set if TEXT represents a symbol name in its
5102    encoded formed (in which case the completion should also be
5103    encoded).  */
5104
5105 static void
5106 symbol_completion_add (VEC(char_ptr) **sv,
5107                        const char *sym_name,
5108                        const char *text, int text_len,
5109                        const char *orig_text, const char *word,
5110                        int wild_match, int encoded)
5111 {
5112   const char *match = symbol_completion_match (sym_name, text, text_len,
5113                                                wild_match, encoded);
5114   char *completion;
5115
5116   if (match == NULL)
5117     return;
5118
5119   /* We found a match, so add the appropriate completion to the given
5120      string vector.  */
5121
5122   if (word == orig_text)
5123     {
5124       completion = xmalloc (strlen (match) + 5);
5125       strcpy (completion, match);
5126     }
5127   else if (word > orig_text)
5128     {
5129       /* Return some portion of sym_name.  */
5130       completion = xmalloc (strlen (match) + 5);
5131       strcpy (completion, match + (word - orig_text));
5132     }
5133   else
5134     {
5135       /* Return some of ORIG_TEXT plus sym_name.  */
5136       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5137       strncpy (completion, word, orig_text - word);
5138       completion[orig_text - word] = '\0';
5139       strcat (completion, match);
5140     }
5141
5142   VEC_safe_push (char_ptr, *sv, completion);
5143 }
5144
5145 /* An object of this type is passed as the user_data argument to the
5146    map_partial_symbol_names method.  */
5147 struct add_partial_datum
5148 {
5149   VEC(char_ptr) **completions;
5150   char *text;
5151   int text_len;
5152   char *text0;
5153   char *word;
5154   int wild_match;
5155   int encoded;
5156 };
5157
5158 /* A callback for map_partial_symbol_names.  */
5159 static void
5160 ada_add_partial_symbol_completions (const char *name, void *user_data)
5161 {
5162   struct add_partial_datum *data = user_data;
5163   symbol_completion_add (data->completions, name,
5164                          data->text, data->text_len, data->text0, data->word,
5165                          data->wild_match, data->encoded);
5166 }
5167
5168 /* Return a list of possible symbol names completing TEXT0.  The list
5169    is NULL terminated.  WORD is the entire command on which completion
5170    is made.  */
5171
5172 static char **
5173 ada_make_symbol_completion_list (char *text0, char *word)
5174 {
5175   char *text;
5176   int text_len;
5177   int wild_match;
5178   int encoded;
5179   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5180   struct symbol *sym;
5181   struct symtab *s;
5182   struct minimal_symbol *msymbol;
5183   struct objfile *objfile;
5184   struct block *b, *surrounding_static_block = 0;
5185   int i;
5186   struct dict_iterator iter;
5187
5188   if (text0[0] == '<')
5189     {
5190       text = xstrdup (text0);
5191       make_cleanup (xfree, text);
5192       text_len = strlen (text);
5193       wild_match = 0;
5194       encoded = 1;
5195     }
5196   else
5197     {
5198       text = xstrdup (ada_encode (text0));
5199       make_cleanup (xfree, text);
5200       text_len = strlen (text);
5201       for (i = 0; i < text_len; i++)
5202         text[i] = tolower (text[i]);
5203
5204       encoded = (strstr (text0, "__") != NULL);
5205       /* If the name contains a ".", then the user is entering a fully
5206          qualified entity name, and the match must not be done in wild
5207          mode.  Similarly, if the user wants to complete what looks like
5208          an encoded name, the match must not be done in wild mode.  */
5209       wild_match = (strchr (text0, '.') == NULL && !encoded);
5210     }
5211
5212   /* First, look at the partial symtab symbols.  */
5213   {
5214     struct add_partial_datum data;
5215
5216     data.completions = &completions;
5217     data.text = text;
5218     data.text_len = text_len;
5219     data.text0 = text0;
5220     data.word = word;
5221     data.wild_match = wild_match;
5222     data.encoded = encoded;
5223     map_partial_symbol_names (ada_add_partial_symbol_completions, &data);
5224   }
5225
5226   /* At this point scan through the misc symbol vectors and add each
5227      symbol you find to the list.  Eventually we want to ignore
5228      anything that isn't a text symbol (everything else will be
5229      handled by the psymtab code above).  */
5230
5231   ALL_MSYMBOLS (objfile, msymbol)
5232   {
5233     QUIT;
5234     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5235                            text, text_len, text0, word, wild_match, encoded);
5236   }
5237
5238   /* Search upwards from currently selected frame (so that we can
5239      complete on local vars.  */
5240
5241   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5242     {
5243       if (!BLOCK_SUPERBLOCK (b))
5244         surrounding_static_block = b;   /* For elmin of dups */
5245
5246       ALL_BLOCK_SYMBOLS (b, iter, sym)
5247       {
5248         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5249                                text, text_len, text0, word,
5250                                wild_match, encoded);
5251       }
5252     }
5253
5254   /* Go through the symtabs and check the externs and statics for
5255      symbols which match.  */
5256
5257   ALL_SYMTABS (objfile, s)
5258   {
5259     QUIT;
5260     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5261     ALL_BLOCK_SYMBOLS (b, iter, sym)
5262     {
5263       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5264                              text, text_len, text0, word,
5265                              wild_match, encoded);
5266     }
5267   }
5268
5269   ALL_SYMTABS (objfile, s)
5270   {
5271     QUIT;
5272     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5273     /* Don't do this block twice.  */
5274     if (b == surrounding_static_block)
5275       continue;
5276     ALL_BLOCK_SYMBOLS (b, iter, sym)
5277     {
5278       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5279                              text, text_len, text0, word,
5280                              wild_match, encoded);
5281     }
5282   }
5283
5284   /* Append the closing NULL entry.  */
5285   VEC_safe_push (char_ptr, completions, NULL);
5286
5287   /* Make a copy of the COMPLETIONS VEC before we free it, and then
5288      return the copy.  It's unfortunate that we have to make a copy
5289      of an array that we're about to destroy, but there is nothing much
5290      we can do about it.  Fortunately, it's typically not a very large
5291      array.  */
5292   {
5293     const size_t completions_size = 
5294       VEC_length (char_ptr, completions) * sizeof (char *);
5295     char **result = malloc (completions_size);
5296     
5297     memcpy (result, VEC_address (char_ptr, completions), completions_size);
5298
5299     VEC_free (char_ptr, completions);
5300     return result;
5301   }
5302 }
5303
5304                                 /* Field Access */
5305
5306 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5307    for tagged types.  */
5308
5309 static int
5310 ada_is_dispatch_table_ptr_type (struct type *type)
5311 {
5312   char *name;
5313
5314   if (TYPE_CODE (type) != TYPE_CODE_PTR)
5315     return 0;
5316
5317   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5318   if (name == NULL)
5319     return 0;
5320
5321   return (strcmp (name, "ada__tags__dispatch_table") == 0);
5322 }
5323
5324 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5325    to be invisible to users.  */
5326
5327 int
5328 ada_is_ignored_field (struct type *type, int field_num)
5329 {
5330   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5331     return 1;
5332    
5333   /* Check the name of that field.  */
5334   {
5335     const char *name = TYPE_FIELD_NAME (type, field_num);
5336
5337     /* Anonymous field names should not be printed.
5338        brobecker/2007-02-20: I don't think this can actually happen
5339        but we don't want to print the value of annonymous fields anyway.  */
5340     if (name == NULL)
5341       return 1;
5342
5343     /* A field named "_parent" is internally generated by GNAT for
5344        tagged types, and should not be printed either.  */
5345     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5346       return 1;
5347   }
5348
5349   /* If this is the dispatch table of a tagged type, then ignore.  */
5350   if (ada_is_tagged_type (type, 1)
5351       && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5352     return 1;
5353
5354   /* Not a special field, so it should not be ignored.  */
5355   return 0;
5356 }
5357
5358 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
5359    pointer or reference type whose ultimate target has a tag field. */
5360
5361 int
5362 ada_is_tagged_type (struct type *type, int refok)
5363 {
5364   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5365 }
5366
5367 /* True iff TYPE represents the type of X'Tag */
5368
5369 int
5370 ada_is_tag_type (struct type *type)
5371 {
5372   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5373     return 0;
5374   else
5375     {
5376       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5377       return (name != NULL
5378               && strcmp (name, "ada__tags__dispatch_table") == 0);
5379     }
5380 }
5381
5382 /* The type of the tag on VAL.  */
5383
5384 struct type *
5385 ada_tag_type (struct value *val)
5386 {
5387   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5388 }
5389
5390 /* The value of the tag on VAL.  */
5391
5392 struct value *
5393 ada_value_tag (struct value *val)
5394 {
5395   return ada_value_struct_elt (val, "_tag", 0);
5396 }
5397
5398 /* The value of the tag on the object of type TYPE whose contents are
5399    saved at VALADDR, if it is non-null, or is at memory address
5400    ADDRESS. */
5401
5402 static struct value *
5403 value_tag_from_contents_and_address (struct type *type,
5404                                      const gdb_byte *valaddr,
5405                                      CORE_ADDR address)
5406 {
5407   int tag_byte_offset;
5408   struct type *tag_type;
5409   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5410                          NULL, NULL, NULL))
5411     {
5412       const gdb_byte *valaddr1 = ((valaddr == NULL)
5413                                   ? NULL
5414                                   : valaddr + tag_byte_offset);
5415       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5416
5417       return value_from_contents_and_address (tag_type, valaddr1, address1);
5418     }
5419   return NULL;
5420 }
5421
5422 static struct type *
5423 type_from_tag (struct value *tag)
5424 {
5425   const char *type_name = ada_tag_name (tag);
5426   if (type_name != NULL)
5427     return ada_find_any_type (ada_encode (type_name));
5428   return NULL;
5429 }
5430
5431 struct tag_args
5432 {
5433   struct value *tag;
5434   char *name;
5435 };
5436
5437
5438 static int ada_tag_name_1 (void *);
5439 static int ada_tag_name_2 (struct tag_args *);
5440
5441 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5442    value ARGS, sets ARGS->name to the tag name of ARGS->tag.  
5443    The value stored in ARGS->name is valid until the next call to 
5444    ada_tag_name_1.  */
5445
5446 static int
5447 ada_tag_name_1 (void *args0)
5448 {
5449   struct tag_args *args = (struct tag_args *) args0;
5450   static char name[1024];
5451   char *p;
5452   struct value *val;
5453   args->name = NULL;
5454   val = ada_value_struct_elt (args->tag, "tsd", 1);
5455   if (val == NULL)
5456     return ada_tag_name_2 (args);
5457   val = ada_value_struct_elt (val, "expanded_name", 1);
5458   if (val == NULL)
5459     return 0;
5460   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5461   for (p = name; *p != '\0'; p += 1)
5462     if (isalpha (*p))
5463       *p = tolower (*p);
5464   args->name = name;
5465   return 0;
5466 }
5467
5468 /* Utility function for ada_tag_name_1 that tries the second
5469    representation for the dispatch table (in which there is no
5470    explicit 'tsd' field in the referent of the tag pointer, and instead
5471    the tsd pointer is stored just before the dispatch table. */
5472    
5473 static int
5474 ada_tag_name_2 (struct tag_args *args)
5475 {
5476   struct type *info_type;
5477   static char name[1024];
5478   char *p;
5479   struct value *val, *valp;
5480
5481   args->name = NULL;
5482   info_type = ada_find_any_type ("ada__tags__type_specific_data");
5483   if (info_type == NULL)
5484     return 0;
5485   info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5486   valp = value_cast (info_type, args->tag);
5487   if (valp == NULL)
5488     return 0;
5489   val = value_ind (value_ptradd (valp, -1));
5490   if (val == NULL)
5491     return 0;
5492   val = ada_value_struct_elt (val, "expanded_name", 1);
5493   if (val == NULL)
5494     return 0;
5495   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5496   for (p = name; *p != '\0'; p += 1)
5497     if (isalpha (*p))
5498       *p = tolower (*p);
5499   args->name = name;
5500   return 0;
5501 }
5502
5503 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5504  * a C string.  */
5505
5506 const char *
5507 ada_tag_name (struct value *tag)
5508 {
5509   struct tag_args args;
5510   if (!ada_is_tag_type (value_type (tag)))
5511     return NULL;
5512   args.tag = tag;
5513   args.name = NULL;
5514   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5515   return args.name;
5516 }
5517
5518 /* The parent type of TYPE, or NULL if none.  */
5519
5520 struct type *
5521 ada_parent_type (struct type *type)
5522 {
5523   int i;
5524
5525   type = ada_check_typedef (type);
5526
5527   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5528     return NULL;
5529
5530   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5531     if (ada_is_parent_field (type, i))
5532       {
5533         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
5534
5535         /* If the _parent field is a pointer, then dereference it.  */
5536         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
5537           parent_type = TYPE_TARGET_TYPE (parent_type);
5538         /* If there is a parallel XVS type, get the actual base type.  */
5539         parent_type = ada_get_base_type (parent_type);
5540
5541         return ada_check_typedef (parent_type);
5542       }
5543
5544   return NULL;
5545 }
5546
5547 /* True iff field number FIELD_NUM of structure type TYPE contains the
5548    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5549    a structure type with at least FIELD_NUM+1 fields.  */
5550
5551 int
5552 ada_is_parent_field (struct type *type, int field_num)
5553 {
5554   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5555   return (name != NULL
5556           && (strncmp (name, "PARENT", 6) == 0
5557               || strncmp (name, "_parent", 7) == 0));
5558 }
5559
5560 /* True iff field number FIELD_NUM of structure type TYPE is a
5561    transparent wrapper field (which should be silently traversed when doing
5562    field selection and flattened when printing).  Assumes TYPE is a
5563    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5564    structures.  */
5565
5566 int
5567 ada_is_wrapper_field (struct type *type, int field_num)
5568 {
5569   const char *name = TYPE_FIELD_NAME (type, field_num);
5570   return (name != NULL
5571           && (strncmp (name, "PARENT", 6) == 0
5572               || strcmp (name, "REP") == 0
5573               || strncmp (name, "_parent", 7) == 0
5574               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5575 }
5576
5577 /* True iff field number FIELD_NUM of structure or union type TYPE
5578    is a variant wrapper.  Assumes TYPE is a structure type with at least
5579    FIELD_NUM+1 fields.  */
5580
5581 int
5582 ada_is_variant_part (struct type *type, int field_num)
5583 {
5584   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5585   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5586           || (is_dynamic_field (type, field_num)
5587               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
5588                   == TYPE_CODE_UNION)));
5589 }
5590
5591 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5592    whose discriminants are contained in the record type OUTER_TYPE,
5593    returns the type of the controlling discriminant for the variant.
5594    May return NULL if the type could not be found.  */
5595
5596 struct type *
5597 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5598 {
5599   char *name = ada_variant_discrim_name (var_type);
5600   return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5601 }
5602
5603 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5604    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5605    represents a 'when others' clause; otherwise 0.  */
5606
5607 int
5608 ada_is_others_clause (struct type *type, int field_num)
5609 {
5610   const char *name = TYPE_FIELD_NAME (type, field_num);
5611   return (name != NULL && name[0] == 'O');
5612 }
5613
5614 /* Assuming that TYPE0 is the type of the variant part of a record,
5615    returns the name of the discriminant controlling the variant.
5616    The value is valid until the next call to ada_variant_discrim_name.  */
5617
5618 char *
5619 ada_variant_discrim_name (struct type *type0)
5620 {
5621   static char *result = NULL;
5622   static size_t result_len = 0;
5623   struct type *type;
5624   const char *name;
5625   const char *discrim_end;
5626   const char *discrim_start;
5627
5628   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5629     type = TYPE_TARGET_TYPE (type0);
5630   else
5631     type = type0;
5632
5633   name = ada_type_name (type);
5634
5635   if (name == NULL || name[0] == '\000')
5636     return "";
5637
5638   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5639        discrim_end -= 1)
5640     {
5641       if (strncmp (discrim_end, "___XVN", 6) == 0)
5642         break;
5643     }
5644   if (discrim_end == name)
5645     return "";
5646
5647   for (discrim_start = discrim_end; discrim_start != name + 3;
5648        discrim_start -= 1)
5649     {
5650       if (discrim_start == name + 1)
5651         return "";
5652       if ((discrim_start > name + 3
5653            && strncmp (discrim_start - 3, "___", 3) == 0)
5654           || discrim_start[-1] == '.')
5655         break;
5656     }
5657
5658   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5659   strncpy (result, discrim_start, discrim_end - discrim_start);
5660   result[discrim_end - discrim_start] = '\0';
5661   return result;
5662 }
5663
5664 /* Scan STR for a subtype-encoded number, beginning at position K.
5665    Put the position of the character just past the number scanned in
5666    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
5667    Return 1 if there was a valid number at the given position, and 0
5668    otherwise.  A "subtype-encoded" number consists of the absolute value
5669    in decimal, followed by the letter 'm' to indicate a negative number.
5670    Assumes 0m does not occur.  */
5671
5672 int
5673 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5674 {
5675   ULONGEST RU;
5676
5677   if (!isdigit (str[k]))
5678     return 0;
5679
5680   /* Do it the hard way so as not to make any assumption about
5681      the relationship of unsigned long (%lu scan format code) and
5682      LONGEST.  */
5683   RU = 0;
5684   while (isdigit (str[k]))
5685     {
5686       RU = RU * 10 + (str[k] - '0');
5687       k += 1;
5688     }
5689
5690   if (str[k] == 'm')
5691     {
5692       if (R != NULL)
5693         *R = (-(LONGEST) (RU - 1)) - 1;
5694       k += 1;
5695     }
5696   else if (R != NULL)
5697     *R = (LONGEST) RU;
5698
5699   /* NOTE on the above: Technically, C does not say what the results of
5700      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5701      number representable as a LONGEST (although either would probably work
5702      in most implementations).  When RU>0, the locution in the then branch
5703      above is always equivalent to the negative of RU.  */
5704
5705   if (new_k != NULL)
5706     *new_k = k;
5707   return 1;
5708 }
5709
5710 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5711    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5712    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
5713
5714 int
5715 ada_in_variant (LONGEST val, struct type *type, int field_num)
5716 {
5717   const char *name = TYPE_FIELD_NAME (type, field_num);
5718   int p;
5719
5720   p = 0;
5721   while (1)
5722     {
5723       switch (name[p])
5724         {
5725         case '\0':
5726           return 0;
5727         case 'S':
5728           {
5729             LONGEST W;
5730             if (!ada_scan_number (name, p + 1, &W, &p))
5731               return 0;
5732             if (val == W)
5733               return 1;
5734             break;
5735           }
5736         case 'R':
5737           {
5738             LONGEST L, U;
5739             if (!ada_scan_number (name, p + 1, &L, &p)
5740                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5741               return 0;
5742             if (val >= L && val <= U)
5743               return 1;
5744             break;
5745           }
5746         case 'O':
5747           return 1;
5748         default:
5749           return 0;
5750         }
5751     }
5752 }
5753
5754 /* FIXME: Lots of redundancy below.  Try to consolidate. */
5755
5756 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5757    ARG_TYPE, extract and return the value of one of its (non-static)
5758    fields.  FIELDNO says which field.   Differs from value_primitive_field
5759    only in that it can handle packed values of arbitrary type.  */
5760
5761 static struct value *
5762 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5763                            struct type *arg_type)
5764 {
5765   struct type *type;
5766
5767   arg_type = ada_check_typedef (arg_type);
5768   type = TYPE_FIELD_TYPE (arg_type, fieldno);
5769
5770   /* Handle packed fields.  */
5771
5772   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5773     {
5774       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5775       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5776
5777       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
5778                                              offset + bit_pos / 8,
5779                                              bit_pos % 8, bit_size, type);
5780     }
5781   else
5782     return value_primitive_field (arg1, offset, fieldno, arg_type);
5783 }
5784
5785 /* Find field with name NAME in object of type TYPE.  If found, 
5786    set the following for each argument that is non-null:
5787     - *FIELD_TYPE_P to the field's type; 
5788     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
5789       an object of that type;
5790     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
5791     - *BIT_SIZE_P to its size in bits if the field is packed, and 
5792       0 otherwise;
5793    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
5794    fields up to but not including the desired field, or by the total
5795    number of fields if not found.   A NULL value of NAME never
5796    matches; the function just counts visible fields in this case.
5797    
5798    Returns 1 if found, 0 otherwise. */
5799
5800 static int
5801 find_struct_field (char *name, struct type *type, int offset,
5802                    struct type **field_type_p,
5803                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
5804                    int *index_p)
5805 {
5806   int i;
5807
5808   type = ada_check_typedef (type);
5809
5810   if (field_type_p != NULL)
5811     *field_type_p = NULL;
5812   if (byte_offset_p != NULL)
5813     *byte_offset_p = 0;
5814   if (bit_offset_p != NULL)
5815     *bit_offset_p = 0;
5816   if (bit_size_p != NULL)
5817     *bit_size_p = 0;
5818
5819   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5820     {
5821       int bit_pos = TYPE_FIELD_BITPOS (type, i);
5822       int fld_offset = offset + bit_pos / 8;
5823       char *t_field_name = TYPE_FIELD_NAME (type, i);
5824
5825       if (t_field_name == NULL)
5826         continue;
5827
5828       else if (name != NULL && field_name_match (t_field_name, name))
5829         {
5830           int bit_size = TYPE_FIELD_BITSIZE (type, i);
5831           if (field_type_p != NULL)
5832             *field_type_p = TYPE_FIELD_TYPE (type, i);
5833           if (byte_offset_p != NULL)
5834             *byte_offset_p = fld_offset;
5835           if (bit_offset_p != NULL)
5836             *bit_offset_p = bit_pos % 8;
5837           if (bit_size_p != NULL)
5838             *bit_size_p = bit_size;
5839           return 1;
5840         }
5841       else if (ada_is_wrapper_field (type, i))
5842         {
5843           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
5844                                  field_type_p, byte_offset_p, bit_offset_p,
5845                                  bit_size_p, index_p))
5846             return 1;
5847         }
5848       else if (ada_is_variant_part (type, i))
5849         {
5850           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
5851              fixed type?? */
5852           int j;
5853           struct type *field_type
5854             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5855
5856           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5857             {
5858               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
5859                                      fld_offset
5860                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
5861                                      field_type_p, byte_offset_p,
5862                                      bit_offset_p, bit_size_p, index_p))
5863                 return 1;
5864             }
5865         }
5866       else if (index_p != NULL)
5867         *index_p += 1;
5868     }
5869   return 0;
5870 }
5871
5872 /* Number of user-visible fields in record type TYPE. */
5873
5874 static int
5875 num_visible_fields (struct type *type)
5876 {
5877   int n;
5878   n = 0;
5879   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
5880   return n;
5881 }
5882
5883 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
5884    and search in it assuming it has (class) type TYPE.
5885    If found, return value, else return NULL.
5886
5887    Searches recursively through wrapper fields (e.g., '_parent').  */
5888
5889 static struct value *
5890 ada_search_struct_field (char *name, struct value *arg, int offset,
5891                          struct type *type)
5892 {
5893   int i;
5894   type = ada_check_typedef (type);
5895
5896   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5897     {
5898       char *t_field_name = TYPE_FIELD_NAME (type, i);
5899
5900       if (t_field_name == NULL)
5901         continue;
5902
5903       else if (field_name_match (t_field_name, name))
5904         return ada_value_primitive_field (arg, offset, i, type);
5905
5906       else if (ada_is_wrapper_field (type, i))
5907         {
5908           struct value *v =     /* Do not let indent join lines here. */
5909             ada_search_struct_field (name, arg,
5910                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
5911                                      TYPE_FIELD_TYPE (type, i));
5912           if (v != NULL)
5913             return v;
5914         }
5915
5916       else if (ada_is_variant_part (type, i))
5917         {
5918           /* PNH: Do we ever get here?  See find_struct_field. */
5919           int j;
5920           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5921           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5922
5923           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5924             {
5925               struct value *v = ada_search_struct_field /* Force line break.  */
5926                 (name, arg,
5927                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
5928                  TYPE_FIELD_TYPE (field_type, j));
5929               if (v != NULL)
5930                 return v;
5931             }
5932         }
5933     }
5934   return NULL;
5935 }
5936
5937 static struct value *ada_index_struct_field_1 (int *, struct value *,
5938                                                int, struct type *);
5939
5940
5941 /* Return field #INDEX in ARG, where the index is that returned by
5942  * find_struct_field through its INDEX_P argument.  Adjust the address
5943  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
5944  * If found, return value, else return NULL. */
5945
5946 static struct value *
5947 ada_index_struct_field (int index, struct value *arg, int offset,
5948                         struct type *type)
5949 {
5950   return ada_index_struct_field_1 (&index, arg, offset, type);
5951 }
5952
5953
5954 /* Auxiliary function for ada_index_struct_field.  Like
5955  * ada_index_struct_field, but takes index from *INDEX_P and modifies
5956  * *INDEX_P. */
5957
5958 static struct value *
5959 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
5960                           struct type *type)
5961 {
5962   int i;
5963   type = ada_check_typedef (type);
5964
5965   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5966     {
5967       if (TYPE_FIELD_NAME (type, i) == NULL)
5968         continue;
5969       else if (ada_is_wrapper_field (type, i))
5970         {
5971           struct value *v =     /* Do not let indent join lines here. */
5972             ada_index_struct_field_1 (index_p, arg,
5973                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
5974                                       TYPE_FIELD_TYPE (type, i));
5975           if (v != NULL)
5976             return v;
5977         }
5978
5979       else if (ada_is_variant_part (type, i))
5980         {
5981           /* PNH: Do we ever get here?  See ada_search_struct_field,
5982              find_struct_field. */
5983           error (_("Cannot assign this kind of variant record"));
5984         }
5985       else if (*index_p == 0)
5986         return ada_value_primitive_field (arg, offset, i, type);
5987       else
5988         *index_p -= 1;
5989     }
5990   return NULL;
5991 }
5992
5993 /* Given ARG, a value of type (pointer or reference to a)*
5994    structure/union, extract the component named NAME from the ultimate
5995    target structure/union and return it as a value with its
5996    appropriate type.
5997
5998    The routine searches for NAME among all members of the structure itself
5999    and (recursively) among all members of any wrapper members
6000    (e.g., '_parent').
6001
6002    If NO_ERR, then simply return NULL in case of error, rather than 
6003    calling error.  */
6004
6005 struct value *
6006 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6007 {
6008   struct type *t, *t1;
6009   struct value *v;
6010
6011   v = NULL;
6012   t1 = t = ada_check_typedef (value_type (arg));
6013   if (TYPE_CODE (t) == TYPE_CODE_REF)
6014     {
6015       t1 = TYPE_TARGET_TYPE (t);
6016       if (t1 == NULL)
6017         goto BadValue;
6018       t1 = ada_check_typedef (t1);
6019       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6020         {
6021           arg = coerce_ref (arg);
6022           t = t1;
6023         }
6024     }
6025
6026   while (TYPE_CODE (t) == TYPE_CODE_PTR)
6027     {
6028       t1 = TYPE_TARGET_TYPE (t);
6029       if (t1 == NULL)
6030         goto BadValue;
6031       t1 = ada_check_typedef (t1);
6032       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6033         {
6034           arg = value_ind (arg);
6035           t = t1;
6036         }
6037       else
6038         break;
6039     }
6040
6041   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6042     goto BadValue;
6043
6044   if (t1 == t)
6045     v = ada_search_struct_field (name, arg, 0, t);
6046   else
6047     {
6048       int bit_offset, bit_size, byte_offset;
6049       struct type *field_type;
6050       CORE_ADDR address;
6051
6052       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6053         address = value_as_address (arg);
6054       else
6055         address = unpack_pointer (t, value_contents (arg));
6056
6057       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6058       if (find_struct_field (name, t1, 0,
6059                              &field_type, &byte_offset, &bit_offset,
6060                              &bit_size, NULL))
6061         {
6062           if (bit_size != 0)
6063             {
6064               if (TYPE_CODE (t) == TYPE_CODE_REF)
6065                 arg = ada_coerce_ref (arg);
6066               else
6067                 arg = ada_value_ind (arg);
6068               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6069                                                   bit_offset, bit_size,
6070                                                   field_type);
6071             }
6072           else
6073             v = value_at_lazy (field_type, address + byte_offset);
6074         }
6075     }
6076
6077   if (v != NULL || no_err)
6078     return v;
6079   else
6080     error (_("There is no member named %s."), name);
6081
6082  BadValue:
6083   if (no_err)
6084     return NULL;
6085   else
6086     error (_("Attempt to extract a component of a value that is not a record."));
6087 }
6088
6089 /* Given a type TYPE, look up the type of the component of type named NAME.
6090    If DISPP is non-null, add its byte displacement from the beginning of a
6091    structure (pointed to by a value) of type TYPE to *DISPP (does not
6092    work for packed fields).
6093
6094    Matches any field whose name has NAME as a prefix, possibly
6095    followed by "___".
6096
6097    TYPE can be either a struct or union. If REFOK, TYPE may also 
6098    be a (pointer or reference)+ to a struct or union, and the
6099    ultimate target type will be searched.
6100
6101    Looks recursively into variant clauses and parent types.
6102
6103    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6104    TYPE is not a type of the right kind.  */
6105
6106 static struct type *
6107 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6108                             int noerr, int *dispp)
6109 {
6110   int i;
6111
6112   if (name == NULL)
6113     goto BadName;
6114
6115   if (refok && type != NULL)
6116     while (1)
6117       {
6118         type = ada_check_typedef (type);
6119         if (TYPE_CODE (type) != TYPE_CODE_PTR
6120             && TYPE_CODE (type) != TYPE_CODE_REF)
6121           break;
6122         type = TYPE_TARGET_TYPE (type);
6123       }
6124
6125   if (type == NULL
6126       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6127           && TYPE_CODE (type) != TYPE_CODE_UNION))
6128     {
6129       if (noerr)
6130         return NULL;
6131       else
6132         {
6133           target_terminal_ours ();
6134           gdb_flush (gdb_stdout);
6135           if (type == NULL)
6136             error (_("Type (null) is not a structure or union type"));
6137           else
6138             {
6139               /* XXX: type_sprint */
6140               fprintf_unfiltered (gdb_stderr, _("Type "));
6141               type_print (type, "", gdb_stderr, -1);
6142               error (_(" is not a structure or union type"));
6143             }
6144         }
6145     }
6146
6147   type = to_static_fixed_type (type);
6148
6149   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6150     {
6151       char *t_field_name = TYPE_FIELD_NAME (type, i);
6152       struct type *t;
6153       int disp;
6154
6155       if (t_field_name == NULL)
6156         continue;
6157
6158       else if (field_name_match (t_field_name, name))
6159         {
6160           if (dispp != NULL)
6161             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6162           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6163         }
6164
6165       else if (ada_is_wrapper_field (type, i))
6166         {
6167           disp = 0;
6168           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6169                                           0, 1, &disp);
6170           if (t != NULL)
6171             {
6172               if (dispp != NULL)
6173                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6174               return t;
6175             }
6176         }
6177
6178       else if (ada_is_variant_part (type, i))
6179         {
6180           int j;
6181           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6182
6183           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6184             {
6185               /* FIXME pnh 2008/01/26: We check for a field that is
6186                  NOT wrapped in a struct, since the compiler sometimes
6187                  generates these for unchecked variant types.  Revisit
6188                  if the compiler changes this practice. */
6189               char *v_field_name = TYPE_FIELD_NAME (field_type, j);
6190               disp = 0;
6191               if (v_field_name != NULL 
6192                   && field_name_match (v_field_name, name))
6193                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6194               else
6195                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6196                                                 name, 0, 1, &disp);
6197
6198               if (t != NULL)
6199                 {
6200                   if (dispp != NULL)
6201                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6202                   return t;
6203                 }
6204             }
6205         }
6206
6207     }
6208
6209 BadName:
6210   if (!noerr)
6211     {
6212       target_terminal_ours ();
6213       gdb_flush (gdb_stdout);
6214       if (name == NULL)
6215         {
6216           /* XXX: type_sprint */
6217           fprintf_unfiltered (gdb_stderr, _("Type "));
6218           type_print (type, "", gdb_stderr, -1);
6219           error (_(" has no component named <null>"));
6220         }
6221       else
6222         {
6223           /* XXX: type_sprint */
6224           fprintf_unfiltered (gdb_stderr, _("Type "));
6225           type_print (type, "", gdb_stderr, -1);
6226           error (_(" has no component named %s"), name);
6227         }
6228     }
6229
6230   return NULL;
6231 }
6232
6233 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6234    within a value of type OUTER_TYPE, return true iff VAR_TYPE
6235    represents an unchecked union (that is, the variant part of a
6236    record that is named in an Unchecked_Union pragma). */
6237
6238 static int
6239 is_unchecked_variant (struct type *var_type, struct type *outer_type)
6240 {
6241   char *discrim_name = ada_variant_discrim_name (var_type);
6242   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
6243           == NULL);
6244 }
6245
6246
6247 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6248    within a value of type OUTER_TYPE that is stored in GDB at
6249    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6250    numbering from 0) is applicable.  Returns -1 if none are.  */
6251
6252 int
6253 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6254                            const gdb_byte *outer_valaddr)
6255 {
6256   int others_clause;
6257   int i;
6258   char *discrim_name = ada_variant_discrim_name (var_type);
6259   struct value *outer;
6260   struct value *discrim;
6261   LONGEST discrim_val;
6262
6263   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6264   discrim = ada_value_struct_elt (outer, discrim_name, 1);
6265   if (discrim == NULL)
6266     return -1;
6267   discrim_val = value_as_long (discrim);
6268
6269   others_clause = -1;
6270   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6271     {
6272       if (ada_is_others_clause (var_type, i))
6273         others_clause = i;
6274       else if (ada_in_variant (discrim_val, var_type, i))
6275         return i;
6276     }
6277
6278   return others_clause;
6279 }
6280 \f
6281
6282
6283                                 /* Dynamic-Sized Records */
6284
6285 /* Strategy: The type ostensibly attached to a value with dynamic size
6286    (i.e., a size that is not statically recorded in the debugging
6287    data) does not accurately reflect the size or layout of the value.
6288    Our strategy is to convert these values to values with accurate,
6289    conventional types that are constructed on the fly.  */
6290
6291 /* There is a subtle and tricky problem here.  In general, we cannot
6292    determine the size of dynamic records without its data.  However,
6293    the 'struct value' data structure, which GDB uses to represent
6294    quantities in the inferior process (the target), requires the size
6295    of the type at the time of its allocation in order to reserve space
6296    for GDB's internal copy of the data.  That's why the
6297    'to_fixed_xxx_type' routines take (target) addresses as parameters,
6298    rather than struct value*s.
6299
6300    However, GDB's internal history variables ($1, $2, etc.) are
6301    struct value*s containing internal copies of the data that are not, in
6302    general, the same as the data at their corresponding addresses in
6303    the target.  Fortunately, the types we give to these values are all
6304    conventional, fixed-size types (as per the strategy described
6305    above), so that we don't usually have to perform the
6306    'to_fixed_xxx_type' conversions to look at their values.
6307    Unfortunately, there is one exception: if one of the internal
6308    history variables is an array whose elements are unconstrained
6309    records, then we will need to create distinct fixed types for each
6310    element selected.  */
6311
6312 /* The upshot of all of this is that many routines take a (type, host
6313    address, target address) triple as arguments to represent a value.
6314    The host address, if non-null, is supposed to contain an internal
6315    copy of the relevant data; otherwise, the program is to consult the
6316    target at the target address.  */
6317
6318 /* Assuming that VAL0 represents a pointer value, the result of
6319    dereferencing it.  Differs from value_ind in its treatment of
6320    dynamic-sized types.  */
6321
6322 struct value *
6323 ada_value_ind (struct value *val0)
6324 {
6325   struct value *val = unwrap_value (value_ind (val0));
6326   return ada_to_fixed_value (val);
6327 }
6328
6329 /* The value resulting from dereferencing any "reference to"
6330    qualifiers on VAL0.  */
6331
6332 static struct value *
6333 ada_coerce_ref (struct value *val0)
6334 {
6335   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6336     {
6337       struct value *val = val0;
6338       val = coerce_ref (val);
6339       val = unwrap_value (val);
6340       return ada_to_fixed_value (val);
6341     }
6342   else
6343     return val0;
6344 }
6345
6346 /* Return OFF rounded upward if necessary to a multiple of
6347    ALIGNMENT (a power of 2).  */
6348
6349 static unsigned int
6350 align_value (unsigned int off, unsigned int alignment)
6351 {
6352   return (off + alignment - 1) & ~(alignment - 1);
6353 }
6354
6355 /* Return the bit alignment required for field #F of template type TYPE.  */
6356
6357 static unsigned int
6358 field_alignment (struct type *type, int f)
6359 {
6360   const char *name = TYPE_FIELD_NAME (type, f);
6361   int len;
6362   int align_offset;
6363
6364   /* The field name should never be null, unless the debugging information
6365      is somehow malformed.  In this case, we assume the field does not
6366      require any alignment.  */
6367   if (name == NULL)
6368     return 1;
6369
6370   len = strlen (name);
6371
6372   if (!isdigit (name[len - 1]))
6373     return 1;
6374
6375   if (isdigit (name[len - 2]))
6376     align_offset = len - 2;
6377   else
6378     align_offset = len - 1;
6379
6380   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6381     return TARGET_CHAR_BIT;
6382
6383   return atoi (name + align_offset) * TARGET_CHAR_BIT;
6384 }
6385
6386 /* Find a symbol named NAME.  Ignores ambiguity.  */
6387
6388 struct symbol *
6389 ada_find_any_symbol (const char *name)
6390 {
6391   struct symbol *sym;
6392
6393   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6394   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6395     return sym;
6396
6397   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6398   return sym;
6399 }
6400
6401 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
6402    solely for types defined by debug info, it will not search the GDB
6403    primitive types.  */
6404
6405 struct type *
6406 ada_find_any_type (const char *name)
6407 {
6408   struct symbol *sym = ada_find_any_symbol (name);
6409
6410   if (sym != NULL)
6411     return SYMBOL_TYPE (sym);
6412
6413   return NULL;
6414 }
6415
6416 /* Given NAME and an associated BLOCK, search all symbols for
6417    NAME suffixed with  "___XR", which is the ``renaming'' symbol
6418    associated to NAME.  Return this symbol if found, return
6419    NULL otherwise.  */
6420
6421 struct symbol *
6422 ada_find_renaming_symbol (const char *name, struct block *block)
6423 {
6424   struct symbol *sym;
6425
6426   sym = find_old_style_renaming_symbol (name, block);
6427
6428   if (sym != NULL)
6429     return sym;
6430
6431   /* Not right yet.  FIXME pnh 7/20/2007. */
6432   sym = ada_find_any_symbol (name);
6433   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6434     return sym;
6435   else
6436     return NULL;
6437 }
6438
6439 static struct symbol *
6440 find_old_style_renaming_symbol (const char *name, struct block *block)
6441 {
6442   const struct symbol *function_sym = block_linkage_function (block);
6443   char *rename;
6444
6445   if (function_sym != NULL)
6446     {
6447       /* If the symbol is defined inside a function, NAME is not fully
6448          qualified.  This means we need to prepend the function name
6449          as well as adding the ``___XR'' suffix to build the name of
6450          the associated renaming symbol.  */
6451       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6452       /* Function names sometimes contain suffixes used
6453          for instance to qualify nested subprograms.  When building
6454          the XR type name, we need to make sure that this suffix is
6455          not included.  So do not include any suffix in the function
6456          name length below.  */
6457       int function_name_len = ada_name_prefix_len (function_name);
6458       const int rename_len = function_name_len + 2      /*  "__" */
6459         + strlen (name) + 6 /* "___XR\0" */ ;
6460
6461       /* Strip the suffix if necessary.  */
6462       ada_remove_trailing_digits (function_name, &function_name_len);
6463       ada_remove_po_subprogram_suffix (function_name, &function_name_len);
6464       ada_remove_Xbn_suffix (function_name, &function_name_len);
6465
6466       /* Library-level functions are a special case, as GNAT adds
6467          a ``_ada_'' prefix to the function name to avoid namespace
6468          pollution.  However, the renaming symbols themselves do not
6469          have this prefix, so we need to skip this prefix if present.  */
6470       if (function_name_len > 5 /* "_ada_" */
6471           && strstr (function_name, "_ada_") == function_name)
6472         {
6473           function_name += 5;
6474           function_name_len -= 5;
6475         }
6476
6477       rename = (char *) alloca (rename_len * sizeof (char));
6478       strncpy (rename, function_name, function_name_len);
6479       xsnprintf (rename + function_name_len, rename_len - function_name_len,
6480                  "__%s___XR", name);
6481     }
6482   else
6483     {
6484       const int rename_len = strlen (name) + 6;
6485       rename = (char *) alloca (rename_len * sizeof (char));
6486       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
6487     }
6488
6489   return ada_find_any_symbol (rename);
6490 }
6491
6492 /* Because of GNAT encoding conventions, several GDB symbols may match a
6493    given type name.  If the type denoted by TYPE0 is to be preferred to
6494    that of TYPE1 for purposes of type printing, return non-zero;
6495    otherwise return 0.  */
6496
6497 int
6498 ada_prefer_type (struct type *type0, struct type *type1)
6499 {
6500   if (type1 == NULL)
6501     return 1;
6502   else if (type0 == NULL)
6503     return 0;
6504   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6505     return 1;
6506   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6507     return 0;
6508   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6509     return 1;
6510   else if (ada_is_constrained_packed_array_type (type0))
6511     return 1;
6512   else if (ada_is_array_descriptor_type (type0)
6513            && !ada_is_array_descriptor_type (type1))
6514     return 1;
6515   else
6516     {
6517       const char *type0_name = type_name_no_tag (type0);
6518       const char *type1_name = type_name_no_tag (type1);
6519
6520       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6521           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6522         return 1;
6523     }
6524   return 0;
6525 }
6526
6527 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6528    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
6529
6530 char *
6531 ada_type_name (struct type *type)
6532 {
6533   if (type == NULL)
6534     return NULL;
6535   else if (TYPE_NAME (type) != NULL)
6536     return TYPE_NAME (type);
6537   else
6538     return TYPE_TAG_NAME (type);
6539 }
6540
6541 /* Search the list of "descriptive" types associated to TYPE for a type
6542    whose name is NAME.  */
6543
6544 static struct type *
6545 find_parallel_type_by_descriptive_type (struct type *type, const char *name)
6546 {
6547   struct type *result;
6548
6549   /* If there no descriptive-type info, then there is no parallel type
6550      to be found.  */
6551   if (!HAVE_GNAT_AUX_INFO (type))
6552     return NULL;
6553
6554   result = TYPE_DESCRIPTIVE_TYPE (type);
6555   while (result != NULL)
6556     {
6557       char *result_name = ada_type_name (result);
6558
6559       if (result_name == NULL)
6560         {
6561           warning (_("unexpected null name on descriptive type"));
6562           return NULL;
6563         }
6564
6565       /* If the names match, stop.  */
6566       if (strcmp (result_name, name) == 0)
6567         break;
6568
6569       /* Otherwise, look at the next item on the list, if any.  */
6570       if (HAVE_GNAT_AUX_INFO (result))
6571         result = TYPE_DESCRIPTIVE_TYPE (result);
6572       else
6573         result = NULL;
6574     }
6575
6576   /* If we didn't find a match, see whether this is a packed array.  With
6577      older compilers, the descriptive type information is either absent or
6578      irrelevant when it comes to packed arrays so the above lookup fails.
6579      Fall back to using a parallel lookup by name in this case.  */
6580   if (result == NULL && ada_is_constrained_packed_array_type (type))
6581     return ada_find_any_type (name);
6582
6583   return result;
6584 }
6585
6586 /* Find a parallel type to TYPE with the specified NAME, using the
6587    descriptive type taken from the debugging information, if available,
6588    and otherwise using the (slower) name-based method.  */
6589
6590 static struct type *
6591 ada_find_parallel_type_with_name (struct type *type, const char *name)
6592 {
6593   struct type *result = NULL;
6594
6595   if (HAVE_GNAT_AUX_INFO (type))
6596     result = find_parallel_type_by_descriptive_type (type, name);
6597   else
6598     result = ada_find_any_type (name);
6599
6600   return result;
6601 }
6602
6603 /* Same as above, but specify the name of the parallel type by appending
6604    SUFFIX to the name of TYPE.  */
6605
6606 struct type *
6607 ada_find_parallel_type (struct type *type, const char *suffix)
6608 {
6609   char *name, *typename = ada_type_name (type);
6610   int len;
6611
6612   if (typename == NULL)
6613     return NULL;
6614
6615   len = strlen (typename);
6616
6617   name = (char *) alloca (len + strlen (suffix) + 1);
6618
6619   strcpy (name, typename);
6620   strcpy (name + len, suffix);
6621
6622   return ada_find_parallel_type_with_name (type, name);
6623 }
6624
6625 /* If TYPE is a variable-size record type, return the corresponding template
6626    type describing its fields.  Otherwise, return NULL.  */
6627
6628 static struct type *
6629 dynamic_template_type (struct type *type)
6630 {
6631   type = ada_check_typedef (type);
6632
6633   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6634       || ada_type_name (type) == NULL)
6635     return NULL;
6636   else
6637     {
6638       int len = strlen (ada_type_name (type));
6639       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6640         return type;
6641       else
6642         return ada_find_parallel_type (type, "___XVE");
6643     }
6644 }
6645
6646 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6647    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
6648
6649 static int
6650 is_dynamic_field (struct type *templ_type, int field_num)
6651 {
6652   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6653   return name != NULL
6654     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6655     && strstr (name, "___XVL") != NULL;
6656 }
6657
6658 /* The index of the variant field of TYPE, or -1 if TYPE does not
6659    represent a variant record type.  */
6660
6661 static int
6662 variant_field_index (struct type *type)
6663 {
6664   int f;
6665
6666   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6667     return -1;
6668
6669   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6670     {
6671       if (ada_is_variant_part (type, f))
6672         return f;
6673     }
6674   return -1;
6675 }
6676
6677 /* A record type with no fields.  */
6678
6679 static struct type *
6680 empty_record (struct type *template)
6681 {
6682   struct type *type = alloc_type_copy (template);
6683   TYPE_CODE (type) = TYPE_CODE_STRUCT;
6684   TYPE_NFIELDS (type) = 0;
6685   TYPE_FIELDS (type) = NULL;
6686   INIT_CPLUS_SPECIFIC (type);
6687   TYPE_NAME (type) = "<empty>";
6688   TYPE_TAG_NAME (type) = NULL;
6689   TYPE_LENGTH (type) = 0;
6690   return type;
6691 }
6692
6693 /* An ordinary record type (with fixed-length fields) that describes
6694    the value of type TYPE at VALADDR or ADDRESS (see comments at
6695    the beginning of this section) VAL according to GNAT conventions.
6696    DVAL0 should describe the (portion of a) record that contains any
6697    necessary discriminants.  It should be NULL if value_type (VAL) is
6698    an outer-level type (i.e., as opposed to a branch of a variant.)  A
6699    variant field (unless unchecked) is replaced by a particular branch
6700    of the variant.
6701
6702    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6703    length are not statically known are discarded.  As a consequence,
6704    VALADDR, ADDRESS and DVAL0 are ignored.
6705
6706    NOTE: Limitations: For now, we assume that dynamic fields and
6707    variants occupy whole numbers of bytes.  However, they need not be
6708    byte-aligned.  */
6709
6710 struct type *
6711 ada_template_to_fixed_record_type_1 (struct type *type,
6712                                      const gdb_byte *valaddr,
6713                                      CORE_ADDR address, struct value *dval0,
6714                                      int keep_dynamic_fields)
6715 {
6716   struct value *mark = value_mark ();
6717   struct value *dval;
6718   struct type *rtype;
6719   int nfields, bit_len;
6720   int variant_field;
6721   long off;
6722   int fld_bit_len, bit_incr;
6723   int f;
6724
6725   /* Compute the number of fields in this record type that are going
6726      to be processed: unless keep_dynamic_fields, this includes only
6727      fields whose position and length are static will be processed.  */
6728   if (keep_dynamic_fields)
6729     nfields = TYPE_NFIELDS (type);
6730   else
6731     {
6732       nfields = 0;
6733       while (nfields < TYPE_NFIELDS (type)
6734              && !ada_is_variant_part (type, nfields)
6735              && !is_dynamic_field (type, nfields))
6736         nfields++;
6737     }
6738
6739   rtype = alloc_type_copy (type);
6740   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6741   INIT_CPLUS_SPECIFIC (rtype);
6742   TYPE_NFIELDS (rtype) = nfields;
6743   TYPE_FIELDS (rtype) = (struct field *)
6744     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6745   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6746   TYPE_NAME (rtype) = ada_type_name (type);
6747   TYPE_TAG_NAME (rtype) = NULL;
6748   TYPE_FIXED_INSTANCE (rtype) = 1;
6749
6750   off = 0;
6751   bit_len = 0;
6752   variant_field = -1;
6753
6754   for (f = 0; f < nfields; f += 1)
6755     {
6756       off = align_value (off, field_alignment (type, f))
6757         + TYPE_FIELD_BITPOS (type, f);
6758       TYPE_FIELD_BITPOS (rtype, f) = off;
6759       TYPE_FIELD_BITSIZE (rtype, f) = 0;
6760
6761       if (ada_is_variant_part (type, f))
6762         {
6763           variant_field = f;
6764           fld_bit_len = bit_incr = 0;
6765         }
6766       else if (is_dynamic_field (type, f))
6767         {
6768           const gdb_byte *field_valaddr = valaddr;
6769           CORE_ADDR field_address = address;
6770           struct type *field_type =
6771             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
6772
6773           if (dval0 == NULL)
6774             {
6775               /* rtype's length is computed based on the run-time
6776                  value of discriminants.  If the discriminants are not
6777                  initialized, the type size may be completely bogus and
6778                  GDB may fail to allocate a value for it. So check the
6779                  size first before creating the value.  */
6780               check_size (rtype);
6781               dval = value_from_contents_and_address (rtype, valaddr, address);
6782             }
6783           else
6784             dval = dval0;
6785
6786           /* If the type referenced by this field is an aligner type, we need
6787              to unwrap that aligner type, because its size might not be set.
6788              Keeping the aligner type would cause us to compute the wrong
6789              size for this field, impacting the offset of the all the fields
6790              that follow this one.  */
6791           if (ada_is_aligner_type (field_type))
6792             {
6793               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
6794
6795               field_valaddr = cond_offset_host (field_valaddr, field_offset);
6796               field_address = cond_offset_target (field_address, field_offset);
6797               field_type = ada_aligned_type (field_type);
6798             }
6799
6800           field_valaddr = cond_offset_host (field_valaddr,
6801                                             off / TARGET_CHAR_BIT);
6802           field_address = cond_offset_target (field_address,
6803                                               off / TARGET_CHAR_BIT);
6804
6805           /* Get the fixed type of the field.  Note that, in this case,
6806              we do not want to get the real type out of the tag: if
6807              the current field is the parent part of a tagged record,
6808              we will get the tag of the object.  Clearly wrong: the real
6809              type of the parent is not the real type of the child.  We
6810              would end up in an infinite loop.  */
6811           field_type = ada_get_base_type (field_type);
6812           field_type = ada_to_fixed_type (field_type, field_valaddr,
6813                                           field_address, dval, 0);
6814
6815           TYPE_FIELD_TYPE (rtype, f) = field_type;
6816           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6817           bit_incr = fld_bit_len =
6818             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6819         }
6820       else
6821         {
6822           struct type *field_type = TYPE_FIELD_TYPE (type, f);
6823
6824           TYPE_FIELD_TYPE (rtype, f) = field_type;
6825           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6826           if (TYPE_FIELD_BITSIZE (type, f) > 0)
6827             bit_incr = fld_bit_len =
6828               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6829           else
6830             bit_incr = fld_bit_len =
6831               TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
6832         }
6833       if (off + fld_bit_len > bit_len)
6834         bit_len = off + fld_bit_len;
6835       off += bit_incr;
6836       TYPE_LENGTH (rtype) =
6837         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6838     }
6839
6840   /* We handle the variant part, if any, at the end because of certain
6841      odd cases in which it is re-ordered so as NOT to be the last field of
6842      the record.  This can happen in the presence of representation
6843      clauses.  */
6844   if (variant_field >= 0)
6845     {
6846       struct type *branch_type;
6847
6848       off = TYPE_FIELD_BITPOS (rtype, variant_field);
6849
6850       if (dval0 == NULL)
6851         dval = value_from_contents_and_address (rtype, valaddr, address);
6852       else
6853         dval = dval0;
6854
6855       branch_type =
6856         to_fixed_variant_branch_type
6857         (TYPE_FIELD_TYPE (type, variant_field),
6858          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6859          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6860       if (branch_type == NULL)
6861         {
6862           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6863             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6864           TYPE_NFIELDS (rtype) -= 1;
6865         }
6866       else
6867         {
6868           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6869           TYPE_FIELD_NAME (rtype, variant_field) = "S";
6870           fld_bit_len =
6871             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6872             TARGET_CHAR_BIT;
6873           if (off + fld_bit_len > bit_len)
6874             bit_len = off + fld_bit_len;
6875           TYPE_LENGTH (rtype) =
6876             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6877         }
6878     }
6879
6880   /* According to exp_dbug.ads, the size of TYPE for variable-size records
6881      should contain the alignment of that record, which should be a strictly
6882      positive value.  If null or negative, then something is wrong, most
6883      probably in the debug info.  In that case, we don't round up the size
6884      of the resulting type. If this record is not part of another structure,
6885      the current RTYPE length might be good enough for our purposes.  */
6886   if (TYPE_LENGTH (type) <= 0)
6887     {
6888       if (TYPE_NAME (rtype))
6889         warning (_("Invalid type size for `%s' detected: %d."),
6890                  TYPE_NAME (rtype), TYPE_LENGTH (type));
6891       else
6892         warning (_("Invalid type size for <unnamed> detected: %d."),
6893                  TYPE_LENGTH (type));
6894     }
6895   else
6896     {
6897       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
6898                                          TYPE_LENGTH (type));
6899     }
6900
6901   value_free_to_mark (mark);
6902   if (TYPE_LENGTH (rtype) > varsize_limit)
6903     error (_("record type with dynamic size is larger than varsize-limit"));
6904   return rtype;
6905 }
6906
6907 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
6908    of 1.  */
6909
6910 static struct type *
6911 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
6912                                CORE_ADDR address, struct value *dval0)
6913 {
6914   return ada_template_to_fixed_record_type_1 (type, valaddr,
6915                                               address, dval0, 1);
6916 }
6917
6918 /* An ordinary record type in which ___XVL-convention fields and
6919    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
6920    static approximations, containing all possible fields.  Uses
6921    no runtime values.  Useless for use in values, but that's OK,
6922    since the results are used only for type determinations.   Works on both
6923    structs and unions.  Representation note: to save space, we memorize
6924    the result of this function in the TYPE_TARGET_TYPE of the
6925    template type.  */
6926
6927 static struct type *
6928 template_to_static_fixed_type (struct type *type0)
6929 {
6930   struct type *type;
6931   int nfields;
6932   int f;
6933
6934   if (TYPE_TARGET_TYPE (type0) != NULL)
6935     return TYPE_TARGET_TYPE (type0);
6936
6937   nfields = TYPE_NFIELDS (type0);
6938   type = type0;
6939
6940   for (f = 0; f < nfields; f += 1)
6941     {
6942       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
6943       struct type *new_type;
6944
6945       if (is_dynamic_field (type0, f))
6946         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
6947       else
6948         new_type = static_unwrap_type (field_type);
6949       if (type == type0 && new_type != field_type)
6950         {
6951           TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
6952           TYPE_CODE (type) = TYPE_CODE (type0);
6953           INIT_CPLUS_SPECIFIC (type);
6954           TYPE_NFIELDS (type) = nfields;
6955           TYPE_FIELDS (type) = (struct field *)
6956             TYPE_ALLOC (type, nfields * sizeof (struct field));
6957           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
6958                   sizeof (struct field) * nfields);
6959           TYPE_NAME (type) = ada_type_name (type0);
6960           TYPE_TAG_NAME (type) = NULL;
6961           TYPE_FIXED_INSTANCE (type) = 1;
6962           TYPE_LENGTH (type) = 0;
6963         }
6964       TYPE_FIELD_TYPE (type, f) = new_type;
6965       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
6966     }
6967   return type;
6968 }
6969
6970 /* Given an object of type TYPE whose contents are at VALADDR and
6971    whose address in memory is ADDRESS, returns a revision of TYPE,
6972    which should be a non-dynamic-sized record, in which the variant
6973    part, if any, is replaced with the appropriate branch.  Looks
6974    for discriminant values in DVAL0, which can be NULL if the record
6975    contains the necessary discriminant values.  */
6976
6977 static struct type *
6978 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
6979                                    CORE_ADDR address, struct value *dval0)
6980 {
6981   struct value *mark = value_mark ();
6982   struct value *dval;
6983   struct type *rtype;
6984   struct type *branch_type;
6985   int nfields = TYPE_NFIELDS (type);
6986   int variant_field = variant_field_index (type);
6987
6988   if (variant_field == -1)
6989     return type;
6990
6991   if (dval0 == NULL)
6992     dval = value_from_contents_and_address (type, valaddr, address);
6993   else
6994     dval = dval0;
6995
6996   rtype = alloc_type_copy (type);
6997   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6998   INIT_CPLUS_SPECIFIC (rtype);
6999   TYPE_NFIELDS (rtype) = nfields;
7000   TYPE_FIELDS (rtype) =
7001     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7002   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7003           sizeof (struct field) * nfields);
7004   TYPE_NAME (rtype) = ada_type_name (type);
7005   TYPE_TAG_NAME (rtype) = NULL;
7006   TYPE_FIXED_INSTANCE (rtype) = 1;
7007   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7008
7009   branch_type = to_fixed_variant_branch_type
7010     (TYPE_FIELD_TYPE (type, variant_field),
7011      cond_offset_host (valaddr,
7012                        TYPE_FIELD_BITPOS (type, variant_field)
7013                        / TARGET_CHAR_BIT),
7014      cond_offset_target (address,
7015                          TYPE_FIELD_BITPOS (type, variant_field)
7016                          / TARGET_CHAR_BIT), dval);
7017   if (branch_type == NULL)
7018     {
7019       int f;
7020       for (f = variant_field + 1; f < nfields; f += 1)
7021         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7022       TYPE_NFIELDS (rtype) -= 1;
7023     }
7024   else
7025     {
7026       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7027       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7028       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7029       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7030     }
7031   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7032
7033   value_free_to_mark (mark);
7034   return rtype;
7035 }
7036
7037 /* An ordinary record type (with fixed-length fields) that describes
7038    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7039    beginning of this section].   Any necessary discriminants' values
7040    should be in DVAL, a record value; it may be NULL if the object
7041    at ADDR itself contains any necessary discriminant values.
7042    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7043    values from the record are needed.  Except in the case that DVAL,
7044    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7045    unchecked) is replaced by a particular branch of the variant.
7046
7047    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7048    is questionable and may be removed.  It can arise during the
7049    processing of an unconstrained-array-of-record type where all the
7050    variant branches have exactly the same size.  This is because in
7051    such cases, the compiler does not bother to use the XVS convention
7052    when encoding the record.  I am currently dubious of this
7053    shortcut and suspect the compiler should be altered.  FIXME.  */
7054
7055 static struct type *
7056 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7057                       CORE_ADDR address, struct value *dval)
7058 {
7059   struct type *templ_type;
7060
7061   if (TYPE_FIXED_INSTANCE (type0))
7062     return type0;
7063
7064   templ_type = dynamic_template_type (type0);
7065
7066   if (templ_type != NULL)
7067     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7068   else if (variant_field_index (type0) >= 0)
7069     {
7070       if (dval == NULL && valaddr == NULL && address == 0)
7071         return type0;
7072       return to_record_with_fixed_variant_part (type0, valaddr, address,
7073                                                 dval);
7074     }
7075   else
7076     {
7077       TYPE_FIXED_INSTANCE (type0) = 1;
7078       return type0;
7079     }
7080
7081 }
7082
7083 /* An ordinary record type (with fixed-length fields) that describes
7084    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7085    union type.  Any necessary discriminants' values should be in DVAL,
7086    a record value.  That is, this routine selects the appropriate
7087    branch of the union at ADDR according to the discriminant value
7088    indicated in the union's type name.  Returns VAR_TYPE0 itself if
7089    it represents a variant subject to a pragma Unchecked_Union. */
7090
7091 static struct type *
7092 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7093                               CORE_ADDR address, struct value *dval)
7094 {
7095   int which;
7096   struct type *templ_type;
7097   struct type *var_type;
7098
7099   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7100     var_type = TYPE_TARGET_TYPE (var_type0);
7101   else
7102     var_type = var_type0;
7103
7104   templ_type = ada_find_parallel_type (var_type, "___XVU");
7105
7106   if (templ_type != NULL)
7107     var_type = templ_type;
7108
7109   if (is_unchecked_variant (var_type, value_type (dval)))
7110       return var_type0;
7111   which =
7112     ada_which_variant_applies (var_type,
7113                                value_type (dval), value_contents (dval));
7114
7115   if (which < 0)
7116     return empty_record (var_type);
7117   else if (is_dynamic_field (var_type, which))
7118     return to_fixed_record_type
7119       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7120        valaddr, address, dval);
7121   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7122     return
7123       to_fixed_record_type
7124       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7125   else
7126     return TYPE_FIELD_TYPE (var_type, which);
7127 }
7128
7129 /* Assuming that TYPE0 is an array type describing the type of a value
7130    at ADDR, and that DVAL describes a record containing any
7131    discriminants used in TYPE0, returns a type for the value that
7132    contains no dynamic components (that is, no components whose sizes
7133    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
7134    true, gives an error message if the resulting type's size is over
7135    varsize_limit.  */
7136
7137 static struct type *
7138 to_fixed_array_type (struct type *type0, struct value *dval,
7139                      int ignore_too_big)
7140 {
7141   struct type *index_type_desc;
7142   struct type *result;
7143   int constrained_packed_array_p;
7144
7145   if (TYPE_FIXED_INSTANCE (type0))
7146     return type0;
7147
7148   constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
7149   if (constrained_packed_array_p)
7150     type0 = decode_constrained_packed_array_type (type0);
7151
7152   index_type_desc = ada_find_parallel_type (type0, "___XA");
7153   if (index_type_desc == NULL)
7154     {
7155       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7156       /* NOTE: elt_type---the fixed version of elt_type0---should never
7157          depend on the contents of the array in properly constructed
7158          debugging data.  */
7159       /* Create a fixed version of the array element type.
7160          We're not providing the address of an element here,
7161          and thus the actual object value cannot be inspected to do
7162          the conversion.  This should not be a problem, since arrays of
7163          unconstrained objects are not allowed.  In particular, all
7164          the elements of an array of a tagged type should all be of
7165          the same type specified in the debugging info.  No need to
7166          consult the object tag.  */
7167       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7168
7169       /* Make sure we always create a new array type when dealing with
7170          packed array types, since we're going to fix-up the array
7171          type length and element bitsize a little further down.  */
7172       if (elt_type0 == elt_type && !constrained_packed_array_p)
7173         result = type0;
7174       else
7175         result = create_array_type (alloc_type_copy (type0),
7176                                     elt_type, TYPE_INDEX_TYPE (type0));
7177     }
7178   else
7179     {
7180       int i;
7181       struct type *elt_type0;
7182
7183       elt_type0 = type0;
7184       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7185         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7186
7187       /* NOTE: result---the fixed version of elt_type0---should never
7188          depend on the contents of the array in properly constructed
7189          debugging data.  */
7190       /* Create a fixed version of the array element type.
7191          We're not providing the address of an element here,
7192          and thus the actual object value cannot be inspected to do
7193          the conversion.  This should not be a problem, since arrays of
7194          unconstrained objects are not allowed.  In particular, all
7195          the elements of an array of a tagged type should all be of
7196          the same type specified in the debugging info.  No need to
7197          consult the object tag.  */
7198       result =
7199         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7200
7201       elt_type0 = type0;
7202       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7203         {
7204           struct type *range_type =
7205             to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
7206                                  dval, TYPE_INDEX_TYPE (elt_type0));
7207           result = create_array_type (alloc_type_copy (elt_type0),
7208                                       result, range_type);
7209           elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7210         }
7211       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
7212         error (_("array type with dynamic size is larger than varsize-limit"));
7213     }
7214
7215   if (constrained_packed_array_p)
7216     {
7217       /* So far, the resulting type has been created as if the original
7218          type was a regular (non-packed) array type.  As a result, the
7219          bitsize of the array elements needs to be set again, and the array
7220          length needs to be recomputed based on that bitsize.  */
7221       int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
7222       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
7223
7224       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
7225       TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
7226       if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
7227         TYPE_LENGTH (result)++;
7228     }
7229
7230   TYPE_FIXED_INSTANCE (result) = 1;
7231   return result;
7232 }
7233
7234
7235 /* A standard type (containing no dynamically sized components)
7236    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7237    DVAL describes a record containing any discriminants used in TYPE0,
7238    and may be NULL if there are none, or if the object of type TYPE at
7239    ADDRESS or in VALADDR contains these discriminants.
7240    
7241    If CHECK_TAG is not null, in the case of tagged types, this function
7242    attempts to locate the object's tag and use it to compute the actual
7243    type.  However, when ADDRESS is null, we cannot use it to determine the
7244    location of the tag, and therefore compute the tagged type's actual type.
7245    So we return the tagged type without consulting the tag.  */
7246    
7247 static struct type *
7248 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
7249                    CORE_ADDR address, struct value *dval, int check_tag)
7250 {
7251   type = ada_check_typedef (type);
7252   switch (TYPE_CODE (type))
7253     {
7254     default:
7255       return type;
7256     case TYPE_CODE_STRUCT:
7257       {
7258         struct type *static_type = to_static_fixed_type (type);
7259         struct type *fixed_record_type =
7260           to_fixed_record_type (type, valaddr, address, NULL);
7261         /* If STATIC_TYPE is a tagged type and we know the object's address,
7262            then we can determine its tag, and compute the object's actual
7263            type from there. Note that we have to use the fixed record
7264            type (the parent part of the record may have dynamic fields
7265            and the way the location of _tag is expressed may depend on
7266            them).  */
7267
7268         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
7269           {
7270             struct type *real_type =
7271               type_from_tag (value_tag_from_contents_and_address
7272                              (fixed_record_type,
7273                               valaddr,
7274                               address));
7275             if (real_type != NULL)
7276               return to_fixed_record_type (real_type, valaddr, address, NULL);
7277           }
7278
7279         /* Check to see if there is a parallel ___XVZ variable.
7280            If there is, then it provides the actual size of our type.  */
7281         else if (ada_type_name (fixed_record_type) != NULL)
7282           {
7283             char *name = ada_type_name (fixed_record_type);
7284             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
7285             int xvz_found = 0;
7286             LONGEST size;
7287
7288             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
7289             size = get_int_var_value (xvz_name, &xvz_found);
7290             if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
7291               {
7292                 fixed_record_type = copy_type (fixed_record_type);
7293                 TYPE_LENGTH (fixed_record_type) = size;
7294
7295                 /* The FIXED_RECORD_TYPE may have be a stub.  We have
7296                    observed this when the debugging info is STABS, and
7297                    apparently it is something that is hard to fix.
7298
7299                    In practice, we don't need the actual type definition
7300                    at all, because the presence of the XVZ variable allows us
7301                    to assume that there must be a XVS type as well, which we
7302                    should be able to use later, when we need the actual type
7303                    definition.
7304
7305                    In the meantime, pretend that the "fixed" type we are
7306                    returning is NOT a stub, because this can cause trouble
7307                    when using this type to create new types targeting it.
7308                    Indeed, the associated creation routines often check
7309                    whether the target type is a stub and will try to replace
7310                    it, thus using a type with the wrong size. This, in turn,
7311                    might cause the new type to have the wrong size too.
7312                    Consider the case of an array, for instance, where the size
7313                    of the array is computed from the number of elements in
7314                    our array multiplied by the size of its element.  */
7315                 TYPE_STUB (fixed_record_type) = 0;
7316               }
7317           }
7318         return fixed_record_type;
7319       }
7320     case TYPE_CODE_ARRAY:
7321       return to_fixed_array_type (type, dval, 1);
7322     case TYPE_CODE_UNION:
7323       if (dval == NULL)
7324         return type;
7325       else
7326         return to_fixed_variant_branch_type (type, valaddr, address, dval);
7327     }
7328 }
7329
7330 /* The same as ada_to_fixed_type_1, except that it preserves the type
7331    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7332    ada_to_fixed_type_1 would return the type referenced by TYPE.  */
7333
7334 struct type *
7335 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7336                    CORE_ADDR address, struct value *dval, int check_tag)
7337
7338 {
7339   struct type *fixed_type =
7340     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7341
7342   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7343       && TYPE_TARGET_TYPE (type) == fixed_type)
7344     return type;
7345
7346   return fixed_type;
7347 }
7348
7349 /* A standard (static-sized) type corresponding as well as possible to
7350    TYPE0, but based on no runtime data.  */
7351
7352 static struct type *
7353 to_static_fixed_type (struct type *type0)
7354 {
7355   struct type *type;
7356
7357   if (type0 == NULL)
7358     return NULL;
7359
7360   if (TYPE_FIXED_INSTANCE (type0))
7361     return type0;
7362
7363   type0 = ada_check_typedef (type0);
7364
7365   switch (TYPE_CODE (type0))
7366     {
7367     default:
7368       return type0;
7369     case TYPE_CODE_STRUCT:
7370       type = dynamic_template_type (type0);
7371       if (type != NULL)
7372         return template_to_static_fixed_type (type);
7373       else
7374         return template_to_static_fixed_type (type0);
7375     case TYPE_CODE_UNION:
7376       type = ada_find_parallel_type (type0, "___XVU");
7377       if (type != NULL)
7378         return template_to_static_fixed_type (type);
7379       else
7380         return template_to_static_fixed_type (type0);
7381     }
7382 }
7383
7384 /* A static approximation of TYPE with all type wrappers removed.  */
7385
7386 static struct type *
7387 static_unwrap_type (struct type *type)
7388 {
7389   if (ada_is_aligner_type (type))
7390     {
7391       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
7392       if (ada_type_name (type1) == NULL)
7393         TYPE_NAME (type1) = ada_type_name (type);
7394
7395       return static_unwrap_type (type1);
7396     }
7397   else
7398     {
7399       struct type *raw_real_type = ada_get_base_type (type);
7400       if (raw_real_type == type)
7401         return type;
7402       else
7403         return to_static_fixed_type (raw_real_type);
7404     }
7405 }
7406
7407 /* In some cases, incomplete and private types require
7408    cross-references that are not resolved as records (for example,
7409       type Foo;
7410       type FooP is access Foo;
7411       V: FooP;
7412       type Foo is array ...;
7413    ).  In these cases, since there is no mechanism for producing
7414    cross-references to such types, we instead substitute for FooP a
7415    stub enumeration type that is nowhere resolved, and whose tag is
7416    the name of the actual type.  Call these types "non-record stubs".  */
7417
7418 /* A type equivalent to TYPE that is not a non-record stub, if one
7419    exists, otherwise TYPE.  */
7420
7421 struct type *
7422 ada_check_typedef (struct type *type)
7423 {
7424   if (type == NULL)
7425     return NULL;
7426
7427   CHECK_TYPEDEF (type);
7428   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
7429       || !TYPE_STUB (type)
7430       || TYPE_TAG_NAME (type) == NULL)
7431     return type;
7432   else
7433     {
7434       char *name = TYPE_TAG_NAME (type);
7435       struct type *type1 = ada_find_any_type (name);
7436       return (type1 == NULL) ? type : type1;
7437     }
7438 }
7439
7440 /* A value representing the data at VALADDR/ADDRESS as described by
7441    type TYPE0, but with a standard (static-sized) type that correctly
7442    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
7443    type, then return VAL0 [this feature is simply to avoid redundant
7444    creation of struct values].  */
7445
7446 static struct value *
7447 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7448                            struct value *val0)
7449 {
7450   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
7451   if (type == type0 && val0 != NULL)
7452     return val0;
7453   else
7454     return value_from_contents_and_address (type, 0, address);
7455 }
7456
7457 /* A value representing VAL, but with a standard (static-sized) type
7458    that correctly describes it.  Does not necessarily create a new
7459    value.  */
7460
7461 struct value *
7462 ada_to_fixed_value (struct value *val)
7463 {
7464   return ada_to_fixed_value_create (value_type (val),
7465                                     value_address (val),
7466                                     val);
7467 }
7468 \f
7469
7470 /* Attributes */
7471
7472 /* Table mapping attribute numbers to names.
7473    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
7474
7475 static const char *attribute_names[] = {
7476   "<?>",
7477
7478   "first",
7479   "last",
7480   "length",
7481   "image",
7482   "max",
7483   "min",
7484   "modulus",
7485   "pos",
7486   "size",
7487   "tag",
7488   "val",
7489   0
7490 };
7491
7492 const char *
7493 ada_attribute_name (enum exp_opcode n)
7494 {
7495   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7496     return attribute_names[n - OP_ATR_FIRST + 1];
7497   else
7498     return attribute_names[0];
7499 }
7500
7501 /* Evaluate the 'POS attribute applied to ARG.  */
7502
7503 static LONGEST
7504 pos_atr (struct value *arg)
7505 {
7506   struct value *val = coerce_ref (arg);
7507   struct type *type = value_type (val);
7508
7509   if (!discrete_type_p (type))
7510     error (_("'POS only defined on discrete types"));
7511
7512   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7513     {
7514       int i;
7515       LONGEST v = value_as_long (val);
7516
7517       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7518         {
7519           if (v == TYPE_FIELD_BITPOS (type, i))
7520             return i;
7521         }
7522       error (_("enumeration value is invalid: can't find 'POS"));
7523     }
7524   else
7525     return value_as_long (val);
7526 }
7527
7528 static struct value *
7529 value_pos_atr (struct type *type, struct value *arg)
7530 {
7531   return value_from_longest (type, pos_atr (arg));
7532 }
7533
7534 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
7535
7536 static struct value *
7537 value_val_atr (struct type *type, struct value *arg)
7538 {
7539   if (!discrete_type_p (type))
7540     error (_("'VAL only defined on discrete types"));
7541   if (!integer_type_p (value_type (arg)))
7542     error (_("'VAL requires integral argument"));
7543
7544   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7545     {
7546       long pos = value_as_long (arg);
7547       if (pos < 0 || pos >= TYPE_NFIELDS (type))
7548         error (_("argument to 'VAL out of range"));
7549       return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
7550     }
7551   else
7552     return value_from_longest (type, value_as_long (arg));
7553 }
7554 \f
7555
7556                                 /* Evaluation */
7557
7558 /* True if TYPE appears to be an Ada character type.
7559    [At the moment, this is true only for Character and Wide_Character;
7560    It is a heuristic test that could stand improvement].  */
7561
7562 int
7563 ada_is_character_type (struct type *type)
7564 {
7565   const char *name;
7566
7567   /* If the type code says it's a character, then assume it really is,
7568      and don't check any further.  */
7569   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
7570     return 1;
7571   
7572   /* Otherwise, assume it's a character type iff it is a discrete type
7573      with a known character type name.  */
7574   name = ada_type_name (type);
7575   return (name != NULL
7576           && (TYPE_CODE (type) == TYPE_CODE_INT
7577               || TYPE_CODE (type) == TYPE_CODE_RANGE)
7578           && (strcmp (name, "character") == 0
7579               || strcmp (name, "wide_character") == 0
7580               || strcmp (name, "wide_wide_character") == 0
7581               || strcmp (name, "unsigned char") == 0));
7582 }
7583
7584 /* True if TYPE appears to be an Ada string type.  */
7585
7586 int
7587 ada_is_string_type (struct type *type)
7588 {
7589   type = ada_check_typedef (type);
7590   if (type != NULL
7591       && TYPE_CODE (type) != TYPE_CODE_PTR
7592       && (ada_is_simple_array_type (type)
7593           || ada_is_array_descriptor_type (type))
7594       && ada_array_arity (type) == 1)
7595     {
7596       struct type *elttype = ada_array_element_type (type, 1);
7597
7598       return ada_is_character_type (elttype);
7599     }
7600   else
7601     return 0;
7602 }
7603
7604 /* The compiler sometimes provides a parallel XVS type for a given
7605    PAD type.  Normally, it is safe to follow the PAD type directly,
7606    but older versions of the compiler have a bug that causes the offset
7607    of its "F" field to be wrong.  Following that field in that case
7608    would lead to incorrect results, but this can be worked around
7609    by ignoring the PAD type and using the associated XVS type instead.
7610
7611    Set to True if the debugger should trust the contents of PAD types.
7612    Otherwise, ignore the PAD type if there is a parallel XVS type.  */
7613 static int trust_pad_over_xvs = 1;
7614
7615 /* True if TYPE is a struct type introduced by the compiler to force the
7616    alignment of a value.  Such types have a single field with a
7617    distinctive name.  */
7618
7619 int
7620 ada_is_aligner_type (struct type *type)
7621 {
7622   type = ada_check_typedef (type);
7623
7624   if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
7625     return 0;
7626
7627   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
7628           && TYPE_NFIELDS (type) == 1
7629           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
7630 }
7631
7632 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
7633    the parallel type.  */
7634
7635 struct type *
7636 ada_get_base_type (struct type *raw_type)
7637 {
7638   struct type *real_type_namer;
7639   struct type *raw_real_type;
7640
7641   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7642     return raw_type;
7643
7644   if (ada_is_aligner_type (raw_type))
7645     /* The encoding specifies that we should always use the aligner type.
7646        So, even if this aligner type has an associated XVS type, we should
7647        simply ignore it.
7648
7649        According to the compiler gurus, an XVS type parallel to an aligner
7650        type may exist because of a stabs limitation.  In stabs, aligner
7651        types are empty because the field has a variable-sized type, and
7652        thus cannot actually be used as an aligner type.  As a result,
7653        we need the associated parallel XVS type to decode the type.
7654        Since the policy in the compiler is to not change the internal
7655        representation based on the debugging info format, we sometimes
7656        end up having a redundant XVS type parallel to the aligner type.  */
7657     return raw_type;
7658
7659   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
7660   if (real_type_namer == NULL
7661       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7662       || TYPE_NFIELDS (real_type_namer) != 1)
7663     return raw_type;
7664
7665   if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
7666     {
7667       /* This is an older encoding form where the base type needs to be
7668          looked up by name.  We prefer the newer enconding because it is
7669          more efficient.  */
7670       raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7671       if (raw_real_type == NULL)
7672         return raw_type;
7673       else
7674         return raw_real_type;
7675     }
7676
7677   /* The field in our XVS type is a reference to the base type.  */
7678   return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
7679 }
7680
7681 /* The type of value designated by TYPE, with all aligners removed.  */
7682
7683 struct type *
7684 ada_aligned_type (struct type *type)
7685 {
7686   if (ada_is_aligner_type (type))
7687     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7688   else
7689     return ada_get_base_type (type);
7690 }
7691
7692
7693 /* The address of the aligned value in an object at address VALADDR
7694    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
7695
7696 const gdb_byte *
7697 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
7698 {
7699   if (ada_is_aligner_type (type))
7700     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
7701                                    valaddr +
7702                                    TYPE_FIELD_BITPOS (type,
7703                                                       0) / TARGET_CHAR_BIT);
7704   else
7705     return valaddr;
7706 }
7707
7708
7709
7710 /* The printed representation of an enumeration literal with encoded
7711    name NAME.  The value is good to the next call of ada_enum_name.  */
7712 const char *
7713 ada_enum_name (const char *name)
7714 {
7715   static char *result;
7716   static size_t result_len = 0;
7717   char *tmp;
7718
7719   /* First, unqualify the enumeration name:
7720      1. Search for the last '.' character.  If we find one, then skip
7721      all the preceeding characters, the unqualified name starts
7722      right after that dot.
7723      2. Otherwise, we may be debugging on a target where the compiler
7724      translates dots into "__".  Search forward for double underscores,
7725      but stop searching when we hit an overloading suffix, which is
7726      of the form "__" followed by digits.  */
7727
7728   tmp = strrchr (name, '.');
7729   if (tmp != NULL)
7730     name = tmp + 1;
7731   else
7732     {
7733       while ((tmp = strstr (name, "__")) != NULL)
7734         {
7735           if (isdigit (tmp[2]))
7736             break;
7737           else
7738             name = tmp + 2;
7739         }
7740     }
7741
7742   if (name[0] == 'Q')
7743     {
7744       int v;
7745       if (name[1] == 'U' || name[1] == 'W')
7746         {
7747           if (sscanf (name + 2, "%x", &v) != 1)
7748             return name;
7749         }
7750       else
7751         return name;
7752
7753       GROW_VECT (result, result_len, 16);
7754       if (isascii (v) && isprint (v))
7755         xsnprintf (result, result_len, "'%c'", v);
7756       else if (name[1] == 'U')
7757         xsnprintf (result, result_len, "[\"%02x\"]", v);
7758       else
7759         xsnprintf (result, result_len, "[\"%04x\"]", v);
7760
7761       return result;
7762     }
7763   else
7764     {
7765       tmp = strstr (name, "__");
7766       if (tmp == NULL)
7767         tmp = strstr (name, "$");
7768       if (tmp != NULL)
7769         {
7770           GROW_VECT (result, result_len, tmp - name + 1);
7771           strncpy (result, name, tmp - name);
7772           result[tmp - name] = '\0';
7773           return result;
7774         }
7775
7776       return name;
7777     }
7778 }
7779
7780 /* Evaluate the subexpression of EXP starting at *POS as for
7781    evaluate_type, updating *POS to point just past the evaluated
7782    expression.  */
7783
7784 static struct value *
7785 evaluate_subexp_type (struct expression *exp, int *pos)
7786 {
7787   return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7788 }
7789
7790 /* If VAL is wrapped in an aligner or subtype wrapper, return the
7791    value it wraps.  */
7792
7793 static struct value *
7794 unwrap_value (struct value *val)
7795 {
7796   struct type *type = ada_check_typedef (value_type (val));
7797   if (ada_is_aligner_type (type))
7798     {
7799       struct value *v = ada_value_struct_elt (val, "F", 0);
7800       struct type *val_type = ada_check_typedef (value_type (v));
7801       if (ada_type_name (val_type) == NULL)
7802         TYPE_NAME (val_type) = ada_type_name (type);
7803
7804       return unwrap_value (v);
7805     }
7806   else
7807     {
7808       struct type *raw_real_type =
7809         ada_check_typedef (ada_get_base_type (type));
7810
7811       /* If there is no parallel XVS or XVE type, then the value is
7812          already unwrapped.  Return it without further modification.  */
7813       if ((type == raw_real_type)
7814           && ada_find_parallel_type (type, "___XVE") == NULL)
7815         return val;
7816
7817       return
7818         coerce_unspec_val_to_type
7819         (val, ada_to_fixed_type (raw_real_type, 0,
7820                                  value_address (val),
7821                                  NULL, 1));
7822     }
7823 }
7824
7825 static struct value *
7826 cast_to_fixed (struct type *type, struct value *arg)
7827 {
7828   LONGEST val;
7829
7830   if (type == value_type (arg))
7831     return arg;
7832   else if (ada_is_fixed_point_type (value_type (arg)))
7833     val = ada_float_to_fixed (type,
7834                               ada_fixed_to_float (value_type (arg),
7835                                                   value_as_long (arg)));
7836   else
7837     {
7838       DOUBLEST argd = value_as_double (arg);
7839       val = ada_float_to_fixed (type, argd);
7840     }
7841
7842   return value_from_longest (type, val);
7843 }
7844
7845 static struct value *
7846 cast_from_fixed (struct type *type, struct value *arg)
7847 {
7848   DOUBLEST val = ada_fixed_to_float (value_type (arg),
7849                                      value_as_long (arg));
7850   return value_from_double (type, val);
7851 }
7852
7853 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7854    return the converted value.  */
7855
7856 static struct value *
7857 coerce_for_assign (struct type *type, struct value *val)
7858 {
7859   struct type *type2 = value_type (val);
7860   if (type == type2)
7861     return val;
7862
7863   type2 = ada_check_typedef (type2);
7864   type = ada_check_typedef (type);
7865
7866   if (TYPE_CODE (type2) == TYPE_CODE_PTR
7867       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7868     {
7869       val = ada_value_ind (val);
7870       type2 = value_type (val);
7871     }
7872
7873   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7874       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7875     {
7876       if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7877           || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7878           != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7879         error (_("Incompatible types in assignment"));
7880       deprecated_set_value_type (val, type);
7881     }
7882   return val;
7883 }
7884
7885 static struct value *
7886 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
7887 {
7888   struct value *val;
7889   struct type *type1, *type2;
7890   LONGEST v, v1, v2;
7891
7892   arg1 = coerce_ref (arg1);
7893   arg2 = coerce_ref (arg2);
7894   type1 = base_type (ada_check_typedef (value_type (arg1)));
7895   type2 = base_type (ada_check_typedef (value_type (arg2)));
7896
7897   if (TYPE_CODE (type1) != TYPE_CODE_INT
7898       || TYPE_CODE (type2) != TYPE_CODE_INT)
7899     return value_binop (arg1, arg2, op);
7900
7901   switch (op)
7902     {
7903     case BINOP_MOD:
7904     case BINOP_DIV:
7905     case BINOP_REM:
7906       break;
7907     default:
7908       return value_binop (arg1, arg2, op);
7909     }
7910
7911   v2 = value_as_long (arg2);
7912   if (v2 == 0)
7913     error (_("second operand of %s must not be zero."), op_string (op));
7914
7915   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
7916     return value_binop (arg1, arg2, op);
7917
7918   v1 = value_as_long (arg1);
7919   switch (op)
7920     {
7921     case BINOP_DIV:
7922       v = v1 / v2;
7923       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
7924         v += v > 0 ? -1 : 1;
7925       break;
7926     case BINOP_REM:
7927       v = v1 % v2;
7928       if (v * v1 < 0)
7929         v -= v2;
7930       break;
7931     default:
7932       /* Should not reach this point.  */
7933       v = 0;
7934     }
7935
7936   val = allocate_value (type1);
7937   store_unsigned_integer (value_contents_raw (val),
7938                           TYPE_LENGTH (value_type (val)),
7939                           gdbarch_byte_order (get_type_arch (type1)), v);
7940   return val;
7941 }
7942
7943 static int
7944 ada_value_equal (struct value *arg1, struct value *arg2)
7945 {
7946   if (ada_is_direct_array_type (value_type (arg1))
7947       || ada_is_direct_array_type (value_type (arg2)))
7948     {
7949       /* Automatically dereference any array reference before
7950          we attempt to perform the comparison.  */
7951       arg1 = ada_coerce_ref (arg1);
7952       arg2 = ada_coerce_ref (arg2);
7953       
7954       arg1 = ada_coerce_to_simple_array (arg1);
7955       arg2 = ada_coerce_to_simple_array (arg2);
7956       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
7957           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
7958         error (_("Attempt to compare array with non-array"));
7959       /* FIXME: The following works only for types whose
7960          representations use all bits (no padding or undefined bits)
7961          and do not have user-defined equality.  */
7962       return
7963         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
7964         && memcmp (value_contents (arg1), value_contents (arg2),
7965                    TYPE_LENGTH (value_type (arg1))) == 0;
7966     }
7967   return value_equal (arg1, arg2);
7968 }
7969
7970 /* Total number of component associations in the aggregate starting at
7971    index PC in EXP.  Assumes that index PC is the start of an
7972    OP_AGGREGATE. */
7973
7974 static int
7975 num_component_specs (struct expression *exp, int pc)
7976 {
7977   int n, m, i;
7978   m = exp->elts[pc + 1].longconst;
7979   pc += 3;
7980   n = 0;
7981   for (i = 0; i < m; i += 1)
7982     {
7983       switch (exp->elts[pc].opcode) 
7984         {
7985         default:
7986           n += 1;
7987           break;
7988         case OP_CHOICES:
7989           n += exp->elts[pc + 1].longconst;
7990           break;
7991         }
7992       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
7993     }
7994   return n;
7995 }
7996
7997 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
7998    component of LHS (a simple array or a record), updating *POS past
7999    the expression, assuming that LHS is contained in CONTAINER.  Does
8000    not modify the inferior's memory, nor does it modify LHS (unless
8001    LHS == CONTAINER).  */
8002
8003 static void
8004 assign_component (struct value *container, struct value *lhs, LONGEST index,
8005                   struct expression *exp, int *pos)
8006 {
8007   struct value *mark = value_mark ();
8008   struct value *elt;
8009   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8010     {
8011       struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
8012       struct value *index_val = value_from_longest (index_type, index);
8013       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8014     }
8015   else
8016     {
8017       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8018       elt = ada_to_fixed_value (unwrap_value (elt));
8019     }
8020
8021   if (exp->elts[*pos].opcode == OP_AGGREGATE)
8022     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8023   else
8024     value_assign_to_component (container, elt, 
8025                                ada_evaluate_subexp (NULL, exp, pos, 
8026                                                     EVAL_NORMAL));
8027
8028   value_free_to_mark (mark);
8029 }
8030
8031 /* Assuming that LHS represents an lvalue having a record or array
8032    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8033    of that aggregate's value to LHS, advancing *POS past the
8034    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
8035    lvalue containing LHS (possibly LHS itself).  Does not modify
8036    the inferior's memory, nor does it modify the contents of 
8037    LHS (unless == CONTAINER).  Returns the modified CONTAINER. */
8038
8039 static struct value *
8040 assign_aggregate (struct value *container, 
8041                   struct value *lhs, struct expression *exp, 
8042                   int *pos, enum noside noside)
8043 {
8044   struct type *lhs_type;
8045   int n = exp->elts[*pos+1].longconst;
8046   LONGEST low_index, high_index;
8047   int num_specs;
8048   LONGEST *indices;
8049   int max_indices, num_indices;
8050   int is_array_aggregate;
8051   int i;
8052
8053   *pos += 3;
8054   if (noside != EVAL_NORMAL)
8055     {
8056       int i;
8057       for (i = 0; i < n; i += 1)
8058         ada_evaluate_subexp (NULL, exp, pos, noside);
8059       return container;
8060     }
8061
8062   container = ada_coerce_ref (container);
8063   if (ada_is_direct_array_type (value_type (container)))
8064     container = ada_coerce_to_simple_array (container);
8065   lhs = ada_coerce_ref (lhs);
8066   if (!deprecated_value_modifiable (lhs))
8067     error (_("Left operand of assignment is not a modifiable lvalue."));
8068
8069   lhs_type = value_type (lhs);
8070   if (ada_is_direct_array_type (lhs_type))
8071     {
8072       lhs = ada_coerce_to_simple_array (lhs);
8073       lhs_type = value_type (lhs);
8074       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8075       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8076       is_array_aggregate = 1;
8077     }
8078   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8079     {
8080       low_index = 0;
8081       high_index = num_visible_fields (lhs_type) - 1;
8082       is_array_aggregate = 0;
8083     }
8084   else
8085     error (_("Left-hand side must be array or record."));
8086
8087   num_specs = num_component_specs (exp, *pos - 3);
8088   max_indices = 4 * num_specs + 4;
8089   indices = alloca (max_indices * sizeof (indices[0]));
8090   indices[0] = indices[1] = low_index - 1;
8091   indices[2] = indices[3] = high_index + 1;
8092   num_indices = 4;
8093
8094   for (i = 0; i < n; i += 1)
8095     {
8096       switch (exp->elts[*pos].opcode)
8097         {
8098         case OP_CHOICES:
8099           aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
8100                                          &num_indices, max_indices,
8101                                          low_index, high_index);
8102           break;
8103         case OP_POSITIONAL:
8104           aggregate_assign_positional (container, lhs, exp, pos, indices,
8105                                        &num_indices, max_indices,
8106                                        low_index, high_index);
8107           break;
8108         case OP_OTHERS:
8109           if (i != n-1)
8110             error (_("Misplaced 'others' clause"));
8111           aggregate_assign_others (container, lhs, exp, pos, indices, 
8112                                    num_indices, low_index, high_index);
8113           break;
8114         default:
8115           error (_("Internal error: bad aggregate clause"));
8116         }
8117     }
8118
8119   return container;
8120 }
8121               
8122 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8123    construct at *POS, updating *POS past the construct, given that
8124    the positions are relative to lower bound LOW, where HIGH is the 
8125    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
8126    updating *NUM_INDICES as needed.  CONTAINER is as for
8127    assign_aggregate. */
8128 static void
8129 aggregate_assign_positional (struct value *container,
8130                              struct value *lhs, struct expression *exp,
8131                              int *pos, LONGEST *indices, int *num_indices,
8132                              int max_indices, LONGEST low, LONGEST high) 
8133 {
8134   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8135   
8136   if (ind - 1 == high)
8137     warning (_("Extra components in aggregate ignored."));
8138   if (ind <= high)
8139     {
8140       add_component_interval (ind, ind, indices, num_indices, max_indices);
8141       *pos += 3;
8142       assign_component (container, lhs, ind, exp, pos);
8143     }
8144   else
8145     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8146 }
8147
8148 /* Assign into the components of LHS indexed by the OP_CHOICES
8149    construct at *POS, updating *POS past the construct, given that
8150    the allowable indices are LOW..HIGH.  Record the indices assigned
8151    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8152    needed.  CONTAINER is as for assign_aggregate. */
8153 static void
8154 aggregate_assign_from_choices (struct value *container,
8155                                struct value *lhs, struct expression *exp,
8156                                int *pos, LONGEST *indices, int *num_indices,
8157                                int max_indices, LONGEST low, LONGEST high) 
8158 {
8159   int j;
8160   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8161   int choice_pos, expr_pc;
8162   int is_array = ada_is_direct_array_type (value_type (lhs));
8163
8164   choice_pos = *pos += 3;
8165
8166   for (j = 0; j < n_choices; j += 1)
8167     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8168   expr_pc = *pos;
8169   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8170   
8171   for (j = 0; j < n_choices; j += 1)
8172     {
8173       LONGEST lower, upper;
8174       enum exp_opcode op = exp->elts[choice_pos].opcode;
8175       if (op == OP_DISCRETE_RANGE)
8176         {
8177           choice_pos += 1;
8178           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8179                                                       EVAL_NORMAL));
8180           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
8181                                                       EVAL_NORMAL));
8182         }
8183       else if (is_array)
8184         {
8185           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
8186                                                       EVAL_NORMAL));
8187           upper = lower;
8188         }
8189       else
8190         {
8191           int ind;
8192           char *name;
8193           switch (op)
8194             {
8195             case OP_NAME:
8196               name = &exp->elts[choice_pos + 2].string;
8197               break;
8198             case OP_VAR_VALUE:
8199               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8200               break;
8201             default:
8202               error (_("Invalid record component association."));
8203             }
8204           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8205           ind = 0;
8206           if (! find_struct_field (name, value_type (lhs), 0, 
8207                                    NULL, NULL, NULL, NULL, &ind))
8208             error (_("Unknown component name: %s."), name);
8209           lower = upper = ind;
8210         }
8211
8212       if (lower <= upper && (lower < low || upper > high))
8213         error (_("Index in component association out of bounds."));
8214
8215       add_component_interval (lower, upper, indices, num_indices,
8216                               max_indices);
8217       while (lower <= upper)
8218         {
8219           int pos1;
8220           pos1 = expr_pc;
8221           assign_component (container, lhs, lower, exp, &pos1);
8222           lower += 1;
8223         }
8224     }
8225 }
8226
8227 /* Assign the value of the expression in the OP_OTHERS construct in
8228    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8229    have not been previously assigned.  The index intervals already assigned
8230    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
8231    OP_OTHERS clause.  CONTAINER is as for assign_aggregate*/
8232 static void
8233 aggregate_assign_others (struct value *container,
8234                          struct value *lhs, struct expression *exp,
8235                          int *pos, LONGEST *indices, int num_indices,
8236                          LONGEST low, LONGEST high) 
8237 {
8238   int i;
8239   int expr_pc = *pos+1;
8240   
8241   for (i = 0; i < num_indices - 2; i += 2)
8242     {
8243       LONGEST ind;
8244       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8245         {
8246           int pos;
8247           pos = expr_pc;
8248           assign_component (container, lhs, ind, exp, &pos);
8249         }
8250     }
8251   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8252 }
8253
8254 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
8255    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8256    modifying *SIZE as needed.  It is an error if *SIZE exceeds
8257    MAX_SIZE.  The resulting intervals do not overlap.  */
8258 static void
8259 add_component_interval (LONGEST low, LONGEST high, 
8260                         LONGEST* indices, int *size, int max_size)
8261 {
8262   int i, j;
8263   for (i = 0; i < *size; i += 2) {
8264     if (high >= indices[i] && low <= indices[i + 1])
8265       {
8266         int kh;
8267         for (kh = i + 2; kh < *size; kh += 2)
8268           if (high < indices[kh])
8269             break;
8270         if (low < indices[i])
8271           indices[i] = low;
8272         indices[i + 1] = indices[kh - 1];
8273         if (high > indices[i + 1])
8274           indices[i + 1] = high;
8275         memcpy (indices + i + 2, indices + kh, *size - kh);
8276         *size -= kh - i - 2;
8277         return;
8278       }
8279     else if (high < indices[i])
8280       break;
8281   }
8282         
8283   if (*size == max_size)
8284     error (_("Internal error: miscounted aggregate components."));
8285   *size += 2;
8286   for (j = *size-1; j >= i+2; j -= 1)
8287     indices[j] = indices[j - 2];
8288   indices[i] = low;
8289   indices[i + 1] = high;
8290 }
8291
8292 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8293    is different.  */
8294
8295 static struct value *
8296 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8297 {
8298   if (type == ada_check_typedef (value_type (arg2)))
8299     return arg2;
8300
8301   if (ada_is_fixed_point_type (type))
8302     return (cast_to_fixed (type, arg2));
8303
8304   if (ada_is_fixed_point_type (value_type (arg2)))
8305     return cast_from_fixed (type, arg2);
8306
8307   return value_cast (type, arg2);
8308 }
8309
8310 /*  Evaluating Ada expressions, and printing their result.
8311     ------------------------------------------------------
8312
8313     1. Introduction:
8314     ----------------
8315
8316     We usually evaluate an Ada expression in order to print its value.
8317     We also evaluate an expression in order to print its type, which
8318     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
8319     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
8320     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
8321     the evaluation compared to the EVAL_NORMAL, but is otherwise very
8322     similar.
8323
8324     Evaluating expressions is a little more complicated for Ada entities
8325     than it is for entities in languages such as C.  The main reason for
8326     this is that Ada provides types whose definition might be dynamic.
8327     One example of such types is variant records.  Or another example
8328     would be an array whose bounds can only be known at run time.
8329
8330     The following description is a general guide as to what should be
8331     done (and what should NOT be done) in order to evaluate an expression
8332     involving such types, and when.  This does not cover how the semantic
8333     information is encoded by GNAT as this is covered separatly.  For the
8334     document used as the reference for the GNAT encoding, see exp_dbug.ads
8335     in the GNAT sources.
8336
8337     Ideally, we should embed each part of this description next to its
8338     associated code.  Unfortunately, the amount of code is so vast right
8339     now that it's hard to see whether the code handling a particular
8340     situation might be duplicated or not.  One day, when the code is
8341     cleaned up, this guide might become redundant with the comments
8342     inserted in the code, and we might want to remove it.
8343
8344     2. ``Fixing'' an Entity, the Simple Case:
8345     -----------------------------------------
8346
8347     When evaluating Ada expressions, the tricky issue is that they may
8348     reference entities whose type contents and size are not statically
8349     known.  Consider for instance a variant record:
8350
8351        type Rec (Empty : Boolean := True) is record
8352           case Empty is
8353              when True => null;
8354              when False => Value : Integer;
8355           end case;
8356        end record;
8357        Yes : Rec := (Empty => False, Value => 1);
8358        No  : Rec := (empty => True);
8359
8360     The size and contents of that record depends on the value of the
8361     descriminant (Rec.Empty).  At this point, neither the debugging
8362     information nor the associated type structure in GDB are able to
8363     express such dynamic types.  So what the debugger does is to create
8364     "fixed" versions of the type that applies to the specific object.
8365     We also informally refer to this opperation as "fixing" an object,
8366     which means creating its associated fixed type.
8367
8368     Example: when printing the value of variable "Yes" above, its fixed
8369     type would look like this:
8370
8371        type Rec is record
8372           Empty : Boolean;
8373           Value : Integer;
8374        end record;
8375
8376     On the other hand, if we printed the value of "No", its fixed type
8377     would become:
8378
8379        type Rec is record
8380           Empty : Boolean;
8381        end record;
8382
8383     Things become a little more complicated when trying to fix an entity
8384     with a dynamic type that directly contains another dynamic type,
8385     such as an array of variant records, for instance.  There are
8386     two possible cases: Arrays, and records.
8387
8388     3. ``Fixing'' Arrays:
8389     ---------------------
8390
8391     The type structure in GDB describes an array in terms of its bounds,
8392     and the type of its elements.  By design, all elements in the array
8393     have the same type and we cannot represent an array of variant elements
8394     using the current type structure in GDB.  When fixing an array,
8395     we cannot fix the array element, as we would potentially need one
8396     fixed type per element of the array.  As a result, the best we can do
8397     when fixing an array is to produce an array whose bounds and size
8398     are correct (allowing us to read it from memory), but without having
8399     touched its element type.  Fixing each element will be done later,
8400     when (if) necessary.
8401
8402     Arrays are a little simpler to handle than records, because the same
8403     amount of memory is allocated for each element of the array, even if
8404     the amount of space actually used by each element differs from element
8405     to element.  Consider for instance the following array of type Rec:
8406
8407        type Rec_Array is array (1 .. 2) of Rec;
8408
8409     The actual amount of memory occupied by each element might be different
8410     from element to element, depending on the value of their discriminant.
8411     But the amount of space reserved for each element in the array remains
8412     fixed regardless.  So we simply need to compute that size using
8413     the debugging information available, from which we can then determine
8414     the array size (we multiply the number of elements of the array by
8415     the size of each element).
8416
8417     The simplest case is when we have an array of a constrained element
8418     type. For instance, consider the following type declarations:
8419
8420         type Bounded_String (Max_Size : Integer) is
8421            Length : Integer;
8422            Buffer : String (1 .. Max_Size);
8423         end record;
8424         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
8425
8426     In this case, the compiler describes the array as an array of
8427     variable-size elements (identified by its XVS suffix) for which
8428     the size can be read in the parallel XVZ variable.
8429
8430     In the case of an array of an unconstrained element type, the compiler
8431     wraps the array element inside a private PAD type.  This type should not
8432     be shown to the user, and must be "unwrap"'ed before printing.  Note
8433     that we also use the adjective "aligner" in our code to designate
8434     these wrapper types.
8435
8436     In some cases, the size allocated for each element is statically
8437     known.  In that case, the PAD type already has the correct size,
8438     and the array element should remain unfixed.
8439
8440     But there are cases when this size is not statically known.
8441     For instance, assuming that "Five" is an integer variable:
8442
8443         type Dynamic is array (1 .. Five) of Integer;
8444         type Wrapper (Has_Length : Boolean := False) is record
8445            Data : Dynamic;
8446            case Has_Length is
8447               when True => Length : Integer;
8448               when False => null;
8449            end case;
8450         end record;
8451         type Wrapper_Array is array (1 .. 2) of Wrapper;
8452
8453         Hello : Wrapper_Array := (others => (Has_Length => True,
8454                                              Data => (others => 17),
8455                                              Length => 1));
8456
8457
8458     The debugging info would describe variable Hello as being an
8459     array of a PAD type.  The size of that PAD type is not statically
8460     known, but can be determined using a parallel XVZ variable.
8461     In that case, a copy of the PAD type with the correct size should
8462     be used for the fixed array.
8463
8464     3. ``Fixing'' record type objects:
8465     ----------------------------------
8466
8467     Things are slightly different from arrays in the case of dynamic
8468     record types.  In this case, in order to compute the associated
8469     fixed type, we need to determine the size and offset of each of
8470     its components.  This, in turn, requires us to compute the fixed
8471     type of each of these components.
8472
8473     Consider for instance the example:
8474
8475         type Bounded_String (Max_Size : Natural) is record
8476            Str : String (1 .. Max_Size);
8477            Length : Natural;
8478         end record;
8479         My_String : Bounded_String (Max_Size => 10);
8480
8481     In that case, the position of field "Length" depends on the size
8482     of field Str, which itself depends on the value of the Max_Size
8483     discriminant.  In order to fix the type of variable My_String,
8484     we need to fix the type of field Str.  Therefore, fixing a variant
8485     record requires us to fix each of its components.
8486
8487     However, if a component does not have a dynamic size, the component
8488     should not be fixed.  In particular, fields that use a PAD type
8489     should not fixed.  Here is an example where this might happen
8490     (assuming type Rec above):
8491
8492        type Container (Big : Boolean) is record
8493           First : Rec;
8494           After : Integer;
8495           case Big is
8496              when True => Another : Integer;
8497              when False => null;
8498           end case;
8499        end record;
8500        My_Container : Container := (Big => False,
8501                                     First => (Empty => True),
8502                                     After => 42);
8503
8504     In that example, the compiler creates a PAD type for component First,
8505     whose size is constant, and then positions the component After just
8506     right after it.  The offset of component After is therefore constant
8507     in this case.
8508
8509     The debugger computes the position of each field based on an algorithm
8510     that uses, among other things, the actual position and size of the field
8511     preceding it.  Let's now imagine that the user is trying to print
8512     the value of My_Container.  If the type fixing was recursive, we would
8513     end up computing the offset of field After based on the size of the
8514     fixed version of field First.  And since in our example First has
8515     only one actual field, the size of the fixed type is actually smaller
8516     than the amount of space allocated to that field, and thus we would
8517     compute the wrong offset of field After.
8518
8519     To make things more complicated, we need to watch out for dynamic
8520     components of variant records (identified by the ___XVL suffix in
8521     the component name).  Even if the target type is a PAD type, the size
8522     of that type might not be statically known.  So the PAD type needs
8523     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
8524     we might end up with the wrong size for our component.  This can be
8525     observed with the following type declarations:
8526
8527         type Octal is new Integer range 0 .. 7;
8528         type Octal_Array is array (Positive range <>) of Octal;
8529         pragma Pack (Octal_Array);
8530
8531         type Octal_Buffer (Size : Positive) is record
8532            Buffer : Octal_Array (1 .. Size);
8533            Length : Integer;
8534         end record;
8535
8536     In that case, Buffer is a PAD type whose size is unset and needs
8537     to be computed by fixing the unwrapped type.
8538
8539     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
8540     ----------------------------------------------------------
8541
8542     Lastly, when should the sub-elements of an entity that remained unfixed
8543     thus far, be actually fixed?
8544
8545     The answer is: Only when referencing that element.  For instance
8546     when selecting one component of a record, this specific component
8547     should be fixed at that point in time.  Or when printing the value
8548     of a record, each component should be fixed before its value gets
8549     printed.  Similarly for arrays, the element of the array should be
8550     fixed when printing each element of the array, or when extracting
8551     one element out of that array.  On the other hand, fixing should
8552     not be performed on the elements when taking a slice of an array!
8553
8554     Note that one of the side-effects of miscomputing the offset and
8555     size of each field is that we end up also miscomputing the size
8556     of the containing type.  This can have adverse results when computing
8557     the value of an entity.  GDB fetches the value of an entity based
8558     on the size of its type, and thus a wrong size causes GDB to fetch
8559     the wrong amount of memory.  In the case where the computed size is
8560     too small, GDB fetches too little data to print the value of our
8561     entiry.  Results in this case as unpredicatble, as we usually read
8562     past the buffer containing the data =:-o.  */
8563
8564 /* Implement the evaluate_exp routine in the exp_descriptor structure
8565    for the Ada language.  */
8566
8567 static struct value *
8568 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8569                      int *pos, enum noside noside)
8570 {
8571   enum exp_opcode op;
8572   int tem;
8573   int pc;
8574   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8575   struct type *type;
8576   int nargs, oplen;
8577   struct value **argvec;
8578
8579   pc = *pos;
8580   *pos += 1;
8581   op = exp->elts[pc].opcode;
8582
8583   switch (op)
8584     {
8585     default:
8586       *pos -= 1;
8587       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8588       arg1 = unwrap_value (arg1);
8589
8590       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8591          then we need to perform the conversion manually, because
8592          evaluate_subexp_standard doesn't do it.  This conversion is
8593          necessary in Ada because the different kinds of float/fixed
8594          types in Ada have different representations.
8595
8596          Similarly, we need to perform the conversion from OP_LONG
8597          ourselves.  */
8598       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8599         arg1 = ada_value_cast (expect_type, arg1, noside);
8600
8601       return arg1;
8602
8603     case OP_STRING:
8604       {
8605         struct value *result;
8606         *pos -= 1;
8607         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8608         /* The result type will have code OP_STRING, bashed there from 
8609            OP_ARRAY.  Bash it back.  */
8610         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8611           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8612         return result;
8613       }
8614
8615     case UNOP_CAST:
8616       (*pos) += 2;
8617       type = exp->elts[pc + 1].type;
8618       arg1 = evaluate_subexp (type, exp, pos, noside);
8619       if (noside == EVAL_SKIP)
8620         goto nosideret;
8621       arg1 = ada_value_cast (type, arg1, noside);
8622       return arg1;
8623
8624     case UNOP_QUAL:
8625       (*pos) += 2;
8626       type = exp->elts[pc + 1].type;
8627       return ada_evaluate_subexp (type, exp, pos, noside);
8628
8629     case BINOP_ASSIGN:
8630       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8631       if (exp->elts[*pos].opcode == OP_AGGREGATE)
8632         {
8633           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8634           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8635             return arg1;
8636           return ada_value_assign (arg1, arg1);
8637         }
8638       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8639          except if the lhs of our assignment is a convenience variable.
8640          In the case of assigning to a convenience variable, the lhs
8641          should be exactly the result of the evaluation of the rhs.  */
8642       type = value_type (arg1);
8643       if (VALUE_LVAL (arg1) == lval_internalvar)
8644          type = NULL;
8645       arg2 = evaluate_subexp (type, exp, pos, noside);
8646       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8647         return arg1;
8648       if (ada_is_fixed_point_type (value_type (arg1)))
8649         arg2 = cast_to_fixed (value_type (arg1), arg2);
8650       else if (ada_is_fixed_point_type (value_type (arg2)))
8651         error
8652           (_("Fixed-point values must be assigned to fixed-point variables"));
8653       else
8654         arg2 = coerce_for_assign (value_type (arg1), arg2);
8655       return ada_value_assign (arg1, arg2);
8656
8657     case BINOP_ADD:
8658       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8659       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8660       if (noside == EVAL_SKIP)
8661         goto nosideret;
8662       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8663         return (value_from_longest
8664                  (value_type (arg1),
8665                   value_as_long (arg1) + value_as_long (arg2)));
8666       if ((ada_is_fixed_point_type (value_type (arg1))
8667            || ada_is_fixed_point_type (value_type (arg2)))
8668           && value_type (arg1) != value_type (arg2))
8669         error (_("Operands of fixed-point addition must have the same type"));
8670       /* Do the addition, and cast the result to the type of the first
8671          argument.  We cannot cast the result to a reference type, so if
8672          ARG1 is a reference type, find its underlying type.  */
8673       type = value_type (arg1);
8674       while (TYPE_CODE (type) == TYPE_CODE_REF)
8675         type = TYPE_TARGET_TYPE (type);
8676       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8677       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
8678
8679     case BINOP_SUB:
8680       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8681       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8682       if (noside == EVAL_SKIP)
8683         goto nosideret;
8684       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8685         return (value_from_longest
8686                  (value_type (arg1),
8687                   value_as_long (arg1) - value_as_long (arg2)));
8688       if ((ada_is_fixed_point_type (value_type (arg1))
8689            || ada_is_fixed_point_type (value_type (arg2)))
8690           && value_type (arg1) != value_type (arg2))
8691         error (_("Operands of fixed-point subtraction must have the same type"));
8692       /* Do the substraction, and cast the result to the type of the first
8693          argument.  We cannot cast the result to a reference type, so if
8694          ARG1 is a reference type, find its underlying type.  */
8695       type = value_type (arg1);
8696       while (TYPE_CODE (type) == TYPE_CODE_REF)
8697         type = TYPE_TARGET_TYPE (type);
8698       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8699       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
8700
8701     case BINOP_MUL:
8702     case BINOP_DIV:
8703     case BINOP_REM:
8704     case BINOP_MOD:
8705       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8706       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8707       if (noside == EVAL_SKIP)
8708         goto nosideret;
8709       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8710         {
8711           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8712           return value_zero (value_type (arg1), not_lval);
8713         }
8714       else
8715         {
8716           type = builtin_type (exp->gdbarch)->builtin_double;
8717           if (ada_is_fixed_point_type (value_type (arg1)))
8718             arg1 = cast_from_fixed (type, arg1);
8719           if (ada_is_fixed_point_type (value_type (arg2)))
8720             arg2 = cast_from_fixed (type, arg2);
8721           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8722           return ada_value_binop (arg1, arg2, op);
8723         }
8724
8725     case BINOP_EQUAL:
8726     case BINOP_NOTEQUAL:
8727       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8728       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8729       if (noside == EVAL_SKIP)
8730         goto nosideret;
8731       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8732         tem = 0;
8733       else
8734         {
8735           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8736           tem = ada_value_equal (arg1, arg2);
8737         }
8738       if (op == BINOP_NOTEQUAL)
8739         tem = !tem;
8740       type = language_bool_type (exp->language_defn, exp->gdbarch);
8741       return value_from_longest (type, (LONGEST) tem);
8742
8743     case UNOP_NEG:
8744       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8745       if (noside == EVAL_SKIP)
8746         goto nosideret;
8747       else if (ada_is_fixed_point_type (value_type (arg1)))
8748         return value_cast (value_type (arg1), value_neg (arg1));
8749       else
8750         {
8751           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
8752           return value_neg (arg1);
8753         }
8754
8755     case BINOP_LOGICAL_AND:
8756     case BINOP_LOGICAL_OR:
8757     case UNOP_LOGICAL_NOT:
8758       {
8759         struct value *val;
8760
8761         *pos -= 1;
8762         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8763         type = language_bool_type (exp->language_defn, exp->gdbarch);
8764         return value_cast (type, val);
8765       }
8766
8767     case BINOP_BITWISE_AND:
8768     case BINOP_BITWISE_IOR:
8769     case BINOP_BITWISE_XOR:
8770       {
8771         struct value *val;
8772
8773         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8774         *pos = pc;
8775         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8776
8777         return value_cast (value_type (arg1), val);
8778       }
8779
8780     case OP_VAR_VALUE:
8781       *pos -= 1;
8782
8783       if (noside == EVAL_SKIP)
8784         {
8785           *pos += 4;
8786           goto nosideret;
8787         }
8788       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8789         /* Only encountered when an unresolved symbol occurs in a
8790            context other than a function call, in which case, it is
8791            invalid.  */
8792         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8793                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8794       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8795         {
8796           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
8797           /* Check to see if this is a tagged type.  We also need to handle
8798              the case where the type is a reference to a tagged type, but
8799              we have to be careful to exclude pointers to tagged types.
8800              The latter should be shown as usual (as a pointer), whereas
8801              a reference should mostly be transparent to the user.  */
8802           if (ada_is_tagged_type (type, 0)
8803               || (TYPE_CODE(type) == TYPE_CODE_REF
8804                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
8805           {
8806             /* Tagged types are a little special in the fact that the real
8807                type is dynamic and can only be determined by inspecting the
8808                object's tag.  This means that we need to get the object's
8809                value first (EVAL_NORMAL) and then extract the actual object
8810                type from its tag.
8811
8812                Note that we cannot skip the final step where we extract
8813                the object type from its tag, because the EVAL_NORMAL phase
8814                results in dynamic components being resolved into fixed ones.
8815                This can cause problems when trying to print the type
8816                description of tagged types whose parent has a dynamic size:
8817                We use the type name of the "_parent" component in order
8818                to print the name of the ancestor type in the type description.
8819                If that component had a dynamic size, the resolution into
8820                a fixed type would result in the loss of that type name,
8821                thus preventing us from printing the name of the ancestor
8822                type in the type description.  */
8823             struct type *actual_type;
8824
8825             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
8826             actual_type = type_from_tag (ada_value_tag (arg1));
8827             if (actual_type == NULL)
8828               /* If, for some reason, we were unable to determine
8829                  the actual type from the tag, then use the static
8830                  approximation that we just computed as a fallback.
8831                  This can happen if the debugging information is
8832                  incomplete, for instance.  */
8833               actual_type = type;
8834
8835             return value_zero (actual_type, not_lval);
8836           }
8837
8838           *pos += 4;
8839           return value_zero
8840             (to_static_fixed_type
8841              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8842              not_lval);
8843         }
8844       else
8845         {
8846           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8847           arg1 = unwrap_value (arg1);
8848           return ada_to_fixed_value (arg1);
8849         }
8850
8851     case OP_FUNCALL:
8852       (*pos) += 2;
8853
8854       /* Allocate arg vector, including space for the function to be
8855          called in argvec[0] and a terminating NULL.  */
8856       nargs = longest_to_int (exp->elts[pc + 1].longconst);
8857       argvec =
8858         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8859
8860       if (exp->elts[*pos].opcode == OP_VAR_VALUE
8861           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8862         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8863                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8864       else
8865         {
8866           for (tem = 0; tem <= nargs; tem += 1)
8867             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8868           argvec[tem] = 0;
8869
8870           if (noside == EVAL_SKIP)
8871             goto nosideret;
8872         }
8873
8874       if (ada_is_constrained_packed_array_type
8875           (desc_base_type (value_type (argvec[0]))))
8876         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8877       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8878                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
8879         /* This is a packed array that has already been fixed, and
8880            therefore already coerced to a simple array.  Nothing further
8881            to do.  */
8882         ;
8883       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8884                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8885                    && VALUE_LVAL (argvec[0]) == lval_memory))
8886         argvec[0] = value_addr (argvec[0]);
8887
8888       type = ada_check_typedef (value_type (argvec[0]));
8889       if (TYPE_CODE (type) == TYPE_CODE_PTR)
8890         {
8891           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8892             {
8893             case TYPE_CODE_FUNC:
8894               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8895               break;
8896             case TYPE_CODE_ARRAY:
8897               break;
8898             case TYPE_CODE_STRUCT:
8899               if (noside != EVAL_AVOID_SIDE_EFFECTS)
8900                 argvec[0] = ada_value_ind (argvec[0]);
8901               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8902               break;
8903             default:
8904               error (_("cannot subscript or call something of type `%s'"),
8905                      ada_type_name (value_type (argvec[0])));
8906               break;
8907             }
8908         }
8909
8910       switch (TYPE_CODE (type))
8911         {
8912         case TYPE_CODE_FUNC:
8913           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8914             return allocate_value (TYPE_TARGET_TYPE (type));
8915           return call_function_by_hand (argvec[0], nargs, argvec + 1);
8916         case TYPE_CODE_STRUCT:
8917           {
8918             int arity;
8919
8920             arity = ada_array_arity (type);
8921             type = ada_array_element_type (type, nargs);
8922             if (type == NULL)
8923               error (_("cannot subscript or call a record"));
8924             if (arity != nargs)
8925               error (_("wrong number of subscripts; expecting %d"), arity);
8926             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8927               return value_zero (ada_aligned_type (type), lval_memory);
8928             return
8929               unwrap_value (ada_value_subscript
8930                             (argvec[0], nargs, argvec + 1));
8931           }
8932         case TYPE_CODE_ARRAY:
8933           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8934             {
8935               type = ada_array_element_type (type, nargs);
8936               if (type == NULL)
8937                 error (_("element type of array unknown"));
8938               else
8939                 return value_zero (ada_aligned_type (type), lval_memory);
8940             }
8941           return
8942             unwrap_value (ada_value_subscript
8943                           (ada_coerce_to_simple_array (argvec[0]),
8944                            nargs, argvec + 1));
8945         case TYPE_CODE_PTR:     /* Pointer to array */
8946           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8947           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8948             {
8949               type = ada_array_element_type (type, nargs);
8950               if (type == NULL)
8951                 error (_("element type of array unknown"));
8952               else
8953                 return value_zero (ada_aligned_type (type), lval_memory);
8954             }
8955           return
8956             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8957                                                    nargs, argvec + 1));
8958
8959         default:
8960           error (_("Attempt to index or call something other than an "
8961                    "array or function"));
8962         }
8963
8964     case TERNOP_SLICE:
8965       {
8966         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8967         struct value *low_bound_val =
8968           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8969         struct value *high_bound_val =
8970           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8971         LONGEST low_bound;
8972         LONGEST high_bound;
8973         low_bound_val = coerce_ref (low_bound_val);
8974         high_bound_val = coerce_ref (high_bound_val);
8975         low_bound = pos_atr (low_bound_val);
8976         high_bound = pos_atr (high_bound_val);
8977
8978         if (noside == EVAL_SKIP)
8979           goto nosideret;
8980
8981         /* If this is a reference to an aligner type, then remove all
8982            the aligners.  */
8983         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8984             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8985           TYPE_TARGET_TYPE (value_type (array)) =
8986             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8987
8988         if (ada_is_constrained_packed_array_type (value_type (array)))
8989           error (_("cannot slice a packed array"));
8990
8991         /* If this is a reference to an array or an array lvalue,
8992            convert to a pointer.  */
8993         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8994             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8995                 && VALUE_LVAL (array) == lval_memory))
8996           array = value_addr (array);
8997
8998         if (noside == EVAL_AVOID_SIDE_EFFECTS
8999             && ada_is_array_descriptor_type (ada_check_typedef
9000                                              (value_type (array))))
9001           return empty_array (ada_type_of_array (array, 0), low_bound);
9002
9003         array = ada_coerce_to_simple_array_ptr (array);
9004
9005         /* If we have more than one level of pointer indirection,
9006            dereference the value until we get only one level.  */
9007         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9008                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
9009                      == TYPE_CODE_PTR))
9010           array = value_ind (array);
9011
9012         /* Make sure we really do have an array type before going further,
9013            to avoid a SEGV when trying to get the index type or the target
9014            type later down the road if the debug info generated by
9015            the compiler is incorrect or incomplete.  */
9016         if (!ada_is_simple_array_type (value_type (array)))
9017           error (_("cannot take slice of non-array"));
9018
9019         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
9020           {
9021             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
9022               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
9023                                   low_bound);
9024             else
9025               {
9026                 struct type *arr_type0 =
9027                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
9028                                        NULL, 1);
9029                 return ada_value_slice_from_ptr (array, arr_type0,
9030                                                  longest_to_int (low_bound),
9031                                                  longest_to_int (high_bound));
9032               }
9033           }
9034         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9035           return array;
9036         else if (high_bound < low_bound)
9037           return empty_array (value_type (array), low_bound);
9038         else
9039           return ada_value_slice (array, longest_to_int (low_bound),
9040                                   longest_to_int (high_bound));
9041       }
9042
9043     case UNOP_IN_RANGE:
9044       (*pos) += 2;
9045       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9046       type = check_typedef (exp->elts[pc + 1].type);
9047
9048       if (noside == EVAL_SKIP)
9049         goto nosideret;
9050
9051       switch (TYPE_CODE (type))
9052         {
9053         default:
9054           lim_warning (_("Membership test incompletely implemented; "
9055                          "always returns true"));
9056           type = language_bool_type (exp->language_defn, exp->gdbarch);
9057           return value_from_longest (type, (LONGEST) 1);
9058
9059         case TYPE_CODE_RANGE:
9060           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9061           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
9062           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9063           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9064           type = language_bool_type (exp->language_defn, exp->gdbarch);
9065           return
9066             value_from_longest (type,
9067                                 (value_less (arg1, arg3)
9068                                  || value_equal (arg1, arg3))
9069                                 && (value_less (arg2, arg1)
9070                                     || value_equal (arg2, arg1)));
9071         }
9072
9073     case BINOP_IN_BOUNDS:
9074       (*pos) += 2;
9075       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9076       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9077
9078       if (noside == EVAL_SKIP)
9079         goto nosideret;
9080
9081       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9082         {
9083           type = language_bool_type (exp->language_defn, exp->gdbarch);
9084           return value_zero (type, not_lval);
9085         }
9086
9087       tem = longest_to_int (exp->elts[pc + 1].longconst);
9088
9089       type = ada_index_type (value_type (arg2), tem, "range");
9090       if (!type)
9091         type = value_type (arg1);
9092
9093       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9094       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
9095
9096       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9097       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9098       type = language_bool_type (exp->language_defn, exp->gdbarch);
9099       return
9100         value_from_longest (type,
9101                             (value_less (arg1, arg3)
9102                              || value_equal (arg1, arg3))
9103                             && (value_less (arg2, arg1)
9104                                 || value_equal (arg2, arg1)));
9105
9106     case TERNOP_IN_RANGE:
9107       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9108       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9109       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9110
9111       if (noside == EVAL_SKIP)
9112         goto nosideret;
9113
9114       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9115       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9116       type = language_bool_type (exp->language_defn, exp->gdbarch);
9117       return
9118         value_from_longest (type,
9119                             (value_less (arg1, arg3)
9120                              || value_equal (arg1, arg3))
9121                             && (value_less (arg2, arg1)
9122                                 || value_equal (arg2, arg1)));
9123
9124     case OP_ATR_FIRST:
9125     case OP_ATR_LAST:
9126     case OP_ATR_LENGTH:
9127       {
9128         struct type *type_arg;
9129         if (exp->elts[*pos].opcode == OP_TYPE)
9130           {
9131             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9132             arg1 = NULL;
9133             type_arg = check_typedef (exp->elts[pc + 2].type);
9134           }
9135         else
9136           {
9137             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9138             type_arg = NULL;
9139           }
9140
9141         if (exp->elts[*pos].opcode != OP_LONG)
9142           error (_("Invalid operand to '%s"), ada_attribute_name (op));
9143         tem = longest_to_int (exp->elts[*pos + 2].longconst);
9144         *pos += 4;
9145
9146         if (noside == EVAL_SKIP)
9147           goto nosideret;
9148
9149         if (type_arg == NULL)
9150           {
9151             arg1 = ada_coerce_ref (arg1);
9152
9153             if (ada_is_constrained_packed_array_type (value_type (arg1)))
9154               arg1 = ada_coerce_to_simple_array (arg1);
9155
9156             type = ada_index_type (value_type (arg1), tem,
9157                                    ada_attribute_name (op));
9158             if (type == NULL)
9159               type = builtin_type (exp->gdbarch)->builtin_int;
9160
9161             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9162               return allocate_value (type);
9163
9164             switch (op)
9165               {
9166               default:          /* Should never happen.  */
9167                 error (_("unexpected attribute encountered"));
9168               case OP_ATR_FIRST:
9169                 return value_from_longest
9170                         (type, ada_array_bound (arg1, tem, 0));
9171               case OP_ATR_LAST:
9172                 return value_from_longest
9173                         (type, ada_array_bound (arg1, tem, 1));
9174               case OP_ATR_LENGTH:
9175                 return value_from_longest
9176                         (type, ada_array_length (arg1, tem));
9177               }
9178           }
9179         else if (discrete_type_p (type_arg))
9180           {
9181             struct type *range_type;
9182             char *name = ada_type_name (type_arg);
9183             range_type = NULL;
9184             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9185               range_type = to_fixed_range_type (name, NULL, type_arg);
9186             if (range_type == NULL)
9187               range_type = type_arg;
9188             switch (op)
9189               {
9190               default:
9191                 error (_("unexpected attribute encountered"));
9192               case OP_ATR_FIRST:
9193                 return value_from_longest 
9194                   (range_type, ada_discrete_type_low_bound (range_type));
9195               case OP_ATR_LAST:
9196                 return value_from_longest
9197                   (range_type, ada_discrete_type_high_bound (range_type));
9198               case OP_ATR_LENGTH:
9199                 error (_("the 'length attribute applies only to array types"));
9200               }
9201           }
9202         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9203           error (_("unimplemented type attribute"));
9204         else
9205           {
9206             LONGEST low, high;
9207
9208             if (ada_is_constrained_packed_array_type (type_arg))
9209               type_arg = decode_constrained_packed_array_type (type_arg);
9210
9211             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
9212             if (type == NULL)
9213               type = builtin_type (exp->gdbarch)->builtin_int;
9214
9215             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9216               return allocate_value (type);
9217
9218             switch (op)
9219               {
9220               default:
9221                 error (_("unexpected attribute encountered"));
9222               case OP_ATR_FIRST:
9223                 low = ada_array_bound_from_type (type_arg, tem, 0);
9224                 return value_from_longest (type, low);
9225               case OP_ATR_LAST:
9226                 high = ada_array_bound_from_type (type_arg, tem, 1);
9227                 return value_from_longest (type, high);
9228               case OP_ATR_LENGTH:
9229                 low = ada_array_bound_from_type (type_arg, tem, 0);
9230                 high = ada_array_bound_from_type (type_arg, tem, 1);
9231                 return value_from_longest (type, high - low + 1);
9232               }
9233           }
9234       }
9235
9236     case OP_ATR_TAG:
9237       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9238       if (noside == EVAL_SKIP)
9239         goto nosideret;
9240
9241       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9242         return value_zero (ada_tag_type (arg1), not_lval);
9243
9244       return ada_value_tag (arg1);
9245
9246     case OP_ATR_MIN:
9247     case OP_ATR_MAX:
9248       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9249       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9250       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9251       if (noside == EVAL_SKIP)
9252         goto nosideret;
9253       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9254         return value_zero (value_type (arg1), not_lval);
9255       else
9256         {
9257           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9258           return value_binop (arg1, arg2,
9259                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9260         }
9261
9262     case OP_ATR_MODULUS:
9263       {
9264         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
9265         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9266
9267         if (noside == EVAL_SKIP)
9268           goto nosideret;
9269
9270         if (!ada_is_modular_type (type_arg))
9271           error (_("'modulus must be applied to modular type"));
9272
9273         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9274                                    ada_modulus (type_arg));
9275       }
9276
9277
9278     case OP_ATR_POS:
9279       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9280       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9281       if (noside == EVAL_SKIP)
9282         goto nosideret;
9283       type = builtin_type (exp->gdbarch)->builtin_int;
9284       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9285         return value_zero (type, not_lval);
9286       else
9287         return value_pos_atr (type, arg1);
9288
9289     case OP_ATR_SIZE:
9290       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9291       type = value_type (arg1);
9292
9293       /* If the argument is a reference, then dereference its type, since
9294          the user is really asking for the size of the actual object,
9295          not the size of the pointer.  */
9296       if (TYPE_CODE (type) == TYPE_CODE_REF)
9297         type = TYPE_TARGET_TYPE (type);
9298
9299       if (noside == EVAL_SKIP)
9300         goto nosideret;
9301       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9302         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
9303       else
9304         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
9305                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
9306
9307     case OP_ATR_VAL:
9308       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9309       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9310       type = exp->elts[pc + 2].type;
9311       if (noside == EVAL_SKIP)
9312         goto nosideret;
9313       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9314         return value_zero (type, not_lval);
9315       else
9316         return value_val_atr (type, arg1);
9317
9318     case BINOP_EXP:
9319       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9320       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9321       if (noside == EVAL_SKIP)
9322         goto nosideret;
9323       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9324         return value_zero (value_type (arg1), not_lval);
9325       else
9326         {
9327           /* For integer exponentiation operations,
9328              only promote the first argument.  */
9329           if (is_integral_type (value_type (arg2)))
9330             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9331           else
9332             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9333
9334           return value_binop (arg1, arg2, op);
9335         }
9336
9337     case UNOP_PLUS:
9338       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9339       if (noside == EVAL_SKIP)
9340         goto nosideret;
9341       else
9342         return arg1;
9343
9344     case UNOP_ABS:
9345       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9346       if (noside == EVAL_SKIP)
9347         goto nosideret;
9348       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9349       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9350         return value_neg (arg1);
9351       else
9352         return arg1;
9353
9354     case UNOP_IND:
9355       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9356       if (noside == EVAL_SKIP)
9357         goto nosideret;
9358       type = ada_check_typedef (value_type (arg1));
9359       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9360         {
9361           if (ada_is_array_descriptor_type (type))
9362             /* GDB allows dereferencing GNAT array descriptors.  */
9363             {
9364               struct type *arrType = ada_type_of_array (arg1, 0);
9365               if (arrType == NULL)
9366                 error (_("Attempt to dereference null array pointer."));
9367               return value_at_lazy (arrType, 0);
9368             }
9369           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9370                    || TYPE_CODE (type) == TYPE_CODE_REF
9371                    /* In C you can dereference an array to get the 1st elt.  */
9372                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9373             {
9374               type = to_static_fixed_type
9375                 (ada_aligned_type
9376                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9377               check_size (type);
9378               return value_zero (type, lval_memory);
9379             }
9380           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9381             {
9382               /* GDB allows dereferencing an int.  */
9383               if (expect_type == NULL)
9384                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9385                                    lval_memory);
9386               else
9387                 {
9388                   expect_type = 
9389                     to_static_fixed_type (ada_aligned_type (expect_type));
9390                   return value_zero (expect_type, lval_memory);
9391                 }
9392             }
9393           else
9394             error (_("Attempt to take contents of a non-pointer value."));
9395         }
9396       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9397       type = ada_check_typedef (value_type (arg1));
9398
9399       if (TYPE_CODE (type) == TYPE_CODE_INT)
9400           /* GDB allows dereferencing an int.  If we were given
9401              the expect_type, then use that as the target type.
9402              Otherwise, assume that the target type is an int.  */
9403         {
9404           if (expect_type != NULL)
9405             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9406                                               arg1));
9407           else
9408             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9409                                   (CORE_ADDR) value_as_address (arg1));
9410         }
9411
9412       if (ada_is_array_descriptor_type (type))
9413         /* GDB allows dereferencing GNAT array descriptors.  */
9414         return ada_coerce_to_simple_array (arg1);
9415       else
9416         return ada_value_ind (arg1);
9417
9418     case STRUCTOP_STRUCT:
9419       tem = longest_to_int (exp->elts[pc + 1].longconst);
9420       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9421       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9422       if (noside == EVAL_SKIP)
9423         goto nosideret;
9424       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9425         {
9426           struct type *type1 = value_type (arg1);
9427           if (ada_is_tagged_type (type1, 1))
9428             {
9429               type = ada_lookup_struct_elt_type (type1,
9430                                                  &exp->elts[pc + 2].string,
9431                                                  1, 1, NULL);
9432               if (type == NULL)
9433                 /* In this case, we assume that the field COULD exist
9434                    in some extension of the type.  Return an object of 
9435                    "type" void, which will match any formal 
9436                    (see ada_type_match). */
9437                 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
9438                                    lval_memory);
9439             }
9440           else
9441             type =
9442               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9443                                           0, NULL);
9444
9445           return value_zero (ada_aligned_type (type), lval_memory);
9446         }
9447       else
9448         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9449         arg1 = unwrap_value (arg1);
9450         return ada_to_fixed_value (arg1);
9451
9452     case OP_TYPE:
9453       /* The value is not supposed to be used.  This is here to make it
9454          easier to accommodate expressions that contain types.  */
9455       (*pos) += 2;
9456       if (noside == EVAL_SKIP)
9457         goto nosideret;
9458       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9459         return allocate_value (exp->elts[pc + 1].type);
9460       else
9461         error (_("Attempt to use a type name as an expression"));
9462
9463     case OP_AGGREGATE:
9464     case OP_CHOICES:
9465     case OP_OTHERS:
9466     case OP_DISCRETE_RANGE:
9467     case OP_POSITIONAL:
9468     case OP_NAME:
9469       if (noside == EVAL_NORMAL)
9470         switch (op) 
9471           {
9472           case OP_NAME:
9473             error (_("Undefined name, ambiguous name, or renaming used in "
9474                      "component association: %s."), &exp->elts[pc+2].string);
9475           case OP_AGGREGATE:
9476             error (_("Aggregates only allowed on the right of an assignment"));
9477           default:
9478             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9479           }
9480
9481       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9482       *pos += oplen - 1;
9483       for (tem = 0; tem < nargs; tem += 1) 
9484         ada_evaluate_subexp (NULL, exp, pos, noside);
9485       goto nosideret;
9486     }
9487
9488 nosideret:
9489   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
9490 }
9491 \f
9492
9493                                 /* Fixed point */
9494
9495 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9496    type name that encodes the 'small and 'delta information.
9497    Otherwise, return NULL.  */
9498
9499 static const char *
9500 fixed_type_info (struct type *type)
9501 {
9502   const char *name = ada_type_name (type);
9503   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9504
9505   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9506     {
9507       const char *tail = strstr (name, "___XF_");
9508       if (tail == NULL)
9509         return NULL;
9510       else
9511         return tail + 5;
9512     }
9513   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9514     return fixed_type_info (TYPE_TARGET_TYPE (type));
9515   else
9516     return NULL;
9517 }
9518
9519 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9520
9521 int
9522 ada_is_fixed_point_type (struct type *type)
9523 {
9524   return fixed_type_info (type) != NULL;
9525 }
9526
9527 /* Return non-zero iff TYPE represents a System.Address type.  */
9528
9529 int
9530 ada_is_system_address_type (struct type *type)
9531 {
9532   return (TYPE_NAME (type)
9533           && strcmp (TYPE_NAME (type), "system__address") == 0);
9534 }
9535
9536 /* Assuming that TYPE is the representation of an Ada fixed-point
9537    type, return its delta, or -1 if the type is malformed and the
9538    delta cannot be determined.  */
9539
9540 DOUBLEST
9541 ada_delta (struct type *type)
9542 {
9543   const char *encoding = fixed_type_info (type);
9544   DOUBLEST num, den;
9545
9546   /* Strictly speaking, num and den are encoded as integer.  However,
9547      they may not fit into a long, and they will have to be converted
9548      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9549   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9550               &num, &den) < 2)
9551     return -1.0;
9552   else
9553     return num / den;
9554 }
9555
9556 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9557    factor ('SMALL value) associated with the type.  */
9558
9559 static DOUBLEST
9560 scaling_factor (struct type *type)
9561 {
9562   const char *encoding = fixed_type_info (type);
9563   DOUBLEST num0, den0, num1, den1;
9564   int n;
9565
9566   /* Strictly speaking, num's and den's are encoded as integer.  However,
9567      they may not fit into a long, and they will have to be converted
9568      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9569   n = sscanf (encoding,
9570               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
9571               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9572               &num0, &den0, &num1, &den1);
9573
9574   if (n < 2)
9575     return 1.0;
9576   else if (n == 4)
9577     return num1 / den1;
9578   else
9579     return num0 / den0;
9580 }
9581
9582
9583 /* Assuming that X is the representation of a value of fixed-point
9584    type TYPE, return its floating-point equivalent.  */
9585
9586 DOUBLEST
9587 ada_fixed_to_float (struct type *type, LONGEST x)
9588 {
9589   return (DOUBLEST) x *scaling_factor (type);
9590 }
9591
9592 /* The representation of a fixed-point value of type TYPE
9593    corresponding to the value X.  */
9594
9595 LONGEST
9596 ada_float_to_fixed (struct type *type, DOUBLEST x)
9597 {
9598   return (LONGEST) (x / scaling_factor (type) + 0.5);
9599 }
9600
9601 \f
9602
9603                                 /* Range types */
9604
9605 /* Scan STR beginning at position K for a discriminant name, and
9606    return the value of that discriminant field of DVAL in *PX.  If
9607    PNEW_K is not null, put the position of the character beyond the
9608    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9609    not alter *PX and *PNEW_K if unsuccessful.  */
9610
9611 static int
9612 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9613                     int *pnew_k)
9614 {
9615   static char *bound_buffer = NULL;
9616   static size_t bound_buffer_len = 0;
9617   char *bound;
9618   char *pend;
9619   struct value *bound_val;
9620
9621   if (dval == NULL || str == NULL || str[k] == '\0')
9622     return 0;
9623
9624   pend = strstr (str + k, "__");
9625   if (pend == NULL)
9626     {
9627       bound = str + k;
9628       k += strlen (bound);
9629     }
9630   else
9631     {
9632       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9633       bound = bound_buffer;
9634       strncpy (bound_buffer, str + k, pend - (str + k));
9635       bound[pend - (str + k)] = '\0';
9636       k = pend - str;
9637     }
9638
9639   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9640   if (bound_val == NULL)
9641     return 0;
9642
9643   *px = value_as_long (bound_val);
9644   if (pnew_k != NULL)
9645     *pnew_k = k;
9646   return 1;
9647 }
9648
9649 /* Value of variable named NAME in the current environment.  If
9650    no such variable found, then if ERR_MSG is null, returns 0, and
9651    otherwise causes an error with message ERR_MSG.  */
9652
9653 static struct value *
9654 get_var_value (char *name, char *err_msg)
9655 {
9656   struct ada_symbol_info *syms;
9657   int nsyms;
9658
9659   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9660                                   &syms);
9661
9662   if (nsyms != 1)
9663     {
9664       if (err_msg == NULL)
9665         return 0;
9666       else
9667         error (("%s"), err_msg);
9668     }
9669
9670   return value_of_variable (syms[0].sym, syms[0].block);
9671 }
9672
9673 /* Value of integer variable named NAME in the current environment.  If
9674    no such variable found, returns 0, and sets *FLAG to 0.  If
9675    successful, sets *FLAG to 1.  */
9676
9677 LONGEST
9678 get_int_var_value (char *name, int *flag)
9679 {
9680   struct value *var_val = get_var_value (name, 0);
9681
9682   if (var_val == 0)
9683     {
9684       if (flag != NULL)
9685         *flag = 0;
9686       return 0;
9687     }
9688   else
9689     {
9690       if (flag != NULL)
9691         *flag = 1;
9692       return value_as_long (var_val);
9693     }
9694 }
9695
9696
9697 /* Return a range type whose base type is that of the range type named
9698    NAME in the current environment, and whose bounds are calculated
9699    from NAME according to the GNAT range encoding conventions.
9700    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
9701    corresponding range type from debug information; fall back to using it
9702    if symbol lookup fails.  If a new type must be created, allocate it
9703    like ORIG_TYPE was.  The bounds information, in general, is encoded
9704    in NAME, the base type given in the named range type.  */
9705
9706 static struct type *
9707 to_fixed_range_type (char *name, struct value *dval, struct type *orig_type)
9708 {
9709   struct type *raw_type = ada_find_any_type (name);
9710   struct type *base_type;
9711   char *subtype_info;
9712
9713   /* Fall back to the original type if symbol lookup failed.  */
9714   if (raw_type == NULL)
9715     raw_type = orig_type;
9716
9717   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9718     base_type = TYPE_TARGET_TYPE (raw_type);
9719   else
9720     base_type = raw_type;
9721
9722   subtype_info = strstr (name, "___XD");
9723   if (subtype_info == NULL)
9724     {
9725       LONGEST L = ada_discrete_type_low_bound (raw_type);
9726       LONGEST U = ada_discrete_type_high_bound (raw_type);
9727       if (L < INT_MIN || U > INT_MAX)
9728         return raw_type;
9729       else
9730         return create_range_type (alloc_type_copy (orig_type), raw_type,
9731                                   ada_discrete_type_low_bound (raw_type),
9732                                   ada_discrete_type_high_bound (raw_type));
9733     }
9734   else
9735     {
9736       static char *name_buf = NULL;
9737       static size_t name_len = 0;
9738       int prefix_len = subtype_info - name;
9739       LONGEST L, U;
9740       struct type *type;
9741       char *bounds_str;
9742       int n;
9743
9744       GROW_VECT (name_buf, name_len, prefix_len + 5);
9745       strncpy (name_buf, name, prefix_len);
9746       name_buf[prefix_len] = '\0';
9747
9748       subtype_info += 5;
9749       bounds_str = strchr (subtype_info, '_');
9750       n = 1;
9751
9752       if (*subtype_info == 'L')
9753         {
9754           if (!ada_scan_number (bounds_str, n, &L, &n)
9755               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9756             return raw_type;
9757           if (bounds_str[n] == '_')
9758             n += 2;
9759           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9760             n += 1;
9761           subtype_info += 1;
9762         }
9763       else
9764         {
9765           int ok;
9766           strcpy (name_buf + prefix_len, "___L");
9767           L = get_int_var_value (name_buf, &ok);
9768           if (!ok)
9769             {
9770               lim_warning (_("Unknown lower bound, using 1."));
9771               L = 1;
9772             }
9773         }
9774
9775       if (*subtype_info == 'U')
9776         {
9777           if (!ada_scan_number (bounds_str, n, &U, &n)
9778               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9779             return raw_type;
9780         }
9781       else
9782         {
9783           int ok;
9784           strcpy (name_buf + prefix_len, "___U");
9785           U = get_int_var_value (name_buf, &ok);
9786           if (!ok)
9787             {
9788               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9789               U = L;
9790             }
9791         }
9792
9793       type = create_range_type (alloc_type_copy (orig_type), base_type, L, U);
9794       TYPE_NAME (type) = name;
9795       return type;
9796     }
9797 }
9798
9799 /* True iff NAME is the name of a range type.  */
9800
9801 int
9802 ada_is_range_type_name (const char *name)
9803 {
9804   return (name != NULL && strstr (name, "___XD"));
9805 }
9806 \f
9807
9808                                 /* Modular types */
9809
9810 /* True iff TYPE is an Ada modular type.  */
9811
9812 int
9813 ada_is_modular_type (struct type *type)
9814 {
9815   struct type *subranged_type = base_type (type);
9816
9817   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9818           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9819           && TYPE_UNSIGNED (subranged_type));
9820 }
9821
9822 /* Try to determine the lower and upper bounds of the given modular type
9823    using the type name only.  Return non-zero and set L and U as the lower
9824    and upper bounds (respectively) if successful.  */
9825
9826 int
9827 ada_modulus_from_name (struct type *type, ULONGEST *modulus)
9828 {
9829   char *name = ada_type_name (type);
9830   char *suffix;
9831   int k;
9832   LONGEST U;
9833
9834   if (name == NULL)
9835     return 0;
9836
9837   /* Discrete type bounds are encoded using an __XD suffix.  In our case,
9838      we are looking for static bounds, which means an __XDLU suffix.
9839      Moreover, we know that the lower bound of modular types is always
9840      zero, so the actual suffix should start with "__XDLU_0__", and
9841      then be followed by the upper bound value.  */
9842   suffix = strstr (name, "__XDLU_0__");
9843   if (suffix == NULL)
9844     return 0;
9845   k = 10;
9846   if (!ada_scan_number (suffix, k, &U, NULL))
9847     return 0;
9848
9849   *modulus = (ULONGEST) U + 1;
9850   return 1;
9851 }
9852
9853 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9854
9855 ULONGEST
9856 ada_modulus (struct type *type)
9857 {
9858   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
9859 }
9860 \f
9861
9862 /* Ada exception catchpoint support:
9863    ---------------------------------
9864
9865    We support 3 kinds of exception catchpoints:
9866      . catchpoints on Ada exceptions
9867      . catchpoints on unhandled Ada exceptions
9868      . catchpoints on failed assertions
9869
9870    Exceptions raised during failed assertions, or unhandled exceptions
9871    could perfectly be caught with the general catchpoint on Ada exceptions.
9872    However, we can easily differentiate these two special cases, and having
9873    the option to distinguish these two cases from the rest can be useful
9874    to zero-in on certain situations.
9875
9876    Exception catchpoints are a specialized form of breakpoint,
9877    since they rely on inserting breakpoints inside known routines
9878    of the GNAT runtime.  The implementation therefore uses a standard
9879    breakpoint structure of the BP_BREAKPOINT type, but with its own set
9880    of breakpoint_ops.
9881
9882    Support in the runtime for exception catchpoints have been changed
9883    a few times already, and these changes affect the implementation
9884    of these catchpoints.  In order to be able to support several
9885    variants of the runtime, we use a sniffer that will determine
9886    the runtime variant used by the program being debugged.
9887
9888    At this time, we do not support the use of conditions on Ada exception
9889    catchpoints.  The COND and COND_STRING fields are therefore set
9890    to NULL (most of the time, see below).
9891    
9892    Conditions where EXP_STRING, COND, and COND_STRING are used:
9893
9894      When a user specifies the name of a specific exception in the case
9895      of catchpoints on Ada exceptions, we store the name of that exception
9896      in the EXP_STRING.  We then translate this request into an actual
9897      condition stored in COND_STRING, and then parse it into an expression
9898      stored in COND.  */
9899
9900 /* The different types of catchpoints that we introduced for catching
9901    Ada exceptions.  */
9902
9903 enum exception_catchpoint_kind
9904 {
9905   ex_catch_exception,
9906   ex_catch_exception_unhandled,
9907   ex_catch_assert
9908 };
9909
9910 /* Ada's standard exceptions.  */
9911
9912 static char *standard_exc[] = {
9913   "constraint_error",
9914   "program_error",
9915   "storage_error",
9916   "tasking_error"
9917 };
9918
9919 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9920
9921 /* A structure that describes how to support exception catchpoints
9922    for a given executable.  */
9923
9924 struct exception_support_info
9925 {
9926    /* The name of the symbol to break on in order to insert
9927       a catchpoint on exceptions.  */
9928    const char *catch_exception_sym;
9929
9930    /* The name of the symbol to break on in order to insert
9931       a catchpoint on unhandled exceptions.  */
9932    const char *catch_exception_unhandled_sym;
9933
9934    /* The name of the symbol to break on in order to insert
9935       a catchpoint on failed assertions.  */
9936    const char *catch_assert_sym;
9937
9938    /* Assuming that the inferior just triggered an unhandled exception
9939       catchpoint, this function is responsible for returning the address
9940       in inferior memory where the name of that exception is stored.
9941       Return zero if the address could not be computed.  */
9942    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9943 };
9944
9945 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9946 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9947
9948 /* The following exception support info structure describes how to
9949    implement exception catchpoints with the latest version of the
9950    Ada runtime (as of 2007-03-06).  */
9951
9952 static const struct exception_support_info default_exception_support_info =
9953 {
9954   "__gnat_debug_raise_exception", /* catch_exception_sym */
9955   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9956   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9957   ada_unhandled_exception_name_addr
9958 };
9959
9960 /* The following exception support info structure describes how to
9961    implement exception catchpoints with a slightly older version
9962    of the Ada runtime.  */
9963
9964 static const struct exception_support_info exception_support_info_fallback =
9965 {
9966   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9967   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9968   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
9969   ada_unhandled_exception_name_addr_from_raise
9970 };
9971
9972 /* For each executable, we sniff which exception info structure to use
9973    and cache it in the following global variable.  */
9974
9975 static const struct exception_support_info *exception_info = NULL;
9976
9977 /* Inspect the Ada runtime and determine which exception info structure
9978    should be used to provide support for exception catchpoints.
9979
9980    This function will always set exception_info, or raise an error.  */
9981
9982 static void
9983 ada_exception_support_info_sniffer (void)
9984 {
9985   struct symbol *sym;
9986
9987   /* If the exception info is already known, then no need to recompute it.  */
9988   if (exception_info != NULL)
9989     return;
9990
9991   /* Check the latest (default) exception support info.  */
9992   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
9993                          NULL, VAR_DOMAIN);
9994   if (sym != NULL)
9995     {
9996       exception_info = &default_exception_support_info;
9997       return;
9998     }
9999
10000   /* Try our fallback exception suport info.  */
10001   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10002                          NULL, VAR_DOMAIN);
10003   if (sym != NULL)
10004     {
10005       exception_info = &exception_support_info_fallback;
10006       return;
10007     }
10008
10009   /* Sometimes, it is normal for us to not be able to find the routine
10010      we are looking for.  This happens when the program is linked with
10011      the shared version of the GNAT runtime, and the program has not been
10012      started yet.  Inform the user of these two possible causes if
10013      applicable.  */
10014
10015   if (ada_update_initial_language (language_unknown) != language_ada)
10016     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
10017
10018   /* If the symbol does not exist, then check that the program is
10019      already started, to make sure that shared libraries have been
10020      loaded.  If it is not started, this may mean that the symbol is
10021      in a shared library.  */
10022
10023   if (ptid_get_pid (inferior_ptid) == 0)
10024     error (_("Unable to insert catchpoint. Try to start the program first."));
10025
10026   /* At this point, we know that we are debugging an Ada program and
10027      that the inferior has been started, but we still are not able to
10028      find the run-time symbols. That can mean that we are in
10029      configurable run time mode, or that a-except as been optimized
10030      out by the linker...  In any case, at this point it is not worth
10031      supporting this feature.  */
10032
10033   error (_("Cannot insert catchpoints in this configuration."));
10034 }
10035
10036 /* An observer of "executable_changed" events.
10037    Its role is to clear certain cached values that need to be recomputed
10038    each time a new executable is loaded by GDB.  */
10039
10040 static void
10041 ada_executable_changed_observer (void)
10042 {
10043   /* If the executable changed, then it is possible that the Ada runtime
10044      is different.  So we need to invalidate the exception support info
10045      cache.  */
10046   exception_info = NULL;
10047 }
10048
10049 /* True iff FRAME is very likely to be that of a function that is
10050    part of the runtime system.  This is all very heuristic, but is
10051    intended to be used as advice as to what frames are uninteresting
10052    to most users.  */
10053
10054 static int
10055 is_known_support_routine (struct frame_info *frame)
10056 {
10057   struct symtab_and_line sal;
10058   char *func_name;
10059   enum language func_lang;
10060   int i;
10061
10062   /* If this code does not have any debugging information (no symtab),
10063      This cannot be any user code.  */
10064
10065   find_frame_sal (frame, &sal);
10066   if (sal.symtab == NULL)
10067     return 1;
10068
10069   /* If there is a symtab, but the associated source file cannot be
10070      located, then assume this is not user code:  Selecting a frame
10071      for which we cannot display the code would not be very helpful
10072      for the user.  This should also take care of case such as VxWorks
10073      where the kernel has some debugging info provided for a few units.  */
10074
10075   if (symtab_to_fullname (sal.symtab) == NULL)
10076     return 1;
10077
10078   /* Check the unit filename againt the Ada runtime file naming.
10079      We also check the name of the objfile against the name of some
10080      known system libraries that sometimes come with debugging info
10081      too.  */
10082
10083   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10084     {
10085       re_comp (known_runtime_file_name_patterns[i]);
10086       if (re_exec (sal.symtab->filename))
10087         return 1;
10088       if (sal.symtab->objfile != NULL
10089           && re_exec (sal.symtab->objfile->name))
10090         return 1;
10091     }
10092
10093   /* Check whether the function is a GNAT-generated entity.  */
10094
10095   find_frame_funname (frame, &func_name, &func_lang);
10096   if (func_name == NULL)
10097     return 1;
10098
10099   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10100     {
10101       re_comp (known_auxiliary_function_name_patterns[i]);
10102       if (re_exec (func_name))
10103         return 1;
10104     }
10105
10106   return 0;
10107 }
10108
10109 /* Find the first frame that contains debugging information and that is not
10110    part of the Ada run-time, starting from FI and moving upward.  */
10111
10112 void
10113 ada_find_printable_frame (struct frame_info *fi)
10114 {
10115   for (; fi != NULL; fi = get_prev_frame (fi))
10116     {
10117       if (!is_known_support_routine (fi))
10118         {
10119           select_frame (fi);
10120           break;
10121         }
10122     }
10123
10124 }
10125
10126 /* Assuming that the inferior just triggered an unhandled exception
10127    catchpoint, return the address in inferior memory where the name
10128    of the exception is stored.
10129    
10130    Return zero if the address could not be computed.  */
10131
10132 static CORE_ADDR
10133 ada_unhandled_exception_name_addr (void)
10134 {
10135   return parse_and_eval_address ("e.full_name");
10136 }
10137
10138 /* Same as ada_unhandled_exception_name_addr, except that this function
10139    should be used when the inferior uses an older version of the runtime,
10140    where the exception name needs to be extracted from a specific frame
10141    several frames up in the callstack.  */
10142
10143 static CORE_ADDR
10144 ada_unhandled_exception_name_addr_from_raise (void)
10145 {
10146   int frame_level;
10147   struct frame_info *fi;
10148
10149   /* To determine the name of this exception, we need to select
10150      the frame corresponding to RAISE_SYM_NAME.  This frame is
10151      at least 3 levels up, so we simply skip the first 3 frames
10152      without checking the name of their associated function.  */
10153   fi = get_current_frame ();
10154   for (frame_level = 0; frame_level < 3; frame_level += 1)
10155     if (fi != NULL)
10156       fi = get_prev_frame (fi); 
10157
10158   while (fi != NULL)
10159     {
10160       char *func_name;
10161       enum language func_lang;
10162
10163       find_frame_funname (fi, &func_name, &func_lang);
10164       if (func_name != NULL
10165           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
10166         break; /* We found the frame we were looking for...  */
10167       fi = get_prev_frame (fi);
10168     }
10169
10170   if (fi == NULL)
10171     return 0;
10172
10173   select_frame (fi);
10174   return parse_and_eval_address ("id.full_name");
10175 }
10176
10177 /* Assuming the inferior just triggered an Ada exception catchpoint
10178    (of any type), return the address in inferior memory where the name
10179    of the exception is stored, if applicable.
10180
10181    Return zero if the address could not be computed, or if not relevant.  */
10182
10183 static CORE_ADDR
10184 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10185                            struct breakpoint *b)
10186 {
10187   switch (ex)
10188     {
10189       case ex_catch_exception:
10190         return (parse_and_eval_address ("e.full_name"));
10191         break;
10192
10193       case ex_catch_exception_unhandled:
10194         return exception_info->unhandled_exception_name_addr ();
10195         break;
10196       
10197       case ex_catch_assert:
10198         return 0;  /* Exception name is not relevant in this case.  */
10199         break;
10200
10201       default:
10202         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10203         break;
10204     }
10205
10206   return 0; /* Should never be reached.  */
10207 }
10208
10209 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10210    any error that ada_exception_name_addr_1 might cause to be thrown.
10211    When an error is intercepted, a warning with the error message is printed,
10212    and zero is returned.  */
10213
10214 static CORE_ADDR
10215 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10216                          struct breakpoint *b)
10217 {
10218   struct gdb_exception e;
10219   CORE_ADDR result = 0;
10220
10221   TRY_CATCH (e, RETURN_MASK_ERROR)
10222     {
10223       result = ada_exception_name_addr_1 (ex, b);
10224     }
10225
10226   if (e.reason < 0)
10227     {
10228       warning (_("failed to get exception name: %s"), e.message);
10229       return 0;
10230     }
10231
10232   return result;
10233 }
10234
10235 /* Implement the PRINT_IT method in the breakpoint_ops structure
10236    for all exception catchpoint kinds.  */
10237
10238 static enum print_stop_action
10239 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10240 {
10241   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10242   char exception_name[256];
10243
10244   if (addr != 0)
10245     {
10246       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10247       exception_name [sizeof (exception_name) - 1] = '\0';
10248     }
10249
10250   ada_find_printable_frame (get_current_frame ());
10251
10252   annotate_catchpoint (b->number);
10253   switch (ex)
10254     {
10255       case ex_catch_exception:
10256         if (addr != 0)
10257           printf_filtered (_("\nCatchpoint %d, %s at "),
10258                            b->number, exception_name);
10259         else
10260           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10261         break;
10262       case ex_catch_exception_unhandled:
10263         if (addr != 0)
10264           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10265                            b->number, exception_name);
10266         else
10267           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10268                            b->number);
10269         break;
10270       case ex_catch_assert:
10271         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10272                          b->number);
10273         break;
10274     }
10275
10276   return PRINT_SRC_AND_LOC;
10277 }
10278
10279 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10280    for all exception catchpoint kinds.  */
10281
10282 static void
10283 print_one_exception (enum exception_catchpoint_kind ex,
10284                      struct breakpoint *b, struct bp_location **last_loc)
10285
10286   struct value_print_options opts;
10287
10288   get_user_print_options (&opts);
10289   if (opts.addressprint)
10290     {
10291       annotate_field (4);
10292       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
10293     }
10294
10295   annotate_field (5);
10296   *last_loc = b->loc;
10297   switch (ex)
10298     {
10299       case ex_catch_exception:
10300         if (b->exp_string != NULL)
10301           {
10302             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10303             
10304             ui_out_field_string (uiout, "what", msg);
10305             xfree (msg);
10306           }
10307         else
10308           ui_out_field_string (uiout, "what", "all Ada exceptions");
10309         
10310         break;
10311
10312       case ex_catch_exception_unhandled:
10313         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10314         break;
10315       
10316       case ex_catch_assert:
10317         ui_out_field_string (uiout, "what", "failed Ada assertions");
10318         break;
10319
10320       default:
10321         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10322         break;
10323     }
10324 }
10325
10326 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10327    for all exception catchpoint kinds.  */
10328
10329 static void
10330 print_mention_exception (enum exception_catchpoint_kind ex,
10331                          struct breakpoint *b)
10332 {
10333   switch (ex)
10334     {
10335       case ex_catch_exception:
10336         if (b->exp_string != NULL)
10337           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10338                            b->number, b->exp_string);
10339         else
10340           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10341         
10342         break;
10343
10344       case ex_catch_exception_unhandled:
10345         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10346                          b->number);
10347         break;
10348       
10349       case ex_catch_assert:
10350         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10351         break;
10352
10353       default:
10354         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10355         break;
10356     }
10357 }
10358
10359 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
10360    for all exception catchpoint kinds.  */
10361
10362 static void
10363 print_recreate_exception (enum exception_catchpoint_kind ex,
10364                           struct breakpoint *b, struct ui_file *fp)
10365 {
10366   switch (ex)
10367     {
10368       case ex_catch_exception:
10369         fprintf_filtered (fp, "catch exception");
10370         if (b->exp_string != NULL)
10371           fprintf_filtered (fp, " %s", b->exp_string);
10372         break;
10373
10374       case ex_catch_exception_unhandled:
10375         fprintf_filtered (fp, "catch exception unhandled");
10376         break;
10377
10378       case ex_catch_assert:
10379         fprintf_filtered (fp, "catch assert");
10380         break;
10381
10382       default:
10383         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10384     }
10385 }
10386
10387 /* Virtual table for "catch exception" breakpoints.  */
10388
10389 static enum print_stop_action
10390 print_it_catch_exception (struct breakpoint *b)
10391 {
10392   return print_it_exception (ex_catch_exception, b);
10393 }
10394
10395 static void
10396 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
10397 {
10398   print_one_exception (ex_catch_exception, b, last_loc);
10399 }
10400
10401 static void
10402 print_mention_catch_exception (struct breakpoint *b)
10403 {
10404   print_mention_exception (ex_catch_exception, b);
10405 }
10406
10407 static void
10408 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
10409 {
10410   print_recreate_exception (ex_catch_exception, b, fp);
10411 }
10412
10413 static struct breakpoint_ops catch_exception_breakpoint_ops =
10414 {
10415   NULL, /* insert */
10416   NULL, /* remove */
10417   NULL, /* breakpoint_hit */
10418   print_it_catch_exception,
10419   print_one_catch_exception,
10420   print_mention_catch_exception,
10421   print_recreate_catch_exception
10422 };
10423
10424 /* Virtual table for "catch exception unhandled" breakpoints.  */
10425
10426 static enum print_stop_action
10427 print_it_catch_exception_unhandled (struct breakpoint *b)
10428 {
10429   return print_it_exception (ex_catch_exception_unhandled, b);
10430 }
10431
10432 static void
10433 print_one_catch_exception_unhandled (struct breakpoint *b,
10434                                      struct bp_location **last_loc)
10435 {
10436   print_one_exception (ex_catch_exception_unhandled, b, last_loc);
10437 }
10438
10439 static void
10440 print_mention_catch_exception_unhandled (struct breakpoint *b)
10441 {
10442   print_mention_exception (ex_catch_exception_unhandled, b);
10443 }
10444
10445 static void
10446 print_recreate_catch_exception_unhandled (struct breakpoint *b,
10447                                           struct ui_file *fp)
10448 {
10449   print_recreate_exception (ex_catch_exception_unhandled, b, fp);
10450 }
10451
10452 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10453   NULL, /* insert */
10454   NULL, /* remove */
10455   NULL, /* breakpoint_hit */
10456   print_it_catch_exception_unhandled,
10457   print_one_catch_exception_unhandled,
10458   print_mention_catch_exception_unhandled,
10459   print_recreate_catch_exception_unhandled
10460 };
10461
10462 /* Virtual table for "catch assert" breakpoints.  */
10463
10464 static enum print_stop_action
10465 print_it_catch_assert (struct breakpoint *b)
10466 {
10467   return print_it_exception (ex_catch_assert, b);
10468 }
10469
10470 static void
10471 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
10472 {
10473   print_one_exception (ex_catch_assert, b, last_loc);
10474 }
10475
10476 static void
10477 print_mention_catch_assert (struct breakpoint *b)
10478 {
10479   print_mention_exception (ex_catch_assert, b);
10480 }
10481
10482 static void
10483 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
10484 {
10485   print_recreate_exception (ex_catch_assert, b, fp);
10486 }
10487
10488 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10489   NULL, /* insert */
10490   NULL, /* remove */
10491   NULL, /* breakpoint_hit */
10492   print_it_catch_assert,
10493   print_one_catch_assert,
10494   print_mention_catch_assert,
10495   print_recreate_catch_assert
10496 };
10497
10498 /* Return non-zero if B is an Ada exception catchpoint.  */
10499
10500 int
10501 ada_exception_catchpoint_p (struct breakpoint *b)
10502 {
10503   return (b->ops == &catch_exception_breakpoint_ops
10504           || b->ops == &catch_exception_unhandled_breakpoint_ops
10505           || b->ops == &catch_assert_breakpoint_ops);
10506 }
10507
10508 /* Return a newly allocated copy of the first space-separated token
10509    in ARGSP, and then adjust ARGSP to point immediately after that
10510    token.
10511
10512    Return NULL if ARGPS does not contain any more tokens.  */
10513
10514 static char *
10515 ada_get_next_arg (char **argsp)
10516 {
10517   char *args = *argsp;
10518   char *end;
10519   char *result;
10520
10521   /* Skip any leading white space.  */
10522
10523   while (isspace (*args))
10524     args++;
10525
10526   if (args[0] == '\0')
10527     return NULL; /* No more arguments.  */
10528   
10529   /* Find the end of the current argument.  */
10530
10531   end = args;
10532   while (*end != '\0' && !isspace (*end))
10533     end++;
10534
10535   /* Adjust ARGSP to point to the start of the next argument.  */
10536
10537   *argsp = end;
10538
10539   /* Make a copy of the current argument and return it.  */
10540
10541   result = xmalloc (end - args + 1);
10542   strncpy (result, args, end - args);
10543   result[end - args] = '\0';
10544   
10545   return result;
10546 }
10547
10548 /* Split the arguments specified in a "catch exception" command.  
10549    Set EX to the appropriate catchpoint type.
10550    Set EXP_STRING to the name of the specific exception if
10551    specified by the user.  */
10552
10553 static void
10554 catch_ada_exception_command_split (char *args,
10555                                    enum exception_catchpoint_kind *ex,
10556                                    char **exp_string)
10557 {
10558   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10559   char *exception_name;
10560
10561   exception_name = ada_get_next_arg (&args);
10562   make_cleanup (xfree, exception_name);
10563
10564   /* Check that we do not have any more arguments.  Anything else
10565      is unexpected.  */
10566
10567   while (isspace (*args))
10568     args++;
10569
10570   if (args[0] != '\0')
10571     error (_("Junk at end of expression"));
10572
10573   discard_cleanups (old_chain);
10574
10575   if (exception_name == NULL)
10576     {
10577       /* Catch all exceptions.  */
10578       *ex = ex_catch_exception;
10579       *exp_string = NULL;
10580     }
10581   else if (strcmp (exception_name, "unhandled") == 0)
10582     {
10583       /* Catch unhandled exceptions.  */
10584       *ex = ex_catch_exception_unhandled;
10585       *exp_string = NULL;
10586     }
10587   else
10588     {
10589       /* Catch a specific exception.  */
10590       *ex = ex_catch_exception;
10591       *exp_string = exception_name;
10592     }
10593 }
10594
10595 /* Return the name of the symbol on which we should break in order to
10596    implement a catchpoint of the EX kind.  */
10597
10598 static const char *
10599 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10600 {
10601   gdb_assert (exception_info != NULL);
10602
10603   switch (ex)
10604     {
10605       case ex_catch_exception:
10606         return (exception_info->catch_exception_sym);
10607         break;
10608       case ex_catch_exception_unhandled:
10609         return (exception_info->catch_exception_unhandled_sym);
10610         break;
10611       case ex_catch_assert:
10612         return (exception_info->catch_assert_sym);
10613         break;
10614       default:
10615         internal_error (__FILE__, __LINE__,
10616                         _("unexpected catchpoint kind (%d)"), ex);
10617     }
10618 }
10619
10620 /* Return the breakpoint ops "virtual table" used for catchpoints
10621    of the EX kind.  */
10622
10623 static struct breakpoint_ops *
10624 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10625 {
10626   switch (ex)
10627     {
10628       case ex_catch_exception:
10629         return (&catch_exception_breakpoint_ops);
10630         break;
10631       case ex_catch_exception_unhandled:
10632         return (&catch_exception_unhandled_breakpoint_ops);
10633         break;
10634       case ex_catch_assert:
10635         return (&catch_assert_breakpoint_ops);
10636         break;
10637       default:
10638         internal_error (__FILE__, __LINE__,
10639                         _("unexpected catchpoint kind (%d)"), ex);
10640     }
10641 }
10642
10643 /* Return the condition that will be used to match the current exception
10644    being raised with the exception that the user wants to catch.  This
10645    assumes that this condition is used when the inferior just triggered
10646    an exception catchpoint.
10647    
10648    The string returned is a newly allocated string that needs to be
10649    deallocated later.  */
10650
10651 static char *
10652 ada_exception_catchpoint_cond_string (const char *exp_string)
10653 {
10654   int i;
10655
10656   /* The standard exceptions are a special case. They are defined in
10657      runtime units that have been compiled without debugging info; if
10658      EXP_STRING is the not-fully-qualified name of a standard
10659      exception (e.g. "constraint_error") then, during the evaluation
10660      of the condition expression, the symbol lookup on this name would
10661      *not* return this standard exception. The catchpoint condition
10662      may then be set only on user-defined exceptions which have the
10663      same not-fully-qualified name (e.g. my_package.constraint_error).
10664
10665      To avoid this unexcepted behavior, these standard exceptions are
10666      systematically prefixed by "standard". This means that "catch
10667      exception constraint_error" is rewritten into "catch exception
10668      standard.constraint_error".
10669
10670      If an exception named contraint_error is defined in another package of
10671      the inferior program, then the only way to specify this exception as a
10672      breakpoint condition is to use its fully-qualified named:
10673      e.g. my_package.constraint_error.  */
10674
10675   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10676     {
10677       if (strcmp (standard_exc [i], exp_string) == 0)
10678         {
10679           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10680                              exp_string);
10681         }
10682     }
10683   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10684 }
10685
10686 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10687
10688 static struct expression *
10689 ada_parse_catchpoint_condition (char *cond_string,
10690                                 struct symtab_and_line sal)
10691 {
10692   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10693 }
10694
10695 /* Return the symtab_and_line that should be used to insert an exception
10696    catchpoint of the TYPE kind.
10697
10698    EX_STRING should contain the name of a specific exception
10699    that the catchpoint should catch, or NULL otherwise.
10700
10701    The idea behind all the remaining parameters is that their names match
10702    the name of certain fields in the breakpoint structure that are used to
10703    handle exception catchpoints.  This function returns the value to which
10704    these fields should be set, depending on the type of catchpoint we need
10705    to create.
10706    
10707    If COND and COND_STRING are both non-NULL, any value they might
10708    hold will be free'ed, and then replaced by newly allocated ones.
10709    These parameters are left untouched otherwise.  */
10710
10711 static struct symtab_and_line
10712 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10713                    char **addr_string, char **cond_string,
10714                    struct expression **cond, struct breakpoint_ops **ops)
10715 {
10716   const char *sym_name;
10717   struct symbol *sym;
10718   struct symtab_and_line sal;
10719
10720   /* First, find out which exception support info to use.  */
10721   ada_exception_support_info_sniffer ();
10722
10723   /* Then lookup the function on which we will break in order to catch
10724      the Ada exceptions requested by the user.  */
10725
10726   sym_name = ada_exception_sym_name (ex);
10727   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10728
10729   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10730      that should be compiled with debugging information.  As a result, we
10731      expect to find that symbol in the symtabs.  If we don't find it, then
10732      the target most likely does not support Ada exceptions, or we cannot
10733      insert exception breakpoints yet, because the GNAT runtime hasn't been
10734      loaded yet.  */
10735
10736   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10737      in such a way that no debugging information is produced for the symbol
10738      we are looking for.  In this case, we could search the minimal symbols
10739      as a fall-back mechanism.  This would still be operating in degraded
10740      mode, however, as we would still be missing the debugging information
10741      that is needed in order to extract the name of the exception being
10742      raised (this name is printed in the catchpoint message, and is also
10743      used when trying to catch a specific exception).  We do not handle
10744      this case for now.  */
10745
10746   if (sym == NULL)
10747     error (_("Unable to break on '%s' in this configuration."), sym_name);
10748
10749   /* Make sure that the symbol we found corresponds to a function.  */
10750   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10751     error (_("Symbol \"%s\" is not a function (class = %d)"),
10752            sym_name, SYMBOL_CLASS (sym));
10753
10754   sal = find_function_start_sal (sym, 1);
10755
10756   /* Set ADDR_STRING.  */
10757
10758   *addr_string = xstrdup (sym_name);
10759
10760   /* Set the COND and COND_STRING (if not NULL).  */
10761
10762   if (cond_string != NULL && cond != NULL)
10763     {
10764       if (*cond_string != NULL)
10765         {
10766           xfree (*cond_string);
10767           *cond_string = NULL;
10768         }
10769       if (*cond != NULL)
10770         {
10771           xfree (*cond);
10772           *cond = NULL;
10773         }
10774       if (exp_string != NULL)
10775         {
10776           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10777           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10778         }
10779     }
10780
10781   /* Set OPS.  */
10782   *ops = ada_exception_breakpoint_ops (ex);
10783
10784   return sal;
10785 }
10786
10787 /* Parse the arguments (ARGS) of the "catch exception" command.
10788  
10789    Set TYPE to the appropriate exception catchpoint type.
10790    If the user asked the catchpoint to catch only a specific
10791    exception, then save the exception name in ADDR_STRING.
10792
10793    See ada_exception_sal for a description of all the remaining
10794    function arguments of this function.  */
10795
10796 struct symtab_and_line
10797 ada_decode_exception_location (char *args, char **addr_string,
10798                                char **exp_string, char **cond_string,
10799                                struct expression **cond,
10800                                struct breakpoint_ops **ops)
10801 {
10802   enum exception_catchpoint_kind ex;
10803
10804   catch_ada_exception_command_split (args, &ex, exp_string);
10805   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10806                             cond, ops);
10807 }
10808
10809 struct symtab_and_line
10810 ada_decode_assert_location (char *args, char **addr_string,
10811                             struct breakpoint_ops **ops)
10812 {
10813   /* Check that no argument where provided at the end of the command.  */
10814
10815   if (args != NULL)
10816     {
10817       while (isspace (*args))
10818         args++;
10819       if (*args != '\0')
10820         error (_("Junk at end of arguments."));
10821     }
10822
10823   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10824                             ops);
10825 }
10826
10827                                 /* Operators */
10828 /* Information about operators given special treatment in functions
10829    below.  */
10830 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10831
10832 #define ADA_OPERATORS \
10833     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10834     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10835     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10836     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10837     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10838     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10839     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10840     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10841     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10842     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10843     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10844     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10845     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10846     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10847     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10848     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10849     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10850     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10851     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10852
10853 static void
10854 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10855 {
10856   switch (exp->elts[pc - 1].opcode)
10857     {
10858     default:
10859       operator_length_standard (exp, pc, oplenp, argsp);
10860       break;
10861
10862 #define OP_DEFN(op, len, args, binop) \
10863     case op: *oplenp = len; *argsp = args; break;
10864       ADA_OPERATORS;
10865 #undef OP_DEFN
10866
10867     case OP_AGGREGATE:
10868       *oplenp = 3;
10869       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10870       break;
10871
10872     case OP_CHOICES:
10873       *oplenp = 3;
10874       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10875       break;
10876     }
10877 }
10878
10879 /* Implementation of the exp_descriptor method operator_check.  */
10880
10881 static int
10882 ada_operator_check (struct expression *exp, int pos,
10883                     int (*objfile_func) (struct objfile *objfile, void *data),
10884                     void *data)
10885 {
10886   const union exp_element *const elts = exp->elts;
10887   struct type *type = NULL;
10888
10889   switch (elts[pos].opcode)
10890     {
10891       case UNOP_IN_RANGE:
10892       case UNOP_QUAL:
10893         type = elts[pos + 1].type;
10894         break;
10895
10896       default:
10897         return operator_check_standard (exp, pos, objfile_func, data);
10898     }
10899
10900   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
10901
10902   if (type && TYPE_OBJFILE (type)
10903       && (*objfile_func) (TYPE_OBJFILE (type), data))
10904     return 1;
10905
10906   return 0;
10907 }
10908
10909 static char *
10910 ada_op_name (enum exp_opcode opcode)
10911 {
10912   switch (opcode)
10913     {
10914     default:
10915       return op_name_standard (opcode);
10916
10917 #define OP_DEFN(op, len, args, binop) case op: return #op;
10918       ADA_OPERATORS;
10919 #undef OP_DEFN
10920
10921     case OP_AGGREGATE:
10922       return "OP_AGGREGATE";
10923     case OP_CHOICES:
10924       return "OP_CHOICES";
10925     case OP_NAME:
10926       return "OP_NAME";
10927     }
10928 }
10929
10930 /* As for operator_length, but assumes PC is pointing at the first
10931    element of the operator, and gives meaningful results only for the 
10932    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10933
10934 static void
10935 ada_forward_operator_length (struct expression *exp, int pc,
10936                              int *oplenp, int *argsp)
10937 {
10938   switch (exp->elts[pc].opcode)
10939     {
10940     default:
10941       *oplenp = *argsp = 0;
10942       break;
10943
10944 #define OP_DEFN(op, len, args, binop) \
10945     case op: *oplenp = len; *argsp = args; break;
10946       ADA_OPERATORS;
10947 #undef OP_DEFN
10948
10949     case OP_AGGREGATE:
10950       *oplenp = 3;
10951       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10952       break;
10953
10954     case OP_CHOICES:
10955       *oplenp = 3;
10956       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10957       break;
10958
10959     case OP_STRING:
10960     case OP_NAME:
10961       {
10962         int len = longest_to_int (exp->elts[pc + 1].longconst);
10963         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10964         *argsp = 0;
10965         break;
10966       }
10967     }
10968 }
10969
10970 static int
10971 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10972 {
10973   enum exp_opcode op = exp->elts[elt].opcode;
10974   int oplen, nargs;
10975   int pc = elt;
10976   int i;
10977
10978   ada_forward_operator_length (exp, elt, &oplen, &nargs);
10979
10980   switch (op)
10981     {
10982       /* Ada attributes ('Foo).  */
10983     case OP_ATR_FIRST:
10984     case OP_ATR_LAST:
10985     case OP_ATR_LENGTH:
10986     case OP_ATR_IMAGE:
10987     case OP_ATR_MAX:
10988     case OP_ATR_MIN:
10989     case OP_ATR_MODULUS:
10990     case OP_ATR_POS:
10991     case OP_ATR_SIZE:
10992     case OP_ATR_TAG:
10993     case OP_ATR_VAL:
10994       break;
10995
10996     case UNOP_IN_RANGE:
10997     case UNOP_QUAL:
10998       /* XXX: gdb_sprint_host_address, type_sprint */
10999       fprintf_filtered (stream, _("Type @"));
11000       gdb_print_host_address (exp->elts[pc + 1].type, stream);
11001       fprintf_filtered (stream, " (");
11002       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
11003       fprintf_filtered (stream, ")");
11004       break;
11005     case BINOP_IN_BOUNDS:
11006       fprintf_filtered (stream, " (%d)",
11007                         longest_to_int (exp->elts[pc + 2].longconst));
11008       break;
11009     case TERNOP_IN_RANGE:
11010       break;
11011
11012     case OP_AGGREGATE:
11013     case OP_OTHERS:
11014     case OP_DISCRETE_RANGE:
11015     case OP_POSITIONAL:
11016     case OP_CHOICES:
11017       break;
11018
11019     case OP_NAME:
11020     case OP_STRING:
11021       {
11022         char *name = &exp->elts[elt + 2].string;
11023         int len = longest_to_int (exp->elts[elt + 1].longconst);
11024         fprintf_filtered (stream, "Text: `%.*s'", len, name);
11025         break;
11026       }
11027
11028     default:
11029       return dump_subexp_body_standard (exp, stream, elt);
11030     }
11031
11032   elt += oplen;
11033   for (i = 0; i < nargs; i += 1)
11034     elt = dump_subexp (exp, stream, elt);
11035
11036   return elt;
11037 }
11038
11039 /* The Ada extension of print_subexp (q.v.).  */
11040
11041 static void
11042 ada_print_subexp (struct expression *exp, int *pos,
11043                   struct ui_file *stream, enum precedence prec)
11044 {
11045   int oplen, nargs, i;
11046   int pc = *pos;
11047   enum exp_opcode op = exp->elts[pc].opcode;
11048
11049   ada_forward_operator_length (exp, pc, &oplen, &nargs);
11050
11051   *pos += oplen;
11052   switch (op)
11053     {
11054     default:
11055       *pos -= oplen;
11056       print_subexp_standard (exp, pos, stream, prec);
11057       return;
11058
11059     case OP_VAR_VALUE:
11060       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11061       return;
11062
11063     case BINOP_IN_BOUNDS:
11064       /* XXX: sprint_subexp */
11065       print_subexp (exp, pos, stream, PREC_SUFFIX);
11066       fputs_filtered (" in ", stream);
11067       print_subexp (exp, pos, stream, PREC_SUFFIX);
11068       fputs_filtered ("'range", stream);
11069       if (exp->elts[pc + 1].longconst > 1)
11070         fprintf_filtered (stream, "(%ld)",
11071                           (long) exp->elts[pc + 1].longconst);
11072       return;
11073
11074     case TERNOP_IN_RANGE:
11075       if (prec >= PREC_EQUAL)
11076         fputs_filtered ("(", stream);
11077       /* XXX: sprint_subexp */
11078       print_subexp (exp, pos, stream, PREC_SUFFIX);
11079       fputs_filtered (" in ", stream);
11080       print_subexp (exp, pos, stream, PREC_EQUAL);
11081       fputs_filtered (" .. ", stream);
11082       print_subexp (exp, pos, stream, PREC_EQUAL);
11083       if (prec >= PREC_EQUAL)
11084         fputs_filtered (")", stream);
11085       return;
11086
11087     case OP_ATR_FIRST:
11088     case OP_ATR_LAST:
11089     case OP_ATR_LENGTH:
11090     case OP_ATR_IMAGE:
11091     case OP_ATR_MAX:
11092     case OP_ATR_MIN:
11093     case OP_ATR_MODULUS:
11094     case OP_ATR_POS:
11095     case OP_ATR_SIZE:
11096     case OP_ATR_TAG:
11097     case OP_ATR_VAL:
11098       if (exp->elts[*pos].opcode == OP_TYPE)
11099         {
11100           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11101             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11102           *pos += 3;
11103         }
11104       else
11105         print_subexp (exp, pos, stream, PREC_SUFFIX);
11106       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11107       if (nargs > 1)
11108         {
11109           int tem;
11110           for (tem = 1; tem < nargs; tem += 1)
11111             {
11112               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11113               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11114             }
11115           fputs_filtered (")", stream);
11116         }
11117       return;
11118
11119     case UNOP_QUAL:
11120       type_print (exp->elts[pc + 1].type, "", stream, 0);
11121       fputs_filtered ("'(", stream);
11122       print_subexp (exp, pos, stream, PREC_PREFIX);
11123       fputs_filtered (")", stream);
11124       return;
11125
11126     case UNOP_IN_RANGE:
11127       /* XXX: sprint_subexp */
11128       print_subexp (exp, pos, stream, PREC_SUFFIX);
11129       fputs_filtered (" in ", stream);
11130       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11131       return;
11132
11133     case OP_DISCRETE_RANGE:
11134       print_subexp (exp, pos, stream, PREC_SUFFIX);
11135       fputs_filtered ("..", stream);
11136       print_subexp (exp, pos, stream, PREC_SUFFIX);
11137       return;
11138
11139     case OP_OTHERS:
11140       fputs_filtered ("others => ", stream);
11141       print_subexp (exp, pos, stream, PREC_SUFFIX);
11142       return;
11143
11144     case OP_CHOICES:
11145       for (i = 0; i < nargs-1; i += 1)
11146         {
11147           if (i > 0)
11148             fputs_filtered ("|", stream);
11149           print_subexp (exp, pos, stream, PREC_SUFFIX);
11150         }
11151       fputs_filtered (" => ", stream);
11152       print_subexp (exp, pos, stream, PREC_SUFFIX);
11153       return;
11154       
11155     case OP_POSITIONAL:
11156       print_subexp (exp, pos, stream, PREC_SUFFIX);
11157       return;
11158
11159     case OP_AGGREGATE:
11160       fputs_filtered ("(", stream);
11161       for (i = 0; i < nargs; i += 1)
11162         {
11163           if (i > 0)
11164             fputs_filtered (", ", stream);
11165           print_subexp (exp, pos, stream, PREC_SUFFIX);
11166         }
11167       fputs_filtered (")", stream);
11168       return;
11169     }
11170 }
11171
11172 /* Table mapping opcodes into strings for printing operators
11173    and precedences of the operators.  */
11174
11175 static const struct op_print ada_op_print_tab[] = {
11176   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11177   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11178   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11179   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11180   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11181   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11182   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11183   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11184   {"<=", BINOP_LEQ, PREC_ORDER, 0},
11185   {">=", BINOP_GEQ, PREC_ORDER, 0},
11186   {">", BINOP_GTR, PREC_ORDER, 0},
11187   {"<", BINOP_LESS, PREC_ORDER, 0},
11188   {">>", BINOP_RSH, PREC_SHIFT, 0},
11189   {"<<", BINOP_LSH, PREC_SHIFT, 0},
11190   {"+", BINOP_ADD, PREC_ADD, 0},
11191   {"-", BINOP_SUB, PREC_ADD, 0},
11192   {"&", BINOP_CONCAT, PREC_ADD, 0},
11193   {"*", BINOP_MUL, PREC_MUL, 0},
11194   {"/", BINOP_DIV, PREC_MUL, 0},
11195   {"rem", BINOP_REM, PREC_MUL, 0},
11196   {"mod", BINOP_MOD, PREC_MUL, 0},
11197   {"**", BINOP_EXP, PREC_REPEAT, 0},
11198   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11199   {"-", UNOP_NEG, PREC_PREFIX, 0},
11200   {"+", UNOP_PLUS, PREC_PREFIX, 0},
11201   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11202   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11203   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
11204   {".all", UNOP_IND, PREC_SUFFIX, 1},
11205   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11206   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
11207   {NULL, 0, 0, 0}
11208 };
11209 \f
11210 enum ada_primitive_types {
11211   ada_primitive_type_int,
11212   ada_primitive_type_long,
11213   ada_primitive_type_short,
11214   ada_primitive_type_char,
11215   ada_primitive_type_float,
11216   ada_primitive_type_double,
11217   ada_primitive_type_void,
11218   ada_primitive_type_long_long,
11219   ada_primitive_type_long_double,
11220   ada_primitive_type_natural,
11221   ada_primitive_type_positive,
11222   ada_primitive_type_system_address,
11223   nr_ada_primitive_types
11224 };
11225
11226 static void
11227 ada_language_arch_info (struct gdbarch *gdbarch,
11228                         struct language_arch_info *lai)
11229 {
11230   const struct builtin_type *builtin = builtin_type (gdbarch);
11231   lai->primitive_type_vector
11232     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
11233                               struct type *);
11234
11235   lai->primitive_type_vector [ada_primitive_type_int]
11236     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11237                          0, "integer");
11238   lai->primitive_type_vector [ada_primitive_type_long]
11239     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
11240                          0, "long_integer");
11241   lai->primitive_type_vector [ada_primitive_type_short]
11242     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
11243                          0, "short_integer");
11244   lai->string_char_type
11245     = lai->primitive_type_vector [ada_primitive_type_char]
11246     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
11247   lai->primitive_type_vector [ada_primitive_type_float]
11248     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
11249                        "float", NULL);
11250   lai->primitive_type_vector [ada_primitive_type_double]
11251     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11252                        "long_float", NULL);
11253   lai->primitive_type_vector [ada_primitive_type_long_long]
11254     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
11255                          0, "long_long_integer");
11256   lai->primitive_type_vector [ada_primitive_type_long_double]
11257     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11258                        "long_long_float", NULL);
11259   lai->primitive_type_vector [ada_primitive_type_natural]
11260     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11261                          0, "natural");
11262   lai->primitive_type_vector [ada_primitive_type_positive]
11263     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11264                          0, "positive");
11265   lai->primitive_type_vector [ada_primitive_type_void]
11266     = builtin->builtin_void;
11267
11268   lai->primitive_type_vector [ada_primitive_type_system_address]
11269     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
11270   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11271     = "system__address";
11272
11273   lai->bool_type_symbol = NULL;
11274   lai->bool_type_default = builtin->builtin_bool;
11275 }
11276 \f
11277                                 /* Language vector */
11278
11279 /* Not really used, but needed in the ada_language_defn.  */
11280
11281 static void
11282 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
11283 {
11284   ada_emit_char (c, type, stream, quoter, 1);
11285 }
11286
11287 static int
11288 parse (void)
11289 {
11290   warnings_issued = 0;
11291   return ada_parse ();
11292 }
11293
11294 static const struct exp_descriptor ada_exp_descriptor = {
11295   ada_print_subexp,
11296   ada_operator_length,
11297   ada_operator_check,
11298   ada_op_name,
11299   ada_dump_subexp_body,
11300   ada_evaluate_subexp
11301 };
11302
11303 const struct language_defn ada_language_defn = {
11304   "ada",                        /* Language name */
11305   language_ada,
11306   range_check_off,
11307   type_check_off,
11308   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11309                                    that's not quite what this means.  */
11310   array_row_major,
11311   macro_expansion_no,
11312   &ada_exp_descriptor,
11313   parse,
11314   ada_error,
11315   resolve,
11316   ada_printchar,                /* Print a character constant */
11317   ada_printstr,                 /* Function to print string constant */
11318   emit_char,                    /* Function to print single char (not used) */
11319   ada_print_type,               /* Print a type using appropriate syntax */
11320   ada_print_typedef,            /* Print a typedef using appropriate syntax */
11321   ada_val_print,                /* Print a value using appropriate syntax */
11322   ada_value_print,              /* Print a top-level value */
11323   NULL,                         /* Language specific skip_trampoline */
11324   NULL,                         /* name_of_this */
11325   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11326   basic_lookup_transparent_type,        /* lookup_transparent_type */
11327   ada_la_decode,                /* Language specific symbol demangler */
11328   NULL,                         /* Language specific class_name_from_physname */
11329   ada_op_print_tab,             /* expression operators for printing */
11330   0,                            /* c-style arrays */
11331   1,                            /* String lower bound */
11332   ada_get_gdb_completer_word_break_characters,
11333   ada_make_symbol_completion_list,
11334   ada_language_arch_info,
11335   ada_print_array_index,
11336   default_pass_by_reference,
11337   c_get_string,
11338   LANG_MAGIC
11339 };
11340
11341 /* Provide a prototype to silence -Wmissing-prototypes.  */
11342 extern initialize_file_ftype _initialize_ada_language;
11343
11344 /* Command-list for the "set/show ada" prefix command.  */
11345 static struct cmd_list_element *set_ada_list;
11346 static struct cmd_list_element *show_ada_list;
11347
11348 /* Implement the "set ada" prefix command.  */
11349
11350 static void
11351 set_ada_command (char *arg, int from_tty)
11352 {
11353   printf_unfiltered (_(\
11354 "\"set ada\" must be followed by the name of a setting.\n"));
11355   help_list (set_ada_list, "set ada ", -1, gdb_stdout);
11356 }
11357
11358 /* Implement the "show ada" prefix command.  */
11359
11360 static void
11361 show_ada_command (char *args, int from_tty)
11362 {
11363   cmd_show_list (show_ada_list, from_tty, "");
11364 }
11365
11366 void
11367 _initialize_ada_language (void)
11368 {
11369   add_language (&ada_language_defn);
11370
11371   add_prefix_cmd ("ada", no_class, set_ada_command,
11372                   _("Prefix command for changing Ada-specfic settings"),
11373                   &set_ada_list, "set ada ", 0, &setlist);
11374
11375   add_prefix_cmd ("ada", no_class, show_ada_command,
11376                   _("Generic command for showing Ada-specific settings."),
11377                   &show_ada_list, "show ada ", 0, &showlist);
11378
11379   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
11380                            &trust_pad_over_xvs, _("\
11381 Enable or disable an optimization trusting PAD types over XVS types"), _("\
11382 Show whether an optimization trusting PAD types over XVS types is activated"),
11383                            _("\
11384 This is related to the encoding used by the GNAT compiler.  The debugger\n\
11385 should normally trust the contents of PAD types, but certain older versions\n\
11386 of GNAT have a bug that sometimes causes the information in the PAD type\n\
11387 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
11388 work around this bug.  It is always safe to turn this option \"off\", but\n\
11389 this incurs a slight performance penalty, so it is recommended to NOT change\n\
11390 this option to \"off\" unless necessary."),
11391                             NULL, NULL, &set_ada_list, &show_ada_list);
11392
11393   varsize_limit = 65536;
11394
11395   obstack_init (&symbol_list_obstack);
11396
11397   decoded_names_store = htab_create_alloc
11398     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11399      NULL, xcalloc, xfree);
11400
11401   observer_attach_executable_changed (ada_executable_changed_observer);
11402 }