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