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