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