OSDN Git Service

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