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