2010-05-06 Michael Snyder <msnyder@vmware.com>
[external/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   struct value *mark = value_mark ();
8053
8054   *pos += 3;
8055   if (noside != EVAL_NORMAL)
8056     {
8057       int i;
8058       for (i = 0; i < n; i += 1)
8059         ada_evaluate_subexp (NULL, exp, pos, noside);
8060       return container;
8061     }
8062
8063   container = ada_coerce_ref (container);
8064   if (ada_is_direct_array_type (value_type (container)))
8065     container = ada_coerce_to_simple_array (container);
8066   lhs = ada_coerce_ref (lhs);
8067   if (!deprecated_value_modifiable (lhs))
8068     error (_("Left operand of assignment is not a modifiable lvalue."));
8069
8070   lhs_type = value_type (lhs);
8071   if (ada_is_direct_array_type (lhs_type))
8072     {
8073       lhs = ada_coerce_to_simple_array (lhs);
8074       lhs_type = value_type (lhs);
8075       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8076       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8077       is_array_aggregate = 1;
8078     }
8079   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8080     {
8081       low_index = 0;
8082       high_index = num_visible_fields (lhs_type) - 1;
8083       is_array_aggregate = 0;
8084     }
8085   else
8086     error (_("Left-hand side must be array or record."));
8087
8088   num_specs = num_component_specs (exp, *pos - 3);
8089   max_indices = 4 * num_specs + 4;
8090   indices = alloca (max_indices * sizeof (indices[0]));
8091   indices[0] = indices[1] = low_index - 1;
8092   indices[2] = indices[3] = high_index + 1;
8093   num_indices = 4;
8094
8095   for (i = 0; i < n; i += 1)
8096     {
8097       switch (exp->elts[*pos].opcode)
8098         {
8099         case OP_CHOICES:
8100           aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
8101                                          &num_indices, max_indices,
8102                                          low_index, high_index);
8103           break;
8104         case OP_POSITIONAL:
8105           aggregate_assign_positional (container, lhs, exp, pos, indices,
8106                                        &num_indices, max_indices,
8107                                        low_index, high_index);
8108           break;
8109         case OP_OTHERS:
8110           if (i != n-1)
8111             error (_("Misplaced 'others' clause"));
8112           aggregate_assign_others (container, lhs, exp, pos, indices, 
8113                                    num_indices, low_index, high_index);
8114           break;
8115         default:
8116           error (_("Internal error: bad aggregate clause"));
8117         }
8118     }
8119
8120   return container;
8121 }
8122               
8123 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8124    construct at *POS, updating *POS past the construct, given that
8125    the positions are relative to lower bound LOW, where HIGH is the 
8126    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
8127    updating *NUM_INDICES as needed.  CONTAINER is as for
8128    assign_aggregate. */
8129 static void
8130 aggregate_assign_positional (struct value *container,
8131                              struct value *lhs, struct expression *exp,
8132                              int *pos, LONGEST *indices, int *num_indices,
8133                              int max_indices, LONGEST low, LONGEST high) 
8134 {
8135   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8136   
8137   if (ind - 1 == high)
8138     warning (_("Extra components in aggregate ignored."));
8139   if (ind <= high)
8140     {
8141       add_component_interval (ind, ind, indices, num_indices, max_indices);
8142       *pos += 3;
8143       assign_component (container, lhs, ind, exp, pos);
8144     }
8145   else
8146     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8147 }
8148
8149 /* Assign into the components of LHS indexed by the OP_CHOICES
8150    construct at *POS, updating *POS past the construct, given that
8151    the allowable indices are LOW..HIGH.  Record the indices assigned
8152    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8153    needed.  CONTAINER is as for assign_aggregate. */
8154 static void
8155 aggregate_assign_from_choices (struct value *container,
8156                                struct value *lhs, struct expression *exp,
8157                                int *pos, LONGEST *indices, int *num_indices,
8158                                int max_indices, LONGEST low, LONGEST high) 
8159 {
8160   int j;
8161   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8162   int choice_pos, expr_pc;
8163   int is_array = ada_is_direct_array_type (value_type (lhs));
8164
8165   choice_pos = *pos += 3;
8166
8167   for (j = 0; j < n_choices; j += 1)
8168     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8169   expr_pc = *pos;
8170   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8171   
8172   for (j = 0; j < n_choices; j += 1)
8173     {
8174       LONGEST lower, upper;
8175       enum exp_opcode op = exp->elts[choice_pos].opcode;
8176       if (op == OP_DISCRETE_RANGE)
8177         {
8178           choice_pos += 1;
8179           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8180                                                       EVAL_NORMAL));
8181           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
8182                                                       EVAL_NORMAL));
8183         }
8184       else if (is_array)
8185         {
8186           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
8187                                                       EVAL_NORMAL));
8188           upper = lower;
8189         }
8190       else
8191         {
8192           int ind;
8193           char *name;
8194           switch (op)
8195             {
8196             case OP_NAME:
8197               name = &exp->elts[choice_pos + 2].string;
8198               break;
8199             case OP_VAR_VALUE:
8200               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8201               break;
8202             default:
8203               error (_("Invalid record component association."));
8204             }
8205           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8206           ind = 0;
8207           if (! find_struct_field (name, value_type (lhs), 0, 
8208                                    NULL, NULL, NULL, NULL, &ind))
8209             error (_("Unknown component name: %s."), name);
8210           lower = upper = ind;
8211         }
8212
8213       if (lower <= upper && (lower < low || upper > high))
8214         error (_("Index in component association out of bounds."));
8215
8216       add_component_interval (lower, upper, indices, num_indices,
8217                               max_indices);
8218       while (lower <= upper)
8219         {
8220           int pos1;
8221           pos1 = expr_pc;
8222           assign_component (container, lhs, lower, exp, &pos1);
8223           lower += 1;
8224         }
8225     }
8226 }
8227
8228 /* Assign the value of the expression in the OP_OTHERS construct in
8229    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8230    have not been previously assigned.  The index intervals already assigned
8231    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
8232    OP_OTHERS clause.  CONTAINER is as for assign_aggregate*/
8233 static void
8234 aggregate_assign_others (struct value *container,
8235                          struct value *lhs, struct expression *exp,
8236                          int *pos, LONGEST *indices, int num_indices,
8237                          LONGEST low, LONGEST high) 
8238 {
8239   int i;
8240   int expr_pc = *pos+1;
8241   
8242   for (i = 0; i < num_indices - 2; i += 2)
8243     {
8244       LONGEST ind;
8245       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8246         {
8247           int pos;
8248           pos = expr_pc;
8249           assign_component (container, lhs, ind, exp, &pos);
8250         }
8251     }
8252   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8253 }
8254
8255 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
8256    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8257    modifying *SIZE as needed.  It is an error if *SIZE exceeds
8258    MAX_SIZE.  The resulting intervals do not overlap.  */
8259 static void
8260 add_component_interval (LONGEST low, LONGEST high, 
8261                         LONGEST* indices, int *size, int max_size)
8262 {
8263   int i, j;
8264   for (i = 0; i < *size; i += 2) {
8265     if (high >= indices[i] && low <= indices[i + 1])
8266       {
8267         int kh;
8268         for (kh = i + 2; kh < *size; kh += 2)
8269           if (high < indices[kh])
8270             break;
8271         if (low < indices[i])
8272           indices[i] = low;
8273         indices[i + 1] = indices[kh - 1];
8274         if (high > indices[i + 1])
8275           indices[i + 1] = high;
8276         memcpy (indices + i + 2, indices + kh, *size - kh);
8277         *size -= kh - i - 2;
8278         return;
8279       }
8280     else if (high < indices[i])
8281       break;
8282   }
8283         
8284   if (*size == max_size)
8285     error (_("Internal error: miscounted aggregate components."));
8286   *size += 2;
8287   for (j = *size-1; j >= i+2; j -= 1)
8288     indices[j] = indices[j - 2];
8289   indices[i] = low;
8290   indices[i + 1] = high;
8291 }
8292
8293 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8294    is different.  */
8295
8296 static struct value *
8297 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8298 {
8299   if (type == ada_check_typedef (value_type (arg2)))
8300     return arg2;
8301
8302   if (ada_is_fixed_point_type (type))
8303     return (cast_to_fixed (type, arg2));
8304
8305   if (ada_is_fixed_point_type (value_type (arg2)))
8306     return cast_from_fixed (type, arg2);
8307
8308   return value_cast (type, arg2);
8309 }
8310
8311 /*  Evaluating Ada expressions, and printing their result.
8312     ------------------------------------------------------
8313
8314     1. Introduction:
8315     ----------------
8316
8317     We usually evaluate an Ada expression in order to print its value.
8318     We also evaluate an expression in order to print its type, which
8319     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
8320     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
8321     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
8322     the evaluation compared to the EVAL_NORMAL, but is otherwise very
8323     similar.
8324
8325     Evaluating expressions is a little more complicated for Ada entities
8326     than it is for entities in languages such as C.  The main reason for
8327     this is that Ada provides types whose definition might be dynamic.
8328     One example of such types is variant records.  Or another example
8329     would be an array whose bounds can only be known at run time.
8330
8331     The following description is a general guide as to what should be
8332     done (and what should NOT be done) in order to evaluate an expression
8333     involving such types, and when.  This does not cover how the semantic
8334     information is encoded by GNAT as this is covered separatly.  For the
8335     document used as the reference for the GNAT encoding, see exp_dbug.ads
8336     in the GNAT sources.
8337
8338     Ideally, we should embed each part of this description next to its
8339     associated code.  Unfortunately, the amount of code is so vast right
8340     now that it's hard to see whether the code handling a particular
8341     situation might be duplicated or not.  One day, when the code is
8342     cleaned up, this guide might become redundant with the comments
8343     inserted in the code, and we might want to remove it.
8344
8345     2. ``Fixing'' an Entity, the Simple Case:
8346     -----------------------------------------
8347
8348     When evaluating Ada expressions, the tricky issue is that they may
8349     reference entities whose type contents and size are not statically
8350     known.  Consider for instance a variant record:
8351
8352        type Rec (Empty : Boolean := True) is record
8353           case Empty is
8354              when True => null;
8355              when False => Value : Integer;
8356           end case;
8357        end record;
8358        Yes : Rec := (Empty => False, Value => 1);
8359        No  : Rec := (empty => True);
8360
8361     The size and contents of that record depends on the value of the
8362     descriminant (Rec.Empty).  At this point, neither the debugging
8363     information nor the associated type structure in GDB are able to
8364     express such dynamic types.  So what the debugger does is to create
8365     "fixed" versions of the type that applies to the specific object.
8366     We also informally refer to this opperation as "fixing" an object,
8367     which means creating its associated fixed type.
8368
8369     Example: when printing the value of variable "Yes" above, its fixed
8370     type would look like this:
8371
8372        type Rec is record
8373           Empty : Boolean;
8374           Value : Integer;
8375        end record;
8376
8377     On the other hand, if we printed the value of "No", its fixed type
8378     would become:
8379
8380        type Rec is record
8381           Empty : Boolean;
8382        end record;
8383
8384     Things become a little more complicated when trying to fix an entity
8385     with a dynamic type that directly contains another dynamic type,
8386     such as an array of variant records, for instance.  There are
8387     two possible cases: Arrays, and records.
8388
8389     3. ``Fixing'' Arrays:
8390     ---------------------
8391
8392     The type structure in GDB describes an array in terms of its bounds,
8393     and the type of its elements.  By design, all elements in the array
8394     have the same type and we cannot represent an array of variant elements
8395     using the current type structure in GDB.  When fixing an array,
8396     we cannot fix the array element, as we would potentially need one
8397     fixed type per element of the array.  As a result, the best we can do
8398     when fixing an array is to produce an array whose bounds and size
8399     are correct (allowing us to read it from memory), but without having
8400     touched its element type.  Fixing each element will be done later,
8401     when (if) necessary.
8402
8403     Arrays are a little simpler to handle than records, because the same
8404     amount of memory is allocated for each element of the array, even if
8405     the amount of space actually used by each element differs from element
8406     to element.  Consider for instance the following array of type Rec:
8407
8408        type Rec_Array is array (1 .. 2) of Rec;
8409
8410     The actual amount of memory occupied by each element might be different
8411     from element to element, depending on the value of their discriminant.
8412     But the amount of space reserved for each element in the array remains
8413     fixed regardless.  So we simply need to compute that size using
8414     the debugging information available, from which we can then determine
8415     the array size (we multiply the number of elements of the array by
8416     the size of each element).
8417
8418     The simplest case is when we have an array of a constrained element
8419     type. For instance, consider the following type declarations:
8420
8421         type Bounded_String (Max_Size : Integer) is
8422            Length : Integer;
8423            Buffer : String (1 .. Max_Size);
8424         end record;
8425         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
8426
8427     In this case, the compiler describes the array as an array of
8428     variable-size elements (identified by its XVS suffix) for which
8429     the size can be read in the parallel XVZ variable.
8430
8431     In the case of an array of an unconstrained element type, the compiler
8432     wraps the array element inside a private PAD type.  This type should not
8433     be shown to the user, and must be "unwrap"'ed before printing.  Note
8434     that we also use the adjective "aligner" in our code to designate
8435     these wrapper types.
8436
8437     In some cases, the size allocated for each element is statically
8438     known.  In that case, the PAD type already has the correct size,
8439     and the array element should remain unfixed.
8440
8441     But there are cases when this size is not statically known.
8442     For instance, assuming that "Five" is an integer variable:
8443
8444         type Dynamic is array (1 .. Five) of Integer;
8445         type Wrapper (Has_Length : Boolean := False) is record
8446            Data : Dynamic;
8447            case Has_Length is
8448               when True => Length : Integer;
8449               when False => null;
8450            end case;
8451         end record;
8452         type Wrapper_Array is array (1 .. 2) of Wrapper;
8453
8454         Hello : Wrapper_Array := (others => (Has_Length => True,
8455                                              Data => (others => 17),
8456                                              Length => 1));
8457
8458
8459     The debugging info would describe variable Hello as being an
8460     array of a PAD type.  The size of that PAD type is not statically
8461     known, but can be determined using a parallel XVZ variable.
8462     In that case, a copy of the PAD type with the correct size should
8463     be used for the fixed array.
8464
8465     3. ``Fixing'' record type objects:
8466     ----------------------------------
8467
8468     Things are slightly different from arrays in the case of dynamic
8469     record types.  In this case, in order to compute the associated
8470     fixed type, we need to determine the size and offset of each of
8471     its components.  This, in turn, requires us to compute the fixed
8472     type of each of these components.
8473
8474     Consider for instance the example:
8475
8476         type Bounded_String (Max_Size : Natural) is record
8477            Str : String (1 .. Max_Size);
8478            Length : Natural;
8479         end record;
8480         My_String : Bounded_String (Max_Size => 10);
8481
8482     In that case, the position of field "Length" depends on the size
8483     of field Str, which itself depends on the value of the Max_Size
8484     discriminant.  In order to fix the type of variable My_String,
8485     we need to fix the type of field Str.  Therefore, fixing a variant
8486     record requires us to fix each of its components.
8487
8488     However, if a component does not have a dynamic size, the component
8489     should not be fixed.  In particular, fields that use a PAD type
8490     should not fixed.  Here is an example where this might happen
8491     (assuming type Rec above):
8492
8493        type Container (Big : Boolean) is record
8494           First : Rec;
8495           After : Integer;
8496           case Big is
8497              when True => Another : Integer;
8498              when False => null;
8499           end case;
8500        end record;
8501        My_Container : Container := (Big => False,
8502                                     First => (Empty => True),
8503                                     After => 42);
8504
8505     In that example, the compiler creates a PAD type for component First,
8506     whose size is constant, and then positions the component After just
8507     right after it.  The offset of component After is therefore constant
8508     in this case.
8509
8510     The debugger computes the position of each field based on an algorithm
8511     that uses, among other things, the actual position and size of the field
8512     preceding it.  Let's now imagine that the user is trying to print
8513     the value of My_Container.  If the type fixing was recursive, we would
8514     end up computing the offset of field After based on the size of the
8515     fixed version of field First.  And since in our example First has
8516     only one actual field, the size of the fixed type is actually smaller
8517     than the amount of space allocated to that field, and thus we would
8518     compute the wrong offset of field After.
8519
8520     To make things more complicated, we need to watch out for dynamic
8521     components of variant records (identified by the ___XVL suffix in
8522     the component name).  Even if the target type is a PAD type, the size
8523     of that type might not be statically known.  So the PAD type needs
8524     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
8525     we might end up with the wrong size for our component.  This can be
8526     observed with the following type declarations:
8527
8528         type Octal is new Integer range 0 .. 7;
8529         type Octal_Array is array (Positive range <>) of Octal;
8530         pragma Pack (Octal_Array);
8531
8532         type Octal_Buffer (Size : Positive) is record
8533            Buffer : Octal_Array (1 .. Size);
8534            Length : Integer;
8535         end record;
8536
8537     In that case, Buffer is a PAD type whose size is unset and needs
8538     to be computed by fixing the unwrapped type.
8539
8540     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
8541     ----------------------------------------------------------
8542
8543     Lastly, when should the sub-elements of an entity that remained unfixed
8544     thus far, be actually fixed?
8545
8546     The answer is: Only when referencing that element.  For instance
8547     when selecting one component of a record, this specific component
8548     should be fixed at that point in time.  Or when printing the value
8549     of a record, each component should be fixed before its value gets
8550     printed.  Similarly for arrays, the element of the array should be
8551     fixed when printing each element of the array, or when extracting
8552     one element out of that array.  On the other hand, fixing should
8553     not be performed on the elements when taking a slice of an array!
8554
8555     Note that one of the side-effects of miscomputing the offset and
8556     size of each field is that we end up also miscomputing the size
8557     of the containing type.  This can have adverse results when computing
8558     the value of an entity.  GDB fetches the value of an entity based
8559     on the size of its type, and thus a wrong size causes GDB to fetch
8560     the wrong amount of memory.  In the case where the computed size is
8561     too small, GDB fetches too little data to print the value of our
8562     entiry.  Results in this case as unpredicatble, as we usually read
8563     past the buffer containing the data =:-o.  */
8564
8565 /* Implement the evaluate_exp routine in the exp_descriptor structure
8566    for the Ada language.  */
8567
8568 static struct value *
8569 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8570                      int *pos, enum noside noside)
8571 {
8572   enum exp_opcode op;
8573   int tem;
8574   int pc;
8575   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8576   struct type *type;
8577   int nargs, oplen;
8578   struct value **argvec;
8579
8580   pc = *pos;
8581   *pos += 1;
8582   op = exp->elts[pc].opcode;
8583
8584   switch (op)
8585     {
8586     default:
8587       *pos -= 1;
8588       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8589       arg1 = unwrap_value (arg1);
8590
8591       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8592          then we need to perform the conversion manually, because
8593          evaluate_subexp_standard doesn't do it.  This conversion is
8594          necessary in Ada because the different kinds of float/fixed
8595          types in Ada have different representations.
8596
8597          Similarly, we need to perform the conversion from OP_LONG
8598          ourselves.  */
8599       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8600         arg1 = ada_value_cast (expect_type, arg1, noside);
8601
8602       return arg1;
8603
8604     case OP_STRING:
8605       {
8606         struct value *result;
8607         *pos -= 1;
8608         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8609         /* The result type will have code OP_STRING, bashed there from 
8610            OP_ARRAY.  Bash it back.  */
8611         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8612           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8613         return result;
8614       }
8615
8616     case UNOP_CAST:
8617       (*pos) += 2;
8618       type = exp->elts[pc + 1].type;
8619       arg1 = evaluate_subexp (type, exp, pos, noside);
8620       if (noside == EVAL_SKIP)
8621         goto nosideret;
8622       arg1 = ada_value_cast (type, arg1, noside);
8623       return arg1;
8624
8625     case UNOP_QUAL:
8626       (*pos) += 2;
8627       type = exp->elts[pc + 1].type;
8628       return ada_evaluate_subexp (type, exp, pos, noside);
8629
8630     case BINOP_ASSIGN:
8631       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8632       if (exp->elts[*pos].opcode == OP_AGGREGATE)
8633         {
8634           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8635           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8636             return arg1;
8637           return ada_value_assign (arg1, arg1);
8638         }
8639       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8640          except if the lhs of our assignment is a convenience variable.
8641          In the case of assigning to a convenience variable, the lhs
8642          should be exactly the result of the evaluation of the rhs.  */
8643       type = value_type (arg1);
8644       if (VALUE_LVAL (arg1) == lval_internalvar)
8645          type = NULL;
8646       arg2 = evaluate_subexp (type, exp, pos, noside);
8647       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8648         return arg1;
8649       if (ada_is_fixed_point_type (value_type (arg1)))
8650         arg2 = cast_to_fixed (value_type (arg1), arg2);
8651       else if (ada_is_fixed_point_type (value_type (arg2)))
8652         error
8653           (_("Fixed-point values must be assigned to fixed-point variables"));
8654       else
8655         arg2 = coerce_for_assign (value_type (arg1), arg2);
8656       return ada_value_assign (arg1, arg2);
8657
8658     case BINOP_ADD:
8659       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8660       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8661       if (noside == EVAL_SKIP)
8662         goto nosideret;
8663       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8664         return (value_from_longest
8665                  (value_type (arg1),
8666                   value_as_long (arg1) + value_as_long (arg2)));
8667       if ((ada_is_fixed_point_type (value_type (arg1))
8668            || ada_is_fixed_point_type (value_type (arg2)))
8669           && value_type (arg1) != value_type (arg2))
8670         error (_("Operands of fixed-point addition must have the same type"));
8671       /* Do the addition, and cast the result to the type of the first
8672          argument.  We cannot cast the result to a reference type, so if
8673          ARG1 is a reference type, find its underlying type.  */
8674       type = value_type (arg1);
8675       while (TYPE_CODE (type) == TYPE_CODE_REF)
8676         type = TYPE_TARGET_TYPE (type);
8677       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8678       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
8679
8680     case BINOP_SUB:
8681       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8682       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8683       if (noside == EVAL_SKIP)
8684         goto nosideret;
8685       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8686         return (value_from_longest
8687                  (value_type (arg1),
8688                   value_as_long (arg1) - value_as_long (arg2)));
8689       if ((ada_is_fixed_point_type (value_type (arg1))
8690            || ada_is_fixed_point_type (value_type (arg2)))
8691           && value_type (arg1) != value_type (arg2))
8692         error (_("Operands of fixed-point subtraction must have the same type"));
8693       /* Do the substraction, and cast the result to the type of the first
8694          argument.  We cannot cast the result to a reference type, so if
8695          ARG1 is a reference type, find its underlying type.  */
8696       type = value_type (arg1);
8697       while (TYPE_CODE (type) == TYPE_CODE_REF)
8698         type = TYPE_TARGET_TYPE (type);
8699       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8700       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
8701
8702     case BINOP_MUL:
8703     case BINOP_DIV:
8704     case BINOP_REM:
8705     case BINOP_MOD:
8706       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8707       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8708       if (noside == EVAL_SKIP)
8709         goto nosideret;
8710       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8711         {
8712           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8713           return value_zero (value_type (arg1), not_lval);
8714         }
8715       else
8716         {
8717           type = builtin_type (exp->gdbarch)->builtin_double;
8718           if (ada_is_fixed_point_type (value_type (arg1)))
8719             arg1 = cast_from_fixed (type, arg1);
8720           if (ada_is_fixed_point_type (value_type (arg2)))
8721             arg2 = cast_from_fixed (type, arg2);
8722           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8723           return ada_value_binop (arg1, arg2, op);
8724         }
8725
8726     case BINOP_EQUAL:
8727     case BINOP_NOTEQUAL:
8728       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8729       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8730       if (noside == EVAL_SKIP)
8731         goto nosideret;
8732       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8733         tem = 0;
8734       else
8735         {
8736           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8737           tem = ada_value_equal (arg1, arg2);
8738         }
8739       if (op == BINOP_NOTEQUAL)
8740         tem = !tem;
8741       type = language_bool_type (exp->language_defn, exp->gdbarch);
8742       return value_from_longest (type, (LONGEST) tem);
8743
8744     case UNOP_NEG:
8745       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8746       if (noside == EVAL_SKIP)
8747         goto nosideret;
8748       else if (ada_is_fixed_point_type (value_type (arg1)))
8749         return value_cast (value_type (arg1), value_neg (arg1));
8750       else
8751         {
8752           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
8753           return value_neg (arg1);
8754         }
8755
8756     case BINOP_LOGICAL_AND:
8757     case BINOP_LOGICAL_OR:
8758     case UNOP_LOGICAL_NOT:
8759       {
8760         struct value *val;
8761
8762         *pos -= 1;
8763         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8764         type = language_bool_type (exp->language_defn, exp->gdbarch);
8765         return value_cast (type, val);
8766       }
8767
8768     case BINOP_BITWISE_AND:
8769     case BINOP_BITWISE_IOR:
8770     case BINOP_BITWISE_XOR:
8771       {
8772         struct value *val;
8773
8774         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8775         *pos = pc;
8776         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8777
8778         return value_cast (value_type (arg1), val);
8779       }
8780
8781     case OP_VAR_VALUE:
8782       *pos -= 1;
8783
8784       if (noside == EVAL_SKIP)
8785         {
8786           *pos += 4;
8787           goto nosideret;
8788         }
8789       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8790         /* Only encountered when an unresolved symbol occurs in a
8791            context other than a function call, in which case, it is
8792            invalid.  */
8793         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8794                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8795       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8796         {
8797           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
8798           /* Check to see if this is a tagged type.  We also need to handle
8799              the case where the type is a reference to a tagged type, but
8800              we have to be careful to exclude pointers to tagged types.
8801              The latter should be shown as usual (as a pointer), whereas
8802              a reference should mostly be transparent to the user.  */
8803           if (ada_is_tagged_type (type, 0)
8804               || (TYPE_CODE(type) == TYPE_CODE_REF
8805                   && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
8806           {
8807             /* Tagged types are a little special in the fact that the real
8808                type is dynamic and can only be determined by inspecting the
8809                object's tag.  This means that we need to get the object's
8810                value first (EVAL_NORMAL) and then extract the actual object
8811                type from its tag.
8812
8813                Note that we cannot skip the final step where we extract
8814                the object type from its tag, because the EVAL_NORMAL phase
8815                results in dynamic components being resolved into fixed ones.
8816                This can cause problems when trying to print the type
8817                description of tagged types whose parent has a dynamic size:
8818                We use the type name of the "_parent" component in order
8819                to print the name of the ancestor type in the type description.
8820                If that component had a dynamic size, the resolution into
8821                a fixed type would result in the loss of that type name,
8822                thus preventing us from printing the name of the ancestor
8823                type in the type description.  */
8824             struct type *actual_type;
8825
8826             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
8827             actual_type = type_from_tag (ada_value_tag (arg1));
8828             if (actual_type == NULL)
8829               /* If, for some reason, we were unable to determine
8830                  the actual type from the tag, then use the static
8831                  approximation that we just computed as a fallback.
8832                  This can happen if the debugging information is
8833                  incomplete, for instance.  */
8834               actual_type = type;
8835
8836             return value_zero (actual_type, not_lval);
8837           }
8838
8839           *pos += 4;
8840           return value_zero
8841             (to_static_fixed_type
8842              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8843              not_lval);
8844         }
8845       else
8846         {
8847           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8848           arg1 = unwrap_value (arg1);
8849           return ada_to_fixed_value (arg1);
8850         }
8851
8852     case OP_FUNCALL:
8853       (*pos) += 2;
8854
8855       /* Allocate arg vector, including space for the function to be
8856          called in argvec[0] and a terminating NULL.  */
8857       nargs = longest_to_int (exp->elts[pc + 1].longconst);
8858       argvec =
8859         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8860
8861       if (exp->elts[*pos].opcode == OP_VAR_VALUE
8862           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8863         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8864                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8865       else
8866         {
8867           for (tem = 0; tem <= nargs; tem += 1)
8868             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8869           argvec[tem] = 0;
8870
8871           if (noside == EVAL_SKIP)
8872             goto nosideret;
8873         }
8874
8875       if (ada_is_constrained_packed_array_type
8876           (desc_base_type (value_type (argvec[0]))))
8877         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8878       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8879                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
8880         /* This is a packed array that has already been fixed, and
8881            therefore already coerced to a simple array.  Nothing further
8882            to do.  */
8883         ;
8884       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8885                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8886                    && VALUE_LVAL (argvec[0]) == lval_memory))
8887         argvec[0] = value_addr (argvec[0]);
8888
8889       type = ada_check_typedef (value_type (argvec[0]));
8890       if (TYPE_CODE (type) == TYPE_CODE_PTR)
8891         {
8892           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8893             {
8894             case TYPE_CODE_FUNC:
8895               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8896               break;
8897             case TYPE_CODE_ARRAY:
8898               break;
8899             case TYPE_CODE_STRUCT:
8900               if (noside != EVAL_AVOID_SIDE_EFFECTS)
8901                 argvec[0] = ada_value_ind (argvec[0]);
8902               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8903               break;
8904             default:
8905               error (_("cannot subscript or call something of type `%s'"),
8906                      ada_type_name (value_type (argvec[0])));
8907               break;
8908             }
8909         }
8910
8911       switch (TYPE_CODE (type))
8912         {
8913         case TYPE_CODE_FUNC:
8914           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8915             return allocate_value (TYPE_TARGET_TYPE (type));
8916           return call_function_by_hand (argvec[0], nargs, argvec + 1);
8917         case TYPE_CODE_STRUCT:
8918           {
8919             int arity;
8920
8921             arity = ada_array_arity (type);
8922             type = ada_array_element_type (type, nargs);
8923             if (type == NULL)
8924               error (_("cannot subscript or call a record"));
8925             if (arity != nargs)
8926               error (_("wrong number of subscripts; expecting %d"), arity);
8927             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8928               return value_zero (ada_aligned_type (type), lval_memory);
8929             return
8930               unwrap_value (ada_value_subscript
8931                             (argvec[0], nargs, argvec + 1));
8932           }
8933         case TYPE_CODE_ARRAY:
8934           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8935             {
8936               type = ada_array_element_type (type, nargs);
8937               if (type == NULL)
8938                 error (_("element type of array unknown"));
8939               else
8940                 return value_zero (ada_aligned_type (type), lval_memory);
8941             }
8942           return
8943             unwrap_value (ada_value_subscript
8944                           (ada_coerce_to_simple_array (argvec[0]),
8945                            nargs, argvec + 1));
8946         case TYPE_CODE_PTR:     /* Pointer to array */
8947           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8948           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8949             {
8950               type = ada_array_element_type (type, nargs);
8951               if (type == NULL)
8952                 error (_("element type of array unknown"));
8953               else
8954                 return value_zero (ada_aligned_type (type), lval_memory);
8955             }
8956           return
8957             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8958                                                    nargs, argvec + 1));
8959
8960         default:
8961           error (_("Attempt to index or call something other than an "
8962                    "array or function"));
8963         }
8964
8965     case TERNOP_SLICE:
8966       {
8967         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8968         struct value *low_bound_val =
8969           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8970         struct value *high_bound_val =
8971           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8972         LONGEST low_bound;
8973         LONGEST high_bound;
8974         low_bound_val = coerce_ref (low_bound_val);
8975         high_bound_val = coerce_ref (high_bound_val);
8976         low_bound = pos_atr (low_bound_val);
8977         high_bound = pos_atr (high_bound_val);
8978
8979         if (noside == EVAL_SKIP)
8980           goto nosideret;
8981
8982         /* If this is a reference to an aligner type, then remove all
8983            the aligners.  */
8984         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8985             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8986           TYPE_TARGET_TYPE (value_type (array)) =
8987             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8988
8989         if (ada_is_constrained_packed_array_type (value_type (array)))
8990           error (_("cannot slice a packed array"));
8991
8992         /* If this is a reference to an array or an array lvalue,
8993            convert to a pointer.  */
8994         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8995             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8996                 && VALUE_LVAL (array) == lval_memory))
8997           array = value_addr (array);
8998
8999         if (noside == EVAL_AVOID_SIDE_EFFECTS
9000             && ada_is_array_descriptor_type (ada_check_typedef
9001                                              (value_type (array))))
9002           return empty_array (ada_type_of_array (array, 0), low_bound);
9003
9004         array = ada_coerce_to_simple_array_ptr (array);
9005
9006         /* If we have more than one level of pointer indirection,
9007            dereference the value until we get only one level.  */
9008         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9009                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
9010                      == TYPE_CODE_PTR))
9011           array = value_ind (array);
9012
9013         /* Make sure we really do have an array type before going further,
9014            to avoid a SEGV when trying to get the index type or the target
9015            type later down the road if the debug info generated by
9016            the compiler is incorrect or incomplete.  */
9017         if (!ada_is_simple_array_type (value_type (array)))
9018           error (_("cannot take slice of non-array"));
9019
9020         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
9021           {
9022             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
9023               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
9024                                   low_bound);
9025             else
9026               {
9027                 struct type *arr_type0 =
9028                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
9029                                        NULL, 1);
9030                 return ada_value_slice_from_ptr (array, arr_type0,
9031                                                  longest_to_int (low_bound),
9032                                                  longest_to_int (high_bound));
9033               }
9034           }
9035         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9036           return array;
9037         else if (high_bound < low_bound)
9038           return empty_array (value_type (array), low_bound);
9039         else
9040           return ada_value_slice (array, longest_to_int (low_bound),
9041                                   longest_to_int (high_bound));
9042       }
9043
9044     case UNOP_IN_RANGE:
9045       (*pos) += 2;
9046       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9047       type = check_typedef (exp->elts[pc + 1].type);
9048
9049       if (noside == EVAL_SKIP)
9050         goto nosideret;
9051
9052       switch (TYPE_CODE (type))
9053         {
9054         default:
9055           lim_warning (_("Membership test incompletely implemented; "
9056                          "always returns true"));
9057           type = language_bool_type (exp->language_defn, exp->gdbarch);
9058           return value_from_longest (type, (LONGEST) 1);
9059
9060         case TYPE_CODE_RANGE:
9061           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9062           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
9063           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9064           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9065           type = language_bool_type (exp->language_defn, exp->gdbarch);
9066           return
9067             value_from_longest (type,
9068                                 (value_less (arg1, arg3)
9069                                  || value_equal (arg1, arg3))
9070                                 && (value_less (arg2, arg1)
9071                                     || value_equal (arg2, arg1)));
9072         }
9073
9074     case BINOP_IN_BOUNDS:
9075       (*pos) += 2;
9076       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9077       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9078
9079       if (noside == EVAL_SKIP)
9080         goto nosideret;
9081
9082       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9083         {
9084           type = language_bool_type (exp->language_defn, exp->gdbarch);
9085           return value_zero (type, not_lval);
9086         }
9087
9088       tem = longest_to_int (exp->elts[pc + 1].longconst);
9089
9090       type = ada_index_type (value_type (arg2), tem, "range");
9091       if (!type)
9092         type = value_type (arg1);
9093
9094       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9095       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
9096
9097       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9098       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9099       type = language_bool_type (exp->language_defn, exp->gdbarch);
9100       return
9101         value_from_longest (type,
9102                             (value_less (arg1, arg3)
9103                              || value_equal (arg1, arg3))
9104                             && (value_less (arg2, arg1)
9105                                 || value_equal (arg2, arg1)));
9106
9107     case TERNOP_IN_RANGE:
9108       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9109       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9110       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9111
9112       if (noside == EVAL_SKIP)
9113         goto nosideret;
9114
9115       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9116       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9117       type = language_bool_type (exp->language_defn, exp->gdbarch);
9118       return
9119         value_from_longest (type,
9120                             (value_less (arg1, arg3)
9121                              || value_equal (arg1, arg3))
9122                             && (value_less (arg2, arg1)
9123                                 || value_equal (arg2, arg1)));
9124
9125     case OP_ATR_FIRST:
9126     case OP_ATR_LAST:
9127     case OP_ATR_LENGTH:
9128       {
9129         struct type *type_arg;
9130         if (exp->elts[*pos].opcode == OP_TYPE)
9131           {
9132             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9133             arg1 = NULL;
9134             type_arg = check_typedef (exp->elts[pc + 2].type);
9135           }
9136         else
9137           {
9138             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9139             type_arg = NULL;
9140           }
9141
9142         if (exp->elts[*pos].opcode != OP_LONG)
9143           error (_("Invalid operand to '%s"), ada_attribute_name (op));
9144         tem = longest_to_int (exp->elts[*pos + 2].longconst);
9145         *pos += 4;
9146
9147         if (noside == EVAL_SKIP)
9148           goto nosideret;
9149
9150         if (type_arg == NULL)
9151           {
9152             arg1 = ada_coerce_ref (arg1);
9153
9154             if (ada_is_constrained_packed_array_type (value_type (arg1)))
9155               arg1 = ada_coerce_to_simple_array (arg1);
9156
9157             type = ada_index_type (value_type (arg1), tem,
9158                                    ada_attribute_name (op));
9159             if (type == NULL)
9160               type = builtin_type (exp->gdbarch)->builtin_int;
9161
9162             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9163               return allocate_value (type);
9164
9165             switch (op)
9166               {
9167               default:          /* Should never happen.  */
9168                 error (_("unexpected attribute encountered"));
9169               case OP_ATR_FIRST:
9170                 return value_from_longest
9171                         (type, ada_array_bound (arg1, tem, 0));
9172               case OP_ATR_LAST:
9173                 return value_from_longest
9174                         (type, ada_array_bound (arg1, tem, 1));
9175               case OP_ATR_LENGTH:
9176                 return value_from_longest
9177                         (type, ada_array_length (arg1, tem));
9178               }
9179           }
9180         else if (discrete_type_p (type_arg))
9181           {
9182             struct type *range_type;
9183             char *name = ada_type_name (type_arg);
9184             range_type = NULL;
9185             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9186               range_type = to_fixed_range_type (name, NULL, type_arg);
9187             if (range_type == NULL)
9188               range_type = type_arg;
9189             switch (op)
9190               {
9191               default:
9192                 error (_("unexpected attribute encountered"));
9193               case OP_ATR_FIRST:
9194                 return value_from_longest 
9195                   (range_type, ada_discrete_type_low_bound (range_type));
9196               case OP_ATR_LAST:
9197                 return value_from_longest
9198                   (range_type, ada_discrete_type_high_bound (range_type));
9199               case OP_ATR_LENGTH:
9200                 error (_("the 'length attribute applies only to array types"));
9201               }
9202           }
9203         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9204           error (_("unimplemented type attribute"));
9205         else
9206           {
9207             LONGEST low, high;
9208
9209             if (ada_is_constrained_packed_array_type (type_arg))
9210               type_arg = decode_constrained_packed_array_type (type_arg);
9211
9212             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
9213             if (type == NULL)
9214               type = builtin_type (exp->gdbarch)->builtin_int;
9215
9216             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9217               return allocate_value (type);
9218
9219             switch (op)
9220               {
9221               default:
9222                 error (_("unexpected attribute encountered"));
9223               case OP_ATR_FIRST:
9224                 low = ada_array_bound_from_type (type_arg, tem, 0);
9225                 return value_from_longest (type, low);
9226               case OP_ATR_LAST:
9227                 high = ada_array_bound_from_type (type_arg, tem, 1);
9228                 return value_from_longest (type, high);
9229               case OP_ATR_LENGTH:
9230                 low = ada_array_bound_from_type (type_arg, tem, 0);
9231                 high = ada_array_bound_from_type (type_arg, tem, 1);
9232                 return value_from_longest (type, high - low + 1);
9233               }
9234           }
9235       }
9236
9237     case OP_ATR_TAG:
9238       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9239       if (noside == EVAL_SKIP)
9240         goto nosideret;
9241
9242       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9243         return value_zero (ada_tag_type (arg1), not_lval);
9244
9245       return ada_value_tag (arg1);
9246
9247     case OP_ATR_MIN:
9248     case OP_ATR_MAX:
9249       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9250       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9251       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9252       if (noside == EVAL_SKIP)
9253         goto nosideret;
9254       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9255         return value_zero (value_type (arg1), not_lval);
9256       else
9257         {
9258           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9259           return value_binop (arg1, arg2,
9260                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9261         }
9262
9263     case OP_ATR_MODULUS:
9264       {
9265         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
9266         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9267
9268         if (noside == EVAL_SKIP)
9269           goto nosideret;
9270
9271         if (!ada_is_modular_type (type_arg))
9272           error (_("'modulus must be applied to modular type"));
9273
9274         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9275                                    ada_modulus (type_arg));
9276       }
9277
9278
9279     case OP_ATR_POS:
9280       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9281       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9282       if (noside == EVAL_SKIP)
9283         goto nosideret;
9284       type = builtin_type (exp->gdbarch)->builtin_int;
9285       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9286         return value_zero (type, not_lval);
9287       else
9288         return value_pos_atr (type, arg1);
9289
9290     case OP_ATR_SIZE:
9291       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9292       type = value_type (arg1);
9293
9294       /* If the argument is a reference, then dereference its type, since
9295          the user is really asking for the size of the actual object,
9296          not the size of the pointer.  */
9297       if (TYPE_CODE (type) == TYPE_CODE_REF)
9298         type = TYPE_TARGET_TYPE (type);
9299
9300       if (noside == EVAL_SKIP)
9301         goto nosideret;
9302       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9303         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
9304       else
9305         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
9306                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
9307
9308     case OP_ATR_VAL:
9309       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9310       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9311       type = exp->elts[pc + 2].type;
9312       if (noside == EVAL_SKIP)
9313         goto nosideret;
9314       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9315         return value_zero (type, not_lval);
9316       else
9317         return value_val_atr (type, arg1);
9318
9319     case BINOP_EXP:
9320       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9321       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9322       if (noside == EVAL_SKIP)
9323         goto nosideret;
9324       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9325         return value_zero (value_type (arg1), not_lval);
9326       else
9327         {
9328           /* For integer exponentiation operations,
9329              only promote the first argument.  */
9330           if (is_integral_type (value_type (arg2)))
9331             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9332           else
9333             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9334
9335           return value_binop (arg1, arg2, op);
9336         }
9337
9338     case UNOP_PLUS:
9339       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9340       if (noside == EVAL_SKIP)
9341         goto nosideret;
9342       else
9343         return arg1;
9344
9345     case UNOP_ABS:
9346       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9347       if (noside == EVAL_SKIP)
9348         goto nosideret;
9349       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9350       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9351         return value_neg (arg1);
9352       else
9353         return arg1;
9354
9355     case UNOP_IND:
9356       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9357       if (noside == EVAL_SKIP)
9358         goto nosideret;
9359       type = ada_check_typedef (value_type (arg1));
9360       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9361         {
9362           if (ada_is_array_descriptor_type (type))
9363             /* GDB allows dereferencing GNAT array descriptors.  */
9364             {
9365               struct type *arrType = ada_type_of_array (arg1, 0);
9366               if (arrType == NULL)
9367                 error (_("Attempt to dereference null array pointer."));
9368               return value_at_lazy (arrType, 0);
9369             }
9370           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9371                    || TYPE_CODE (type) == TYPE_CODE_REF
9372                    /* In C you can dereference an array to get the 1st elt.  */
9373                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9374             {
9375               type = to_static_fixed_type
9376                 (ada_aligned_type
9377                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9378               check_size (type);
9379               return value_zero (type, lval_memory);
9380             }
9381           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9382             {
9383               /* GDB allows dereferencing an int.  */
9384               if (expect_type == NULL)
9385                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9386                                    lval_memory);
9387               else
9388                 {
9389                   expect_type = 
9390                     to_static_fixed_type (ada_aligned_type (expect_type));
9391                   return value_zero (expect_type, lval_memory);
9392                 }
9393             }
9394           else
9395             error (_("Attempt to take contents of a non-pointer value."));
9396         }
9397       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9398       type = ada_check_typedef (value_type (arg1));
9399
9400       if (TYPE_CODE (type) == TYPE_CODE_INT)
9401           /* GDB allows dereferencing an int.  If we were given
9402              the expect_type, then use that as the target type.
9403              Otherwise, assume that the target type is an int.  */
9404         {
9405           if (expect_type != NULL)
9406             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9407                                               arg1));
9408           else
9409             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9410                                   (CORE_ADDR) value_as_address (arg1));
9411         }
9412
9413       if (ada_is_array_descriptor_type (type))
9414         /* GDB allows dereferencing GNAT array descriptors.  */
9415         return ada_coerce_to_simple_array (arg1);
9416       else
9417         return ada_value_ind (arg1);
9418
9419     case STRUCTOP_STRUCT:
9420       tem = longest_to_int (exp->elts[pc + 1].longconst);
9421       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9422       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9423       if (noside == EVAL_SKIP)
9424         goto nosideret;
9425       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9426         {
9427           struct type *type1 = value_type (arg1);
9428           if (ada_is_tagged_type (type1, 1))
9429             {
9430               type = ada_lookup_struct_elt_type (type1,
9431                                                  &exp->elts[pc + 2].string,
9432                                                  1, 1, NULL);
9433               if (type == NULL)
9434                 /* In this case, we assume that the field COULD exist
9435                    in some extension of the type.  Return an object of 
9436                    "type" void, which will match any formal 
9437                    (see ada_type_match). */
9438                 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
9439                                    lval_memory);
9440             }
9441           else
9442             type =
9443               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9444                                           0, NULL);
9445
9446           return value_zero (ada_aligned_type (type), lval_memory);
9447         }
9448       else
9449         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9450         arg1 = unwrap_value (arg1);
9451         return ada_to_fixed_value (arg1);
9452
9453     case OP_TYPE:
9454       /* The value is not supposed to be used.  This is here to make it
9455          easier to accommodate expressions that contain types.  */
9456       (*pos) += 2;
9457       if (noside == EVAL_SKIP)
9458         goto nosideret;
9459       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9460         return allocate_value (exp->elts[pc + 1].type);
9461       else
9462         error (_("Attempt to use a type name as an expression"));
9463
9464     case OP_AGGREGATE:
9465     case OP_CHOICES:
9466     case OP_OTHERS:
9467     case OP_DISCRETE_RANGE:
9468     case OP_POSITIONAL:
9469     case OP_NAME:
9470       if (noside == EVAL_NORMAL)
9471         switch (op) 
9472           {
9473           case OP_NAME:
9474             error (_("Undefined name, ambiguous name, or renaming used in "
9475                      "component association: %s."), &exp->elts[pc+2].string);
9476           case OP_AGGREGATE:
9477             error (_("Aggregates only allowed on the right of an assignment"));
9478           default:
9479             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9480           }
9481
9482       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9483       *pos += oplen - 1;
9484       for (tem = 0; tem < nargs; tem += 1) 
9485         ada_evaluate_subexp (NULL, exp, pos, noside);
9486       goto nosideret;
9487     }
9488
9489 nosideret:
9490   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
9491 }
9492 \f
9493
9494                                 /* Fixed point */
9495
9496 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9497    type name that encodes the 'small and 'delta information.
9498    Otherwise, return NULL.  */
9499
9500 static const char *
9501 fixed_type_info (struct type *type)
9502 {
9503   const char *name = ada_type_name (type);
9504   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9505
9506   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9507     {
9508       const char *tail = strstr (name, "___XF_");
9509       if (tail == NULL)
9510         return NULL;
9511       else
9512         return tail + 5;
9513     }
9514   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9515     return fixed_type_info (TYPE_TARGET_TYPE (type));
9516   else
9517     return NULL;
9518 }
9519
9520 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9521
9522 int
9523 ada_is_fixed_point_type (struct type *type)
9524 {
9525   return fixed_type_info (type) != NULL;
9526 }
9527
9528 /* Return non-zero iff TYPE represents a System.Address type.  */
9529
9530 int
9531 ada_is_system_address_type (struct type *type)
9532 {
9533   return (TYPE_NAME (type)
9534           && strcmp (TYPE_NAME (type), "system__address") == 0);
9535 }
9536
9537 /* Assuming that TYPE is the representation of an Ada fixed-point
9538    type, return its delta, or -1 if the type is malformed and the
9539    delta cannot be determined.  */
9540
9541 DOUBLEST
9542 ada_delta (struct type *type)
9543 {
9544   const char *encoding = fixed_type_info (type);
9545   DOUBLEST num, den;
9546
9547   /* Strictly speaking, num and den are encoded as integer.  However,
9548      they may not fit into a long, and they will have to be converted
9549      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9550   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9551               &num, &den) < 2)
9552     return -1.0;
9553   else
9554     return num / den;
9555 }
9556
9557 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9558    factor ('SMALL value) associated with the type.  */
9559
9560 static DOUBLEST
9561 scaling_factor (struct type *type)
9562 {
9563   const char *encoding = fixed_type_info (type);
9564   DOUBLEST num0, den0, num1, den1;
9565   int n;
9566
9567   /* Strictly speaking, num's and den's are encoded as integer.  However,
9568      they may not fit into a long, and they will have to be converted
9569      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9570   n = sscanf (encoding,
9571               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
9572               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9573               &num0, &den0, &num1, &den1);
9574
9575   if (n < 2)
9576     return 1.0;
9577   else if (n == 4)
9578     return num1 / den1;
9579   else
9580     return num0 / den0;
9581 }
9582
9583
9584 /* Assuming that X is the representation of a value of fixed-point
9585    type TYPE, return its floating-point equivalent.  */
9586
9587 DOUBLEST
9588 ada_fixed_to_float (struct type *type, LONGEST x)
9589 {
9590   return (DOUBLEST) x *scaling_factor (type);
9591 }
9592
9593 /* The representation of a fixed-point value of type TYPE
9594    corresponding to the value X.  */
9595
9596 LONGEST
9597 ada_float_to_fixed (struct type *type, DOUBLEST x)
9598 {
9599   return (LONGEST) (x / scaling_factor (type) + 0.5);
9600 }
9601
9602 \f
9603
9604                                 /* Range types */
9605
9606 /* Scan STR beginning at position K for a discriminant name, and
9607    return the value of that discriminant field of DVAL in *PX.  If
9608    PNEW_K is not null, put the position of the character beyond the
9609    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9610    not alter *PX and *PNEW_K if unsuccessful.  */
9611
9612 static int
9613 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9614                     int *pnew_k)
9615 {
9616   static char *bound_buffer = NULL;
9617   static size_t bound_buffer_len = 0;
9618   char *bound;
9619   char *pend;
9620   struct value *bound_val;
9621
9622   if (dval == NULL || str == NULL || str[k] == '\0')
9623     return 0;
9624
9625   pend = strstr (str + k, "__");
9626   if (pend == NULL)
9627     {
9628       bound = str + k;
9629       k += strlen (bound);
9630     }
9631   else
9632     {
9633       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9634       bound = bound_buffer;
9635       strncpy (bound_buffer, str + k, pend - (str + k));
9636       bound[pend - (str + k)] = '\0';
9637       k = pend - str;
9638     }
9639
9640   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9641   if (bound_val == NULL)
9642     return 0;
9643
9644   *px = value_as_long (bound_val);
9645   if (pnew_k != NULL)
9646     *pnew_k = k;
9647   return 1;
9648 }
9649
9650 /* Value of variable named NAME in the current environment.  If
9651    no such variable found, then if ERR_MSG is null, returns 0, and
9652    otherwise causes an error with message ERR_MSG.  */
9653
9654 static struct value *
9655 get_var_value (char *name, char *err_msg)
9656 {
9657   struct ada_symbol_info *syms;
9658   int nsyms;
9659
9660   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9661                                   &syms);
9662
9663   if (nsyms != 1)
9664     {
9665       if (err_msg == NULL)
9666         return 0;
9667       else
9668         error (("%s"), err_msg);
9669     }
9670
9671   return value_of_variable (syms[0].sym, syms[0].block);
9672 }
9673
9674 /* Value of integer variable named NAME in the current environment.  If
9675    no such variable found, returns 0, and sets *FLAG to 0.  If
9676    successful, sets *FLAG to 1.  */
9677
9678 LONGEST
9679 get_int_var_value (char *name, int *flag)
9680 {
9681   struct value *var_val = get_var_value (name, 0);
9682
9683   if (var_val == 0)
9684     {
9685       if (flag != NULL)
9686         *flag = 0;
9687       return 0;
9688     }
9689   else
9690     {
9691       if (flag != NULL)
9692         *flag = 1;
9693       return value_as_long (var_val);
9694     }
9695 }
9696
9697
9698 /* Return a range type whose base type is that of the range type named
9699    NAME in the current environment, and whose bounds are calculated
9700    from NAME according to the GNAT range encoding conventions.
9701    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
9702    corresponding range type from debug information; fall back to using it
9703    if symbol lookup fails.  If a new type must be created, allocate it
9704    like ORIG_TYPE was.  The bounds information, in general, is encoded
9705    in NAME, the base type given in the named range type.  */
9706
9707 static struct type *
9708 to_fixed_range_type (char *name, struct value *dval, struct type *orig_type)
9709 {
9710   struct type *raw_type = ada_find_any_type (name);
9711   struct type *base_type;
9712   char *subtype_info;
9713
9714   /* Fall back to the original type if symbol lookup failed.  */
9715   if (raw_type == NULL)
9716     raw_type = orig_type;
9717
9718   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9719     base_type = TYPE_TARGET_TYPE (raw_type);
9720   else
9721     base_type = raw_type;
9722
9723   subtype_info = strstr (name, "___XD");
9724   if (subtype_info == NULL)
9725     {
9726       LONGEST L = ada_discrete_type_low_bound (raw_type);
9727       LONGEST U = ada_discrete_type_high_bound (raw_type);
9728       if (L < INT_MIN || U > INT_MAX)
9729         return raw_type;
9730       else
9731         return create_range_type (alloc_type_copy (orig_type), raw_type,
9732                                   ada_discrete_type_low_bound (raw_type),
9733                                   ada_discrete_type_high_bound (raw_type));
9734     }
9735   else
9736     {
9737       static char *name_buf = NULL;
9738       static size_t name_len = 0;
9739       int prefix_len = subtype_info - name;
9740       LONGEST L, U;
9741       struct type *type;
9742       char *bounds_str;
9743       int n;
9744
9745       GROW_VECT (name_buf, name_len, prefix_len + 5);
9746       strncpy (name_buf, name, prefix_len);
9747       name_buf[prefix_len] = '\0';
9748
9749       subtype_info += 5;
9750       bounds_str = strchr (subtype_info, '_');
9751       n = 1;
9752
9753       if (*subtype_info == 'L')
9754         {
9755           if (!ada_scan_number (bounds_str, n, &L, &n)
9756               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9757             return raw_type;
9758           if (bounds_str[n] == '_')
9759             n += 2;
9760           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9761             n += 1;
9762           subtype_info += 1;
9763         }
9764       else
9765         {
9766           int ok;
9767           strcpy (name_buf + prefix_len, "___L");
9768           L = get_int_var_value (name_buf, &ok);
9769           if (!ok)
9770             {
9771               lim_warning (_("Unknown lower bound, using 1."));
9772               L = 1;
9773             }
9774         }
9775
9776       if (*subtype_info == 'U')
9777         {
9778           if (!ada_scan_number (bounds_str, n, &U, &n)
9779               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9780             return raw_type;
9781         }
9782       else
9783         {
9784           int ok;
9785           strcpy (name_buf + prefix_len, "___U");
9786           U = get_int_var_value (name_buf, &ok);
9787           if (!ok)
9788             {
9789               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9790               U = L;
9791             }
9792         }
9793
9794       type = create_range_type (alloc_type_copy (orig_type), base_type, L, U);
9795       TYPE_NAME (type) = name;
9796       return type;
9797     }
9798 }
9799
9800 /* True iff NAME is the name of a range type.  */
9801
9802 int
9803 ada_is_range_type_name (const char *name)
9804 {
9805   return (name != NULL && strstr (name, "___XD"));
9806 }
9807 \f
9808
9809                                 /* Modular types */
9810
9811 /* True iff TYPE is an Ada modular type.  */
9812
9813 int
9814 ada_is_modular_type (struct type *type)
9815 {
9816   struct type *subranged_type = base_type (type);
9817
9818   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9819           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9820           && TYPE_UNSIGNED (subranged_type));
9821 }
9822
9823 /* Try to determine the lower and upper bounds of the given modular type
9824    using the type name only.  Return non-zero and set L and U as the lower
9825    and upper bounds (respectively) if successful.  */
9826
9827 int
9828 ada_modulus_from_name (struct type *type, ULONGEST *modulus)
9829 {
9830   char *name = ada_type_name (type);
9831   char *suffix;
9832   int k;
9833   LONGEST U;
9834
9835   if (name == NULL)
9836     return 0;
9837
9838   /* Discrete type bounds are encoded using an __XD suffix.  In our case,
9839      we are looking for static bounds, which means an __XDLU suffix.
9840      Moreover, we know that the lower bound of modular types is always
9841      zero, so the actual suffix should start with "__XDLU_0__", and
9842      then be followed by the upper bound value.  */
9843   suffix = strstr (name, "__XDLU_0__");
9844   if (suffix == NULL)
9845     return 0;
9846   k = 10;
9847   if (!ada_scan_number (suffix, k, &U, NULL))
9848     return 0;
9849
9850   *modulus = (ULONGEST) U + 1;
9851   return 1;
9852 }
9853
9854 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9855
9856 ULONGEST
9857 ada_modulus (struct type *type)
9858 {
9859   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
9860 }
9861 \f
9862
9863 /* Ada exception catchpoint support:
9864    ---------------------------------
9865
9866    We support 3 kinds of exception catchpoints:
9867      . catchpoints on Ada exceptions
9868      . catchpoints on unhandled Ada exceptions
9869      . catchpoints on failed assertions
9870
9871    Exceptions raised during failed assertions, or unhandled exceptions
9872    could perfectly be caught with the general catchpoint on Ada exceptions.
9873    However, we can easily differentiate these two special cases, and having
9874    the option to distinguish these two cases from the rest can be useful
9875    to zero-in on certain situations.
9876
9877    Exception catchpoints are a specialized form of breakpoint,
9878    since they rely on inserting breakpoints inside known routines
9879    of the GNAT runtime.  The implementation therefore uses a standard
9880    breakpoint structure of the BP_BREAKPOINT type, but with its own set
9881    of breakpoint_ops.
9882
9883    Support in the runtime for exception catchpoints have been changed
9884    a few times already, and these changes affect the implementation
9885    of these catchpoints.  In order to be able to support several
9886    variants of the runtime, we use a sniffer that will determine
9887    the runtime variant used by the program being debugged.
9888
9889    At this time, we do not support the use of conditions on Ada exception
9890    catchpoints.  The COND and COND_STRING fields are therefore set
9891    to NULL (most of the time, see below).
9892    
9893    Conditions where EXP_STRING, COND, and COND_STRING are used:
9894
9895      When a user specifies the name of a specific exception in the case
9896      of catchpoints on Ada exceptions, we store the name of that exception
9897      in the EXP_STRING.  We then translate this request into an actual
9898      condition stored in COND_STRING, and then parse it into an expression
9899      stored in COND.  */
9900
9901 /* The different types of catchpoints that we introduced for catching
9902    Ada exceptions.  */
9903
9904 enum exception_catchpoint_kind
9905 {
9906   ex_catch_exception,
9907   ex_catch_exception_unhandled,
9908   ex_catch_assert
9909 };
9910
9911 /* Ada's standard exceptions.  */
9912
9913 static char *standard_exc[] = {
9914   "constraint_error",
9915   "program_error",
9916   "storage_error",
9917   "tasking_error"
9918 };
9919
9920 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9921
9922 /* A structure that describes how to support exception catchpoints
9923    for a given executable.  */
9924
9925 struct exception_support_info
9926 {
9927    /* The name of the symbol to break on in order to insert
9928       a catchpoint on exceptions.  */
9929    const char *catch_exception_sym;
9930
9931    /* The name of the symbol to break on in order to insert
9932       a catchpoint on unhandled exceptions.  */
9933    const char *catch_exception_unhandled_sym;
9934
9935    /* The name of the symbol to break on in order to insert
9936       a catchpoint on failed assertions.  */
9937    const char *catch_assert_sym;
9938
9939    /* Assuming that the inferior just triggered an unhandled exception
9940       catchpoint, this function is responsible for returning the address
9941       in inferior memory where the name of that exception is stored.
9942       Return zero if the address could not be computed.  */
9943    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9944 };
9945
9946 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9947 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9948
9949 /* The following exception support info structure describes how to
9950    implement exception catchpoints with the latest version of the
9951    Ada runtime (as of 2007-03-06).  */
9952
9953 static const struct exception_support_info default_exception_support_info =
9954 {
9955   "__gnat_debug_raise_exception", /* catch_exception_sym */
9956   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9957   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9958   ada_unhandled_exception_name_addr
9959 };
9960
9961 /* The following exception support info structure describes how to
9962    implement exception catchpoints with a slightly older version
9963    of the Ada runtime.  */
9964
9965 static const struct exception_support_info exception_support_info_fallback =
9966 {
9967   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9968   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9969   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
9970   ada_unhandled_exception_name_addr_from_raise
9971 };
9972
9973 /* For each executable, we sniff which exception info structure to use
9974    and cache it in the following global variable.  */
9975
9976 static const struct exception_support_info *exception_info = NULL;
9977
9978 /* Inspect the Ada runtime and determine which exception info structure
9979    should be used to provide support for exception catchpoints.
9980
9981    This function will always set exception_info, or raise an error.  */
9982
9983 static void
9984 ada_exception_support_info_sniffer (void)
9985 {
9986   struct symbol *sym;
9987
9988   /* If the exception info is already known, then no need to recompute it.  */
9989   if (exception_info != NULL)
9990     return;
9991
9992   /* Check the latest (default) exception support info.  */
9993   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
9994                          NULL, VAR_DOMAIN);
9995   if (sym != NULL)
9996     {
9997       exception_info = &default_exception_support_info;
9998       return;
9999     }
10000
10001   /* Try our fallback exception suport info.  */
10002   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10003                          NULL, VAR_DOMAIN);
10004   if (sym != NULL)
10005     {
10006       exception_info = &exception_support_info_fallback;
10007       return;
10008     }
10009
10010   /* Sometimes, it is normal for us to not be able to find the routine
10011      we are looking for.  This happens when the program is linked with
10012      the shared version of the GNAT runtime, and the program has not been
10013      started yet.  Inform the user of these two possible causes if
10014      applicable.  */
10015
10016   if (ada_update_initial_language (language_unknown) != language_ada)
10017     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
10018
10019   /* If the symbol does not exist, then check that the program is
10020      already started, to make sure that shared libraries have been
10021      loaded.  If it is not started, this may mean that the symbol is
10022      in a shared library.  */
10023
10024   if (ptid_get_pid (inferior_ptid) == 0)
10025     error (_("Unable to insert catchpoint. Try to start the program first."));
10026
10027   /* At this point, we know that we are debugging an Ada program and
10028      that the inferior has been started, but we still are not able to
10029      find the run-time symbols. That can mean that we are in
10030      configurable run time mode, or that a-except as been optimized
10031      out by the linker...  In any case, at this point it is not worth
10032      supporting this feature.  */
10033
10034   error (_("Cannot insert catchpoints in this configuration."));
10035 }
10036
10037 /* An observer of "executable_changed" events.
10038    Its role is to clear certain cached values that need to be recomputed
10039    each time a new executable is loaded by GDB.  */
10040
10041 static void
10042 ada_executable_changed_observer (void)
10043 {
10044   /* If the executable changed, then it is possible that the Ada runtime
10045      is different.  So we need to invalidate the exception support info
10046      cache.  */
10047   exception_info = NULL;
10048 }
10049
10050 /* True iff FRAME is very likely to be that of a function that is
10051    part of the runtime system.  This is all very heuristic, but is
10052    intended to be used as advice as to what frames are uninteresting
10053    to most users.  */
10054
10055 static int
10056 is_known_support_routine (struct frame_info *frame)
10057 {
10058   struct symtab_and_line sal;
10059   char *func_name;
10060   enum language func_lang;
10061   int i;
10062
10063   /* If this code does not have any debugging information (no symtab),
10064      This cannot be any user code.  */
10065
10066   find_frame_sal (frame, &sal);
10067   if (sal.symtab == NULL)
10068     return 1;
10069
10070   /* If there is a symtab, but the associated source file cannot be
10071      located, then assume this is not user code:  Selecting a frame
10072      for which we cannot display the code would not be very helpful
10073      for the user.  This should also take care of case such as VxWorks
10074      where the kernel has some debugging info provided for a few units.  */
10075
10076   if (symtab_to_fullname (sal.symtab) == NULL)
10077     return 1;
10078
10079   /* Check the unit filename againt the Ada runtime file naming.
10080      We also check the name of the objfile against the name of some
10081      known system libraries that sometimes come with debugging info
10082      too.  */
10083
10084   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10085     {
10086       re_comp (known_runtime_file_name_patterns[i]);
10087       if (re_exec (sal.symtab->filename))
10088         return 1;
10089       if (sal.symtab->objfile != NULL
10090           && re_exec (sal.symtab->objfile->name))
10091         return 1;
10092     }
10093
10094   /* Check whether the function is a GNAT-generated entity.  */
10095
10096   find_frame_funname (frame, &func_name, &func_lang);
10097   if (func_name == NULL)
10098     return 1;
10099
10100   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10101     {
10102       re_comp (known_auxiliary_function_name_patterns[i]);
10103       if (re_exec (func_name))
10104         return 1;
10105     }
10106
10107   return 0;
10108 }
10109
10110 /* Find the first frame that contains debugging information and that is not
10111    part of the Ada run-time, starting from FI and moving upward.  */
10112
10113 void
10114 ada_find_printable_frame (struct frame_info *fi)
10115 {
10116   for (; fi != NULL; fi = get_prev_frame (fi))
10117     {
10118       if (!is_known_support_routine (fi))
10119         {
10120           select_frame (fi);
10121           break;
10122         }
10123     }
10124
10125 }
10126
10127 /* Assuming that the inferior just triggered an unhandled exception
10128    catchpoint, return the address in inferior memory where the name
10129    of the exception is stored.
10130    
10131    Return zero if the address could not be computed.  */
10132
10133 static CORE_ADDR
10134 ada_unhandled_exception_name_addr (void)
10135 {
10136   return parse_and_eval_address ("e.full_name");
10137 }
10138
10139 /* Same as ada_unhandled_exception_name_addr, except that this function
10140    should be used when the inferior uses an older version of the runtime,
10141    where the exception name needs to be extracted from a specific frame
10142    several frames up in the callstack.  */
10143
10144 static CORE_ADDR
10145 ada_unhandled_exception_name_addr_from_raise (void)
10146 {
10147   int frame_level;
10148   struct frame_info *fi;
10149
10150   /* To determine the name of this exception, we need to select
10151      the frame corresponding to RAISE_SYM_NAME.  This frame is
10152      at least 3 levels up, so we simply skip the first 3 frames
10153      without checking the name of their associated function.  */
10154   fi = get_current_frame ();
10155   for (frame_level = 0; frame_level < 3; frame_level += 1)
10156     if (fi != NULL)
10157       fi = get_prev_frame (fi); 
10158
10159   while (fi != NULL)
10160     {
10161       char *func_name;
10162       enum language func_lang;
10163
10164       find_frame_funname (fi, &func_name, &func_lang);
10165       if (func_name != NULL
10166           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
10167         break; /* We found the frame we were looking for...  */
10168       fi = get_prev_frame (fi);
10169     }
10170
10171   if (fi == NULL)
10172     return 0;
10173
10174   select_frame (fi);
10175   return parse_and_eval_address ("id.full_name");
10176 }
10177
10178 /* Assuming the inferior just triggered an Ada exception catchpoint
10179    (of any type), return the address in inferior memory where the name
10180    of the exception is stored, if applicable.
10181
10182    Return zero if the address could not be computed, or if not relevant.  */
10183
10184 static CORE_ADDR
10185 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10186                            struct breakpoint *b)
10187 {
10188   switch (ex)
10189     {
10190       case ex_catch_exception:
10191         return (parse_and_eval_address ("e.full_name"));
10192         break;
10193
10194       case ex_catch_exception_unhandled:
10195         return exception_info->unhandled_exception_name_addr ();
10196         break;
10197       
10198       case ex_catch_assert:
10199         return 0;  /* Exception name is not relevant in this case.  */
10200         break;
10201
10202       default:
10203         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10204         break;
10205     }
10206
10207   return 0; /* Should never be reached.  */
10208 }
10209
10210 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10211    any error that ada_exception_name_addr_1 might cause to be thrown.
10212    When an error is intercepted, a warning with the error message is printed,
10213    and zero is returned.  */
10214
10215 static CORE_ADDR
10216 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10217                          struct breakpoint *b)
10218 {
10219   struct gdb_exception e;
10220   CORE_ADDR result = 0;
10221
10222   TRY_CATCH (e, RETURN_MASK_ERROR)
10223     {
10224       result = ada_exception_name_addr_1 (ex, b);
10225     }
10226
10227   if (e.reason < 0)
10228     {
10229       warning (_("failed to get exception name: %s"), e.message);
10230       return 0;
10231     }
10232
10233   return result;
10234 }
10235
10236 /* Implement the PRINT_IT method in the breakpoint_ops structure
10237    for all exception catchpoint kinds.  */
10238
10239 static enum print_stop_action
10240 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10241 {
10242   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10243   char exception_name[256];
10244
10245   if (addr != 0)
10246     {
10247       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10248       exception_name [sizeof (exception_name) - 1] = '\0';
10249     }
10250
10251   ada_find_printable_frame (get_current_frame ());
10252
10253   annotate_catchpoint (b->number);
10254   switch (ex)
10255     {
10256       case ex_catch_exception:
10257         if (addr != 0)
10258           printf_filtered (_("\nCatchpoint %d, %s at "),
10259                            b->number, exception_name);
10260         else
10261           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10262         break;
10263       case ex_catch_exception_unhandled:
10264         if (addr != 0)
10265           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10266                            b->number, exception_name);
10267         else
10268           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10269                            b->number);
10270         break;
10271       case ex_catch_assert:
10272         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10273                          b->number);
10274         break;
10275     }
10276
10277   return PRINT_SRC_AND_LOC;
10278 }
10279
10280 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10281    for all exception catchpoint kinds.  */
10282
10283 static void
10284 print_one_exception (enum exception_catchpoint_kind ex,
10285                      struct breakpoint *b, struct bp_location **last_loc)
10286
10287   struct value_print_options opts;
10288
10289   get_user_print_options (&opts);
10290   if (opts.addressprint)
10291     {
10292       annotate_field (4);
10293       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
10294     }
10295
10296   annotate_field (5);
10297   *last_loc = b->loc;
10298   switch (ex)
10299     {
10300       case ex_catch_exception:
10301         if (b->exp_string != NULL)
10302           {
10303             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10304             
10305             ui_out_field_string (uiout, "what", msg);
10306             xfree (msg);
10307           }
10308         else
10309           ui_out_field_string (uiout, "what", "all Ada exceptions");
10310         
10311         break;
10312
10313       case ex_catch_exception_unhandled:
10314         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10315         break;
10316       
10317       case ex_catch_assert:
10318         ui_out_field_string (uiout, "what", "failed Ada assertions");
10319         break;
10320
10321       default:
10322         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10323         break;
10324     }
10325 }
10326
10327 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10328    for all exception catchpoint kinds.  */
10329
10330 static void
10331 print_mention_exception (enum exception_catchpoint_kind ex,
10332                          struct breakpoint *b)
10333 {
10334   switch (ex)
10335     {
10336       case ex_catch_exception:
10337         if (b->exp_string != NULL)
10338           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10339                            b->number, b->exp_string);
10340         else
10341           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10342         
10343         break;
10344
10345       case ex_catch_exception_unhandled:
10346         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10347                          b->number);
10348         break;
10349       
10350       case ex_catch_assert:
10351         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10352         break;
10353
10354       default:
10355         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10356         break;
10357     }
10358 }
10359
10360 /* Implement the PRINT_RECREATE method in the breakpoint_ops structure
10361    for all exception catchpoint kinds.  */
10362
10363 static void
10364 print_recreate_exception (enum exception_catchpoint_kind ex,
10365                           struct breakpoint *b, struct ui_file *fp)
10366 {
10367   switch (ex)
10368     {
10369       case ex_catch_exception:
10370         fprintf_filtered (fp, "catch exception");
10371         if (b->exp_string != NULL)
10372           fprintf_filtered (fp, " %s", b->exp_string);
10373         break;
10374
10375       case ex_catch_exception_unhandled:
10376         fprintf_filtered (fp, "catch exception unhandled");
10377         break;
10378
10379       case ex_catch_assert:
10380         fprintf_filtered (fp, "catch assert");
10381         break;
10382
10383       default:
10384         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10385     }
10386 }
10387
10388 /* Virtual table for "catch exception" breakpoints.  */
10389
10390 static enum print_stop_action
10391 print_it_catch_exception (struct breakpoint *b)
10392 {
10393   return print_it_exception (ex_catch_exception, b);
10394 }
10395
10396 static void
10397 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
10398 {
10399   print_one_exception (ex_catch_exception, b, last_loc);
10400 }
10401
10402 static void
10403 print_mention_catch_exception (struct breakpoint *b)
10404 {
10405   print_mention_exception (ex_catch_exception, b);
10406 }
10407
10408 static void
10409 print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
10410 {
10411   print_recreate_exception (ex_catch_exception, b, fp);
10412 }
10413
10414 static struct breakpoint_ops catch_exception_breakpoint_ops =
10415 {
10416   NULL, /* insert */
10417   NULL, /* remove */
10418   NULL, /* breakpoint_hit */
10419   print_it_catch_exception,
10420   print_one_catch_exception,
10421   print_mention_catch_exception,
10422   print_recreate_catch_exception
10423 };
10424
10425 /* Virtual table for "catch exception unhandled" breakpoints.  */
10426
10427 static enum print_stop_action
10428 print_it_catch_exception_unhandled (struct breakpoint *b)
10429 {
10430   return print_it_exception (ex_catch_exception_unhandled, b);
10431 }
10432
10433 static void
10434 print_one_catch_exception_unhandled (struct breakpoint *b,
10435                                      struct bp_location **last_loc)
10436 {
10437   print_one_exception (ex_catch_exception_unhandled, b, last_loc);
10438 }
10439
10440 static void
10441 print_mention_catch_exception_unhandled (struct breakpoint *b)
10442 {
10443   print_mention_exception (ex_catch_exception_unhandled, b);
10444 }
10445
10446 static void
10447 print_recreate_catch_exception_unhandled (struct breakpoint *b,
10448                                           struct ui_file *fp)
10449 {
10450   print_recreate_exception (ex_catch_exception_unhandled, b, fp);
10451 }
10452
10453 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10454   NULL, /* insert */
10455   NULL, /* remove */
10456   NULL, /* breakpoint_hit */
10457   print_it_catch_exception_unhandled,
10458   print_one_catch_exception_unhandled,
10459   print_mention_catch_exception_unhandled,
10460   print_recreate_catch_exception_unhandled
10461 };
10462
10463 /* Virtual table for "catch assert" breakpoints.  */
10464
10465 static enum print_stop_action
10466 print_it_catch_assert (struct breakpoint *b)
10467 {
10468   return print_it_exception (ex_catch_assert, b);
10469 }
10470
10471 static void
10472 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
10473 {
10474   print_one_exception (ex_catch_assert, b, last_loc);
10475 }
10476
10477 static void
10478 print_mention_catch_assert (struct breakpoint *b)
10479 {
10480   print_mention_exception (ex_catch_assert, b);
10481 }
10482
10483 static void
10484 print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
10485 {
10486   print_recreate_exception (ex_catch_assert, b, fp);
10487 }
10488
10489 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10490   NULL, /* insert */
10491   NULL, /* remove */
10492   NULL, /* breakpoint_hit */
10493   print_it_catch_assert,
10494   print_one_catch_assert,
10495   print_mention_catch_assert,
10496   print_recreate_catch_assert
10497 };
10498
10499 /* Return non-zero if B is an Ada exception catchpoint.  */
10500
10501 int
10502 ada_exception_catchpoint_p (struct breakpoint *b)
10503 {
10504   return (b->ops == &catch_exception_breakpoint_ops
10505           || b->ops == &catch_exception_unhandled_breakpoint_ops
10506           || b->ops == &catch_assert_breakpoint_ops);
10507 }
10508
10509 /* Return a newly allocated copy of the first space-separated token
10510    in ARGSP, and then adjust ARGSP to point immediately after that
10511    token.
10512
10513    Return NULL if ARGPS does not contain any more tokens.  */
10514
10515 static char *
10516 ada_get_next_arg (char **argsp)
10517 {
10518   char *args = *argsp;
10519   char *end;
10520   char *result;
10521
10522   /* Skip any leading white space.  */
10523
10524   while (isspace (*args))
10525     args++;
10526
10527   if (args[0] == '\0')
10528     return NULL; /* No more arguments.  */
10529   
10530   /* Find the end of the current argument.  */
10531
10532   end = args;
10533   while (*end != '\0' && !isspace (*end))
10534     end++;
10535
10536   /* Adjust ARGSP to point to the start of the next argument.  */
10537
10538   *argsp = end;
10539
10540   /* Make a copy of the current argument and return it.  */
10541
10542   result = xmalloc (end - args + 1);
10543   strncpy (result, args, end - args);
10544   result[end - args] = '\0';
10545   
10546   return result;
10547 }
10548
10549 /* Split the arguments specified in a "catch exception" command.  
10550    Set EX to the appropriate catchpoint type.
10551    Set EXP_STRING to the name of the specific exception if
10552    specified by the user.  */
10553
10554 static void
10555 catch_ada_exception_command_split (char *args,
10556                                    enum exception_catchpoint_kind *ex,
10557                                    char **exp_string)
10558 {
10559   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10560   char *exception_name;
10561
10562   exception_name = ada_get_next_arg (&args);
10563   make_cleanup (xfree, exception_name);
10564
10565   /* Check that we do not have any more arguments.  Anything else
10566      is unexpected.  */
10567
10568   while (isspace (*args))
10569     args++;
10570
10571   if (args[0] != '\0')
10572     error (_("Junk at end of expression"));
10573
10574   discard_cleanups (old_chain);
10575
10576   if (exception_name == NULL)
10577     {
10578       /* Catch all exceptions.  */
10579       *ex = ex_catch_exception;
10580       *exp_string = NULL;
10581     }
10582   else if (strcmp (exception_name, "unhandled") == 0)
10583     {
10584       /* Catch unhandled exceptions.  */
10585       *ex = ex_catch_exception_unhandled;
10586       *exp_string = NULL;
10587     }
10588   else
10589     {
10590       /* Catch a specific exception.  */
10591       *ex = ex_catch_exception;
10592       *exp_string = exception_name;
10593     }
10594 }
10595
10596 /* Return the name of the symbol on which we should break in order to
10597    implement a catchpoint of the EX kind.  */
10598
10599 static const char *
10600 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10601 {
10602   gdb_assert (exception_info != NULL);
10603
10604   switch (ex)
10605     {
10606       case ex_catch_exception:
10607         return (exception_info->catch_exception_sym);
10608         break;
10609       case ex_catch_exception_unhandled:
10610         return (exception_info->catch_exception_unhandled_sym);
10611         break;
10612       case ex_catch_assert:
10613         return (exception_info->catch_assert_sym);
10614         break;
10615       default:
10616         internal_error (__FILE__, __LINE__,
10617                         _("unexpected catchpoint kind (%d)"), ex);
10618     }
10619 }
10620
10621 /* Return the breakpoint ops "virtual table" used for catchpoints
10622    of the EX kind.  */
10623
10624 static struct breakpoint_ops *
10625 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10626 {
10627   switch (ex)
10628     {
10629       case ex_catch_exception:
10630         return (&catch_exception_breakpoint_ops);
10631         break;
10632       case ex_catch_exception_unhandled:
10633         return (&catch_exception_unhandled_breakpoint_ops);
10634         break;
10635       case ex_catch_assert:
10636         return (&catch_assert_breakpoint_ops);
10637         break;
10638       default:
10639         internal_error (__FILE__, __LINE__,
10640                         _("unexpected catchpoint kind (%d)"), ex);
10641     }
10642 }
10643
10644 /* Return the condition that will be used to match the current exception
10645    being raised with the exception that the user wants to catch.  This
10646    assumes that this condition is used when the inferior just triggered
10647    an exception catchpoint.
10648    
10649    The string returned is a newly allocated string that needs to be
10650    deallocated later.  */
10651
10652 static char *
10653 ada_exception_catchpoint_cond_string (const char *exp_string)
10654 {
10655   int i;
10656
10657   /* The standard exceptions are a special case. They are defined in
10658      runtime units that have been compiled without debugging info; if
10659      EXP_STRING is the not-fully-qualified name of a standard
10660      exception (e.g. "constraint_error") then, during the evaluation
10661      of the condition expression, the symbol lookup on this name would
10662      *not* return this standard exception. The catchpoint condition
10663      may then be set only on user-defined exceptions which have the
10664      same not-fully-qualified name (e.g. my_package.constraint_error).
10665
10666      To avoid this unexcepted behavior, these standard exceptions are
10667      systematically prefixed by "standard". This means that "catch
10668      exception constraint_error" is rewritten into "catch exception
10669      standard.constraint_error".
10670
10671      If an exception named contraint_error is defined in another package of
10672      the inferior program, then the only way to specify this exception as a
10673      breakpoint condition is to use its fully-qualified named:
10674      e.g. my_package.constraint_error.  */
10675
10676   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10677     {
10678       if (strcmp (standard_exc [i], exp_string) == 0)
10679         {
10680           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10681                              exp_string);
10682         }
10683     }
10684   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10685 }
10686
10687 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10688
10689 static struct expression *
10690 ada_parse_catchpoint_condition (char *cond_string,
10691                                 struct symtab_and_line sal)
10692 {
10693   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10694 }
10695
10696 /* Return the symtab_and_line that should be used to insert an exception
10697    catchpoint of the TYPE kind.
10698
10699    EX_STRING should contain the name of a specific exception
10700    that the catchpoint should catch, or NULL otherwise.
10701
10702    The idea behind all the remaining parameters is that their names match
10703    the name of certain fields in the breakpoint structure that are used to
10704    handle exception catchpoints.  This function returns the value to which
10705    these fields should be set, depending on the type of catchpoint we need
10706    to create.
10707    
10708    If COND and COND_STRING are both non-NULL, any value they might
10709    hold will be free'ed, and then replaced by newly allocated ones.
10710    These parameters are left untouched otherwise.  */
10711
10712 static struct symtab_and_line
10713 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10714                    char **addr_string, char **cond_string,
10715                    struct expression **cond, struct breakpoint_ops **ops)
10716 {
10717   const char *sym_name;
10718   struct symbol *sym;
10719   struct symtab_and_line sal;
10720
10721   /* First, find out which exception support info to use.  */
10722   ada_exception_support_info_sniffer ();
10723
10724   /* Then lookup the function on which we will break in order to catch
10725      the Ada exceptions requested by the user.  */
10726
10727   sym_name = ada_exception_sym_name (ex);
10728   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10729
10730   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10731      that should be compiled with debugging information.  As a result, we
10732      expect to find that symbol in the symtabs.  If we don't find it, then
10733      the target most likely does not support Ada exceptions, or we cannot
10734      insert exception breakpoints yet, because the GNAT runtime hasn't been
10735      loaded yet.  */
10736
10737   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10738      in such a way that no debugging information is produced for the symbol
10739      we are looking for.  In this case, we could search the minimal symbols
10740      as a fall-back mechanism.  This would still be operating in degraded
10741      mode, however, as we would still be missing the debugging information
10742      that is needed in order to extract the name of the exception being
10743      raised (this name is printed in the catchpoint message, and is also
10744      used when trying to catch a specific exception).  We do not handle
10745      this case for now.  */
10746
10747   if (sym == NULL)
10748     error (_("Unable to break on '%s' in this configuration."), sym_name);
10749
10750   /* Make sure that the symbol we found corresponds to a function.  */
10751   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10752     error (_("Symbol \"%s\" is not a function (class = %d)"),
10753            sym_name, SYMBOL_CLASS (sym));
10754
10755   sal = find_function_start_sal (sym, 1);
10756
10757   /* Set ADDR_STRING.  */
10758
10759   *addr_string = xstrdup (sym_name);
10760
10761   /* Set the COND and COND_STRING (if not NULL).  */
10762
10763   if (cond_string != NULL && cond != NULL)
10764     {
10765       if (*cond_string != NULL)
10766         {
10767           xfree (*cond_string);
10768           *cond_string = NULL;
10769         }
10770       if (*cond != NULL)
10771         {
10772           xfree (*cond);
10773           *cond = NULL;
10774         }
10775       if (exp_string != NULL)
10776         {
10777           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10778           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10779         }
10780     }
10781
10782   /* Set OPS.  */
10783   *ops = ada_exception_breakpoint_ops (ex);
10784
10785   return sal;
10786 }
10787
10788 /* Parse the arguments (ARGS) of the "catch exception" command.
10789  
10790    Set TYPE to the appropriate exception catchpoint type.
10791    If the user asked the catchpoint to catch only a specific
10792    exception, then save the exception name in ADDR_STRING.
10793
10794    See ada_exception_sal for a description of all the remaining
10795    function arguments of this function.  */
10796
10797 struct symtab_and_line
10798 ada_decode_exception_location (char *args, char **addr_string,
10799                                char **exp_string, char **cond_string,
10800                                struct expression **cond,
10801                                struct breakpoint_ops **ops)
10802 {
10803   enum exception_catchpoint_kind ex;
10804
10805   catch_ada_exception_command_split (args, &ex, exp_string);
10806   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10807                             cond, ops);
10808 }
10809
10810 struct symtab_and_line
10811 ada_decode_assert_location (char *args, char **addr_string,
10812                             struct breakpoint_ops **ops)
10813 {
10814   /* Check that no argument where provided at the end of the command.  */
10815
10816   if (args != NULL)
10817     {
10818       while (isspace (*args))
10819         args++;
10820       if (*args != '\0')
10821         error (_("Junk at end of arguments."));
10822     }
10823
10824   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10825                             ops);
10826 }
10827
10828                                 /* Operators */
10829 /* Information about operators given special treatment in functions
10830    below.  */
10831 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10832
10833 #define ADA_OPERATORS \
10834     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10835     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10836     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10837     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10838     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10839     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10840     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10841     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10842     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10843     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10844     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10845     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10846     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10847     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10848     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10849     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10850     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10851     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10852     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10853
10854 static void
10855 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10856 {
10857   switch (exp->elts[pc - 1].opcode)
10858     {
10859     default:
10860       operator_length_standard (exp, pc, oplenp, argsp);
10861       break;
10862
10863 #define OP_DEFN(op, len, args, binop) \
10864     case op: *oplenp = len; *argsp = args; break;
10865       ADA_OPERATORS;
10866 #undef OP_DEFN
10867
10868     case OP_AGGREGATE:
10869       *oplenp = 3;
10870       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10871       break;
10872
10873     case OP_CHOICES:
10874       *oplenp = 3;
10875       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10876       break;
10877     }
10878 }
10879
10880 /* Implementation of the exp_descriptor method operator_check.  */
10881
10882 static int
10883 ada_operator_check (struct expression *exp, int pos,
10884                     int (*objfile_func) (struct objfile *objfile, void *data),
10885                     void *data)
10886 {
10887   const union exp_element *const elts = exp->elts;
10888   struct type *type = NULL;
10889
10890   switch (elts[pos].opcode)
10891     {
10892       case UNOP_IN_RANGE:
10893       case UNOP_QUAL:
10894         type = elts[pos + 1].type;
10895         break;
10896
10897       default:
10898         return operator_check_standard (exp, pos, objfile_func, data);
10899     }
10900
10901   /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL.  */
10902
10903   if (type && TYPE_OBJFILE (type)
10904       && (*objfile_func) (TYPE_OBJFILE (type), data))
10905     return 1;
10906
10907   return 0;
10908 }
10909
10910 static char *
10911 ada_op_name (enum exp_opcode opcode)
10912 {
10913   switch (opcode)
10914     {
10915     default:
10916       return op_name_standard (opcode);
10917
10918 #define OP_DEFN(op, len, args, binop) case op: return #op;
10919       ADA_OPERATORS;
10920 #undef OP_DEFN
10921
10922     case OP_AGGREGATE:
10923       return "OP_AGGREGATE";
10924     case OP_CHOICES:
10925       return "OP_CHOICES";
10926     case OP_NAME:
10927       return "OP_NAME";
10928     }
10929 }
10930
10931 /* As for operator_length, but assumes PC is pointing at the first
10932    element of the operator, and gives meaningful results only for the 
10933    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10934
10935 static void
10936 ada_forward_operator_length (struct expression *exp, int pc,
10937                              int *oplenp, int *argsp)
10938 {
10939   switch (exp->elts[pc].opcode)
10940     {
10941     default:
10942       *oplenp = *argsp = 0;
10943       break;
10944
10945 #define OP_DEFN(op, len, args, binop) \
10946     case op: *oplenp = len; *argsp = args; break;
10947       ADA_OPERATORS;
10948 #undef OP_DEFN
10949
10950     case OP_AGGREGATE:
10951       *oplenp = 3;
10952       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10953       break;
10954
10955     case OP_CHOICES:
10956       *oplenp = 3;
10957       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10958       break;
10959
10960     case OP_STRING:
10961     case OP_NAME:
10962       {
10963         int len = longest_to_int (exp->elts[pc + 1].longconst);
10964         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10965         *argsp = 0;
10966         break;
10967       }
10968     }
10969 }
10970
10971 static int
10972 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10973 {
10974   enum exp_opcode op = exp->elts[elt].opcode;
10975   int oplen, nargs;
10976   int pc = elt;
10977   int i;
10978
10979   ada_forward_operator_length (exp, elt, &oplen, &nargs);
10980
10981   switch (op)
10982     {
10983       /* Ada attributes ('Foo).  */
10984     case OP_ATR_FIRST:
10985     case OP_ATR_LAST:
10986     case OP_ATR_LENGTH:
10987     case OP_ATR_IMAGE:
10988     case OP_ATR_MAX:
10989     case OP_ATR_MIN:
10990     case OP_ATR_MODULUS:
10991     case OP_ATR_POS:
10992     case OP_ATR_SIZE:
10993     case OP_ATR_TAG:
10994     case OP_ATR_VAL:
10995       break;
10996
10997     case UNOP_IN_RANGE:
10998     case UNOP_QUAL:
10999       /* XXX: gdb_sprint_host_address, type_sprint */
11000       fprintf_filtered (stream, _("Type @"));
11001       gdb_print_host_address (exp->elts[pc + 1].type, stream);
11002       fprintf_filtered (stream, " (");
11003       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
11004       fprintf_filtered (stream, ")");
11005       break;
11006     case BINOP_IN_BOUNDS:
11007       fprintf_filtered (stream, " (%d)",
11008                         longest_to_int (exp->elts[pc + 2].longconst));
11009       break;
11010     case TERNOP_IN_RANGE:
11011       break;
11012
11013     case OP_AGGREGATE:
11014     case OP_OTHERS:
11015     case OP_DISCRETE_RANGE:
11016     case OP_POSITIONAL:
11017     case OP_CHOICES:
11018       break;
11019
11020     case OP_NAME:
11021     case OP_STRING:
11022       {
11023         char *name = &exp->elts[elt + 2].string;
11024         int len = longest_to_int (exp->elts[elt + 1].longconst);
11025         fprintf_filtered (stream, "Text: `%.*s'", len, name);
11026         break;
11027       }
11028
11029     default:
11030       return dump_subexp_body_standard (exp, stream, elt);
11031     }
11032
11033   elt += oplen;
11034   for (i = 0; i < nargs; i += 1)
11035     elt = dump_subexp (exp, stream, elt);
11036
11037   return elt;
11038 }
11039
11040 /* The Ada extension of print_subexp (q.v.).  */
11041
11042 static void
11043 ada_print_subexp (struct expression *exp, int *pos,
11044                   struct ui_file *stream, enum precedence prec)
11045 {
11046   int oplen, nargs, i;
11047   int pc = *pos;
11048   enum exp_opcode op = exp->elts[pc].opcode;
11049
11050   ada_forward_operator_length (exp, pc, &oplen, &nargs);
11051
11052   *pos += oplen;
11053   switch (op)
11054     {
11055     default:
11056       *pos -= oplen;
11057       print_subexp_standard (exp, pos, stream, prec);
11058       return;
11059
11060     case OP_VAR_VALUE:
11061       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11062       return;
11063
11064     case BINOP_IN_BOUNDS:
11065       /* XXX: sprint_subexp */
11066       print_subexp (exp, pos, stream, PREC_SUFFIX);
11067       fputs_filtered (" in ", stream);
11068       print_subexp (exp, pos, stream, PREC_SUFFIX);
11069       fputs_filtered ("'range", stream);
11070       if (exp->elts[pc + 1].longconst > 1)
11071         fprintf_filtered (stream, "(%ld)",
11072                           (long) exp->elts[pc + 1].longconst);
11073       return;
11074
11075     case TERNOP_IN_RANGE:
11076       if (prec >= PREC_EQUAL)
11077         fputs_filtered ("(", stream);
11078       /* XXX: sprint_subexp */
11079       print_subexp (exp, pos, stream, PREC_SUFFIX);
11080       fputs_filtered (" in ", stream);
11081       print_subexp (exp, pos, stream, PREC_EQUAL);
11082       fputs_filtered (" .. ", stream);
11083       print_subexp (exp, pos, stream, PREC_EQUAL);
11084       if (prec >= PREC_EQUAL)
11085         fputs_filtered (")", stream);
11086       return;
11087
11088     case OP_ATR_FIRST:
11089     case OP_ATR_LAST:
11090     case OP_ATR_LENGTH:
11091     case OP_ATR_IMAGE:
11092     case OP_ATR_MAX:
11093     case OP_ATR_MIN:
11094     case OP_ATR_MODULUS:
11095     case OP_ATR_POS:
11096     case OP_ATR_SIZE:
11097     case OP_ATR_TAG:
11098     case OP_ATR_VAL:
11099       if (exp->elts[*pos].opcode == OP_TYPE)
11100         {
11101           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11102             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11103           *pos += 3;
11104         }
11105       else
11106         print_subexp (exp, pos, stream, PREC_SUFFIX);
11107       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11108       if (nargs > 1)
11109         {
11110           int tem;
11111           for (tem = 1; tem < nargs; tem += 1)
11112             {
11113               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11114               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11115             }
11116           fputs_filtered (")", stream);
11117         }
11118       return;
11119
11120     case UNOP_QUAL:
11121       type_print (exp->elts[pc + 1].type, "", stream, 0);
11122       fputs_filtered ("'(", stream);
11123       print_subexp (exp, pos, stream, PREC_PREFIX);
11124       fputs_filtered (")", stream);
11125       return;
11126
11127     case UNOP_IN_RANGE:
11128       /* XXX: sprint_subexp */
11129       print_subexp (exp, pos, stream, PREC_SUFFIX);
11130       fputs_filtered (" in ", stream);
11131       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11132       return;
11133
11134     case OP_DISCRETE_RANGE:
11135       print_subexp (exp, pos, stream, PREC_SUFFIX);
11136       fputs_filtered ("..", stream);
11137       print_subexp (exp, pos, stream, PREC_SUFFIX);
11138       return;
11139
11140     case OP_OTHERS:
11141       fputs_filtered ("others => ", stream);
11142       print_subexp (exp, pos, stream, PREC_SUFFIX);
11143       return;
11144
11145     case OP_CHOICES:
11146       for (i = 0; i < nargs-1; i += 1)
11147         {
11148           if (i > 0)
11149             fputs_filtered ("|", stream);
11150           print_subexp (exp, pos, stream, PREC_SUFFIX);
11151         }
11152       fputs_filtered (" => ", stream);
11153       print_subexp (exp, pos, stream, PREC_SUFFIX);
11154       return;
11155       
11156     case OP_POSITIONAL:
11157       print_subexp (exp, pos, stream, PREC_SUFFIX);
11158       return;
11159
11160     case OP_AGGREGATE:
11161       fputs_filtered ("(", stream);
11162       for (i = 0; i < nargs; i += 1)
11163         {
11164           if (i > 0)
11165             fputs_filtered (", ", stream);
11166           print_subexp (exp, pos, stream, PREC_SUFFIX);
11167         }
11168       fputs_filtered (")", stream);
11169       return;
11170     }
11171 }
11172
11173 /* Table mapping opcodes into strings for printing operators
11174    and precedences of the operators.  */
11175
11176 static const struct op_print ada_op_print_tab[] = {
11177   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11178   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11179   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11180   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11181   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11182   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11183   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11184   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11185   {"<=", BINOP_LEQ, PREC_ORDER, 0},
11186   {">=", BINOP_GEQ, PREC_ORDER, 0},
11187   {">", BINOP_GTR, PREC_ORDER, 0},
11188   {"<", BINOP_LESS, PREC_ORDER, 0},
11189   {">>", BINOP_RSH, PREC_SHIFT, 0},
11190   {"<<", BINOP_LSH, PREC_SHIFT, 0},
11191   {"+", BINOP_ADD, PREC_ADD, 0},
11192   {"-", BINOP_SUB, PREC_ADD, 0},
11193   {"&", BINOP_CONCAT, PREC_ADD, 0},
11194   {"*", BINOP_MUL, PREC_MUL, 0},
11195   {"/", BINOP_DIV, PREC_MUL, 0},
11196   {"rem", BINOP_REM, PREC_MUL, 0},
11197   {"mod", BINOP_MOD, PREC_MUL, 0},
11198   {"**", BINOP_EXP, PREC_REPEAT, 0},
11199   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11200   {"-", UNOP_NEG, PREC_PREFIX, 0},
11201   {"+", UNOP_PLUS, PREC_PREFIX, 0},
11202   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11203   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11204   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
11205   {".all", UNOP_IND, PREC_SUFFIX, 1},
11206   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11207   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
11208   {NULL, 0, 0, 0}
11209 };
11210 \f
11211 enum ada_primitive_types {
11212   ada_primitive_type_int,
11213   ada_primitive_type_long,
11214   ada_primitive_type_short,
11215   ada_primitive_type_char,
11216   ada_primitive_type_float,
11217   ada_primitive_type_double,
11218   ada_primitive_type_void,
11219   ada_primitive_type_long_long,
11220   ada_primitive_type_long_double,
11221   ada_primitive_type_natural,
11222   ada_primitive_type_positive,
11223   ada_primitive_type_system_address,
11224   nr_ada_primitive_types
11225 };
11226
11227 static void
11228 ada_language_arch_info (struct gdbarch *gdbarch,
11229                         struct language_arch_info *lai)
11230 {
11231   const struct builtin_type *builtin = builtin_type (gdbarch);
11232   lai->primitive_type_vector
11233     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
11234                               struct type *);
11235
11236   lai->primitive_type_vector [ada_primitive_type_int]
11237     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11238                          0, "integer");
11239   lai->primitive_type_vector [ada_primitive_type_long]
11240     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
11241                          0, "long_integer");
11242   lai->primitive_type_vector [ada_primitive_type_short]
11243     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
11244                          0, "short_integer");
11245   lai->string_char_type
11246     = lai->primitive_type_vector [ada_primitive_type_char]
11247     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
11248   lai->primitive_type_vector [ada_primitive_type_float]
11249     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
11250                        "float", NULL);
11251   lai->primitive_type_vector [ada_primitive_type_double]
11252     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11253                        "long_float", NULL);
11254   lai->primitive_type_vector [ada_primitive_type_long_long]
11255     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
11256                          0, "long_long_integer");
11257   lai->primitive_type_vector [ada_primitive_type_long_double]
11258     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11259                        "long_long_float", NULL);
11260   lai->primitive_type_vector [ada_primitive_type_natural]
11261     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11262                          0, "natural");
11263   lai->primitive_type_vector [ada_primitive_type_positive]
11264     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11265                          0, "positive");
11266   lai->primitive_type_vector [ada_primitive_type_void]
11267     = builtin->builtin_void;
11268
11269   lai->primitive_type_vector [ada_primitive_type_system_address]
11270     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
11271   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11272     = "system__address";
11273
11274   lai->bool_type_symbol = NULL;
11275   lai->bool_type_default = builtin->builtin_bool;
11276 }
11277 \f
11278                                 /* Language vector */
11279
11280 /* Not really used, but needed in the ada_language_defn.  */
11281
11282 static void
11283 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
11284 {
11285   ada_emit_char (c, type, stream, quoter, 1);
11286 }
11287
11288 static int
11289 parse (void)
11290 {
11291   warnings_issued = 0;
11292   return ada_parse ();
11293 }
11294
11295 static const struct exp_descriptor ada_exp_descriptor = {
11296   ada_print_subexp,
11297   ada_operator_length,
11298   ada_operator_check,
11299   ada_op_name,
11300   ada_dump_subexp_body,
11301   ada_evaluate_subexp
11302 };
11303
11304 const struct language_defn ada_language_defn = {
11305   "ada",                        /* Language name */
11306   language_ada,
11307   range_check_off,
11308   type_check_off,
11309   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11310                                    that's not quite what this means.  */
11311   array_row_major,
11312   macro_expansion_no,
11313   &ada_exp_descriptor,
11314   parse,
11315   ada_error,
11316   resolve,
11317   ada_printchar,                /* Print a character constant */
11318   ada_printstr,                 /* Function to print string constant */
11319   emit_char,                    /* Function to print single char (not used) */
11320   ada_print_type,               /* Print a type using appropriate syntax */
11321   ada_print_typedef,            /* Print a typedef using appropriate syntax */
11322   ada_val_print,                /* Print a value using appropriate syntax */
11323   ada_value_print,              /* Print a top-level value */
11324   NULL,                         /* Language specific skip_trampoline */
11325   NULL,                         /* name_of_this */
11326   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11327   basic_lookup_transparent_type,        /* lookup_transparent_type */
11328   ada_la_decode,                /* Language specific symbol demangler */
11329   NULL,                         /* Language specific class_name_from_physname */
11330   ada_op_print_tab,             /* expression operators for printing */
11331   0,                            /* c-style arrays */
11332   1,                            /* String lower bound */
11333   ada_get_gdb_completer_word_break_characters,
11334   ada_make_symbol_completion_list,
11335   ada_language_arch_info,
11336   ada_print_array_index,
11337   default_pass_by_reference,
11338   c_get_string,
11339   LANG_MAGIC
11340 };
11341
11342 /* Provide a prototype to silence -Wmissing-prototypes.  */
11343 extern initialize_file_ftype _initialize_ada_language;
11344
11345 /* Command-list for the "set/show ada" prefix command.  */
11346 static struct cmd_list_element *set_ada_list;
11347 static struct cmd_list_element *show_ada_list;
11348
11349 /* Implement the "set ada" prefix command.  */
11350
11351 static void
11352 set_ada_command (char *arg, int from_tty)
11353 {
11354   printf_unfiltered (_(\
11355 "\"set ada\" must be followed by the name of a setting.\n"));
11356   help_list (set_ada_list, "set ada ", -1, gdb_stdout);
11357 }
11358
11359 /* Implement the "show ada" prefix command.  */
11360
11361 static void
11362 show_ada_command (char *args, int from_tty)
11363 {
11364   cmd_show_list (show_ada_list, from_tty, "");
11365 }
11366
11367 void
11368 _initialize_ada_language (void)
11369 {
11370   add_language (&ada_language_defn);
11371
11372   add_prefix_cmd ("ada", no_class, set_ada_command,
11373                   _("Prefix command for changing Ada-specfic settings"),
11374                   &set_ada_list, "set ada ", 0, &setlist);
11375
11376   add_prefix_cmd ("ada", no_class, show_ada_command,
11377                   _("Generic command for showing Ada-specific settings."),
11378                   &show_ada_list, "show ada ", 0, &showlist);
11379
11380   add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
11381                            &trust_pad_over_xvs, _("\
11382 Enable or disable an optimization trusting PAD types over XVS types"), _("\
11383 Show whether an optimization trusting PAD types over XVS types is activated"),
11384                            _("\
11385 This is related to the encoding used by the GNAT compiler.  The debugger\n\
11386 should normally trust the contents of PAD types, but certain older versions\n\
11387 of GNAT have a bug that sometimes causes the information in the PAD type\n\
11388 to be incorrect.  Turning this setting \"off\" allows the debugger to\n\
11389 work around this bug.  It is always safe to turn this option \"off\", but\n\
11390 this incurs a slight performance penalty, so it is recommended to NOT change\n\
11391 this option to \"off\" unless necessary."),
11392                             NULL, NULL, &set_ada_list, &show_ada_list);
11393
11394   varsize_limit = 65536;
11395
11396   obstack_init (&symbol_list_obstack);
11397
11398   decoded_names_store = htab_create_alloc
11399     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11400      NULL, xcalloc, xfree);
11401
11402   observer_attach_executable_changed (ada_executable_changed_observer);
11403 }