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