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