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