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