]> Git Repo - binutils.git/blob - gdb/ada-lang.c
* ada-lang.c (ada_index_type): Update comment.
[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 objfile *);
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, *index_type_desc, *index_type;
2459   LONGEST retval;
2460
2461   gdb_assert (which == 0 || which == 1);
2462
2463   if (ada_is_packed_array_type (arr_type))
2464     arr_type = decode_packed_array_type (arr_type);
2465
2466   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2467     return (LONGEST) - which;
2468
2469   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2470     type = TYPE_TARGET_TYPE (arr_type);
2471   else
2472     type = arr_type;
2473
2474   index_type_desc = ada_find_parallel_type (type, "___XA");
2475   if (index_type_desc != NULL)
2476     index_type = to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2477                                       NULL, TYPE_OBJFILE (arr_type));
2478   else
2479     {
2480       while (n > 1)
2481         {
2482           type = TYPE_TARGET_TYPE (type);
2483           n -= 1;
2484         }
2485
2486       index_type = TYPE_INDEX_TYPE (type);
2487     }
2488
2489   switch (TYPE_CODE (index_type))
2490     {
2491     case TYPE_CODE_RANGE:
2492       retval = which == 0 ? TYPE_LOW_BOUND (index_type)
2493                           : TYPE_HIGH_BOUND (index_type);
2494       break;
2495     case TYPE_CODE_ENUM:
2496       retval = which == 0 ? TYPE_FIELD_BITPOS (index_type, 0)
2497                           : TYPE_FIELD_BITPOS (index_type,
2498                                                TYPE_NFIELDS (index_type) - 1);
2499       break;
2500     default:
2501       internal_error (__FILE__, __LINE__, _("invalid type code of index type"));
2502     }
2503
2504   return retval;
2505 }
2506
2507 /* Given that arr is an array value, returns the lower bound of the
2508    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2509    WHICH is 1.  This routine will also work for arrays with bounds
2510    supplied by run-time quantities other than discriminants.  */
2511
2512 static LONGEST
2513 ada_array_bound (struct value *arr, int n, int which)
2514 {
2515   struct type *arr_type = value_type (arr);
2516
2517   if (ada_is_packed_array_type (arr_type))
2518     return ada_array_bound (decode_packed_array (arr), n, which);
2519   else if (ada_is_simple_array_type (arr_type))
2520     return ada_array_bound_from_type (arr_type, n, which);
2521   else
2522     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2523 }
2524
2525 /* Given that arr is an array value, returns the length of the
2526    nth index.  This routine will also work for arrays with bounds
2527    supplied by run-time quantities other than discriminants.
2528    Does not work for arrays indexed by enumeration types with representation
2529    clauses at the moment.  */
2530
2531 static LONGEST
2532 ada_array_length (struct value *arr, int n)
2533 {
2534   struct type *arr_type = ada_check_typedef (value_type (arr));
2535
2536   if (ada_is_packed_array_type (arr_type))
2537     return ada_array_length (decode_packed_array (arr), n);
2538
2539   if (ada_is_simple_array_type (arr_type))
2540     return (ada_array_bound_from_type (arr_type, n, 1)
2541             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2542   else
2543     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2544             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2545 }
2546
2547 /* An empty array whose type is that of ARR_TYPE (an array type),
2548    with bounds LOW to LOW-1.  */
2549
2550 static struct value *
2551 empty_array (struct type *arr_type, int low)
2552 {
2553   struct type *index_type =
2554     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2555                        low, low - 1);
2556   struct type *elt_type = ada_array_element_type (arr_type, 1);
2557   return allocate_value (create_array_type (NULL, elt_type, index_type));
2558 }
2559 \f
2560
2561                                 /* Name resolution */
2562
2563 /* The "decoded" name for the user-definable Ada operator corresponding
2564    to OP.  */
2565
2566 static const char *
2567 ada_decoded_op_name (enum exp_opcode op)
2568 {
2569   int i;
2570
2571   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2572     {
2573       if (ada_opname_table[i].op == op)
2574         return ada_opname_table[i].decoded;
2575     }
2576   error (_("Could not find operator name for opcode"));
2577 }
2578
2579
2580 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2581    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2582    undefined namespace) and converts operators that are
2583    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2584    non-null, it provides a preferred result type [at the moment, only
2585    type void has any effect---causing procedures to be preferred over
2586    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2587    return type is preferred.  May change (expand) *EXP.  */
2588
2589 static void
2590 resolve (struct expression **expp, int void_context_p)
2591 {
2592   int pc;
2593   pc = 0;
2594   resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2595 }
2596
2597 /* Resolve the operator of the subexpression beginning at
2598    position *POS of *EXPP.  "Resolving" consists of replacing
2599    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2600    with their resolutions, replacing built-in operators with
2601    function calls to user-defined operators, where appropriate, and,
2602    when DEPROCEDURE_P is non-zero, converting function-valued variables
2603    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2604    are as in ada_resolve, above.  */
2605
2606 static struct value *
2607 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2608                 struct type *context_type)
2609 {
2610   int pc = *pos;
2611   int i;
2612   struct expression *exp;       /* Convenience: == *expp.  */
2613   enum exp_opcode op = (*expp)->elts[pc].opcode;
2614   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2615   int nargs;                    /* Number of operands.  */
2616   int oplen;
2617
2618   argvec = NULL;
2619   nargs = 0;
2620   exp = *expp;
2621
2622   /* Pass one: resolve operands, saving their types and updating *pos,
2623      if needed.  */
2624   switch (op)
2625     {
2626     case OP_FUNCALL:
2627       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2628           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2629         *pos += 7;
2630       else
2631         {
2632           *pos += 3;
2633           resolve_subexp (expp, pos, 0, NULL);
2634         }
2635       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2636       break;
2637
2638     case UNOP_ADDR:
2639       *pos += 1;
2640       resolve_subexp (expp, pos, 0, NULL);
2641       break;
2642
2643     case UNOP_QUAL:
2644       *pos += 3;
2645       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
2646       break;
2647
2648     case OP_ATR_MODULUS:
2649     case OP_ATR_SIZE:
2650     case OP_ATR_TAG:
2651     case OP_ATR_FIRST:
2652     case OP_ATR_LAST:
2653     case OP_ATR_LENGTH:
2654     case OP_ATR_POS:
2655     case OP_ATR_VAL:
2656     case OP_ATR_MIN:
2657     case OP_ATR_MAX:
2658     case TERNOP_IN_RANGE:
2659     case BINOP_IN_BOUNDS:
2660     case UNOP_IN_RANGE:
2661     case OP_AGGREGATE:
2662     case OP_OTHERS:
2663     case OP_CHOICES:
2664     case OP_POSITIONAL:
2665     case OP_DISCRETE_RANGE:
2666     case OP_NAME:
2667       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2668       *pos += oplen;
2669       break;
2670
2671     case BINOP_ASSIGN:
2672       {
2673         struct value *arg1;
2674
2675         *pos += 1;
2676         arg1 = resolve_subexp (expp, pos, 0, NULL);
2677         if (arg1 == NULL)
2678           resolve_subexp (expp, pos, 1, NULL);
2679         else
2680           resolve_subexp (expp, pos, 1, value_type (arg1));
2681         break;
2682       }
2683
2684     case UNOP_CAST:
2685       *pos += 3;
2686       nargs = 1;
2687       break;
2688
2689     case BINOP_ADD:
2690     case BINOP_SUB:
2691     case BINOP_MUL:
2692     case BINOP_DIV:
2693     case BINOP_REM:
2694     case BINOP_MOD:
2695     case BINOP_EXP:
2696     case BINOP_CONCAT:
2697     case BINOP_LOGICAL_AND:
2698     case BINOP_LOGICAL_OR:
2699     case BINOP_BITWISE_AND:
2700     case BINOP_BITWISE_IOR:
2701     case BINOP_BITWISE_XOR:
2702
2703     case BINOP_EQUAL:
2704     case BINOP_NOTEQUAL:
2705     case BINOP_LESS:
2706     case BINOP_GTR:
2707     case BINOP_LEQ:
2708     case BINOP_GEQ:
2709
2710     case BINOP_REPEAT:
2711     case BINOP_SUBSCRIPT:
2712     case BINOP_COMMA:
2713       *pos += 1;
2714       nargs = 2;
2715       break;
2716
2717     case UNOP_NEG:
2718     case UNOP_PLUS:
2719     case UNOP_LOGICAL_NOT:
2720     case UNOP_ABS:
2721     case UNOP_IND:
2722       *pos += 1;
2723       nargs = 1;
2724       break;
2725
2726     case OP_LONG:
2727     case OP_DOUBLE:
2728     case OP_VAR_VALUE:
2729       *pos += 4;
2730       break;
2731
2732     case OP_TYPE:
2733     case OP_BOOL:
2734     case OP_LAST:
2735     case OP_INTERNALVAR:
2736       *pos += 3;
2737       break;
2738
2739     case UNOP_MEMVAL:
2740       *pos += 3;
2741       nargs = 1;
2742       break;
2743
2744     case OP_REGISTER:
2745       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2746       break;
2747
2748     case STRUCTOP_STRUCT:
2749       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2750       nargs = 1;
2751       break;
2752
2753     case TERNOP_SLICE:
2754       *pos += 1;
2755       nargs = 3;
2756       break;
2757
2758     case OP_STRING:
2759       break;
2760
2761     default:
2762       error (_("Unexpected operator during name resolution"));
2763     }
2764
2765   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2766   for (i = 0; i < nargs; i += 1)
2767     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2768   argvec[i] = NULL;
2769   exp = *expp;
2770
2771   /* Pass two: perform any resolution on principal operator.  */
2772   switch (op)
2773     {
2774     default:
2775       break;
2776
2777     case OP_VAR_VALUE:
2778       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2779         {
2780           struct ada_symbol_info *candidates;
2781           int n_candidates;
2782
2783           n_candidates =
2784             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2785                                     (exp->elts[pc + 2].symbol),
2786                                     exp->elts[pc + 1].block, VAR_DOMAIN,
2787                                     &candidates);
2788
2789           if (n_candidates > 1)
2790             {
2791               /* Types tend to get re-introduced locally, so if there
2792                  are any local symbols that are not types, first filter
2793                  out all types.  */
2794               int j;
2795               for (j = 0; j < n_candidates; j += 1)
2796                 switch (SYMBOL_CLASS (candidates[j].sym))
2797                   {
2798                   case LOC_REGISTER:
2799                   case LOC_ARG:
2800                   case LOC_REF_ARG:
2801                   case LOC_REGPARM_ADDR:
2802                   case LOC_LOCAL:
2803                   case LOC_COMPUTED:
2804                     goto FoundNonType;
2805                   default:
2806                     break;
2807                   }
2808             FoundNonType:
2809               if (j < n_candidates)
2810                 {
2811                   j = 0;
2812                   while (j < n_candidates)
2813                     {
2814                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2815                         {
2816                           candidates[j] = candidates[n_candidates - 1];
2817                           n_candidates -= 1;
2818                         }
2819                       else
2820                         j += 1;
2821                     }
2822                 }
2823             }
2824
2825           if (n_candidates == 0)
2826             error (_("No definition found for %s"),
2827                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2828           else if (n_candidates == 1)
2829             i = 0;
2830           else if (deprocedure_p
2831                    && !is_nonfunction (candidates, n_candidates))
2832             {
2833               i = ada_resolve_function
2834                 (candidates, n_candidates, NULL, 0,
2835                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2836                  context_type);
2837               if (i < 0)
2838                 error (_("Could not find a match for %s"),
2839                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2840             }
2841           else
2842             {
2843               printf_filtered (_("Multiple matches for %s\n"),
2844                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2845               user_select_syms (candidates, n_candidates, 1);
2846               i = 0;
2847             }
2848
2849           exp->elts[pc + 1].block = candidates[i].block;
2850           exp->elts[pc + 2].symbol = candidates[i].sym;
2851           if (innermost_block == NULL
2852               || contained_in (candidates[i].block, innermost_block))
2853             innermost_block = candidates[i].block;
2854         }
2855
2856       if (deprocedure_p
2857           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2858               == TYPE_CODE_FUNC))
2859         {
2860           replace_operator_with_call (expp, pc, 0, 0,
2861                                       exp->elts[pc + 2].symbol,
2862                                       exp->elts[pc + 1].block);
2863           exp = *expp;
2864         }
2865       break;
2866
2867     case OP_FUNCALL:
2868       {
2869         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2870             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2871           {
2872             struct ada_symbol_info *candidates;
2873             int n_candidates;
2874
2875             n_candidates =
2876               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2877                                       (exp->elts[pc + 5].symbol),
2878                                       exp->elts[pc + 4].block, VAR_DOMAIN,
2879                                       &candidates);
2880             if (n_candidates == 1)
2881               i = 0;
2882             else
2883               {
2884                 i = ada_resolve_function
2885                   (candidates, n_candidates,
2886                    argvec, nargs,
2887                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2888                    context_type);
2889                 if (i < 0)
2890                   error (_("Could not find a match for %s"),
2891                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2892               }
2893
2894             exp->elts[pc + 4].block = candidates[i].block;
2895             exp->elts[pc + 5].symbol = candidates[i].sym;
2896             if (innermost_block == NULL
2897                 || contained_in (candidates[i].block, innermost_block))
2898               innermost_block = candidates[i].block;
2899           }
2900       }
2901       break;
2902     case BINOP_ADD:
2903     case BINOP_SUB:
2904     case BINOP_MUL:
2905     case BINOP_DIV:
2906     case BINOP_REM:
2907     case BINOP_MOD:
2908     case BINOP_CONCAT:
2909     case BINOP_BITWISE_AND:
2910     case BINOP_BITWISE_IOR:
2911     case BINOP_BITWISE_XOR:
2912     case BINOP_EQUAL:
2913     case BINOP_NOTEQUAL:
2914     case BINOP_LESS:
2915     case BINOP_GTR:
2916     case BINOP_LEQ:
2917     case BINOP_GEQ:
2918     case BINOP_EXP:
2919     case UNOP_NEG:
2920     case UNOP_PLUS:
2921     case UNOP_LOGICAL_NOT:
2922     case UNOP_ABS:
2923       if (possible_user_operator_p (op, argvec))
2924         {
2925           struct ada_symbol_info *candidates;
2926           int n_candidates;
2927
2928           n_candidates =
2929             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
2930                                     (struct block *) NULL, VAR_DOMAIN,
2931                                     &candidates);
2932           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
2933                                     ada_decoded_op_name (op), NULL);
2934           if (i < 0)
2935             break;
2936
2937           replace_operator_with_call (expp, pc, nargs, 1,
2938                                       candidates[i].sym, candidates[i].block);
2939           exp = *expp;
2940         }
2941       break;
2942
2943     case OP_TYPE:
2944     case OP_REGISTER:
2945       return NULL;
2946     }
2947
2948   *pos = pc;
2949   return evaluate_subexp_type (exp, pos);
2950 }
2951
2952 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
2953    MAY_DEREF is non-zero, the formal may be a pointer and the actual
2954    a non-pointer.   A type of 'void' (which is never a valid expression type)
2955    by convention matches anything. */
2956 /* The term "match" here is rather loose.  The match is heuristic and
2957    liberal.  FIXME: TOO liberal, in fact.  */
2958
2959 static int
2960 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
2961 {
2962   ftype = ada_check_typedef (ftype);
2963   atype = ada_check_typedef (atype);
2964
2965   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2966     ftype = TYPE_TARGET_TYPE (ftype);
2967   if (TYPE_CODE (atype) == TYPE_CODE_REF)
2968     atype = TYPE_TARGET_TYPE (atype);
2969
2970   if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2971       || TYPE_CODE (atype) == TYPE_CODE_VOID)
2972     return 1;
2973
2974   switch (TYPE_CODE (ftype))
2975     {
2976     default:
2977       return 1;
2978     case TYPE_CODE_PTR:
2979       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2980         return ada_type_match (TYPE_TARGET_TYPE (ftype),
2981                                TYPE_TARGET_TYPE (atype), 0);
2982       else
2983         return (may_deref
2984                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2985     case TYPE_CODE_INT:
2986     case TYPE_CODE_ENUM:
2987     case TYPE_CODE_RANGE:
2988       switch (TYPE_CODE (atype))
2989         {
2990         case TYPE_CODE_INT:
2991         case TYPE_CODE_ENUM:
2992         case TYPE_CODE_RANGE:
2993           return 1;
2994         default:
2995           return 0;
2996         }
2997
2998     case TYPE_CODE_ARRAY:
2999       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3000               || ada_is_array_descriptor_type (atype));
3001
3002     case TYPE_CODE_STRUCT:
3003       if (ada_is_array_descriptor_type (ftype))
3004         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3005                 || ada_is_array_descriptor_type (atype));
3006       else
3007         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3008                 && !ada_is_array_descriptor_type (atype));
3009
3010     case TYPE_CODE_UNION:
3011     case TYPE_CODE_FLT:
3012       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3013     }
3014 }
3015
3016 /* Return non-zero if the formals of FUNC "sufficiently match" the
3017    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3018    may also be an enumeral, in which case it is treated as a 0-
3019    argument function.  */
3020
3021 static int
3022 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3023 {
3024   int i;
3025   struct type *func_type = SYMBOL_TYPE (func);
3026
3027   if (SYMBOL_CLASS (func) == LOC_CONST
3028       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3029     return (n_actuals == 0);
3030   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3031     return 0;
3032
3033   if (TYPE_NFIELDS (func_type) != n_actuals)
3034     return 0;
3035
3036   for (i = 0; i < n_actuals; i += 1)
3037     {
3038       if (actuals[i] == NULL)
3039         return 0;
3040       else
3041         {
3042           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3043           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3044
3045           if (!ada_type_match (ftype, atype, 1))
3046             return 0;
3047         }
3048     }
3049   return 1;
3050 }
3051
3052 /* False iff function type FUNC_TYPE definitely does not produce a value
3053    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3054    FUNC_TYPE is not a valid function type with a non-null return type
3055    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3056
3057 static int
3058 return_match (struct type *func_type, struct type *context_type)
3059 {
3060   struct type *return_type;
3061
3062   if (func_type == NULL)
3063     return 1;
3064
3065   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3066     return_type = base_type (TYPE_TARGET_TYPE (func_type));
3067   else
3068     return_type = base_type (func_type);
3069   if (return_type == NULL)
3070     return 1;
3071
3072   context_type = base_type (context_type);
3073
3074   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3075     return context_type == NULL || return_type == context_type;
3076   else if (context_type == NULL)
3077     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3078   else
3079     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3080 }
3081
3082
3083 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3084    function (if any) that matches the types of the NARGS arguments in
3085    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3086    that returns that type, then eliminate matches that don't.  If
3087    CONTEXT_TYPE is void and there is at least one match that does not
3088    return void, eliminate all matches that do.
3089
3090    Asks the user if there is more than one match remaining.  Returns -1
3091    if there is no such symbol or none is selected.  NAME is used
3092    solely for messages.  May re-arrange and modify SYMS in
3093    the process; the index returned is for the modified vector.  */
3094
3095 static int
3096 ada_resolve_function (struct ada_symbol_info syms[],
3097                       int nsyms, struct value **args, int nargs,
3098                       const char *name, struct type *context_type)
3099 {
3100   int k;
3101   int m;                        /* Number of hits */
3102   struct type *fallback;
3103   struct type *return_type;
3104
3105   return_type = context_type;
3106   if (context_type == NULL)
3107     fallback = builtin_type_void;
3108   else
3109     fallback = NULL;
3110
3111   m = 0;
3112   while (1)
3113     {
3114       for (k = 0; k < nsyms; k += 1)
3115         {
3116           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3117
3118           if (ada_args_match (syms[k].sym, args, nargs)
3119               && return_match (type, return_type))
3120             {
3121               syms[m] = syms[k];
3122               m += 1;
3123             }
3124         }
3125       if (m > 0 || return_type == fallback)
3126         break;
3127       else
3128         return_type = fallback;
3129     }
3130
3131   if (m == 0)
3132     return -1;
3133   else if (m > 1)
3134     {
3135       printf_filtered (_("Multiple matches for %s\n"), name);
3136       user_select_syms (syms, m, 1);
3137       return 0;
3138     }
3139   return 0;
3140 }
3141
3142 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3143    in a listing of choices during disambiguation (see sort_choices, below).
3144    The idea is that overloadings of a subprogram name from the
3145    same package should sort in their source order.  We settle for ordering
3146    such symbols by their trailing number (__N  or $N).  */
3147
3148 static int
3149 encoded_ordered_before (char *N0, char *N1)
3150 {
3151   if (N1 == NULL)
3152     return 0;
3153   else if (N0 == NULL)
3154     return 1;
3155   else
3156     {
3157       int k0, k1;
3158       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3159         ;
3160       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3161         ;
3162       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3163           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3164         {
3165           int n0, n1;
3166           n0 = k0;
3167           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3168             n0 -= 1;
3169           n1 = k1;
3170           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3171             n1 -= 1;
3172           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3173             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3174         }
3175       return (strcmp (N0, N1) < 0);
3176     }
3177 }
3178
3179 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3180    encoded names.  */
3181
3182 static void
3183 sort_choices (struct ada_symbol_info syms[], int nsyms)
3184 {
3185   int i;
3186   for (i = 1; i < nsyms; i += 1)
3187     {
3188       struct ada_symbol_info sym = syms[i];
3189       int j;
3190
3191       for (j = i - 1; j >= 0; j -= 1)
3192         {
3193           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3194                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3195             break;
3196           syms[j + 1] = syms[j];
3197         }
3198       syms[j + 1] = sym;
3199     }
3200 }
3201
3202 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3203    by asking the user (if necessary), returning the number selected, 
3204    and setting the first elements of SYMS items.  Error if no symbols
3205    selected.  */
3206
3207 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3208    to be re-integrated one of these days.  */
3209
3210 int
3211 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3212 {
3213   int i;
3214   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3215   int n_chosen;
3216   int first_choice = (max_results == 1) ? 1 : 2;
3217   const char *select_mode = multiple_symbols_select_mode ();
3218
3219   if (max_results < 1)
3220     error (_("Request to select 0 symbols!"));
3221   if (nsyms <= 1)
3222     return nsyms;
3223
3224   if (select_mode == multiple_symbols_cancel)
3225     error (_("\
3226 canceled because the command is ambiguous\n\
3227 See set/show multiple-symbol."));
3228   
3229   /* If select_mode is "all", then return all possible symbols.
3230      Only do that if more than one symbol can be selected, of course.
3231      Otherwise, display the menu as usual.  */
3232   if (select_mode == multiple_symbols_all && max_results > 1)
3233     return nsyms;
3234
3235   printf_unfiltered (_("[0] cancel\n"));
3236   if (max_results > 1)
3237     printf_unfiltered (_("[1] all\n"));
3238
3239   sort_choices (syms, nsyms);
3240
3241   for (i = 0; i < nsyms; i += 1)
3242     {
3243       if (syms[i].sym == NULL)
3244         continue;
3245
3246       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3247         {
3248           struct symtab_and_line sal =
3249             find_function_start_sal (syms[i].sym, 1);
3250           if (sal.symtab == NULL)
3251             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3252                                i + first_choice,
3253                                SYMBOL_PRINT_NAME (syms[i].sym),
3254                                sal.line);
3255           else
3256             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3257                                SYMBOL_PRINT_NAME (syms[i].sym),
3258                                sal.symtab->filename, sal.line);
3259           continue;
3260         }
3261       else
3262         {
3263           int is_enumeral =
3264             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3265              && SYMBOL_TYPE (syms[i].sym) != NULL
3266              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3267           struct symtab *symtab = syms[i].sym->symtab;
3268
3269           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3270             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3271                                i + first_choice,
3272                                SYMBOL_PRINT_NAME (syms[i].sym),
3273                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3274           else if (is_enumeral
3275                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3276             {
3277               printf_unfiltered (("[%d] "), i + first_choice);
3278               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3279                               gdb_stdout, -1, 0);
3280               printf_unfiltered (_("'(%s) (enumeral)\n"),
3281                                  SYMBOL_PRINT_NAME (syms[i].sym));
3282             }
3283           else if (symtab != NULL)
3284             printf_unfiltered (is_enumeral
3285                                ? _("[%d] %s in %s (enumeral)\n")
3286                                : _("[%d] %s at %s:?\n"),
3287                                i + first_choice,
3288                                SYMBOL_PRINT_NAME (syms[i].sym),
3289                                symtab->filename);
3290           else
3291             printf_unfiltered (is_enumeral
3292                                ? _("[%d] %s (enumeral)\n")
3293                                : _("[%d] %s at ?\n"),
3294                                i + first_choice,
3295                                SYMBOL_PRINT_NAME (syms[i].sym));
3296         }
3297     }
3298
3299   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3300                              "overload-choice");
3301
3302   for (i = 0; i < n_chosen; i += 1)
3303     syms[i] = syms[chosen[i]];
3304
3305   return n_chosen;
3306 }
3307
3308 /* Read and validate a set of numeric choices from the user in the
3309    range 0 .. N_CHOICES-1.  Place the results in increasing
3310    order in CHOICES[0 .. N-1], and return N.
3311
3312    The user types choices as a sequence of numbers on one line
3313    separated by blanks, encoding them as follows:
3314
3315      + A choice of 0 means to cancel the selection, throwing an error.
3316      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3317      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3318
3319    The user is not allowed to choose more than MAX_RESULTS values.
3320
3321    ANNOTATION_SUFFIX, if present, is used to annotate the input
3322    prompts (for use with the -f switch).  */
3323
3324 int
3325 get_selections (int *choices, int n_choices, int max_results,
3326                 int is_all_choice, char *annotation_suffix)
3327 {
3328   char *args;
3329   char *prompt;
3330   int n_chosen;
3331   int first_choice = is_all_choice ? 2 : 1;
3332
3333   prompt = getenv ("PS2");
3334   if (prompt == NULL)
3335     prompt = "> ";
3336
3337   args = command_line_input (prompt, 0, annotation_suffix);
3338
3339   if (args == NULL)
3340     error_no_arg (_("one or more choice numbers"));
3341
3342   n_chosen = 0;
3343
3344   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3345      order, as given in args.  Choices are validated.  */
3346   while (1)
3347     {
3348       char *args2;
3349       int choice, j;
3350
3351       while (isspace (*args))
3352         args += 1;
3353       if (*args == '\0' && n_chosen == 0)
3354         error_no_arg (_("one or more choice numbers"));
3355       else if (*args == '\0')
3356         break;
3357
3358       choice = strtol (args, &args2, 10);
3359       if (args == args2 || choice < 0
3360           || choice > n_choices + first_choice - 1)
3361         error (_("Argument must be choice number"));
3362       args = args2;
3363
3364       if (choice == 0)
3365         error (_("cancelled"));
3366
3367       if (choice < first_choice)
3368         {
3369           n_chosen = n_choices;
3370           for (j = 0; j < n_choices; j += 1)
3371             choices[j] = j;
3372           break;
3373         }
3374       choice -= first_choice;
3375
3376       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3377         {
3378         }
3379
3380       if (j < 0 || choice != choices[j])
3381         {
3382           int k;
3383           for (k = n_chosen - 1; k > j; k -= 1)
3384             choices[k + 1] = choices[k];
3385           choices[j + 1] = choice;
3386           n_chosen += 1;
3387         }
3388     }
3389
3390   if (n_chosen > max_results)
3391     error (_("Select no more than %d of the above"), max_results);
3392
3393   return n_chosen;
3394 }
3395
3396 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3397    on the function identified by SYM and BLOCK, and taking NARGS
3398    arguments.  Update *EXPP as needed to hold more space.  */
3399
3400 static void
3401 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3402                             int oplen, struct symbol *sym,
3403                             struct block *block)
3404 {
3405   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3406      symbol, -oplen for operator being replaced).  */
3407   struct expression *newexp = (struct expression *)
3408     xmalloc (sizeof (struct expression)
3409              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3410   struct expression *exp = *expp;
3411
3412   newexp->nelts = exp->nelts + 7 - oplen;
3413   newexp->language_defn = exp->language_defn;
3414   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3415   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3416           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3417
3418   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3419   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3420
3421   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3422   newexp->elts[pc + 4].block = block;
3423   newexp->elts[pc + 5].symbol = sym;
3424
3425   *expp = newexp;
3426   xfree (exp);
3427 }
3428
3429 /* Type-class predicates */
3430
3431 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3432    or FLOAT).  */
3433
3434 static int
3435 numeric_type_p (struct type *type)
3436 {
3437   if (type == NULL)
3438     return 0;
3439   else
3440     {
3441       switch (TYPE_CODE (type))
3442         {
3443         case TYPE_CODE_INT:
3444         case TYPE_CODE_FLT:
3445           return 1;
3446         case TYPE_CODE_RANGE:
3447           return (type == TYPE_TARGET_TYPE (type)
3448                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3449         default:
3450           return 0;
3451         }
3452     }
3453 }
3454
3455 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3456
3457 static int
3458 integer_type_p (struct type *type)
3459 {
3460   if (type == NULL)
3461     return 0;
3462   else
3463     {
3464       switch (TYPE_CODE (type))
3465         {
3466         case TYPE_CODE_INT:
3467           return 1;
3468         case TYPE_CODE_RANGE:
3469           return (type == TYPE_TARGET_TYPE (type)
3470                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3471         default:
3472           return 0;
3473         }
3474     }
3475 }
3476
3477 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3478
3479 static int
3480 scalar_type_p (struct type *type)
3481 {
3482   if (type == NULL)
3483     return 0;
3484   else
3485     {
3486       switch (TYPE_CODE (type))
3487         {
3488         case TYPE_CODE_INT:
3489         case TYPE_CODE_RANGE:
3490         case TYPE_CODE_ENUM:
3491         case TYPE_CODE_FLT:
3492           return 1;
3493         default:
3494           return 0;
3495         }
3496     }
3497 }
3498
3499 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3500
3501 static int
3502 discrete_type_p (struct type *type)
3503 {
3504   if (type == NULL)
3505     return 0;
3506   else
3507     {
3508       switch (TYPE_CODE (type))
3509         {
3510         case TYPE_CODE_INT:
3511         case TYPE_CODE_RANGE:
3512         case TYPE_CODE_ENUM:
3513           return 1;
3514         default:
3515           return 0;
3516         }
3517     }
3518 }
3519
3520 /* Returns non-zero if OP with operands in the vector ARGS could be
3521    a user-defined function.  Errs on the side of pre-defined operators
3522    (i.e., result 0).  */
3523
3524 static int
3525 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3526 {
3527   struct type *type0 =
3528     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3529   struct type *type1 =
3530     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3531
3532   if (type0 == NULL)
3533     return 0;
3534
3535   switch (op)
3536     {
3537     default:
3538       return 0;
3539
3540     case BINOP_ADD:
3541     case BINOP_SUB:
3542     case BINOP_MUL:
3543     case BINOP_DIV:
3544       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3545
3546     case BINOP_REM:
3547     case BINOP_MOD:
3548     case BINOP_BITWISE_AND:
3549     case BINOP_BITWISE_IOR:
3550     case BINOP_BITWISE_XOR:
3551       return (!(integer_type_p (type0) && integer_type_p (type1)));
3552
3553     case BINOP_EQUAL:
3554     case BINOP_NOTEQUAL:
3555     case BINOP_LESS:
3556     case BINOP_GTR:
3557     case BINOP_LEQ:
3558     case BINOP_GEQ:
3559       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3560
3561     case BINOP_CONCAT:
3562       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3563
3564     case BINOP_EXP:
3565       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3566
3567     case UNOP_NEG:
3568     case UNOP_PLUS:
3569     case UNOP_LOGICAL_NOT:
3570     case UNOP_ABS:
3571       return (!numeric_type_p (type0));
3572
3573     }
3574 }
3575 \f
3576                                 /* Renaming */
3577
3578 /* NOTES: 
3579
3580    1. In the following, we assume that a renaming type's name may
3581       have an ___XD suffix.  It would be nice if this went away at some
3582       point.
3583    2. We handle both the (old) purely type-based representation of 
3584       renamings and the (new) variable-based encoding.  At some point,
3585       it is devoutly to be hoped that the former goes away 
3586       (FIXME: hilfinger-2007-07-09).
3587    3. Subprogram renamings are not implemented, although the XRS
3588       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3589
3590 /* If SYM encodes a renaming, 
3591
3592        <renaming> renames <renamed entity>,
3593
3594    sets *LEN to the length of the renamed entity's name,
3595    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3596    the string describing the subcomponent selected from the renamed
3597    entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3598    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3599    are undefined).  Otherwise, returns a value indicating the category
3600    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3601    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3602    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3603    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3604    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3605    may be NULL, in which case they are not assigned.
3606
3607    [Currently, however, GCC does not generate subprogram renamings.]  */
3608
3609 enum ada_renaming_category
3610 ada_parse_renaming (struct symbol *sym,
3611                     const char **renamed_entity, int *len, 
3612                     const char **renaming_expr)
3613 {
3614   enum ada_renaming_category kind;
3615   const char *info;
3616   const char *suffix;
3617
3618   if (sym == NULL)
3619     return ADA_NOT_RENAMING;
3620   switch (SYMBOL_CLASS (sym)) 
3621     {
3622     default:
3623       return ADA_NOT_RENAMING;
3624     case LOC_TYPEDEF:
3625       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3626                                        renamed_entity, len, renaming_expr);
3627     case LOC_LOCAL:
3628     case LOC_STATIC:
3629     case LOC_COMPUTED:
3630     case LOC_OPTIMIZED_OUT:
3631       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3632       if (info == NULL)
3633         return ADA_NOT_RENAMING;
3634       switch (info[5])
3635         {
3636         case '_':
3637           kind = ADA_OBJECT_RENAMING;
3638           info += 6;
3639           break;
3640         case 'E':
3641           kind = ADA_EXCEPTION_RENAMING;
3642           info += 7;
3643           break;
3644         case 'P':
3645           kind = ADA_PACKAGE_RENAMING;
3646           info += 7;
3647           break;
3648         case 'S':
3649           kind = ADA_SUBPROGRAM_RENAMING;
3650           info += 7;
3651           break;
3652         default:
3653           return ADA_NOT_RENAMING;
3654         }
3655     }
3656
3657   if (renamed_entity != NULL)
3658     *renamed_entity = info;
3659   suffix = strstr (info, "___XE");
3660   if (suffix == NULL || suffix == info)
3661     return ADA_NOT_RENAMING;
3662   if (len != NULL)
3663     *len = strlen (info) - strlen (suffix);
3664   suffix += 5;
3665   if (renaming_expr != NULL)
3666     *renaming_expr = suffix;
3667   return kind;
3668 }
3669
3670 /* Assuming TYPE encodes a renaming according to the old encoding in
3671    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3672    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3673    ADA_NOT_RENAMING otherwise.  */
3674 static enum ada_renaming_category
3675 parse_old_style_renaming (struct type *type,
3676                           const char **renamed_entity, int *len, 
3677                           const char **renaming_expr)
3678 {
3679   enum ada_renaming_category kind;
3680   const char *name;
3681   const char *info;
3682   const char *suffix;
3683
3684   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
3685       || TYPE_NFIELDS (type) != 1)
3686     return ADA_NOT_RENAMING;
3687
3688   name = type_name_no_tag (type);
3689   if (name == NULL)
3690     return ADA_NOT_RENAMING;
3691   
3692   name = strstr (name, "___XR");
3693   if (name == NULL)
3694     return ADA_NOT_RENAMING;
3695   switch (name[5])
3696     {
3697     case '\0':
3698     case '_':
3699       kind = ADA_OBJECT_RENAMING;
3700       break;
3701     case 'E':
3702       kind = ADA_EXCEPTION_RENAMING;
3703       break;
3704     case 'P':
3705       kind = ADA_PACKAGE_RENAMING;
3706       break;
3707     case 'S':
3708       kind = ADA_SUBPROGRAM_RENAMING;
3709       break;
3710     default:
3711       return ADA_NOT_RENAMING;
3712     }
3713
3714   info = TYPE_FIELD_NAME (type, 0);
3715   if (info == NULL)
3716     return ADA_NOT_RENAMING;
3717   if (renamed_entity != NULL)
3718     *renamed_entity = info;
3719   suffix = strstr (info, "___XE");
3720   if (renaming_expr != NULL)
3721     *renaming_expr = suffix + 5;
3722   if (suffix == NULL || suffix == info)
3723     return ADA_NOT_RENAMING;
3724   if (len != NULL)
3725     *len = suffix - info;
3726   return kind;
3727 }  
3728
3729 \f
3730
3731                                 /* Evaluation: Function Calls */
3732
3733 /* Return an lvalue containing the value VAL.  This is the identity on
3734    lvalues, and otherwise has the side-effect of pushing a copy of VAL 
3735    on the stack, using and updating *SP as the stack pointer, and 
3736    returning an lvalue whose value_address points to the copy.  */
3737
3738 static struct value *
3739 ensure_lval (struct value *val, CORE_ADDR *sp)
3740 {
3741   if (! VALUE_LVAL (val))
3742     {
3743       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3744
3745       /* The following is taken from the structure-return code in
3746          call_function_by_hand. FIXME: Therefore, some refactoring seems 
3747          indicated. */
3748       if (gdbarch_inner_than (current_gdbarch, 1, 2))
3749         {
3750           /* Stack grows downward.  Align SP and value_address (val) after
3751              reserving sufficient space. */
3752           *sp -= len;
3753           if (gdbarch_frame_align_p (current_gdbarch))
3754             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3755           set_value_address (val, *sp);
3756         }
3757       else
3758         {
3759           /* Stack grows upward.  Align the frame, allocate space, and
3760              then again, re-align the frame. */
3761           if (gdbarch_frame_align_p (current_gdbarch))
3762             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3763           set_value_address (val, *sp);
3764           *sp += len;
3765           if (gdbarch_frame_align_p (current_gdbarch))
3766             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3767         }
3768       VALUE_LVAL (val) = lval_memory;
3769
3770       write_memory (value_address (val), value_contents_raw (val), len);
3771     }
3772
3773   return val;
3774 }
3775
3776 /* Return the value ACTUAL, converted to be an appropriate value for a
3777    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
3778    allocating any necessary descriptors (fat pointers), or copies of
3779    values not residing in memory, updating it as needed.  */
3780
3781 struct value *
3782 ada_convert_actual (struct value *actual, struct type *formal_type0,
3783                     CORE_ADDR *sp)
3784 {
3785   struct type *actual_type = ada_check_typedef (value_type (actual));
3786   struct type *formal_type = ada_check_typedef (formal_type0);
3787   struct type *formal_target =
3788     TYPE_CODE (formal_type) == TYPE_CODE_PTR
3789     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3790   struct type *actual_target =
3791     TYPE_CODE (actual_type) == TYPE_CODE_PTR
3792     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3793
3794   if (ada_is_array_descriptor_type (formal_target)
3795       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3796     return make_array_descriptor (formal_type, actual, sp);
3797   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3798            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
3799     {
3800       struct value *result;
3801       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3802           && ada_is_array_descriptor_type (actual_target))
3803         result = desc_data (actual);
3804       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3805         {
3806           if (VALUE_LVAL (actual) != lval_memory)
3807             {
3808               struct value *val;
3809               actual_type = ada_check_typedef (value_type (actual));
3810               val = allocate_value (actual_type);
3811               memcpy ((char *) value_contents_raw (val),
3812                       (char *) value_contents (actual),
3813                       TYPE_LENGTH (actual_type));
3814               actual = ensure_lval (val, sp);
3815             }
3816           result = value_addr (actual);
3817         }
3818       else
3819         return actual;
3820       return value_cast_pointers (formal_type, result);
3821     }
3822   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3823     return ada_value_ind (actual);
3824
3825   return actual;
3826 }
3827
3828
3829 /* Push a descriptor of type TYPE for array value ARR on the stack at
3830    *SP, updating *SP to reflect the new descriptor.  Return either
3831    an lvalue representing the new descriptor, or (if TYPE is a pointer-
3832    to-descriptor type rather than a descriptor type), a struct value *
3833    representing a pointer to this descriptor.  */
3834
3835 static struct value *
3836 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3837 {
3838   struct type *bounds_type = desc_bounds_type (type);
3839   struct type *desc_type = desc_base_type (type);
3840   struct value *descriptor = allocate_value (desc_type);
3841   struct value *bounds = allocate_value (bounds_type);
3842   int i;
3843
3844   for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3845     {
3846       modify_general_field (value_contents_writeable (bounds),
3847                             ada_array_bound (arr, i, 0),
3848                             desc_bound_bitpos (bounds_type, i, 0),
3849                             desc_bound_bitsize (bounds_type, i, 0));
3850       modify_general_field (value_contents_writeable (bounds),
3851                             ada_array_bound (arr, i, 1),
3852                             desc_bound_bitpos (bounds_type, i, 1),
3853                             desc_bound_bitsize (bounds_type, i, 1));
3854     }
3855
3856   bounds = ensure_lval (bounds, sp);
3857
3858   modify_general_field (value_contents_writeable (descriptor),
3859                         value_address (ensure_lval (arr, sp)),
3860                         fat_pntr_data_bitpos (desc_type),
3861                         fat_pntr_data_bitsize (desc_type));
3862
3863   modify_general_field (value_contents_writeable (descriptor),
3864                         value_address (bounds),
3865                         fat_pntr_bounds_bitpos (desc_type),
3866                         fat_pntr_bounds_bitsize (desc_type));
3867
3868   descriptor = ensure_lval (descriptor, sp);
3869
3870   if (TYPE_CODE (type) == TYPE_CODE_PTR)
3871     return value_addr (descriptor);
3872   else
3873     return descriptor;
3874 }
3875 \f
3876 /* Dummy definitions for an experimental caching module that is not
3877  * used in the public sources. */
3878
3879 static int
3880 lookup_cached_symbol (const char *name, domain_enum namespace,
3881                       struct symbol **sym, struct block **block)
3882 {
3883   return 0;
3884 }
3885
3886 static void
3887 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3888               struct block *block)
3889 {
3890 }
3891 \f
3892                                 /* Symbol Lookup */
3893
3894 /* Return the result of a standard (literal, C-like) lookup of NAME in
3895    given DOMAIN, visible from lexical block BLOCK.  */
3896
3897 static struct symbol *
3898 standard_lookup (const char *name, const struct block *block,
3899                  domain_enum domain)
3900 {
3901   struct symbol *sym;
3902
3903   if (lookup_cached_symbol (name, domain, &sym, NULL))
3904     return sym;
3905   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
3906   cache_symbol (name, domain, sym, block_found);
3907   return sym;
3908 }
3909
3910
3911 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3912    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
3913    since they contend in overloading in the same way.  */
3914 static int
3915 is_nonfunction (struct ada_symbol_info syms[], int n)
3916 {
3917   int i;
3918
3919   for (i = 0; i < n; i += 1)
3920     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
3921         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
3922             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
3923       return 1;
3924
3925   return 0;
3926 }
3927
3928 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3929    struct types.  Otherwise, they may not.  */
3930
3931 static int
3932 equiv_types (struct type *type0, struct type *type1)
3933 {
3934   if (type0 == type1)
3935     return 1;
3936   if (type0 == NULL || type1 == NULL
3937       || TYPE_CODE (type0) != TYPE_CODE (type1))
3938     return 0;
3939   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3940        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3941       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3942       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
3943     return 1;
3944
3945   return 0;
3946 }
3947
3948 /* True iff SYM0 represents the same entity as SYM1, or one that is
3949    no more defined than that of SYM1.  */
3950
3951 static int
3952 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
3953 {
3954   if (sym0 == sym1)
3955     return 1;
3956   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
3957       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3958     return 0;
3959
3960   switch (SYMBOL_CLASS (sym0))
3961     {
3962     case LOC_UNDEF:
3963       return 1;
3964     case LOC_TYPEDEF:
3965       {
3966         struct type *type0 = SYMBOL_TYPE (sym0);
3967         struct type *type1 = SYMBOL_TYPE (sym1);
3968         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
3969         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
3970         int len0 = strlen (name0);
3971         return
3972           TYPE_CODE (type0) == TYPE_CODE (type1)
3973           && (equiv_types (type0, type1)
3974               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
3975                   && strncmp (name1 + len0, "___XV", 5) == 0));
3976       }
3977     case LOC_CONST:
3978       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3979         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3980     default:
3981       return 0;
3982     }
3983 }
3984
3985 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
3986    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
3987
3988 static void
3989 add_defn_to_vec (struct obstack *obstackp,
3990                  struct symbol *sym,
3991                  struct block *block)
3992 {
3993   int i;
3994   size_t tmp;
3995   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
3996
3997   /* Do not try to complete stub types, as the debugger is probably
3998      already scanning all symbols matching a certain name at the
3999      time when this function is called.  Trying to replace the stub
4000      type by its associated full type will cause us to restart a scan
4001      which may lead to an infinite recursion.  Instead, the client
4002      collecting the matching symbols will end up collecting several
4003      matches, with at least one of them complete.  It can then filter
4004      out the stub ones if needed.  */
4005
4006   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4007     {
4008       if (lesseq_defined_than (sym, prevDefns[i].sym))
4009         return;
4010       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4011         {
4012           prevDefns[i].sym = sym;
4013           prevDefns[i].block = block;
4014           return;
4015         }
4016     }
4017
4018   {
4019     struct ada_symbol_info info;
4020
4021     info.sym = sym;
4022     info.block = block;
4023     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4024   }
4025 }
4026
4027 /* Number of ada_symbol_info structures currently collected in 
4028    current vector in *OBSTACKP.  */
4029
4030 static int
4031 num_defns_collected (struct obstack *obstackp)
4032 {
4033   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4034 }
4035
4036 /* Vector of ada_symbol_info structures currently collected in current 
4037    vector in *OBSTACKP.  If FINISH, close off the vector and return
4038    its final address.  */
4039
4040 static struct ada_symbol_info *
4041 defns_collected (struct obstack *obstackp, int finish)
4042 {
4043   if (finish)
4044     return obstack_finish (obstackp);
4045   else
4046     return (struct ada_symbol_info *) obstack_base (obstackp);
4047 }
4048
4049 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
4050    Check the global symbols if GLOBAL, the static symbols if not.
4051    Do wild-card match if WILD.  */
4052
4053 static struct partial_symbol *
4054 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
4055                            int global, domain_enum namespace, int wild)
4056 {
4057   struct partial_symbol **start;
4058   int name_len = strlen (name);
4059   int length = (global ? pst->n_global_syms : pst->n_static_syms);
4060   int i;
4061
4062   if (length == 0)
4063     {
4064       return (NULL);
4065     }
4066
4067   start = (global ?
4068            pst->objfile->global_psymbols.list + pst->globals_offset :
4069            pst->objfile->static_psymbols.list + pst->statics_offset);
4070
4071   if (wild)
4072     {
4073       for (i = 0; i < length; i += 1)
4074         {
4075           struct partial_symbol *psym = start[i];
4076
4077           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4078                                      SYMBOL_DOMAIN (psym), namespace)
4079               && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
4080             return psym;
4081         }
4082       return NULL;
4083     }
4084   else
4085     {
4086       if (global)
4087         {
4088           int U;
4089           i = 0;
4090           U = length - 1;
4091           while (U - i > 4)
4092             {
4093               int M = (U + i) >> 1;
4094               struct partial_symbol *psym = start[M];
4095               if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
4096                 i = M + 1;
4097               else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
4098                 U = M - 1;
4099               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
4100                 i = M + 1;
4101               else
4102                 U = M;
4103             }
4104         }
4105       else
4106         i = 0;
4107
4108       while (i < length)
4109         {
4110           struct partial_symbol *psym = start[i];
4111
4112           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4113                                      SYMBOL_DOMAIN (psym), namespace))
4114             {
4115               int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
4116
4117               if (cmp < 0)
4118                 {
4119                   if (global)
4120                     break;
4121                 }
4122               else if (cmp == 0
4123                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4124                                           + name_len))
4125                 return psym;
4126             }
4127           i += 1;
4128         }
4129
4130       if (global)
4131         {
4132           int U;
4133           i = 0;
4134           U = length - 1;
4135           while (U - i > 4)
4136             {
4137               int M = (U + i) >> 1;
4138               struct partial_symbol *psym = start[M];
4139               if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4140                 i = M + 1;
4141               else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4142                 U = M - 1;
4143               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4144                 i = M + 1;
4145               else
4146                 U = M;
4147             }
4148         }
4149       else
4150         i = 0;
4151
4152       while (i < length)
4153         {
4154           struct partial_symbol *psym = start[i];
4155
4156           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4157                                      SYMBOL_DOMAIN (psym), namespace))
4158             {
4159               int cmp;
4160
4161               cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4162               if (cmp == 0)
4163                 {
4164                   cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4165                   if (cmp == 0)
4166                     cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4167                                    name_len);
4168                 }
4169
4170               if (cmp < 0)
4171                 {
4172                   if (global)
4173                     break;
4174                 }
4175               else if (cmp == 0
4176                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4177                                           + name_len + 5))
4178                 return psym;
4179             }
4180           i += 1;
4181         }
4182     }
4183   return NULL;
4184 }
4185
4186 /* Return a minimal symbol matching NAME according to Ada decoding
4187    rules.  Returns NULL if there is no such minimal symbol.  Names 
4188    prefixed with "standard__" are handled specially: "standard__" is 
4189    first stripped off, and only static and global symbols are searched.  */
4190
4191 struct minimal_symbol *
4192 ada_lookup_simple_minsym (const char *name)
4193 {
4194   struct objfile *objfile;
4195   struct minimal_symbol *msymbol;
4196   int wild_match;
4197
4198   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4199     {
4200       name += sizeof ("standard__") - 1;
4201       wild_match = 0;
4202     }
4203   else
4204     wild_match = (strstr (name, "__") == NULL);
4205
4206   ALL_MSYMBOLS (objfile, msymbol)
4207   {
4208     if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4209         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4210       return msymbol;
4211   }
4212
4213   return NULL;
4214 }
4215
4216 /* For all subprograms that statically enclose the subprogram of the
4217    selected frame, add symbols matching identifier NAME in DOMAIN
4218    and their blocks to the list of data in OBSTACKP, as for
4219    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4220    wildcard prefix.  */
4221
4222 static void
4223 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4224                                   const char *name, domain_enum namespace,
4225                                   int wild_match)
4226 {
4227 }
4228
4229 /* True if TYPE is definitely an artificial type supplied to a symbol
4230    for which no debugging information was given in the symbol file.  */
4231
4232 static int
4233 is_nondebugging_type (struct type *type)
4234 {
4235   char *name = ada_type_name (type);
4236   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4237 }
4238
4239 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4240    duplicate other symbols in the list (The only case I know of where
4241    this happens is when object files containing stabs-in-ecoff are
4242    linked with files containing ordinary ecoff debugging symbols (or no
4243    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4244    Returns the number of items in the modified list.  */
4245
4246 static int
4247 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4248 {
4249   int i, j;
4250
4251   i = 0;
4252   while (i < nsyms)
4253     {
4254       int remove = 0;
4255
4256       /* If two symbols have the same name and one of them is a stub type,
4257          the get rid of the stub.  */
4258
4259       if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4260           && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4261         {
4262           for (j = 0; j < nsyms; j++)
4263             {
4264               if (j != i
4265                   && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4266                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4267                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4268                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4269                 remove = 1;
4270             }
4271         }
4272
4273       /* Two symbols with the same name, same class and same address
4274          should be identical.  */
4275
4276       else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4277           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4278           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4279         {
4280           for (j = 0; j < nsyms; j += 1)
4281             {
4282               if (i != j
4283                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4284                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4285                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4286                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4287                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4288                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4289                 remove = 1;
4290             }
4291         }
4292       
4293       if (remove)
4294         {
4295           for (j = i + 1; j < nsyms; j += 1)
4296             syms[j - 1] = syms[j];
4297           nsyms -= 1;
4298         }
4299
4300       i += 1;
4301     }
4302   return nsyms;
4303 }
4304
4305 /* Given a type that corresponds to a renaming entity, use the type name
4306    to extract the scope (package name or function name, fully qualified,
4307    and following the GNAT encoding convention) where this renaming has been
4308    defined.  The string returned needs to be deallocated after use.  */
4309
4310 static char *
4311 xget_renaming_scope (struct type *renaming_type)
4312 {
4313   /* The renaming types adhere to the following convention:
4314      <scope>__<rename>___<XR extension>. 
4315      So, to extract the scope, we search for the "___XR" extension,
4316      and then backtrack until we find the first "__".  */
4317
4318   const char *name = type_name_no_tag (renaming_type);
4319   char *suffix = strstr (name, "___XR");
4320   char *last;
4321   int scope_len;
4322   char *scope;
4323
4324   /* Now, backtrack a bit until we find the first "__".  Start looking
4325      at suffix - 3, as the <rename> part is at least one character long.  */
4326
4327   for (last = suffix - 3; last > name; last--)
4328     if (last[0] == '_' && last[1] == '_')
4329       break;
4330
4331   /* Make a copy of scope and return it.  */
4332
4333   scope_len = last - name;
4334   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4335
4336   strncpy (scope, name, scope_len);
4337   scope[scope_len] = '\0';
4338
4339   return scope;
4340 }
4341
4342 /* Return nonzero if NAME corresponds to a package name.  */
4343
4344 static int
4345 is_package_name (const char *name)
4346 {
4347   /* Here, We take advantage of the fact that no symbols are generated
4348      for packages, while symbols are generated for each function.
4349      So the condition for NAME represent a package becomes equivalent
4350      to NAME not existing in our list of symbols.  There is only one
4351      small complication with library-level functions (see below).  */
4352
4353   char *fun_name;
4354
4355   /* If it is a function that has not been defined at library level,
4356      then we should be able to look it up in the symbols.  */
4357   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4358     return 0;
4359
4360   /* Library-level function names start with "_ada_".  See if function
4361      "_ada_" followed by NAME can be found.  */
4362
4363   /* Do a quick check that NAME does not contain "__", since library-level
4364      functions names cannot contain "__" in them.  */
4365   if (strstr (name, "__") != NULL)
4366     return 0;
4367
4368   fun_name = xstrprintf ("_ada_%s", name);
4369
4370   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4371 }
4372
4373 /* Return nonzero if SYM corresponds to a renaming entity that is
4374    not visible from FUNCTION_NAME.  */
4375
4376 static int
4377 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4378 {
4379   char *scope;
4380
4381   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4382     return 0;
4383
4384   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4385
4386   make_cleanup (xfree, scope);
4387
4388   /* If the rename has been defined in a package, then it is visible.  */
4389   if (is_package_name (scope))
4390     return 0;
4391
4392   /* Check that the rename is in the current function scope by checking
4393      that its name starts with SCOPE.  */
4394
4395   /* If the function name starts with "_ada_", it means that it is
4396      a library-level function.  Strip this prefix before doing the
4397      comparison, as the encoding for the renaming does not contain
4398      this prefix.  */
4399   if (strncmp (function_name, "_ada_", 5) == 0)
4400     function_name += 5;
4401
4402   return (strncmp (function_name, scope, strlen (scope)) != 0);
4403 }
4404
4405 /* Remove entries from SYMS that corresponds to a renaming entity that
4406    is not visible from the function associated with CURRENT_BLOCK or
4407    that is superfluous due to the presence of more specific renaming
4408    information.  Places surviving symbols in the initial entries of
4409    SYMS and returns the number of surviving symbols.
4410    
4411    Rationale:
4412    First, in cases where an object renaming is implemented as a
4413    reference variable, GNAT may produce both the actual reference
4414    variable and the renaming encoding.  In this case, we discard the
4415    latter.
4416
4417    Second, GNAT emits a type following a specified encoding for each renaming
4418    entity.  Unfortunately, STABS currently does not support the definition
4419    of types that are local to a given lexical block, so all renamings types
4420    are emitted at library level.  As a consequence, if an application
4421    contains two renaming entities using the same name, and a user tries to
4422    print the value of one of these entities, the result of the ada symbol
4423    lookup will also contain the wrong renaming type.
4424
4425    This function partially covers for this limitation by attempting to
4426    remove from the SYMS list renaming symbols that should be visible
4427    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4428    method with the current information available.  The implementation
4429    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4430    
4431       - When the user tries to print a rename in a function while there
4432         is another rename entity defined in a package:  Normally, the
4433         rename in the function has precedence over the rename in the
4434         package, so the latter should be removed from the list.  This is
4435         currently not the case.
4436         
4437       - This function will incorrectly remove valid renames if
4438         the CURRENT_BLOCK corresponds to a function which symbol name
4439         has been changed by an "Export" pragma.  As a consequence,
4440         the user will be unable to print such rename entities.  */
4441
4442 static int
4443 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4444                              int nsyms, const struct block *current_block)
4445 {
4446   struct symbol *current_function;
4447   char *current_function_name;
4448   int i;
4449   int is_new_style_renaming;
4450
4451   /* If there is both a renaming foo___XR... encoded as a variable and
4452      a simple variable foo in the same block, discard the latter.
4453      First, zero out such symbols, then compress. */
4454   is_new_style_renaming = 0;
4455   for (i = 0; i < nsyms; i += 1)
4456     {
4457       struct symbol *sym = syms[i].sym;
4458       struct block *block = syms[i].block;
4459       const char *name;
4460       const char *suffix;
4461
4462       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4463         continue;
4464       name = SYMBOL_LINKAGE_NAME (sym);
4465       suffix = strstr (name, "___XR");
4466
4467       if (suffix != NULL)
4468         {
4469           int name_len = suffix - name;
4470           int j;
4471           is_new_style_renaming = 1;
4472           for (j = 0; j < nsyms; j += 1)
4473             if (i != j && syms[j].sym != NULL
4474                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4475                             name_len) == 0
4476                 && block == syms[j].block)
4477               syms[j].sym = NULL;
4478         }
4479     }
4480   if (is_new_style_renaming)
4481     {
4482       int j, k;
4483
4484       for (j = k = 0; j < nsyms; j += 1)
4485         if (syms[j].sym != NULL)
4486             {
4487               syms[k] = syms[j];
4488               k += 1;
4489             }
4490       return k;
4491     }
4492
4493   /* Extract the function name associated to CURRENT_BLOCK.
4494      Abort if unable to do so.  */
4495
4496   if (current_block == NULL)
4497     return nsyms;
4498
4499   current_function = block_linkage_function (current_block);
4500   if (current_function == NULL)
4501     return nsyms;
4502
4503   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4504   if (current_function_name == NULL)
4505     return nsyms;
4506
4507   /* Check each of the symbols, and remove it from the list if it is
4508      a type corresponding to a renaming that is out of the scope of
4509      the current block.  */
4510
4511   i = 0;
4512   while (i < nsyms)
4513     {
4514       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4515           == ADA_OBJECT_RENAMING
4516           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4517         {
4518           int j;
4519           for (j = i + 1; j < nsyms; j += 1)
4520             syms[j - 1] = syms[j];
4521           nsyms -= 1;
4522         }
4523       else
4524         i += 1;
4525     }
4526
4527   return nsyms;
4528 }
4529
4530 /* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4531    whose name and domain match NAME and DOMAIN respectively.
4532    If no match was found, then extend the search to "enclosing"
4533    routines (in other words, if we're inside a nested function,
4534    search the symbols defined inside the enclosing functions).
4535
4536    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
4537
4538 static void
4539 ada_add_local_symbols (struct obstack *obstackp, const char *name,
4540                        struct block *block, domain_enum domain,
4541                        int wild_match)
4542 {
4543   int block_depth = 0;
4544
4545   while (block != NULL)
4546     {
4547       block_depth += 1;
4548       ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4549
4550       /* If we found a non-function match, assume that's the one.  */
4551       if (is_nonfunction (defns_collected (obstackp, 0),
4552                           num_defns_collected (obstackp)))
4553         return;
4554
4555       block = BLOCK_SUPERBLOCK (block);
4556     }
4557
4558   /* If no luck so far, try to find NAME as a local symbol in some lexically
4559      enclosing subprogram.  */
4560   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4561     add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4562 }
4563
4564 /* Add to OBSTACKP all non-local symbols whose name and domain match
4565    NAME and DOMAIN respectively.  The search is performed on GLOBAL_BLOCK
4566    symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise.  */
4567
4568 static void
4569 ada_add_non_local_symbols (struct obstack *obstackp, const char *name,
4570                            domain_enum domain, int global,
4571                            int wild_match)
4572 {
4573   struct objfile *objfile;
4574   struct partial_symtab *ps;
4575
4576   ALL_PSYMTABS (objfile, ps)
4577   {
4578     QUIT;
4579     if (ps->readin
4580         || ada_lookup_partial_symbol (ps, name, global, domain, wild_match))
4581       {
4582         struct symtab *s = PSYMTAB_TO_SYMTAB (ps);
4583         const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
4584
4585         if (s == NULL || !s->primary)
4586           continue;
4587         ada_add_block_symbols (obstackp,
4588                                BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind),
4589                                name, domain, objfile, wild_match);
4590       }
4591   }
4592 }
4593
4594 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4595    scope and in global scopes, returning the number of matches.  Sets
4596    *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4597    indicating the symbols found and the blocks and symbol tables (if
4598    any) in which they were found.  This vector are transient---good only to 
4599    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
4600    symbol match within the nest of blocks whose innermost member is BLOCK0,
4601    is the one match returned (no other matches in that or
4602      enclosing blocks is returned).  If there are any matches in or
4603    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4604    search extends to global and file-scope (static) symbol tables.
4605    Names prefixed with "standard__" are handled specially: "standard__" 
4606    is first stripped off, and only static and global symbols are searched.  */
4607
4608 int
4609 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4610                         domain_enum namespace,
4611                         struct ada_symbol_info **results)
4612 {
4613   struct symbol *sym;
4614   struct block *block;
4615   const char *name;
4616   int wild_match;
4617   int cacheIfUnique;
4618   int ndefns;
4619
4620   obstack_free (&symbol_list_obstack, NULL);
4621   obstack_init (&symbol_list_obstack);
4622
4623   cacheIfUnique = 0;
4624
4625   /* Search specified block and its superiors.  */
4626
4627   wild_match = (strstr (name0, "__") == NULL);
4628   name = name0;
4629   block = (struct block *) block0;      /* FIXME: No cast ought to be
4630                                            needed, but adding const will
4631                                            have a cascade effect.  */
4632
4633   /* Special case: If the user specifies a symbol name inside package
4634      Standard, do a non-wild matching of the symbol name without
4635      the "standard__" prefix.  This was primarily introduced in order
4636      to allow the user to specifically access the standard exceptions
4637      using, for instance, Standard.Constraint_Error when Constraint_Error
4638      is ambiguous (due to the user defining its own Constraint_Error
4639      entity inside its program).  */
4640   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4641     {
4642       wild_match = 0;
4643       block = NULL;
4644       name = name0 + sizeof ("standard__") - 1;
4645     }
4646
4647   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
4648
4649   ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
4650                          wild_match);
4651   if (num_defns_collected (&symbol_list_obstack) > 0)
4652     goto done;
4653
4654   /* No non-global symbols found.  Check our cache to see if we have
4655      already performed this search before.  If we have, then return
4656      the same result.  */
4657
4658   cacheIfUnique = 1;
4659   if (lookup_cached_symbol (name0, namespace, &sym, &block))
4660     {
4661       if (sym != NULL)
4662         add_defn_to_vec (&symbol_list_obstack, sym, block);
4663       goto done;
4664     }
4665
4666   /* Search symbols from all global blocks.  */
4667  
4668   ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 1,
4669                              wild_match);
4670
4671   /* Now add symbols from all per-file blocks if we've gotten no hits
4672      (not strictly correct, but perhaps better than an error).  */
4673
4674   if (num_defns_collected (&symbol_list_obstack) == 0)
4675     ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 0,
4676                                wild_match);
4677
4678 done:
4679   ndefns = num_defns_collected (&symbol_list_obstack);
4680   *results = defns_collected (&symbol_list_obstack, 1);
4681
4682   ndefns = remove_extra_symbols (*results, ndefns);
4683
4684   if (ndefns == 0)
4685     cache_symbol (name0, namespace, NULL, NULL);
4686
4687   if (ndefns == 1 && cacheIfUnique)
4688     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
4689
4690   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4691
4692   return ndefns;
4693 }
4694
4695 struct symbol *
4696 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4697                            domain_enum namespace, struct block **block_found)
4698 {
4699   struct ada_symbol_info *candidates;
4700   int n_candidates;
4701
4702   n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4703
4704   if (n_candidates == 0)
4705     return NULL;
4706
4707   if (block_found != NULL)
4708     *block_found = candidates[0].block;
4709
4710   return fixup_symbol_section (candidates[0].sym, NULL);
4711 }  
4712
4713 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4714    scope and in global scopes, or NULL if none.  NAME is folded and
4715    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4716    choosing the first symbol if there are multiple choices.  
4717    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4718    table in which the symbol was found (in both cases, these
4719    assignments occur only if the pointers are non-null).  */
4720 struct symbol *
4721 ada_lookup_symbol (const char *name, const struct block *block0,
4722                    domain_enum namespace, int *is_a_field_of_this)
4723 {
4724   if (is_a_field_of_this != NULL)
4725     *is_a_field_of_this = 0;
4726
4727   return
4728     ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4729                                block0, namespace, NULL);
4730 }
4731
4732 static struct symbol *
4733 ada_lookup_symbol_nonlocal (const char *name,
4734                             const char *linkage_name,
4735                             const struct block *block,
4736                             const domain_enum domain)
4737 {
4738   if (linkage_name == NULL)
4739     linkage_name = name;
4740   return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4741                             NULL);
4742 }
4743
4744
4745 /* True iff STR is a possible encoded suffix of a normal Ada name
4746    that is to be ignored for matching purposes.  Suffixes of parallel
4747    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4748    are given by any of the regular expressions:
4749
4750    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
4751    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
4752    _E[0-9]+[bs]$    [protected object entry suffixes]
4753    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4754
4755    Also, any leading "__[0-9]+" sequence is skipped before the suffix
4756    match is performed.  This sequence is used to differentiate homonyms,
4757    is an optional part of a valid name suffix.  */
4758
4759 static int
4760 is_name_suffix (const char *str)
4761 {
4762   int k;
4763   const char *matching;
4764   const int len = strlen (str);
4765
4766   /* Skip optional leading __[0-9]+.  */
4767
4768   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4769     {
4770       str += 3;
4771       while (isdigit (str[0]))
4772         str += 1;
4773     }
4774   
4775   /* [.$][0-9]+ */
4776
4777   if (str[0] == '.' || str[0] == '$')
4778     {
4779       matching = str + 1;
4780       while (isdigit (matching[0]))
4781         matching += 1;
4782       if (matching[0] == '\0')
4783         return 1;
4784     }
4785
4786   /* ___[0-9]+ */
4787
4788   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4789     {
4790       matching = str + 3;
4791       while (isdigit (matching[0]))
4792         matching += 1;
4793       if (matching[0] == '\0')
4794         return 1;
4795     }
4796
4797 #if 0
4798   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4799      with a N at the end. Unfortunately, the compiler uses the same
4800      convention for other internal types it creates. So treating
4801      all entity names that end with an "N" as a name suffix causes
4802      some regressions. For instance, consider the case of an enumerated
4803      type. To support the 'Image attribute, it creates an array whose
4804      name ends with N.
4805      Having a single character like this as a suffix carrying some
4806      information is a bit risky. Perhaps we should change the encoding
4807      to be something like "_N" instead.  In the meantime, do not do
4808      the following check.  */
4809   /* Protected Object Subprograms */
4810   if (len == 1 && str [0] == 'N')
4811     return 1;
4812 #endif
4813
4814   /* _E[0-9]+[bs]$ */
4815   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4816     {
4817       matching = str + 3;
4818       while (isdigit (matching[0]))
4819         matching += 1;
4820       if ((matching[0] == 'b' || matching[0] == 's')
4821           && matching [1] == '\0')
4822         return 1;
4823     }
4824
4825   /* ??? We should not modify STR directly, as we are doing below.  This
4826      is fine in this case, but may become problematic later if we find
4827      that this alternative did not work, and want to try matching
4828      another one from the begining of STR.  Since we modified it, we
4829      won't be able to find the begining of the string anymore!  */
4830   if (str[0] == 'X')
4831     {
4832       str += 1;
4833       while (str[0] != '_' && str[0] != '\0')
4834         {
4835           if (str[0] != 'n' && str[0] != 'b')
4836             return 0;
4837           str += 1;
4838         }
4839     }
4840
4841   if (str[0] == '\000')
4842     return 1;
4843
4844   if (str[0] == '_')
4845     {
4846       if (str[1] != '_' || str[2] == '\000')
4847         return 0;
4848       if (str[2] == '_')
4849         {
4850           if (strcmp (str + 3, "JM") == 0)
4851             return 1;
4852           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4853              the LJM suffix in favor of the JM one.  But we will
4854              still accept LJM as a valid suffix for a reasonable
4855              amount of time, just to allow ourselves to debug programs
4856              compiled using an older version of GNAT.  */
4857           if (strcmp (str + 3, "LJM") == 0)
4858             return 1;
4859           if (str[3] != 'X')
4860             return 0;
4861           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
4862               || str[4] == 'U' || str[4] == 'P')
4863             return 1;
4864           if (str[4] == 'R' && str[5] != 'T')
4865             return 1;
4866           return 0;
4867         }
4868       if (!isdigit (str[2]))
4869         return 0;
4870       for (k = 3; str[k] != '\0'; k += 1)
4871         if (!isdigit (str[k]) && str[k] != '_')
4872           return 0;
4873       return 1;
4874     }
4875   if (str[0] == '$' && isdigit (str[1]))
4876     {
4877       for (k = 2; str[k] != '\0'; k += 1)
4878         if (!isdigit (str[k]) && str[k] != '_')
4879           return 0;
4880       return 1;
4881     }
4882   return 0;
4883 }
4884
4885 /* Return non-zero if the string starting at NAME and ending before
4886    NAME_END contains no capital letters.  */
4887
4888 static int
4889 is_valid_name_for_wild_match (const char *name0)
4890 {
4891   const char *decoded_name = ada_decode (name0);
4892   int i;
4893
4894   /* If the decoded name starts with an angle bracket, it means that
4895      NAME0 does not follow the GNAT encoding format.  It should then
4896      not be allowed as a possible wild match.  */
4897   if (decoded_name[0] == '<')
4898     return 0;
4899
4900   for (i=0; decoded_name[i] != '\0'; i++)
4901     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
4902       return 0;
4903
4904   return 1;
4905 }
4906
4907 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
4908    PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1.  Ignores
4909    informational suffixes of NAME (i.e., for which is_name_suffix is
4910    true).  */
4911
4912 static int
4913 wild_match (const char *patn0, int patn_len, const char *name0)
4914 {
4915   char* match;
4916   const char* start;
4917   start = name0;
4918   while (1)
4919     {
4920       match = strstr (start, patn0);
4921       if (match == NULL)
4922         return 0;
4923       if ((match == name0 
4924            || match[-1] == '.' 
4925            || (match > name0 + 1 && match[-1] == '_' && match[-2] == '_')
4926            || (match == name0 + 5 && strncmp ("_ada_", name0, 5) == 0))
4927           && is_name_suffix (match + patn_len))
4928         return (match == name0 || is_valid_name_for_wild_match (name0));
4929       start = match + 1;
4930     }
4931 }
4932
4933 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
4934    vector *defn_symbols, updating the list of symbols in OBSTACKP 
4935    (if necessary).  If WILD, treat as NAME with a wildcard prefix. 
4936    OBJFILE is the section containing BLOCK.
4937    SYMTAB is recorded with each symbol added.  */
4938
4939 static void
4940 ada_add_block_symbols (struct obstack *obstackp,
4941                        struct block *block, const char *name,
4942                        domain_enum domain, struct objfile *objfile,
4943                        int wild)
4944 {
4945   struct dict_iterator iter;
4946   int name_len = strlen (name);
4947   /* A matching argument symbol, if any.  */
4948   struct symbol *arg_sym;
4949   /* Set true when we find a matching non-argument symbol.  */
4950   int found_sym;
4951   struct symbol *sym;
4952
4953   arg_sym = NULL;
4954   found_sym = 0;
4955   if (wild)
4956     {
4957       struct symbol *sym;
4958       ALL_BLOCK_SYMBOLS (block, iter, sym)
4959       {
4960         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4961                                    SYMBOL_DOMAIN (sym), domain)
4962             && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
4963           {
4964             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4965               continue;
4966             else if (SYMBOL_IS_ARGUMENT (sym))
4967               arg_sym = sym;
4968             else
4969               {
4970                 found_sym = 1;
4971                 add_defn_to_vec (obstackp,
4972                                  fixup_symbol_section (sym, objfile),
4973                                  block);
4974               }
4975           }
4976       }
4977     }
4978   else
4979     {
4980       ALL_BLOCK_SYMBOLS (block, iter, sym)
4981       {
4982         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
4983                                    SYMBOL_DOMAIN (sym), domain))
4984           {
4985             int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
4986             if (cmp == 0
4987                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
4988               {
4989                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
4990                   {
4991                     if (SYMBOL_IS_ARGUMENT (sym))
4992                       arg_sym = sym;
4993                     else
4994                       {
4995                         found_sym = 1;
4996                         add_defn_to_vec (obstackp,
4997                                          fixup_symbol_section (sym, objfile),
4998                                          block);
4999                       }
5000                   }
5001               }
5002           }
5003       }
5004     }
5005
5006   if (!found_sym && arg_sym != NULL)
5007     {
5008       add_defn_to_vec (obstackp,
5009                        fixup_symbol_section (arg_sym, objfile),
5010                        block);
5011     }
5012
5013   if (!wild)
5014     {
5015       arg_sym = NULL;
5016       found_sym = 0;
5017
5018       ALL_BLOCK_SYMBOLS (block, iter, sym)
5019       {
5020         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5021                                    SYMBOL_DOMAIN (sym), domain))
5022           {
5023             int cmp;
5024
5025             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5026             if (cmp == 0)
5027               {
5028                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5029                 if (cmp == 0)
5030                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5031                                  name_len);
5032               }
5033
5034             if (cmp == 0
5035                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5036               {
5037                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5038                   {
5039                     if (SYMBOL_IS_ARGUMENT (sym))
5040                       arg_sym = sym;
5041                     else
5042                       {
5043                         found_sym = 1;
5044                         add_defn_to_vec (obstackp,
5045                                          fixup_symbol_section (sym, objfile),
5046                                          block);
5047                       }
5048                   }
5049               }
5050           }
5051       }
5052
5053       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5054          They aren't parameters, right?  */
5055       if (!found_sym && arg_sym != NULL)
5056         {
5057           add_defn_to_vec (obstackp,
5058                            fixup_symbol_section (arg_sym, objfile),
5059                            block);
5060         }
5061     }
5062 }
5063 \f
5064
5065                                 /* Symbol Completion */
5066
5067 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5068    name in a form that's appropriate for the completion.  The result
5069    does not need to be deallocated, but is only good until the next call.
5070
5071    TEXT_LEN is equal to the length of TEXT.
5072    Perform a wild match if WILD_MATCH is set.
5073    ENCODED should be set if TEXT represents the start of a symbol name
5074    in its encoded form.  */
5075
5076 static const char *
5077 symbol_completion_match (const char *sym_name,
5078                          const char *text, int text_len,
5079                          int wild_match, int encoded)
5080 {
5081   char *result;
5082   const int verbatim_match = (text[0] == '<');
5083   int match = 0;
5084
5085   if (verbatim_match)
5086     {
5087       /* Strip the leading angle bracket.  */
5088       text = text + 1;
5089       text_len--;
5090     }
5091
5092   /* First, test against the fully qualified name of the symbol.  */
5093
5094   if (strncmp (sym_name, text, text_len) == 0)
5095     match = 1;
5096
5097   if (match && !encoded)
5098     {
5099       /* One needed check before declaring a positive match is to verify
5100          that iff we are doing a verbatim match, the decoded version
5101          of the symbol name starts with '<'.  Otherwise, this symbol name
5102          is not a suitable completion.  */
5103       const char *sym_name_copy = sym_name;
5104       int has_angle_bracket;
5105
5106       sym_name = ada_decode (sym_name);
5107       has_angle_bracket = (sym_name[0] == '<');
5108       match = (has_angle_bracket == verbatim_match);
5109       sym_name = sym_name_copy;
5110     }
5111
5112   if (match && !verbatim_match)
5113     {
5114       /* When doing non-verbatim match, another check that needs to
5115          be done is to verify that the potentially matching symbol name
5116          does not include capital letters, because the ada-mode would
5117          not be able to understand these symbol names without the
5118          angle bracket notation.  */
5119       const char *tmp;
5120
5121       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5122       if (*tmp != '\0')
5123         match = 0;
5124     }
5125
5126   /* Second: Try wild matching...  */
5127
5128   if (!match && wild_match)
5129     {
5130       /* Since we are doing wild matching, this means that TEXT
5131          may represent an unqualified symbol name.  We therefore must
5132          also compare TEXT against the unqualified name of the symbol.  */
5133       sym_name = ada_unqualified_name (ada_decode (sym_name));
5134
5135       if (strncmp (sym_name, text, text_len) == 0)
5136         match = 1;
5137     }
5138
5139   /* Finally: If we found a mach, prepare the result to return.  */
5140
5141   if (!match)
5142     return NULL;
5143
5144   if (verbatim_match)
5145     sym_name = add_angle_brackets (sym_name);
5146
5147   if (!encoded)
5148     sym_name = ada_decode (sym_name);
5149
5150   return sym_name;
5151 }
5152
5153 typedef char *char_ptr;
5154 DEF_VEC_P (char_ptr);
5155
5156 /* A companion function to ada_make_symbol_completion_list().
5157    Check if SYM_NAME represents a symbol which name would be suitable
5158    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5159    it is appended at the end of the given string vector SV.
5160
5161    ORIG_TEXT is the string original string from the user command
5162    that needs to be completed.  WORD is the entire command on which
5163    completion should be performed.  These two parameters are used to
5164    determine which part of the symbol name should be added to the
5165    completion vector.
5166    if WILD_MATCH is set, then wild matching is performed.
5167    ENCODED should be set if TEXT represents a symbol name in its
5168    encoded formed (in which case the completion should also be
5169    encoded).  */
5170
5171 static void
5172 symbol_completion_add (VEC(char_ptr) **sv,
5173                        const char *sym_name,
5174                        const char *text, int text_len,
5175                        const char *orig_text, const char *word,
5176                        int wild_match, int encoded)
5177 {
5178   const char *match = symbol_completion_match (sym_name, text, text_len,
5179                                                wild_match, encoded);
5180   char *completion;
5181
5182   if (match == NULL)
5183     return;
5184
5185   /* We found a match, so add the appropriate completion to the given
5186      string vector.  */
5187
5188   if (word == orig_text)
5189     {
5190       completion = xmalloc (strlen (match) + 5);
5191       strcpy (completion, match);
5192     }
5193   else if (word > orig_text)
5194     {
5195       /* Return some portion of sym_name.  */
5196       completion = xmalloc (strlen (match) + 5);
5197       strcpy (completion, match + (word - orig_text));
5198     }
5199   else
5200     {
5201       /* Return some of ORIG_TEXT plus sym_name.  */
5202       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5203       strncpy (completion, word, orig_text - word);
5204       completion[orig_text - word] = '\0';
5205       strcat (completion, match);
5206     }
5207
5208   VEC_safe_push (char_ptr, *sv, completion);
5209 }
5210
5211 /* Return a list of possible symbol names completing TEXT0.  The list
5212    is NULL terminated.  WORD is the entire command on which completion
5213    is made.  */
5214
5215 static char **
5216 ada_make_symbol_completion_list (char *text0, char *word)
5217 {
5218   char *text;
5219   int text_len;
5220   int wild_match;
5221   int encoded;
5222   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5223   struct symbol *sym;
5224   struct symtab *s;
5225   struct partial_symtab *ps;
5226   struct minimal_symbol *msymbol;
5227   struct objfile *objfile;
5228   struct block *b, *surrounding_static_block = 0;
5229   int i;
5230   struct dict_iterator iter;
5231
5232   if (text0[0] == '<')
5233     {
5234       text = xstrdup (text0);
5235       make_cleanup (xfree, text);
5236       text_len = strlen (text);
5237       wild_match = 0;
5238       encoded = 1;
5239     }
5240   else
5241     {
5242       text = xstrdup (ada_encode (text0));
5243       make_cleanup (xfree, text);
5244       text_len = strlen (text);
5245       for (i = 0; i < text_len; i++)
5246         text[i] = tolower (text[i]);
5247
5248       encoded = (strstr (text0, "__") != NULL);
5249       /* If the name contains a ".", then the user is entering a fully
5250          qualified entity name, and the match must not be done in wild
5251          mode.  Similarly, if the user wants to complete what looks like
5252          an encoded name, the match must not be done in wild mode.  */
5253       wild_match = (strchr (text0, '.') == NULL && !encoded);
5254     }
5255
5256   /* First, look at the partial symtab symbols.  */
5257   ALL_PSYMTABS (objfile, ps)
5258   {
5259     struct partial_symbol **psym;
5260
5261     /* If the psymtab's been read in we'll get it when we search
5262        through the blockvector.  */
5263     if (ps->readin)
5264       continue;
5265
5266     for (psym = objfile->global_psymbols.list + ps->globals_offset;
5267          psym < (objfile->global_psymbols.list + ps->globals_offset
5268                  + ps->n_global_syms); psym++)
5269       {
5270         QUIT;
5271         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5272                                text, text_len, text0, word,
5273                                wild_match, encoded);
5274       }
5275
5276     for (psym = objfile->static_psymbols.list + ps->statics_offset;
5277          psym < (objfile->static_psymbols.list + ps->statics_offset
5278                  + ps->n_static_syms); psym++)
5279       {
5280         QUIT;
5281         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5282                                text, text_len, text0, word,
5283                                wild_match, encoded);
5284       }
5285   }
5286
5287   /* At this point scan through the misc symbol vectors and add each
5288      symbol you find to the list.  Eventually we want to ignore
5289      anything that isn't a text symbol (everything else will be
5290      handled by the psymtab code above).  */
5291
5292   ALL_MSYMBOLS (objfile, msymbol)
5293   {
5294     QUIT;
5295     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5296                            text, text_len, text0, word, wild_match, encoded);
5297   }
5298
5299   /* Search upwards from currently selected frame (so that we can
5300      complete on local vars.  */
5301
5302   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5303     {
5304       if (!BLOCK_SUPERBLOCK (b))
5305         surrounding_static_block = b;   /* For elmin of dups */
5306
5307       ALL_BLOCK_SYMBOLS (b, iter, sym)
5308       {
5309         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5310                                text, text_len, text0, word,
5311                                wild_match, encoded);
5312       }
5313     }
5314
5315   /* Go through the symtabs and check the externs and statics for
5316      symbols which match.  */
5317
5318   ALL_SYMTABS (objfile, s)
5319   {
5320     QUIT;
5321     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5322     ALL_BLOCK_SYMBOLS (b, iter, sym)
5323     {
5324       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5325                              text, text_len, text0, word,
5326                              wild_match, encoded);
5327     }
5328   }
5329
5330   ALL_SYMTABS (objfile, s)
5331   {
5332     QUIT;
5333     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5334     /* Don't do this block twice.  */
5335     if (b == surrounding_static_block)
5336       continue;
5337     ALL_BLOCK_SYMBOLS (b, iter, sym)
5338     {
5339       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5340                              text, text_len, text0, word,
5341                              wild_match, encoded);
5342     }
5343   }
5344
5345   /* Append the closing NULL entry.  */
5346   VEC_safe_push (char_ptr, completions, NULL);
5347
5348   /* Make a copy of the COMPLETIONS VEC before we free it, and then
5349      return the copy.  It's unfortunate that we have to make a copy
5350      of an array that we're about to destroy, but there is nothing much
5351      we can do about it.  Fortunately, it's typically not a very large
5352      array.  */
5353   {
5354     const size_t completions_size = 
5355       VEC_length (char_ptr, completions) * sizeof (char *);
5356     char **result = malloc (completions_size);
5357     
5358     memcpy (result, VEC_address (char_ptr, completions), completions_size);
5359
5360     VEC_free (char_ptr, completions);
5361     return result;
5362   }
5363 }
5364
5365                                 /* Field Access */
5366
5367 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5368    for tagged types.  */
5369
5370 static int
5371 ada_is_dispatch_table_ptr_type (struct type *type)
5372 {
5373   char *name;
5374
5375   if (TYPE_CODE (type) != TYPE_CODE_PTR)
5376     return 0;
5377
5378   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5379   if (name == NULL)
5380     return 0;
5381
5382   return (strcmp (name, "ada__tags__dispatch_table") == 0);
5383 }
5384
5385 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5386    to be invisible to users.  */
5387
5388 int
5389 ada_is_ignored_field (struct type *type, int field_num)
5390 {
5391   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5392     return 1;
5393    
5394   /* Check the name of that field.  */
5395   {
5396     const char *name = TYPE_FIELD_NAME (type, field_num);
5397
5398     /* Anonymous field names should not be printed.
5399        brobecker/2007-02-20: I don't think this can actually happen
5400        but we don't want to print the value of annonymous fields anyway.  */
5401     if (name == NULL)
5402       return 1;
5403
5404     /* A field named "_parent" is internally generated by GNAT for
5405        tagged types, and should not be printed either.  */
5406     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5407       return 1;
5408   }
5409
5410   /* If this is the dispatch table of a tagged type, then ignore.  */
5411   if (ada_is_tagged_type (type, 1)
5412       && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5413     return 1;
5414
5415   /* Not a special field, so it should not be ignored.  */
5416   return 0;
5417 }
5418
5419 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
5420    pointer or reference type whose ultimate target has a tag field. */
5421
5422 int
5423 ada_is_tagged_type (struct type *type, int refok)
5424 {
5425   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5426 }
5427
5428 /* True iff TYPE represents the type of X'Tag */
5429
5430 int
5431 ada_is_tag_type (struct type *type)
5432 {
5433   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5434     return 0;
5435   else
5436     {
5437       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5438       return (name != NULL
5439               && strcmp (name, "ada__tags__dispatch_table") == 0);
5440     }
5441 }
5442
5443 /* The type of the tag on VAL.  */
5444
5445 struct type *
5446 ada_tag_type (struct value *val)
5447 {
5448   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5449 }
5450
5451 /* The value of the tag on VAL.  */
5452
5453 struct value *
5454 ada_value_tag (struct value *val)
5455 {
5456   return ada_value_struct_elt (val, "_tag", 0);
5457 }
5458
5459 /* The value of the tag on the object of type TYPE whose contents are
5460    saved at VALADDR, if it is non-null, or is at memory address
5461    ADDRESS. */
5462
5463 static struct value *
5464 value_tag_from_contents_and_address (struct type *type,
5465                                      const gdb_byte *valaddr,
5466                                      CORE_ADDR address)
5467 {
5468   int tag_byte_offset, dummy1, dummy2;
5469   struct type *tag_type;
5470   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5471                          NULL, NULL, NULL))
5472     {
5473       const gdb_byte *valaddr1 = ((valaddr == NULL)
5474                                   ? NULL
5475                                   : valaddr + tag_byte_offset);
5476       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5477
5478       return value_from_contents_and_address (tag_type, valaddr1, address1);
5479     }
5480   return NULL;
5481 }
5482
5483 static struct type *
5484 type_from_tag (struct value *tag)
5485 {
5486   const char *type_name = ada_tag_name (tag);
5487   if (type_name != NULL)
5488     return ada_find_any_type (ada_encode (type_name));
5489   return NULL;
5490 }
5491
5492 struct tag_args
5493 {
5494   struct value *tag;
5495   char *name;
5496 };
5497
5498
5499 static int ada_tag_name_1 (void *);
5500 static int ada_tag_name_2 (struct tag_args *);
5501
5502 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5503    value ARGS, sets ARGS->name to the tag name of ARGS->tag.  
5504    The value stored in ARGS->name is valid until the next call to 
5505    ada_tag_name_1.  */
5506
5507 static int
5508 ada_tag_name_1 (void *args0)
5509 {
5510   struct tag_args *args = (struct tag_args *) args0;
5511   static char name[1024];
5512   char *p;
5513   struct value *val;
5514   args->name = NULL;
5515   val = ada_value_struct_elt (args->tag, "tsd", 1);
5516   if (val == NULL)
5517     return ada_tag_name_2 (args);
5518   val = ada_value_struct_elt (val, "expanded_name", 1);
5519   if (val == NULL)
5520     return 0;
5521   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5522   for (p = name; *p != '\0'; p += 1)
5523     if (isalpha (*p))
5524       *p = tolower (*p);
5525   args->name = name;
5526   return 0;
5527 }
5528
5529 /* Utility function for ada_tag_name_1 that tries the second
5530    representation for the dispatch table (in which there is no
5531    explicit 'tsd' field in the referent of the tag pointer, and instead
5532    the tsd pointer is stored just before the dispatch table. */
5533    
5534 static int
5535 ada_tag_name_2 (struct tag_args *args)
5536 {
5537   struct type *info_type;
5538   static char name[1024];
5539   char *p;
5540   struct value *val, *valp;
5541
5542   args->name = NULL;
5543   info_type = ada_find_any_type ("ada__tags__type_specific_data");
5544   if (info_type == NULL)
5545     return 0;
5546   info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5547   valp = value_cast (info_type, args->tag);
5548   if (valp == NULL)
5549     return 0;
5550   val = value_ind (value_ptradd (valp, -1));
5551   if (val == NULL)
5552     return 0;
5553   val = ada_value_struct_elt (val, "expanded_name", 1);
5554   if (val == NULL)
5555     return 0;
5556   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5557   for (p = name; *p != '\0'; p += 1)
5558     if (isalpha (*p))
5559       *p = tolower (*p);
5560   args->name = name;
5561   return 0;
5562 }
5563
5564 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5565  * a C string.  */
5566
5567 const char *
5568 ada_tag_name (struct value *tag)
5569 {
5570   struct tag_args args;
5571   if (!ada_is_tag_type (value_type (tag)))
5572     return NULL;
5573   args.tag = tag;
5574   args.name = NULL;
5575   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5576   return args.name;
5577 }
5578
5579 /* The parent type of TYPE, or NULL if none.  */
5580
5581 struct type *
5582 ada_parent_type (struct type *type)
5583 {
5584   int i;
5585
5586   type = ada_check_typedef (type);
5587
5588   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5589     return NULL;
5590
5591   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5592     if (ada_is_parent_field (type, i))
5593       {
5594         struct type *parent_type = TYPE_FIELD_TYPE (type, i);
5595
5596         /* If the _parent field is a pointer, then dereference it.  */
5597         if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
5598           parent_type = TYPE_TARGET_TYPE (parent_type);
5599         /* If there is a parallel XVS type, get the actual base type.  */
5600         parent_type = ada_get_base_type (parent_type);
5601
5602         return ada_check_typedef (parent_type);
5603       }
5604
5605   return NULL;
5606 }
5607
5608 /* True iff field number FIELD_NUM of structure type TYPE contains the
5609    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5610    a structure type with at least FIELD_NUM+1 fields.  */
5611
5612 int
5613 ada_is_parent_field (struct type *type, int field_num)
5614 {
5615   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5616   return (name != NULL
5617           && (strncmp (name, "PARENT", 6) == 0
5618               || strncmp (name, "_parent", 7) == 0));
5619 }
5620
5621 /* True iff field number FIELD_NUM of structure type TYPE is a
5622    transparent wrapper field (which should be silently traversed when doing
5623    field selection and flattened when printing).  Assumes TYPE is a
5624    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5625    structures.  */
5626
5627 int
5628 ada_is_wrapper_field (struct type *type, int field_num)
5629 {
5630   const char *name = TYPE_FIELD_NAME (type, field_num);
5631   return (name != NULL
5632           && (strncmp (name, "PARENT", 6) == 0
5633               || strcmp (name, "REP") == 0
5634               || strncmp (name, "_parent", 7) == 0
5635               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5636 }
5637
5638 /* True iff field number FIELD_NUM of structure or union type TYPE
5639    is a variant wrapper.  Assumes TYPE is a structure type with at least
5640    FIELD_NUM+1 fields.  */
5641
5642 int
5643 ada_is_variant_part (struct type *type, int field_num)
5644 {
5645   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5646   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5647           || (is_dynamic_field (type, field_num)
5648               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
5649                   == TYPE_CODE_UNION)));
5650 }
5651
5652 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5653    whose discriminants are contained in the record type OUTER_TYPE,
5654    returns the type of the controlling discriminant for the variant.  */
5655
5656 struct type *
5657 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5658 {
5659   char *name = ada_variant_discrim_name (var_type);
5660   struct type *type =
5661     ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5662   if (type == NULL)
5663     return builtin_type_int32;
5664   else
5665     return type;
5666 }
5667
5668 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5669    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5670    represents a 'when others' clause; otherwise 0.  */
5671
5672 int
5673 ada_is_others_clause (struct type *type, int field_num)
5674 {
5675   const char *name = TYPE_FIELD_NAME (type, field_num);
5676   return (name != NULL && name[0] == 'O');
5677 }
5678
5679 /* Assuming that TYPE0 is the type of the variant part of a record,
5680    returns the name of the discriminant controlling the variant.
5681    The value is valid until the next call to ada_variant_discrim_name.  */
5682
5683 char *
5684 ada_variant_discrim_name (struct type *type0)
5685 {
5686   static char *result = NULL;
5687   static size_t result_len = 0;
5688   struct type *type;
5689   const char *name;
5690   const char *discrim_end;
5691   const char *discrim_start;
5692
5693   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5694     type = TYPE_TARGET_TYPE (type0);
5695   else
5696     type = type0;
5697
5698   name = ada_type_name (type);
5699
5700   if (name == NULL || name[0] == '\000')
5701     return "";
5702
5703   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5704        discrim_end -= 1)
5705     {
5706       if (strncmp (discrim_end, "___XVN", 6) == 0)
5707         break;
5708     }
5709   if (discrim_end == name)
5710     return "";
5711
5712   for (discrim_start = discrim_end; discrim_start != name + 3;
5713        discrim_start -= 1)
5714     {
5715       if (discrim_start == name + 1)
5716         return "";
5717       if ((discrim_start > name + 3
5718            && strncmp (discrim_start - 3, "___", 3) == 0)
5719           || discrim_start[-1] == '.')
5720         break;
5721     }
5722
5723   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5724   strncpy (result, discrim_start, discrim_end - discrim_start);
5725   result[discrim_end - discrim_start] = '\0';
5726   return result;
5727 }
5728
5729 /* Scan STR for a subtype-encoded number, beginning at position K.
5730    Put the position of the character just past the number scanned in
5731    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
5732    Return 1 if there was a valid number at the given position, and 0
5733    otherwise.  A "subtype-encoded" number consists of the absolute value
5734    in decimal, followed by the letter 'm' to indicate a negative number.
5735    Assumes 0m does not occur.  */
5736
5737 int
5738 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5739 {
5740   ULONGEST RU;
5741
5742   if (!isdigit (str[k]))
5743     return 0;
5744
5745   /* Do it the hard way so as not to make any assumption about
5746      the relationship of unsigned long (%lu scan format code) and
5747      LONGEST.  */
5748   RU = 0;
5749   while (isdigit (str[k]))
5750     {
5751       RU = RU * 10 + (str[k] - '0');
5752       k += 1;
5753     }
5754
5755   if (str[k] == 'm')
5756     {
5757       if (R != NULL)
5758         *R = (-(LONGEST) (RU - 1)) - 1;
5759       k += 1;
5760     }
5761   else if (R != NULL)
5762     *R = (LONGEST) RU;
5763
5764   /* NOTE on the above: Technically, C does not say what the results of
5765      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5766      number representable as a LONGEST (although either would probably work
5767      in most implementations).  When RU>0, the locution in the then branch
5768      above is always equivalent to the negative of RU.  */
5769
5770   if (new_k != NULL)
5771     *new_k = k;
5772   return 1;
5773 }
5774
5775 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5776    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5777    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
5778
5779 int
5780 ada_in_variant (LONGEST val, struct type *type, int field_num)
5781 {
5782   const char *name = TYPE_FIELD_NAME (type, field_num);
5783   int p;
5784
5785   p = 0;
5786   while (1)
5787     {
5788       switch (name[p])
5789         {
5790         case '\0':
5791           return 0;
5792         case 'S':
5793           {
5794             LONGEST W;
5795             if (!ada_scan_number (name, p + 1, &W, &p))
5796               return 0;
5797             if (val == W)
5798               return 1;
5799             break;
5800           }
5801         case 'R':
5802           {
5803             LONGEST L, U;
5804             if (!ada_scan_number (name, p + 1, &L, &p)
5805                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5806               return 0;
5807             if (val >= L && val <= U)
5808               return 1;
5809             break;
5810           }
5811         case 'O':
5812           return 1;
5813         default:
5814           return 0;
5815         }
5816     }
5817 }
5818
5819 /* FIXME: Lots of redundancy below.  Try to consolidate. */
5820
5821 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5822    ARG_TYPE, extract and return the value of one of its (non-static)
5823    fields.  FIELDNO says which field.   Differs from value_primitive_field
5824    only in that it can handle packed values of arbitrary type.  */
5825
5826 static struct value *
5827 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5828                            struct type *arg_type)
5829 {
5830   struct type *type;
5831
5832   arg_type = ada_check_typedef (arg_type);
5833   type = TYPE_FIELD_TYPE (arg_type, fieldno);
5834
5835   /* Handle packed fields.  */
5836
5837   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5838     {
5839       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5840       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5841
5842       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
5843                                              offset + bit_pos / 8,
5844                                              bit_pos % 8, bit_size, type);
5845     }
5846   else
5847     return value_primitive_field (arg1, offset, fieldno, arg_type);
5848 }
5849
5850 /* Find field with name NAME in object of type TYPE.  If found, 
5851    set the following for each argument that is non-null:
5852     - *FIELD_TYPE_P to the field's type; 
5853     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
5854       an object of that type;
5855     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
5856     - *BIT_SIZE_P to its size in bits if the field is packed, and 
5857       0 otherwise;
5858    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
5859    fields up to but not including the desired field, or by the total
5860    number of fields if not found.   A NULL value of NAME never
5861    matches; the function just counts visible fields in this case.
5862    
5863    Returns 1 if found, 0 otherwise. */
5864
5865 static int
5866 find_struct_field (char *name, struct type *type, int offset,
5867                    struct type **field_type_p,
5868                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
5869                    int *index_p)
5870 {
5871   int i;
5872
5873   type = ada_check_typedef (type);
5874
5875   if (field_type_p != NULL)
5876     *field_type_p = NULL;
5877   if (byte_offset_p != NULL)
5878     *byte_offset_p = 0;
5879   if (bit_offset_p != NULL)
5880     *bit_offset_p = 0;
5881   if (bit_size_p != NULL)
5882     *bit_size_p = 0;
5883
5884   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5885     {
5886       int bit_pos = TYPE_FIELD_BITPOS (type, i);
5887       int fld_offset = offset + bit_pos / 8;
5888       char *t_field_name = TYPE_FIELD_NAME (type, i);
5889
5890       if (t_field_name == NULL)
5891         continue;
5892
5893       else if (name != NULL && field_name_match (t_field_name, name))
5894         {
5895           int bit_size = TYPE_FIELD_BITSIZE (type, i);
5896           if (field_type_p != NULL)
5897             *field_type_p = TYPE_FIELD_TYPE (type, i);
5898           if (byte_offset_p != NULL)
5899             *byte_offset_p = fld_offset;
5900           if (bit_offset_p != NULL)
5901             *bit_offset_p = bit_pos % 8;
5902           if (bit_size_p != NULL)
5903             *bit_size_p = bit_size;
5904           return 1;
5905         }
5906       else if (ada_is_wrapper_field (type, i))
5907         {
5908           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
5909                                  field_type_p, byte_offset_p, bit_offset_p,
5910                                  bit_size_p, index_p))
5911             return 1;
5912         }
5913       else if (ada_is_variant_part (type, i))
5914         {
5915           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
5916              fixed type?? */
5917           int j;
5918           struct type *field_type
5919             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5920
5921           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5922             {
5923               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
5924                                      fld_offset
5925                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
5926                                      field_type_p, byte_offset_p,
5927                                      bit_offset_p, bit_size_p, index_p))
5928                 return 1;
5929             }
5930         }
5931       else if (index_p != NULL)
5932         *index_p += 1;
5933     }
5934   return 0;
5935 }
5936
5937 /* Number of user-visible fields in record type TYPE. */
5938
5939 static int
5940 num_visible_fields (struct type *type)
5941 {
5942   int n;
5943   n = 0;
5944   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
5945   return n;
5946 }
5947
5948 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
5949    and search in it assuming it has (class) type TYPE.
5950    If found, return value, else return NULL.
5951
5952    Searches recursively through wrapper fields (e.g., '_parent').  */
5953
5954 static struct value *
5955 ada_search_struct_field (char *name, struct value *arg, int offset,
5956                          struct type *type)
5957 {
5958   int i;
5959   type = ada_check_typedef (type);
5960
5961   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5962     {
5963       char *t_field_name = TYPE_FIELD_NAME (type, i);
5964
5965       if (t_field_name == NULL)
5966         continue;
5967
5968       else if (field_name_match (t_field_name, name))
5969         return ada_value_primitive_field (arg, offset, i, type);
5970
5971       else if (ada_is_wrapper_field (type, i))
5972         {
5973           struct value *v =     /* Do not let indent join lines here. */
5974             ada_search_struct_field (name, arg,
5975                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
5976                                      TYPE_FIELD_TYPE (type, i));
5977           if (v != NULL)
5978             return v;
5979         }
5980
5981       else if (ada_is_variant_part (type, i))
5982         {
5983           /* PNH: Do we ever get here?  See find_struct_field. */
5984           int j;
5985           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5986           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5987
5988           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
5989             {
5990               struct value *v = ada_search_struct_field /* Force line break.  */
5991                 (name, arg,
5992                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
5993                  TYPE_FIELD_TYPE (field_type, j));
5994               if (v != NULL)
5995                 return v;
5996             }
5997         }
5998     }
5999   return NULL;
6000 }
6001
6002 static struct value *ada_index_struct_field_1 (int *, struct value *,
6003                                                int, struct type *);
6004
6005
6006 /* Return field #INDEX in ARG, where the index is that returned by
6007  * find_struct_field through its INDEX_P argument.  Adjust the address
6008  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6009  * If found, return value, else return NULL. */
6010
6011 static struct value *
6012 ada_index_struct_field (int index, struct value *arg, int offset,
6013                         struct type *type)
6014 {
6015   return ada_index_struct_field_1 (&index, arg, offset, type);
6016 }
6017
6018
6019 /* Auxiliary function for ada_index_struct_field.  Like
6020  * ada_index_struct_field, but takes index from *INDEX_P and modifies
6021  * *INDEX_P. */
6022
6023 static struct value *
6024 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6025                           struct type *type)
6026 {
6027   int i;
6028   type = ada_check_typedef (type);
6029
6030   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6031     {
6032       if (TYPE_FIELD_NAME (type, i) == NULL)
6033         continue;
6034       else if (ada_is_wrapper_field (type, i))
6035         {
6036           struct value *v =     /* Do not let indent join lines here. */
6037             ada_index_struct_field_1 (index_p, arg,
6038                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
6039                                       TYPE_FIELD_TYPE (type, i));
6040           if (v != NULL)
6041             return v;
6042         }
6043
6044       else if (ada_is_variant_part (type, i))
6045         {
6046           /* PNH: Do we ever get here?  See ada_search_struct_field,
6047              find_struct_field. */
6048           error (_("Cannot assign this kind of variant record"));
6049         }
6050       else if (*index_p == 0)
6051         return ada_value_primitive_field (arg, offset, i, type);
6052       else
6053         *index_p -= 1;
6054     }
6055   return NULL;
6056 }
6057
6058 /* Given ARG, a value of type (pointer or reference to a)*
6059    structure/union, extract the component named NAME from the ultimate
6060    target structure/union and return it as a value with its
6061    appropriate type.
6062
6063    The routine searches for NAME among all members of the structure itself
6064    and (recursively) among all members of any wrapper members
6065    (e.g., '_parent').
6066
6067    If NO_ERR, then simply return NULL in case of error, rather than 
6068    calling error.  */
6069
6070 struct value *
6071 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6072 {
6073   struct type *t, *t1;
6074   struct value *v;
6075
6076   v = NULL;
6077   t1 = t = ada_check_typedef (value_type (arg));
6078   if (TYPE_CODE (t) == TYPE_CODE_REF)
6079     {
6080       t1 = TYPE_TARGET_TYPE (t);
6081       if (t1 == NULL)
6082         goto BadValue;
6083       t1 = ada_check_typedef (t1);
6084       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6085         {
6086           arg = coerce_ref (arg);
6087           t = t1;
6088         }
6089     }
6090
6091   while (TYPE_CODE (t) == TYPE_CODE_PTR)
6092     {
6093       t1 = TYPE_TARGET_TYPE (t);
6094       if (t1 == NULL)
6095         goto BadValue;
6096       t1 = ada_check_typedef (t1);
6097       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6098         {
6099           arg = value_ind (arg);
6100           t = t1;
6101         }
6102       else
6103         break;
6104     }
6105
6106   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6107     goto BadValue;
6108
6109   if (t1 == t)
6110     v = ada_search_struct_field (name, arg, 0, t);
6111   else
6112     {
6113       int bit_offset, bit_size, byte_offset;
6114       struct type *field_type;
6115       CORE_ADDR address;
6116
6117       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6118         address = value_as_address (arg);
6119       else
6120         address = unpack_pointer (t, value_contents (arg));
6121
6122       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6123       if (find_struct_field (name, t1, 0,
6124                              &field_type, &byte_offset, &bit_offset,
6125                              &bit_size, NULL))
6126         {
6127           if (bit_size != 0)
6128             {
6129               if (TYPE_CODE (t) == TYPE_CODE_REF)
6130                 arg = ada_coerce_ref (arg);
6131               else
6132                 arg = ada_value_ind (arg);
6133               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6134                                                   bit_offset, bit_size,
6135                                                   field_type);
6136             }
6137           else
6138             v = value_at_lazy (field_type, address + byte_offset);
6139         }
6140     }
6141
6142   if (v != NULL || no_err)
6143     return v;
6144   else
6145     error (_("There is no member named %s."), name);
6146
6147  BadValue:
6148   if (no_err)
6149     return NULL;
6150   else
6151     error (_("Attempt to extract a component of a value that is not a record."));
6152 }
6153
6154 /* Given a type TYPE, look up the type of the component of type named NAME.
6155    If DISPP is non-null, add its byte displacement from the beginning of a
6156    structure (pointed to by a value) of type TYPE to *DISPP (does not
6157    work for packed fields).
6158
6159    Matches any field whose name has NAME as a prefix, possibly
6160    followed by "___".
6161
6162    TYPE can be either a struct or union. If REFOK, TYPE may also 
6163    be a (pointer or reference)+ to a struct or union, and the
6164    ultimate target type will be searched.
6165
6166    Looks recursively into variant clauses and parent types.
6167
6168    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6169    TYPE is not a type of the right kind.  */
6170
6171 static struct type *
6172 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6173                             int noerr, int *dispp)
6174 {
6175   int i;
6176
6177   if (name == NULL)
6178     goto BadName;
6179
6180   if (refok && type != NULL)
6181     while (1)
6182       {
6183         type = ada_check_typedef (type);
6184         if (TYPE_CODE (type) != TYPE_CODE_PTR
6185             && TYPE_CODE (type) != TYPE_CODE_REF)
6186           break;
6187         type = TYPE_TARGET_TYPE (type);
6188       }
6189
6190   if (type == NULL
6191       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6192           && TYPE_CODE (type) != TYPE_CODE_UNION))
6193     {
6194       if (noerr)
6195         return NULL;
6196       else
6197         {
6198           target_terminal_ours ();
6199           gdb_flush (gdb_stdout);
6200           if (type == NULL)
6201             error (_("Type (null) is not a structure or union type"));
6202           else
6203             {
6204               /* XXX: type_sprint */
6205               fprintf_unfiltered (gdb_stderr, _("Type "));
6206               type_print (type, "", gdb_stderr, -1);
6207               error (_(" is not a structure or union type"));
6208             }
6209         }
6210     }
6211
6212   type = to_static_fixed_type (type);
6213
6214   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6215     {
6216       char *t_field_name = TYPE_FIELD_NAME (type, i);
6217       struct type *t;
6218       int disp;
6219
6220       if (t_field_name == NULL)
6221         continue;
6222
6223       else if (field_name_match (t_field_name, name))
6224         {
6225           if (dispp != NULL)
6226             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6227           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6228         }
6229
6230       else if (ada_is_wrapper_field (type, i))
6231         {
6232           disp = 0;
6233           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6234                                           0, 1, &disp);
6235           if (t != NULL)
6236             {
6237               if (dispp != NULL)
6238                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6239               return t;
6240             }
6241         }
6242
6243       else if (ada_is_variant_part (type, i))
6244         {
6245           int j;
6246           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6247
6248           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6249             {
6250               /* FIXME pnh 2008/01/26: We check for a field that is
6251                  NOT wrapped in a struct, since the compiler sometimes
6252                  generates these for unchecked variant types.  Revisit
6253                  if the compiler changes this practice. */
6254               char *v_field_name = TYPE_FIELD_NAME (field_type, j);
6255               disp = 0;
6256               if (v_field_name != NULL 
6257                   && field_name_match (v_field_name, name))
6258                 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6259               else
6260                 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6261                                                 name, 0, 1, &disp);
6262
6263               if (t != NULL)
6264                 {
6265                   if (dispp != NULL)
6266                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6267                   return t;
6268                 }
6269             }
6270         }
6271
6272     }
6273
6274 BadName:
6275   if (!noerr)
6276     {
6277       target_terminal_ours ();
6278       gdb_flush (gdb_stdout);
6279       if (name == NULL)
6280         {
6281           /* XXX: type_sprint */
6282           fprintf_unfiltered (gdb_stderr, _("Type "));
6283           type_print (type, "", gdb_stderr, -1);
6284           error (_(" has no component named <null>"));
6285         }
6286       else
6287         {
6288           /* XXX: type_sprint */
6289           fprintf_unfiltered (gdb_stderr, _("Type "));
6290           type_print (type, "", gdb_stderr, -1);
6291           error (_(" has no component named %s"), name);
6292         }
6293     }
6294
6295   return NULL;
6296 }
6297
6298 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6299    within a value of type OUTER_TYPE, return true iff VAR_TYPE
6300    represents an unchecked union (that is, the variant part of a
6301    record that is named in an Unchecked_Union pragma). */
6302
6303 static int
6304 is_unchecked_variant (struct type *var_type, struct type *outer_type)
6305 {
6306   char *discrim_name = ada_variant_discrim_name (var_type);
6307   return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL) 
6308           == NULL);
6309 }
6310
6311
6312 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6313    within a value of type OUTER_TYPE that is stored in GDB at
6314    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6315    numbering from 0) is applicable.  Returns -1 if none are.  */
6316
6317 int
6318 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6319                            const gdb_byte *outer_valaddr)
6320 {
6321   int others_clause;
6322   int i;
6323   char *discrim_name = ada_variant_discrim_name (var_type);
6324   struct value *outer;
6325   struct value *discrim;
6326   LONGEST discrim_val;
6327
6328   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6329   discrim = ada_value_struct_elt (outer, discrim_name, 1);
6330   if (discrim == NULL)
6331     return -1;
6332   discrim_val = value_as_long (discrim);
6333
6334   others_clause = -1;
6335   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6336     {
6337       if (ada_is_others_clause (var_type, i))
6338         others_clause = i;
6339       else if (ada_in_variant (discrim_val, var_type, i))
6340         return i;
6341     }
6342
6343   return others_clause;
6344 }
6345 \f
6346
6347
6348                                 /* Dynamic-Sized Records */
6349
6350 /* Strategy: The type ostensibly attached to a value with dynamic size
6351    (i.e., a size that is not statically recorded in the debugging
6352    data) does not accurately reflect the size or layout of the value.
6353    Our strategy is to convert these values to values with accurate,
6354    conventional types that are constructed on the fly.  */
6355
6356 /* There is a subtle and tricky problem here.  In general, we cannot
6357    determine the size of dynamic records without its data.  However,
6358    the 'struct value' data structure, which GDB uses to represent
6359    quantities in the inferior process (the target), requires the size
6360    of the type at the time of its allocation in order to reserve space
6361    for GDB's internal copy of the data.  That's why the
6362    'to_fixed_xxx_type' routines take (target) addresses as parameters,
6363    rather than struct value*s.
6364
6365    However, GDB's internal history variables ($1, $2, etc.) are
6366    struct value*s containing internal copies of the data that are not, in
6367    general, the same as the data at their corresponding addresses in
6368    the target.  Fortunately, the types we give to these values are all
6369    conventional, fixed-size types (as per the strategy described
6370    above), so that we don't usually have to perform the
6371    'to_fixed_xxx_type' conversions to look at their values.
6372    Unfortunately, there is one exception: if one of the internal
6373    history variables is an array whose elements are unconstrained
6374    records, then we will need to create distinct fixed types for each
6375    element selected.  */
6376
6377 /* The upshot of all of this is that many routines take a (type, host
6378    address, target address) triple as arguments to represent a value.
6379    The host address, if non-null, is supposed to contain an internal
6380    copy of the relevant data; otherwise, the program is to consult the
6381    target at the target address.  */
6382
6383 /* Assuming that VAL0 represents a pointer value, the result of
6384    dereferencing it.  Differs from value_ind in its treatment of
6385    dynamic-sized types.  */
6386
6387 struct value *
6388 ada_value_ind (struct value *val0)
6389 {
6390   struct value *val = unwrap_value (value_ind (val0));
6391   return ada_to_fixed_value (val);
6392 }
6393
6394 /* The value resulting from dereferencing any "reference to"
6395    qualifiers on VAL0.  */
6396
6397 static struct value *
6398 ada_coerce_ref (struct value *val0)
6399 {
6400   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6401     {
6402       struct value *val = val0;
6403       val = coerce_ref (val);
6404       val = unwrap_value (val);
6405       return ada_to_fixed_value (val);
6406     }
6407   else
6408     return val0;
6409 }
6410
6411 /* Return OFF rounded upward if necessary to a multiple of
6412    ALIGNMENT (a power of 2).  */
6413
6414 static unsigned int
6415 align_value (unsigned int off, unsigned int alignment)
6416 {
6417   return (off + alignment - 1) & ~(alignment - 1);
6418 }
6419
6420 /* Return the bit alignment required for field #F of template type TYPE.  */
6421
6422 static unsigned int
6423 field_alignment (struct type *type, int f)
6424 {
6425   const char *name = TYPE_FIELD_NAME (type, f);
6426   int len;
6427   int align_offset;
6428
6429   /* The field name should never be null, unless the debugging information
6430      is somehow malformed.  In this case, we assume the field does not
6431      require any alignment.  */
6432   if (name == NULL)
6433     return 1;
6434
6435   len = strlen (name);
6436
6437   if (!isdigit (name[len - 1]))
6438     return 1;
6439
6440   if (isdigit (name[len - 2]))
6441     align_offset = len - 2;
6442   else
6443     align_offset = len - 1;
6444
6445   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6446     return TARGET_CHAR_BIT;
6447
6448   return atoi (name + align_offset) * TARGET_CHAR_BIT;
6449 }
6450
6451 /* Find a symbol named NAME.  Ignores ambiguity.  */
6452
6453 struct symbol *
6454 ada_find_any_symbol (const char *name)
6455 {
6456   struct symbol *sym;
6457
6458   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6459   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6460     return sym;
6461
6462   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6463   return sym;
6464 }
6465
6466 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
6467    solely for types defined by debug info, it will not search the GDB
6468    primitive types.  */
6469
6470 struct type *
6471 ada_find_any_type (const char *name)
6472 {
6473   struct symbol *sym = ada_find_any_symbol (name);
6474
6475   if (sym != NULL)
6476     return SYMBOL_TYPE (sym);
6477
6478   return NULL;
6479 }
6480
6481 /* Given NAME and an associated BLOCK, search all symbols for
6482    NAME suffixed with  "___XR", which is the ``renaming'' symbol
6483    associated to NAME.  Return this symbol if found, return
6484    NULL otherwise.  */
6485
6486 struct symbol *
6487 ada_find_renaming_symbol (const char *name, struct block *block)
6488 {
6489   struct symbol *sym;
6490
6491   sym = find_old_style_renaming_symbol (name, block);
6492
6493   if (sym != NULL)
6494     return sym;
6495
6496   /* Not right yet.  FIXME pnh 7/20/2007. */
6497   sym = ada_find_any_symbol (name);
6498   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6499     return sym;
6500   else
6501     return NULL;
6502 }
6503
6504 static struct symbol *
6505 find_old_style_renaming_symbol (const char *name, struct block *block)
6506 {
6507   const struct symbol *function_sym = block_linkage_function (block);
6508   char *rename;
6509
6510   if (function_sym != NULL)
6511     {
6512       /* If the symbol is defined inside a function, NAME is not fully
6513          qualified.  This means we need to prepend the function name
6514          as well as adding the ``___XR'' suffix to build the name of
6515          the associated renaming symbol.  */
6516       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6517       /* Function names sometimes contain suffixes used
6518          for instance to qualify nested subprograms.  When building
6519          the XR type name, we need to make sure that this suffix is
6520          not included.  So do not include any suffix in the function
6521          name length below.  */
6522       const int function_name_len = ada_name_prefix_len (function_name);
6523       const int rename_len = function_name_len + 2      /*  "__" */
6524         + strlen (name) + 6 /* "___XR\0" */ ;
6525
6526       /* Strip the suffix if necessary.  */
6527       function_name[function_name_len] = '\0';
6528
6529       /* Library-level functions are a special case, as GNAT adds
6530          a ``_ada_'' prefix to the function name to avoid namespace
6531          pollution.  However, the renaming symbols themselves do not
6532          have this prefix, so we need to skip this prefix if present.  */
6533       if (function_name_len > 5 /* "_ada_" */
6534           && strstr (function_name, "_ada_") == function_name)
6535         function_name = function_name + 5;
6536
6537       rename = (char *) alloca (rename_len * sizeof (char));
6538       xsnprintf (rename, rename_len * sizeof (char), "%s__%s___XR", 
6539                  function_name, name);
6540     }
6541   else
6542     {
6543       const int rename_len = strlen (name) + 6;
6544       rename = (char *) alloca (rename_len * sizeof (char));
6545       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
6546     }
6547
6548   return ada_find_any_symbol (rename);
6549 }
6550
6551 /* Because of GNAT encoding conventions, several GDB symbols may match a
6552    given type name.  If the type denoted by TYPE0 is to be preferred to
6553    that of TYPE1 for purposes of type printing, return non-zero;
6554    otherwise return 0.  */
6555
6556 int
6557 ada_prefer_type (struct type *type0, struct type *type1)
6558 {
6559   if (type1 == NULL)
6560     return 1;
6561   else if (type0 == NULL)
6562     return 0;
6563   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6564     return 1;
6565   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6566     return 0;
6567   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6568     return 1;
6569   else if (ada_is_packed_array_type (type0))
6570     return 1;
6571   else if (ada_is_array_descriptor_type (type0)
6572            && !ada_is_array_descriptor_type (type1))
6573     return 1;
6574   else
6575     {
6576       const char *type0_name = type_name_no_tag (type0);
6577       const char *type1_name = type_name_no_tag (type1);
6578
6579       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6580           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6581         return 1;
6582     }
6583   return 0;
6584 }
6585
6586 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6587    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
6588
6589 char *
6590 ada_type_name (struct type *type)
6591 {
6592   if (type == NULL)
6593     return NULL;
6594   else if (TYPE_NAME (type) != NULL)
6595     return TYPE_NAME (type);
6596   else
6597     return TYPE_TAG_NAME (type);
6598 }
6599
6600 /* Find a parallel type to TYPE whose name is formed by appending
6601    SUFFIX to the name of TYPE.  */
6602
6603 struct type *
6604 ada_find_parallel_type (struct type *type, const char *suffix)
6605 {
6606   static char *name;
6607   static size_t name_len = 0;
6608   int len;
6609   char *typename = ada_type_name (type);
6610
6611   if (typename == NULL)
6612     return NULL;
6613
6614   len = strlen (typename);
6615
6616   GROW_VECT (name, name_len, len + strlen (suffix) + 1);
6617
6618   strcpy (name, typename);
6619   strcpy (name + len, suffix);
6620
6621   return ada_find_any_type (name);
6622 }
6623
6624
6625 /* If TYPE is a variable-size record type, return the corresponding template
6626    type describing its fields.  Otherwise, return NULL.  */
6627
6628 static struct type *
6629 dynamic_template_type (struct type *type)
6630 {
6631   type = ada_check_typedef (type);
6632
6633   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6634       || ada_type_name (type) == NULL)
6635     return NULL;
6636   else
6637     {
6638       int len = strlen (ada_type_name (type));
6639       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6640         return type;
6641       else
6642         return ada_find_parallel_type (type, "___XVE");
6643     }
6644 }
6645
6646 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6647    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
6648
6649 static int
6650 is_dynamic_field (struct type *templ_type, int field_num)
6651 {
6652   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6653   return name != NULL
6654     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6655     && strstr (name, "___XVL") != NULL;
6656 }
6657
6658 /* The index of the variant field of TYPE, or -1 if TYPE does not
6659    represent a variant record type.  */
6660
6661 static int
6662 variant_field_index (struct type *type)
6663 {
6664   int f;
6665
6666   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6667     return -1;
6668
6669   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6670     {
6671       if (ada_is_variant_part (type, f))
6672         return f;
6673     }
6674   return -1;
6675 }
6676
6677 /* A record type with no fields.  */
6678
6679 static struct type *
6680 empty_record (struct objfile *objfile)
6681 {
6682   struct type *type = alloc_type (objfile);
6683   TYPE_CODE (type) = TYPE_CODE_STRUCT;
6684   TYPE_NFIELDS (type) = 0;
6685   TYPE_FIELDS (type) = NULL;
6686   INIT_CPLUS_SPECIFIC (type);
6687   TYPE_NAME (type) = "<empty>";
6688   TYPE_TAG_NAME (type) = NULL;
6689   TYPE_LENGTH (type) = 0;
6690   return type;
6691 }
6692
6693 /* An ordinary record type (with fixed-length fields) that describes
6694    the value of type TYPE at VALADDR or ADDRESS (see comments at
6695    the beginning of this section) VAL according to GNAT conventions.
6696    DVAL0 should describe the (portion of a) record that contains any
6697    necessary discriminants.  It should be NULL if value_type (VAL) is
6698    an outer-level type (i.e., as opposed to a branch of a variant.)  A
6699    variant field (unless unchecked) is replaced by a particular branch
6700    of the variant.
6701
6702    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6703    length are not statically known are discarded.  As a consequence,
6704    VALADDR, ADDRESS and DVAL0 are ignored.
6705
6706    NOTE: Limitations: For now, we assume that dynamic fields and
6707    variants occupy whole numbers of bytes.  However, they need not be
6708    byte-aligned.  */
6709
6710 struct type *
6711 ada_template_to_fixed_record_type_1 (struct type *type,
6712                                      const gdb_byte *valaddr,
6713                                      CORE_ADDR address, struct value *dval0,
6714                                      int keep_dynamic_fields)
6715 {
6716   struct value *mark = value_mark ();
6717   struct value *dval;
6718   struct type *rtype;
6719   int nfields, bit_len;
6720   int variant_field;
6721   long off;
6722   int fld_bit_len, bit_incr;
6723   int f;
6724
6725   /* Compute the number of fields in this record type that are going
6726      to be processed: unless keep_dynamic_fields, this includes only
6727      fields whose position and length are static will be processed.  */
6728   if (keep_dynamic_fields)
6729     nfields = TYPE_NFIELDS (type);
6730   else
6731     {
6732       nfields = 0;
6733       while (nfields < TYPE_NFIELDS (type)
6734              && !ada_is_variant_part (type, nfields)
6735              && !is_dynamic_field (type, nfields))
6736         nfields++;
6737     }
6738
6739   rtype = alloc_type (TYPE_OBJFILE (type));
6740   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6741   INIT_CPLUS_SPECIFIC (rtype);
6742   TYPE_NFIELDS (rtype) = nfields;
6743   TYPE_FIELDS (rtype) = (struct field *)
6744     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6745   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6746   TYPE_NAME (rtype) = ada_type_name (type);
6747   TYPE_TAG_NAME (rtype) = NULL;
6748   TYPE_FIXED_INSTANCE (rtype) = 1;
6749
6750   off = 0;
6751   bit_len = 0;
6752   variant_field = -1;
6753
6754   for (f = 0; f < nfields; f += 1)
6755     {
6756       off = align_value (off, field_alignment (type, f))
6757         + TYPE_FIELD_BITPOS (type, f);
6758       TYPE_FIELD_BITPOS (rtype, f) = off;
6759       TYPE_FIELD_BITSIZE (rtype, f) = 0;
6760
6761       if (ada_is_variant_part (type, f))
6762         {
6763           variant_field = f;
6764           fld_bit_len = bit_incr = 0;
6765         }
6766       else if (is_dynamic_field (type, f))
6767         {
6768           const gdb_byte *field_valaddr = valaddr;
6769           CORE_ADDR field_address = address;
6770           struct type *field_type =
6771             TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
6772
6773           if (dval0 == NULL)
6774             {
6775               /* rtype's length is computed based on the run-time
6776                  value of discriminants.  If the discriminants are not
6777                  initialized, the type size may be completely bogus and
6778                  GDB may fail to allocate a value for it. So check the
6779                  size first before creating the value.  */
6780               check_size (rtype);
6781               dval = value_from_contents_and_address (rtype, valaddr, address);
6782             }
6783           else
6784             dval = dval0;
6785
6786           /* If the type referenced by this field is an aligner type, we need
6787              to unwrap that aligner type, because its size might not be set.
6788              Keeping the aligner type would cause us to compute the wrong
6789              size for this field, impacting the offset of the all the fields
6790              that follow this one.  */
6791           if (ada_is_aligner_type (field_type))
6792             {
6793               long field_offset = TYPE_FIELD_BITPOS (field_type, f);
6794
6795               field_valaddr = cond_offset_host (field_valaddr, field_offset);
6796               field_address = cond_offset_target (field_address, field_offset);
6797               field_type = ada_aligned_type (field_type);
6798             }
6799
6800           field_valaddr = cond_offset_host (field_valaddr,
6801                                             off / TARGET_CHAR_BIT);
6802           field_address = cond_offset_target (field_address,
6803                                               off / TARGET_CHAR_BIT);
6804
6805           /* Get the fixed type of the field.  Note that, in this case,
6806              we do not want to get the real type out of the tag: if
6807              the current field is the parent part of a tagged record,
6808              we will get the tag of the object.  Clearly wrong: the real
6809              type of the parent is not the real type of the child.  We
6810              would end up in an infinite loop.  */
6811           field_type = ada_get_base_type (field_type);
6812           field_type = ada_to_fixed_type (field_type, field_valaddr,
6813                                           field_address, dval, 0);
6814
6815           TYPE_FIELD_TYPE (rtype, f) = field_type;
6816           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6817           bit_incr = fld_bit_len =
6818             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6819         }
6820       else
6821         {
6822           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6823           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6824           if (TYPE_FIELD_BITSIZE (type, f) > 0)
6825             bit_incr = fld_bit_len =
6826               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6827           else
6828             bit_incr = fld_bit_len =
6829               TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6830         }
6831       if (off + fld_bit_len > bit_len)
6832         bit_len = off + fld_bit_len;
6833       off += bit_incr;
6834       TYPE_LENGTH (rtype) =
6835         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6836     }
6837
6838   /* We handle the variant part, if any, at the end because of certain
6839      odd cases in which it is re-ordered so as NOT to be the last field of
6840      the record.  This can happen in the presence of representation
6841      clauses.  */
6842   if (variant_field >= 0)
6843     {
6844       struct type *branch_type;
6845
6846       off = TYPE_FIELD_BITPOS (rtype, variant_field);
6847
6848       if (dval0 == NULL)
6849         dval = value_from_contents_and_address (rtype, valaddr, address);
6850       else
6851         dval = dval0;
6852
6853       branch_type =
6854         to_fixed_variant_branch_type
6855         (TYPE_FIELD_TYPE (type, variant_field),
6856          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6857          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6858       if (branch_type == NULL)
6859         {
6860           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6861             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6862           TYPE_NFIELDS (rtype) -= 1;
6863         }
6864       else
6865         {
6866           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6867           TYPE_FIELD_NAME (rtype, variant_field) = "S";
6868           fld_bit_len =
6869             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6870             TARGET_CHAR_BIT;
6871           if (off + fld_bit_len > bit_len)
6872             bit_len = off + fld_bit_len;
6873           TYPE_LENGTH (rtype) =
6874             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6875         }
6876     }
6877
6878   /* According to exp_dbug.ads, the size of TYPE for variable-size records
6879      should contain the alignment of that record, which should be a strictly
6880      positive value.  If null or negative, then something is wrong, most
6881      probably in the debug info.  In that case, we don't round up the size
6882      of the resulting type. If this record is not part of another structure,
6883      the current RTYPE length might be good enough for our purposes.  */
6884   if (TYPE_LENGTH (type) <= 0)
6885     {
6886       if (TYPE_NAME (rtype))
6887         warning (_("Invalid type size for `%s' detected: %d."),
6888                  TYPE_NAME (rtype), TYPE_LENGTH (type));
6889       else
6890         warning (_("Invalid type size for <unnamed> detected: %d."),
6891                  TYPE_LENGTH (type));
6892     }
6893   else
6894     {
6895       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
6896                                          TYPE_LENGTH (type));
6897     }
6898
6899   value_free_to_mark (mark);
6900   if (TYPE_LENGTH (rtype) > varsize_limit)
6901     error (_("record type with dynamic size is larger than varsize-limit"));
6902   return rtype;
6903 }
6904
6905 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
6906    of 1.  */
6907
6908 static struct type *
6909 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
6910                                CORE_ADDR address, struct value *dval0)
6911 {
6912   return ada_template_to_fixed_record_type_1 (type, valaddr,
6913                                               address, dval0, 1);
6914 }
6915
6916 /* An ordinary record type in which ___XVL-convention fields and
6917    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
6918    static approximations, containing all possible fields.  Uses
6919    no runtime values.  Useless for use in values, but that's OK,
6920    since the results are used only for type determinations.   Works on both
6921    structs and unions.  Representation note: to save space, we memorize
6922    the result of this function in the TYPE_TARGET_TYPE of the
6923    template type.  */
6924
6925 static struct type *
6926 template_to_static_fixed_type (struct type *type0)
6927 {
6928   struct type *type;
6929   int nfields;
6930   int f;
6931
6932   if (TYPE_TARGET_TYPE (type0) != NULL)
6933     return TYPE_TARGET_TYPE (type0);
6934
6935   nfields = TYPE_NFIELDS (type0);
6936   type = type0;
6937
6938   for (f = 0; f < nfields; f += 1)
6939     {
6940       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
6941       struct type *new_type;
6942
6943       if (is_dynamic_field (type0, f))
6944         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
6945       else
6946         new_type = static_unwrap_type (field_type);
6947       if (type == type0 && new_type != field_type)
6948         {
6949           TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
6950           TYPE_CODE (type) = TYPE_CODE (type0);
6951           INIT_CPLUS_SPECIFIC (type);
6952           TYPE_NFIELDS (type) = nfields;
6953           TYPE_FIELDS (type) = (struct field *)
6954             TYPE_ALLOC (type, nfields * sizeof (struct field));
6955           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
6956                   sizeof (struct field) * nfields);
6957           TYPE_NAME (type) = ada_type_name (type0);
6958           TYPE_TAG_NAME (type) = NULL;
6959           TYPE_FIXED_INSTANCE (type) = 1;
6960           TYPE_LENGTH (type) = 0;
6961         }
6962       TYPE_FIELD_TYPE (type, f) = new_type;
6963       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
6964     }
6965   return type;
6966 }
6967
6968 /* Given an object of type TYPE whose contents are at VALADDR and
6969    whose address in memory is ADDRESS, returns a revision of TYPE,
6970    which should be a non-dynamic-sized record, in which the variant
6971    part, if any, is replaced with the appropriate branch.  Looks
6972    for discriminant values in DVAL0, which can be NULL if the record
6973    contains the necessary discriminant values.  */
6974
6975 static struct type *
6976 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
6977                                    CORE_ADDR address, struct value *dval0)
6978 {
6979   struct value *mark = value_mark ();
6980   struct value *dval;
6981   struct type *rtype;
6982   struct type *branch_type;
6983   int nfields = TYPE_NFIELDS (type);
6984   int variant_field = variant_field_index (type);
6985
6986   if (variant_field == -1)
6987     return type;
6988
6989   if (dval0 == NULL)
6990     dval = value_from_contents_and_address (type, valaddr, address);
6991   else
6992     dval = dval0;
6993
6994   rtype = alloc_type (TYPE_OBJFILE (type));
6995   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6996   INIT_CPLUS_SPECIFIC (rtype);
6997   TYPE_NFIELDS (rtype) = nfields;
6998   TYPE_FIELDS (rtype) =
6999     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7000   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7001           sizeof (struct field) * nfields);
7002   TYPE_NAME (rtype) = ada_type_name (type);
7003   TYPE_TAG_NAME (rtype) = NULL;
7004   TYPE_FIXED_INSTANCE (rtype) = 1;
7005   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7006
7007   branch_type = to_fixed_variant_branch_type
7008     (TYPE_FIELD_TYPE (type, variant_field),
7009      cond_offset_host (valaddr,
7010                        TYPE_FIELD_BITPOS (type, variant_field)
7011                        / TARGET_CHAR_BIT),
7012      cond_offset_target (address,
7013                          TYPE_FIELD_BITPOS (type, variant_field)
7014                          / TARGET_CHAR_BIT), dval);
7015   if (branch_type == NULL)
7016     {
7017       int f;
7018       for (f = variant_field + 1; f < nfields; f += 1)
7019         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7020       TYPE_NFIELDS (rtype) -= 1;
7021     }
7022   else
7023     {
7024       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7025       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7026       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7027       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7028     }
7029   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7030
7031   value_free_to_mark (mark);
7032   return rtype;
7033 }
7034
7035 /* An ordinary record type (with fixed-length fields) that describes
7036    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7037    beginning of this section].   Any necessary discriminants' values
7038    should be in DVAL, a record value; it may be NULL if the object
7039    at ADDR itself contains any necessary discriminant values.
7040    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7041    values from the record are needed.  Except in the case that DVAL,
7042    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7043    unchecked) is replaced by a particular branch of the variant.
7044
7045    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7046    is questionable and may be removed.  It can arise during the
7047    processing of an unconstrained-array-of-record type where all the
7048    variant branches have exactly the same size.  This is because in
7049    such cases, the compiler does not bother to use the XVS convention
7050    when encoding the record.  I am currently dubious of this
7051    shortcut and suspect the compiler should be altered.  FIXME.  */
7052
7053 static struct type *
7054 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7055                       CORE_ADDR address, struct value *dval)
7056 {
7057   struct type *templ_type;
7058
7059   if (TYPE_FIXED_INSTANCE (type0))
7060     return type0;
7061
7062   templ_type = dynamic_template_type (type0);
7063
7064   if (templ_type != NULL)
7065     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7066   else if (variant_field_index (type0) >= 0)
7067     {
7068       if (dval == NULL && valaddr == NULL && address == 0)
7069         return type0;
7070       return to_record_with_fixed_variant_part (type0, valaddr, address,
7071                                                 dval);
7072     }
7073   else
7074     {
7075       TYPE_FIXED_INSTANCE (type0) = 1;
7076       return type0;
7077     }
7078
7079 }
7080
7081 /* An ordinary record type (with fixed-length fields) that describes
7082    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7083    union type.  Any necessary discriminants' values should be in DVAL,
7084    a record value.  That is, this routine selects the appropriate
7085    branch of the union at ADDR according to the discriminant value
7086    indicated in the union's type name.  Returns VAR_TYPE0 itself if
7087    it represents a variant subject to a pragma Unchecked_Union. */
7088
7089 static struct type *
7090 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7091                               CORE_ADDR address, struct value *dval)
7092 {
7093   int which;
7094   struct type *templ_type;
7095   struct type *var_type;
7096
7097   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7098     var_type = TYPE_TARGET_TYPE (var_type0);
7099   else
7100     var_type = var_type0;
7101
7102   templ_type = ada_find_parallel_type (var_type, "___XVU");
7103
7104   if (templ_type != NULL)
7105     var_type = templ_type;
7106
7107   if (is_unchecked_variant (var_type, value_type (dval)))
7108       return var_type0;
7109   which =
7110     ada_which_variant_applies (var_type,
7111                                value_type (dval), value_contents (dval));
7112
7113   if (which < 0)
7114     return empty_record (TYPE_OBJFILE (var_type));
7115   else if (is_dynamic_field (var_type, which))
7116     return to_fixed_record_type
7117       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7118        valaddr, address, dval);
7119   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7120     return
7121       to_fixed_record_type
7122       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7123   else
7124     return TYPE_FIELD_TYPE (var_type, which);
7125 }
7126
7127 /* Assuming that TYPE0 is an array type describing the type of a value
7128    at ADDR, and that DVAL describes a record containing any
7129    discriminants used in TYPE0, returns a type for the value that
7130    contains no dynamic components (that is, no components whose sizes
7131    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
7132    true, gives an error message if the resulting type's size is over
7133    varsize_limit.  */
7134
7135 static struct type *
7136 to_fixed_array_type (struct type *type0, struct value *dval,
7137                      int ignore_too_big)
7138 {
7139   struct type *index_type_desc;
7140   struct type *result;
7141   int packed_array_p;
7142
7143   if (TYPE_FIXED_INSTANCE (type0))
7144     return type0;
7145
7146   packed_array_p = ada_is_packed_array_type (type0);
7147   if (packed_array_p)
7148     type0 = decode_packed_array_type (type0);
7149
7150   index_type_desc = ada_find_parallel_type (type0, "___XA");
7151   if (index_type_desc == NULL)
7152     {
7153       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7154       /* NOTE: elt_type---the fixed version of elt_type0---should never
7155          depend on the contents of the array in properly constructed
7156          debugging data.  */
7157       /* Create a fixed version of the array element type.
7158          We're not providing the address of an element here,
7159          and thus the actual object value cannot be inspected to do
7160          the conversion.  This should not be a problem, since arrays of
7161          unconstrained objects are not allowed.  In particular, all
7162          the elements of an array of a tagged type should all be of
7163          the same type specified in the debugging info.  No need to
7164          consult the object tag.  */
7165       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7166
7167       /* Make sure we always create a new array type when dealing with
7168          packed array types, since we're going to fix-up the array
7169          type length and element bitsize a little further down.  */
7170       if (elt_type0 == elt_type && !packed_array_p)
7171         result = type0;
7172       else
7173         result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7174                                     elt_type, TYPE_INDEX_TYPE (type0));
7175     }
7176   else
7177     {
7178       int i;
7179       struct type *elt_type0;
7180
7181       elt_type0 = type0;
7182       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7183         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7184
7185       /* NOTE: result---the fixed version of elt_type0---should never
7186          depend on the contents of the array in properly constructed
7187          debugging data.  */
7188       /* Create a fixed version of the array element type.
7189          We're not providing the address of an element here,
7190          and thus the actual object value cannot be inspected to do
7191          the conversion.  This should not be a problem, since arrays of
7192          unconstrained objects are not allowed.  In particular, all
7193          the elements of an array of a tagged type should all be of
7194          the same type specified in the debugging info.  No need to
7195          consult the object tag.  */
7196       result =
7197         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7198       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7199         {
7200           struct type *range_type =
7201             to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
7202                                  dval, TYPE_OBJFILE (type0));
7203           result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7204                                       result, range_type);
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 =
9131                 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
9132             if (range_type == NULL)
9133               range_type = type_arg;
9134             switch (op)
9135               {
9136               default:
9137                 error (_("unexpected attribute encountered"));
9138               case OP_ATR_FIRST:
9139                 return value_from_longest 
9140                   (range_type, discrete_type_low_bound (range_type));
9141               case OP_ATR_LAST:
9142                 return value_from_longest
9143                   (range_type, discrete_type_high_bound (range_type));
9144               case OP_ATR_LENGTH:
9145                 error (_("the 'length attribute applies only to array types"));
9146               }
9147           }
9148         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9149           error (_("unimplemented type attribute"));
9150         else
9151           {
9152             LONGEST low, high;
9153
9154             if (ada_is_packed_array_type (type_arg))
9155               type_arg = decode_packed_array_type (type_arg);
9156
9157             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
9158             if (type == NULL)
9159               type = builtin_type (exp->gdbarch)->builtin_int;
9160
9161             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9162               return allocate_value (type);
9163
9164             switch (op)
9165               {
9166               default:
9167                 error (_("unexpected attribute encountered"));
9168               case OP_ATR_FIRST:
9169                 low = ada_array_bound_from_type (type_arg, tem, 0);
9170                 return value_from_longest (type, low);
9171               case OP_ATR_LAST:
9172                 high = ada_array_bound_from_type (type_arg, tem, 1);
9173                 return value_from_longest (type, high);
9174               case OP_ATR_LENGTH:
9175                 low = ada_array_bound_from_type (type_arg, tem, 0);
9176                 high = ada_array_bound_from_type (type_arg, tem, 1);
9177                 return value_from_longest (type, high - low + 1);
9178               }
9179           }
9180       }
9181
9182     case OP_ATR_TAG:
9183       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9184       if (noside == EVAL_SKIP)
9185         goto nosideret;
9186
9187       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9188         return value_zero (ada_tag_type (arg1), not_lval);
9189
9190       return ada_value_tag (arg1);
9191
9192     case OP_ATR_MIN:
9193     case OP_ATR_MAX:
9194       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9195       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9196       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9197       if (noside == EVAL_SKIP)
9198         goto nosideret;
9199       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9200         return value_zero (value_type (arg1), not_lval);
9201       else
9202         {
9203           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9204           return value_binop (arg1, arg2,
9205                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9206         }
9207
9208     case OP_ATR_MODULUS:
9209       {
9210         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
9211         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9212
9213         if (noside == EVAL_SKIP)
9214           goto nosideret;
9215
9216         if (!ada_is_modular_type (type_arg))
9217           error (_("'modulus must be applied to modular type"));
9218
9219         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9220                                    ada_modulus (type_arg));
9221       }
9222
9223
9224     case OP_ATR_POS:
9225       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9226       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9227       if (noside == EVAL_SKIP)
9228         goto nosideret;
9229       type = builtin_type (exp->gdbarch)->builtin_int;
9230       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9231         return value_zero (type, not_lval);
9232       else
9233         return value_pos_atr (type, arg1);
9234
9235     case OP_ATR_SIZE:
9236       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9237       type = value_type (arg1);
9238
9239       /* If the argument is a reference, then dereference its type, since
9240          the user is really asking for the size of the actual object,
9241          not the size of the pointer.  */
9242       if (TYPE_CODE (type) == TYPE_CODE_REF)
9243         type = TYPE_TARGET_TYPE (type);
9244
9245       if (noside == EVAL_SKIP)
9246         goto nosideret;
9247       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9248         return value_zero (builtin_type_int32, not_lval);
9249       else
9250         return value_from_longest (builtin_type_int32,
9251                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
9252
9253     case OP_ATR_VAL:
9254       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9255       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9256       type = exp->elts[pc + 2].type;
9257       if (noside == EVAL_SKIP)
9258         goto nosideret;
9259       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9260         return value_zero (type, not_lval);
9261       else
9262         return value_val_atr (type, arg1);
9263
9264     case BINOP_EXP:
9265       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9266       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9267       if (noside == EVAL_SKIP)
9268         goto nosideret;
9269       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9270         return value_zero (value_type (arg1), not_lval);
9271       else
9272         {
9273           /* For integer exponentiation operations,
9274              only promote the first argument.  */
9275           if (is_integral_type (value_type (arg2)))
9276             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9277           else
9278             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9279
9280           return value_binop (arg1, arg2, op);
9281         }
9282
9283     case UNOP_PLUS:
9284       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9285       if (noside == EVAL_SKIP)
9286         goto nosideret;
9287       else
9288         return arg1;
9289
9290     case UNOP_ABS:
9291       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9292       if (noside == EVAL_SKIP)
9293         goto nosideret;
9294       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9295       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9296         return value_neg (arg1);
9297       else
9298         return arg1;
9299
9300     case UNOP_IND:
9301       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9302       if (noside == EVAL_SKIP)
9303         goto nosideret;
9304       type = ada_check_typedef (value_type (arg1));
9305       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9306         {
9307           if (ada_is_array_descriptor_type (type))
9308             /* GDB allows dereferencing GNAT array descriptors.  */
9309             {
9310               struct type *arrType = ada_type_of_array (arg1, 0);
9311               if (arrType == NULL)
9312                 error (_("Attempt to dereference null array pointer."));
9313               return value_at_lazy (arrType, 0);
9314             }
9315           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9316                    || TYPE_CODE (type) == TYPE_CODE_REF
9317                    /* In C you can dereference an array to get the 1st elt.  */
9318                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9319             {
9320               type = to_static_fixed_type
9321                 (ada_aligned_type
9322                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9323               check_size (type);
9324               return value_zero (type, lval_memory);
9325             }
9326           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9327             {
9328               /* GDB allows dereferencing an int.  */
9329               if (expect_type == NULL)
9330                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9331                                    lval_memory);
9332               else
9333                 {
9334                   expect_type = 
9335                     to_static_fixed_type (ada_aligned_type (expect_type));
9336                   return value_zero (expect_type, lval_memory);
9337                 }
9338             }
9339           else
9340             error (_("Attempt to take contents of a non-pointer value."));
9341         }
9342       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9343       type = ada_check_typedef (value_type (arg1));
9344
9345       if (TYPE_CODE (type) == TYPE_CODE_INT)
9346           /* GDB allows dereferencing an int.  If we were given
9347              the expect_type, then use that as the target type.
9348              Otherwise, assume that the target type is an int.  */
9349         {
9350           if (expect_type != NULL)
9351             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9352                                               arg1));
9353           else
9354             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9355                                   (CORE_ADDR) value_as_address (arg1));
9356         }
9357
9358       if (ada_is_array_descriptor_type (type))
9359         /* GDB allows dereferencing GNAT array descriptors.  */
9360         return ada_coerce_to_simple_array (arg1);
9361       else
9362         return ada_value_ind (arg1);
9363
9364     case STRUCTOP_STRUCT:
9365       tem = longest_to_int (exp->elts[pc + 1].longconst);
9366       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9367       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9368       if (noside == EVAL_SKIP)
9369         goto nosideret;
9370       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9371         {
9372           struct type *type1 = value_type (arg1);
9373           if (ada_is_tagged_type (type1, 1))
9374             {
9375               type = ada_lookup_struct_elt_type (type1,
9376                                                  &exp->elts[pc + 2].string,
9377                                                  1, 1, NULL);
9378               if (type == NULL)
9379                 /* In this case, we assume that the field COULD exist
9380                    in some extension of the type.  Return an object of 
9381                    "type" void, which will match any formal 
9382                    (see ada_type_match). */
9383                 return value_zero (builtin_type_void, lval_memory);
9384             }
9385           else
9386             type =
9387               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9388                                           0, NULL);
9389
9390           return value_zero (ada_aligned_type (type), lval_memory);
9391         }
9392       else
9393         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9394         arg1 = unwrap_value (arg1);
9395         return ada_to_fixed_value (arg1);
9396
9397     case OP_TYPE:
9398       /* The value is not supposed to be used.  This is here to make it
9399          easier to accommodate expressions that contain types.  */
9400       (*pos) += 2;
9401       if (noside == EVAL_SKIP)
9402         goto nosideret;
9403       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9404         return allocate_value (exp->elts[pc + 1].type);
9405       else
9406         error (_("Attempt to use a type name as an expression"));
9407
9408     case OP_AGGREGATE:
9409     case OP_CHOICES:
9410     case OP_OTHERS:
9411     case OP_DISCRETE_RANGE:
9412     case OP_POSITIONAL:
9413     case OP_NAME:
9414       if (noside == EVAL_NORMAL)
9415         switch (op) 
9416           {
9417           case OP_NAME:
9418             error (_("Undefined name, ambiguous name, or renaming used in "
9419                      "component association: %s."), &exp->elts[pc+2].string);
9420           case OP_AGGREGATE:
9421             error (_("Aggregates only allowed on the right of an assignment"));
9422           default:
9423             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9424           }
9425
9426       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9427       *pos += oplen - 1;
9428       for (tem = 0; tem < nargs; tem += 1) 
9429         ada_evaluate_subexp (NULL, exp, pos, noside);
9430       goto nosideret;
9431     }
9432
9433 nosideret:
9434   return value_from_longest (builtin_type_int8, (LONGEST) 1);
9435 }
9436 \f
9437
9438                                 /* Fixed point */
9439
9440 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9441    type name that encodes the 'small and 'delta information.
9442    Otherwise, return NULL.  */
9443
9444 static const char *
9445 fixed_type_info (struct type *type)
9446 {
9447   const char *name = ada_type_name (type);
9448   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9449
9450   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9451     {
9452       const char *tail = strstr (name, "___XF_");
9453       if (tail == NULL)
9454         return NULL;
9455       else
9456         return tail + 5;
9457     }
9458   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9459     return fixed_type_info (TYPE_TARGET_TYPE (type));
9460   else
9461     return NULL;
9462 }
9463
9464 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9465
9466 int
9467 ada_is_fixed_point_type (struct type *type)
9468 {
9469   return fixed_type_info (type) != NULL;
9470 }
9471
9472 /* Return non-zero iff TYPE represents a System.Address type.  */
9473
9474 int
9475 ada_is_system_address_type (struct type *type)
9476 {
9477   return (TYPE_NAME (type)
9478           && strcmp (TYPE_NAME (type), "system__address") == 0);
9479 }
9480
9481 /* Assuming that TYPE is the representation of an Ada fixed-point
9482    type, return its delta, or -1 if the type is malformed and the
9483    delta cannot be determined.  */
9484
9485 DOUBLEST
9486 ada_delta (struct type *type)
9487 {
9488   const char *encoding = fixed_type_info (type);
9489   DOUBLEST num, den;
9490
9491   /* Strictly speaking, num and den are encoded as integer.  However,
9492      they may not fit into a long, and they will have to be converted
9493      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9494   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9495               &num, &den) < 2)
9496     return -1.0;
9497   else
9498     return num / den;
9499 }
9500
9501 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9502    factor ('SMALL value) associated with the type.  */
9503
9504 static DOUBLEST
9505 scaling_factor (struct type *type)
9506 {
9507   const char *encoding = fixed_type_info (type);
9508   DOUBLEST num0, den0, num1, den1;
9509   int n;
9510
9511   /* Strictly speaking, num's and den's are encoded as integer.  However,
9512      they may not fit into a long, and they will have to be converted
9513      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9514   n = sscanf (encoding,
9515               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
9516               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9517               &num0, &den0, &num1, &den1);
9518
9519   if (n < 2)
9520     return 1.0;
9521   else if (n == 4)
9522     return num1 / den1;
9523   else
9524     return num0 / den0;
9525 }
9526
9527
9528 /* Assuming that X is the representation of a value of fixed-point
9529    type TYPE, return its floating-point equivalent.  */
9530
9531 DOUBLEST
9532 ada_fixed_to_float (struct type *type, LONGEST x)
9533 {
9534   return (DOUBLEST) x *scaling_factor (type);
9535 }
9536
9537 /* The representation of a fixed-point value of type TYPE
9538    corresponding to the value X.  */
9539
9540 LONGEST
9541 ada_float_to_fixed (struct type *type, DOUBLEST x)
9542 {
9543   return (LONGEST) (x / scaling_factor (type) + 0.5);
9544 }
9545
9546
9547                                 /* VAX floating formats */
9548
9549 /* Non-zero iff TYPE represents one of the special VAX floating-point
9550    types.  */
9551
9552 int
9553 ada_is_vax_floating_type (struct type *type)
9554 {
9555   int name_len =
9556     (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9557   return
9558     name_len > 6
9559     && (TYPE_CODE (type) == TYPE_CODE_INT
9560         || TYPE_CODE (type) == TYPE_CODE_RANGE)
9561     && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9562 }
9563
9564 /* The type of special VAX floating-point type this is, assuming
9565    ada_is_vax_floating_point.  */
9566
9567 int
9568 ada_vax_float_type_suffix (struct type *type)
9569 {
9570   return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9571 }
9572
9573 /* A value representing the special debugging function that outputs
9574    VAX floating-point values of the type represented by TYPE.  Assumes
9575    ada_is_vax_floating_type (TYPE).  */
9576
9577 struct value *
9578 ada_vax_float_print_function (struct type *type)
9579 {
9580   switch (ada_vax_float_type_suffix (type))
9581     {
9582     case 'F':
9583       return get_var_value ("DEBUG_STRING_F", 0);
9584     case 'D':
9585       return get_var_value ("DEBUG_STRING_D", 0);
9586     case 'G':
9587       return get_var_value ("DEBUG_STRING_G", 0);
9588     default:
9589       error (_("invalid VAX floating-point type"));
9590     }
9591 }
9592 \f
9593
9594                                 /* Range types */
9595
9596 /* Scan STR beginning at position K for a discriminant name, and
9597    return the value of that discriminant field of DVAL in *PX.  If
9598    PNEW_K is not null, put the position of the character beyond the
9599    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9600    not alter *PX and *PNEW_K if unsuccessful.  */
9601
9602 static int
9603 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9604                     int *pnew_k)
9605 {
9606   static char *bound_buffer = NULL;
9607   static size_t bound_buffer_len = 0;
9608   char *bound;
9609   char *pend;
9610   struct value *bound_val;
9611
9612   if (dval == NULL || str == NULL || str[k] == '\0')
9613     return 0;
9614
9615   pend = strstr (str + k, "__");
9616   if (pend == NULL)
9617     {
9618       bound = str + k;
9619       k += strlen (bound);
9620     }
9621   else
9622     {
9623       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9624       bound = bound_buffer;
9625       strncpy (bound_buffer, str + k, pend - (str + k));
9626       bound[pend - (str + k)] = '\0';
9627       k = pend - str;
9628     }
9629
9630   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9631   if (bound_val == NULL)
9632     return 0;
9633
9634   *px = value_as_long (bound_val);
9635   if (pnew_k != NULL)
9636     *pnew_k = k;
9637   return 1;
9638 }
9639
9640 /* Value of variable named NAME in the current environment.  If
9641    no such variable found, then if ERR_MSG is null, returns 0, and
9642    otherwise causes an error with message ERR_MSG.  */
9643
9644 static struct value *
9645 get_var_value (char *name, char *err_msg)
9646 {
9647   struct ada_symbol_info *syms;
9648   int nsyms;
9649
9650   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9651                                   &syms);
9652
9653   if (nsyms != 1)
9654     {
9655       if (err_msg == NULL)
9656         return 0;
9657       else
9658         error (("%s"), err_msg);
9659     }
9660
9661   return value_of_variable (syms[0].sym, syms[0].block);
9662 }
9663
9664 /* Value of integer variable named NAME in the current environment.  If
9665    no such variable found, returns 0, and sets *FLAG to 0.  If
9666    successful, sets *FLAG to 1.  */
9667
9668 LONGEST
9669 get_int_var_value (char *name, int *flag)
9670 {
9671   struct value *var_val = get_var_value (name, 0);
9672
9673   if (var_val == 0)
9674     {
9675       if (flag != NULL)
9676         *flag = 0;
9677       return 0;
9678     }
9679   else
9680     {
9681       if (flag != NULL)
9682         *flag = 1;
9683       return value_as_long (var_val);
9684     }
9685 }
9686
9687
9688 /* Return a range type whose base type is that of the range type named
9689    NAME in the current environment, and whose bounds are calculated
9690    from NAME according to the GNAT range encoding conventions.
9691    Extract discriminant values, if needed, from DVAL.  If a new type
9692    must be created, allocate in OBJFILE's space.  The bounds
9693    information, in general, is encoded in NAME, the base type given in
9694    the named range type.  */
9695
9696 static struct type *
9697 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9698 {
9699   struct type *raw_type = ada_find_any_type (name);
9700   struct type *base_type;
9701   char *subtype_info;
9702
9703   /* Also search primitive types if type symbol could not be found.  */
9704   if (raw_type == NULL)
9705     raw_type = language_lookup_primitive_type_by_name
9706                 (language_def (language_ada), current_gdbarch, name);
9707
9708   if (raw_type == NULL)
9709     base_type = builtin_type_int32;
9710   else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9711     base_type = TYPE_TARGET_TYPE (raw_type);
9712   else
9713     base_type = raw_type;
9714
9715   subtype_info = strstr (name, "___XD");
9716   if (subtype_info == NULL)
9717     {
9718       LONGEST L = discrete_type_low_bound (raw_type);
9719       LONGEST U = discrete_type_high_bound (raw_type);
9720       if (L < INT_MIN || U > INT_MAX)
9721         return raw_type;
9722       else
9723         return create_range_type (alloc_type (objfile), raw_type, 
9724                                   discrete_type_low_bound (raw_type),
9725                                   discrete_type_high_bound (raw_type));
9726     }
9727   else
9728     {
9729       static char *name_buf = NULL;
9730       static size_t name_len = 0;
9731       int prefix_len = subtype_info - name;
9732       LONGEST L, U;
9733       struct type *type;
9734       char *bounds_str;
9735       int n;
9736
9737       GROW_VECT (name_buf, name_len, prefix_len + 5);
9738       strncpy (name_buf, name, prefix_len);
9739       name_buf[prefix_len] = '\0';
9740
9741       subtype_info += 5;
9742       bounds_str = strchr (subtype_info, '_');
9743       n = 1;
9744
9745       if (*subtype_info == 'L')
9746         {
9747           if (!ada_scan_number (bounds_str, n, &L, &n)
9748               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9749             return raw_type;
9750           if (bounds_str[n] == '_')
9751             n += 2;
9752           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9753             n += 1;
9754           subtype_info += 1;
9755         }
9756       else
9757         {
9758           int ok;
9759           strcpy (name_buf + prefix_len, "___L");
9760           L = get_int_var_value (name_buf, &ok);
9761           if (!ok)
9762             {
9763               lim_warning (_("Unknown lower bound, using 1."));
9764               L = 1;
9765             }
9766         }
9767
9768       if (*subtype_info == 'U')
9769         {
9770           if (!ada_scan_number (bounds_str, n, &U, &n)
9771               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9772             return raw_type;
9773         }
9774       else
9775         {
9776           int ok;
9777           strcpy (name_buf + prefix_len, "___U");
9778           U = get_int_var_value (name_buf, &ok);
9779           if (!ok)
9780             {
9781               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9782               U = L;
9783             }
9784         }
9785
9786       if (objfile == NULL)
9787         objfile = TYPE_OBJFILE (base_type);
9788       type = create_range_type (alloc_type (objfile), base_type, L, U);
9789       TYPE_NAME (type) = name;
9790       return type;
9791     }
9792 }
9793
9794 /* True iff NAME is the name of a range type.  */
9795
9796 int
9797 ada_is_range_type_name (const char *name)
9798 {
9799   return (name != NULL && strstr (name, "___XD"));
9800 }
9801 \f
9802
9803                                 /* Modular types */
9804
9805 /* True iff TYPE is an Ada modular type.  */
9806
9807 int
9808 ada_is_modular_type (struct type *type)
9809 {
9810   struct type *subranged_type = base_type (type);
9811
9812   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9813           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9814           && TYPE_UNSIGNED (subranged_type));
9815 }
9816
9817 /* Try to determine the lower and upper bounds of the given modular type
9818    using the type name only.  Return non-zero and set L and U as the lower
9819    and upper bounds (respectively) if successful.  */
9820
9821 int
9822 ada_modulus_from_name (struct type *type, ULONGEST *modulus)
9823 {
9824   char *name = ada_type_name (type);
9825   char *suffix;
9826   int k;
9827   LONGEST U;
9828
9829   if (name == NULL)
9830     return 0;
9831
9832   /* Discrete type bounds are encoded using an __XD suffix.  In our case,
9833      we are looking for static bounds, which means an __XDLU suffix.
9834      Moreover, we know that the lower bound of modular types is always
9835      zero, so the actual suffix should start with "__XDLU_0__", and
9836      then be followed by the upper bound value.  */
9837   suffix = strstr (name, "__XDLU_0__");
9838   if (suffix == NULL)
9839     return 0;
9840   k = 10;
9841   if (!ada_scan_number (suffix, k, &U, NULL))
9842     return 0;
9843
9844   *modulus = (ULONGEST) U + 1;
9845   return 1;
9846 }
9847
9848 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9849
9850 ULONGEST
9851 ada_modulus (struct type *type)
9852 {
9853   ULONGEST modulus;
9854
9855   /* Normally, the modulus of a modular type is equal to the value of
9856      its upper bound + 1.  However, the upper bound is currently stored
9857      as an int, which is not always big enough to hold the actual bound
9858      value.  To workaround this, try to take advantage of the encoding
9859      that GNAT uses with with discrete types.  To avoid some unnecessary
9860      parsing, we do this only when the size of TYPE is greater than
9861      the size of the field holding the bound.  */
9862   if (TYPE_LENGTH (type) > sizeof (TYPE_HIGH_BOUND (type))
9863       && ada_modulus_from_name (type, &modulus))
9864     return modulus;
9865
9866   return (ULONGEST) (unsigned int) TYPE_HIGH_BOUND (type) + 1;
9867 }
9868 \f
9869
9870 /* Ada exception catchpoint support:
9871    ---------------------------------
9872
9873    We support 3 kinds of exception catchpoints:
9874      . catchpoints on Ada exceptions
9875      . catchpoints on unhandled Ada exceptions
9876      . catchpoints on failed assertions
9877
9878    Exceptions raised during failed assertions, or unhandled exceptions
9879    could perfectly be caught with the general catchpoint on Ada exceptions.
9880    However, we can easily differentiate these two special cases, and having
9881    the option to distinguish these two cases from the rest can be useful
9882    to zero-in on certain situations.
9883
9884    Exception catchpoints are a specialized form of breakpoint,
9885    since they rely on inserting breakpoints inside known routines
9886    of the GNAT runtime.  The implementation therefore uses a standard
9887    breakpoint structure of the BP_BREAKPOINT type, but with its own set
9888    of breakpoint_ops.
9889
9890    Support in the runtime for exception catchpoints have been changed
9891    a few times already, and these changes affect the implementation
9892    of these catchpoints.  In order to be able to support several
9893    variants of the runtime, we use a sniffer that will determine
9894    the runtime variant used by the program being debugged.
9895
9896    At this time, we do not support the use of conditions on Ada exception
9897    catchpoints.  The COND and COND_STRING fields are therefore set
9898    to NULL (most of the time, see below).
9899    
9900    Conditions where EXP_STRING, COND, and COND_STRING are used:
9901
9902      When a user specifies the name of a specific exception in the case
9903      of catchpoints on Ada exceptions, we store the name of that exception
9904      in the EXP_STRING.  We then translate this request into an actual
9905      condition stored in COND_STRING, and then parse it into an expression
9906      stored in COND.  */
9907
9908 /* The different types of catchpoints that we introduced for catching
9909    Ada exceptions.  */
9910
9911 enum exception_catchpoint_kind
9912 {
9913   ex_catch_exception,
9914   ex_catch_exception_unhandled,
9915   ex_catch_assert
9916 };
9917
9918 /* Ada's standard exceptions.  */
9919
9920 static char *standard_exc[] = {
9921   "constraint_error",
9922   "program_error",
9923   "storage_error",
9924   "tasking_error"
9925 };
9926
9927 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9928
9929 /* A structure that describes how to support exception catchpoints
9930    for a given executable.  */
9931
9932 struct exception_support_info
9933 {
9934    /* The name of the symbol to break on in order to insert
9935       a catchpoint on exceptions.  */
9936    const char *catch_exception_sym;
9937
9938    /* The name of the symbol to break on in order to insert
9939       a catchpoint on unhandled exceptions.  */
9940    const char *catch_exception_unhandled_sym;
9941
9942    /* The name of the symbol to break on in order to insert
9943       a catchpoint on failed assertions.  */
9944    const char *catch_assert_sym;
9945
9946    /* Assuming that the inferior just triggered an unhandled exception
9947       catchpoint, this function is responsible for returning the address
9948       in inferior memory where the name of that exception is stored.
9949       Return zero if the address could not be computed.  */
9950    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9951 };
9952
9953 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9954 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9955
9956 /* The following exception support info structure describes how to
9957    implement exception catchpoints with the latest version of the
9958    Ada runtime (as of 2007-03-06).  */
9959
9960 static const struct exception_support_info default_exception_support_info =
9961 {
9962   "__gnat_debug_raise_exception", /* catch_exception_sym */
9963   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9964   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9965   ada_unhandled_exception_name_addr
9966 };
9967
9968 /* The following exception support info structure describes how to
9969    implement exception catchpoints with a slightly older version
9970    of the Ada runtime.  */
9971
9972 static const struct exception_support_info exception_support_info_fallback =
9973 {
9974   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9975   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9976   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
9977   ada_unhandled_exception_name_addr_from_raise
9978 };
9979
9980 /* For each executable, we sniff which exception info structure to use
9981    and cache it in the following global variable.  */
9982
9983 static const struct exception_support_info *exception_info = NULL;
9984
9985 /* Inspect the Ada runtime and determine which exception info structure
9986    should be used to provide support for exception catchpoints.
9987
9988    This function will always set exception_info, or raise an error.  */
9989
9990 static void
9991 ada_exception_support_info_sniffer (void)
9992 {
9993   struct symbol *sym;
9994
9995   /* If the exception info is already known, then no need to recompute it.  */
9996   if (exception_info != NULL)
9997     return;
9998
9999   /* Check the latest (default) exception support info.  */
10000   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
10001                          NULL, VAR_DOMAIN);
10002   if (sym != NULL)
10003     {
10004       exception_info = &default_exception_support_info;
10005       return;
10006     }
10007
10008   /* Try our fallback exception suport info.  */
10009   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10010                          NULL, VAR_DOMAIN);
10011   if (sym != NULL)
10012     {
10013       exception_info = &exception_support_info_fallback;
10014       return;
10015     }
10016
10017   /* Sometimes, it is normal for us to not be able to find the routine
10018      we are looking for.  This happens when the program is linked with
10019      the shared version of the GNAT runtime, and the program has not been
10020      started yet.  Inform the user of these two possible causes if
10021      applicable.  */
10022
10023   if (ada_update_initial_language (language_unknown, NULL) != language_ada)
10024     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
10025
10026   /* If the symbol does not exist, then check that the program is
10027      already started, to make sure that shared libraries have been
10028      loaded.  If it is not started, this may mean that the symbol is
10029      in a shared library.  */
10030
10031   if (ptid_get_pid (inferior_ptid) == 0)
10032     error (_("Unable to insert catchpoint. Try to start the program first."));
10033
10034   /* At this point, we know that we are debugging an Ada program and
10035      that the inferior has been started, but we still are not able to
10036      find the run-time symbols. That can mean that we are in
10037      configurable run time mode, or that a-except as been optimized
10038      out by the linker...  In any case, at this point it is not worth
10039      supporting this feature.  */
10040
10041   error (_("Cannot insert catchpoints in this configuration."));
10042 }
10043
10044 /* An observer of "executable_changed" events.
10045    Its role is to clear certain cached values that need to be recomputed
10046    each time a new executable is loaded by GDB.  */
10047
10048 static void
10049 ada_executable_changed_observer (void)
10050 {
10051   /* If the executable changed, then it is possible that the Ada runtime
10052      is different.  So we need to invalidate the exception support info
10053      cache.  */
10054   exception_info = NULL;
10055 }
10056
10057 /* Return the name of the function at PC, NULL if could not find it.
10058    This function only checks the debugging information, not the symbol
10059    table.  */
10060
10061 static char *
10062 function_name_from_pc (CORE_ADDR pc)
10063 {
10064   char *func_name;
10065
10066   if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
10067     return NULL;
10068
10069   return func_name;
10070 }
10071
10072 /* True iff FRAME is very likely to be that of a function that is
10073    part of the runtime system.  This is all very heuristic, but is
10074    intended to be used as advice as to what frames are uninteresting
10075    to most users.  */
10076
10077 static int
10078 is_known_support_routine (struct frame_info *frame)
10079 {
10080   struct symtab_and_line sal;
10081   char *func_name;
10082   int i;
10083
10084   /* If this code does not have any debugging information (no symtab),
10085      This cannot be any user code.  */
10086
10087   find_frame_sal (frame, &sal);
10088   if (sal.symtab == NULL)
10089     return 1;
10090
10091   /* If there is a symtab, but the associated source file cannot be
10092      located, then assume this is not user code:  Selecting a frame
10093      for which we cannot display the code would not be very helpful
10094      for the user.  This should also take care of case such as VxWorks
10095      where the kernel has some debugging info provided for a few units.  */
10096
10097   if (symtab_to_fullname (sal.symtab) == NULL)
10098     return 1;
10099
10100   /* Check the unit filename againt the Ada runtime file naming.
10101      We also check the name of the objfile against the name of some
10102      known system libraries that sometimes come with debugging info
10103      too.  */
10104
10105   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10106     {
10107       re_comp (known_runtime_file_name_patterns[i]);
10108       if (re_exec (sal.symtab->filename))
10109         return 1;
10110       if (sal.symtab->objfile != NULL
10111           && re_exec (sal.symtab->objfile->name))
10112         return 1;
10113     }
10114
10115   /* Check whether the function is a GNAT-generated entity.  */
10116
10117   func_name = function_name_from_pc (get_frame_address_in_block (frame));
10118   if (func_name == NULL)
10119     return 1;
10120
10121   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10122     {
10123       re_comp (known_auxiliary_function_name_patterns[i]);
10124       if (re_exec (func_name))
10125         return 1;
10126     }
10127
10128   return 0;
10129 }
10130
10131 /* Find the first frame that contains debugging information and that is not
10132    part of the Ada run-time, starting from FI and moving upward.  */
10133
10134 void
10135 ada_find_printable_frame (struct frame_info *fi)
10136 {
10137   for (; fi != NULL; fi = get_prev_frame (fi))
10138     {
10139       if (!is_known_support_routine (fi))
10140         {
10141           select_frame (fi);
10142           break;
10143         }
10144     }
10145
10146 }
10147
10148 /* Assuming that the inferior just triggered an unhandled exception
10149    catchpoint, return the address in inferior memory where the name
10150    of the exception is stored.
10151    
10152    Return zero if the address could not be computed.  */
10153
10154 static CORE_ADDR
10155 ada_unhandled_exception_name_addr (void)
10156 {
10157   return parse_and_eval_address ("e.full_name");
10158 }
10159
10160 /* Same as ada_unhandled_exception_name_addr, except that this function
10161    should be used when the inferior uses an older version of the runtime,
10162    where the exception name needs to be extracted from a specific frame
10163    several frames up in the callstack.  */
10164
10165 static CORE_ADDR
10166 ada_unhandled_exception_name_addr_from_raise (void)
10167 {
10168   int frame_level;
10169   struct frame_info *fi;
10170
10171   /* To determine the name of this exception, we need to select
10172      the frame corresponding to RAISE_SYM_NAME.  This frame is
10173      at least 3 levels up, so we simply skip the first 3 frames
10174      without checking the name of their associated function.  */
10175   fi = get_current_frame ();
10176   for (frame_level = 0; frame_level < 3; frame_level += 1)
10177     if (fi != NULL)
10178       fi = get_prev_frame (fi); 
10179
10180   while (fi != NULL)
10181     {
10182       const char *func_name =
10183         function_name_from_pc (get_frame_address_in_block (fi));
10184       if (func_name != NULL
10185           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
10186         break; /* We found the frame we were looking for...  */
10187       fi = get_prev_frame (fi);
10188     }
10189
10190   if (fi == NULL)
10191     return 0;
10192
10193   select_frame (fi);
10194   return parse_and_eval_address ("id.full_name");
10195 }
10196
10197 /* Assuming the inferior just triggered an Ada exception catchpoint
10198    (of any type), return the address in inferior memory where the name
10199    of the exception is stored, if applicable.
10200
10201    Return zero if the address could not be computed, or if not relevant.  */
10202
10203 static CORE_ADDR
10204 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10205                            struct breakpoint *b)
10206 {
10207   switch (ex)
10208     {
10209       case ex_catch_exception:
10210         return (parse_and_eval_address ("e.full_name"));
10211         break;
10212
10213       case ex_catch_exception_unhandled:
10214         return exception_info->unhandled_exception_name_addr ();
10215         break;
10216       
10217       case ex_catch_assert:
10218         return 0;  /* Exception name is not relevant in this case.  */
10219         break;
10220
10221       default:
10222         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10223         break;
10224     }
10225
10226   return 0; /* Should never be reached.  */
10227 }
10228
10229 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10230    any error that ada_exception_name_addr_1 might cause to be thrown.
10231    When an error is intercepted, a warning with the error message is printed,
10232    and zero is returned.  */
10233
10234 static CORE_ADDR
10235 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10236                          struct breakpoint *b)
10237 {
10238   struct gdb_exception e;
10239   CORE_ADDR result = 0;
10240
10241   TRY_CATCH (e, RETURN_MASK_ERROR)
10242     {
10243       result = ada_exception_name_addr_1 (ex, b);
10244     }
10245
10246   if (e.reason < 0)
10247     {
10248       warning (_("failed to get exception name: %s"), e.message);
10249       return 0;
10250     }
10251
10252   return result;
10253 }
10254
10255 /* Implement the PRINT_IT method in the breakpoint_ops structure
10256    for all exception catchpoint kinds.  */
10257
10258 static enum print_stop_action
10259 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10260 {
10261   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10262   char exception_name[256];
10263
10264   if (addr != 0)
10265     {
10266       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10267       exception_name [sizeof (exception_name) - 1] = '\0';
10268     }
10269
10270   ada_find_printable_frame (get_current_frame ());
10271
10272   annotate_catchpoint (b->number);
10273   switch (ex)
10274     {
10275       case ex_catch_exception:
10276         if (addr != 0)
10277           printf_filtered (_("\nCatchpoint %d, %s at "),
10278                            b->number, exception_name);
10279         else
10280           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10281         break;
10282       case ex_catch_exception_unhandled:
10283         if (addr != 0)
10284           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10285                            b->number, exception_name);
10286         else
10287           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10288                            b->number);
10289         break;
10290       case ex_catch_assert:
10291         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10292                          b->number);
10293         break;
10294     }
10295
10296   return PRINT_SRC_AND_LOC;
10297 }
10298
10299 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10300    for all exception catchpoint kinds.  */
10301
10302 static void
10303 print_one_exception (enum exception_catchpoint_kind ex,
10304                      struct breakpoint *b, CORE_ADDR *last_addr)
10305
10306   struct value_print_options opts;
10307
10308   get_user_print_options (&opts);
10309   if (opts.addressprint)
10310     {
10311       annotate_field (4);
10312       ui_out_field_core_addr (uiout, "addr", b->loc->address);
10313     }
10314
10315   annotate_field (5);
10316   *last_addr = b->loc->address;
10317   switch (ex)
10318     {
10319       case ex_catch_exception:
10320         if (b->exp_string != NULL)
10321           {
10322             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10323             
10324             ui_out_field_string (uiout, "what", msg);
10325             xfree (msg);
10326           }
10327         else
10328           ui_out_field_string (uiout, "what", "all Ada exceptions");
10329         
10330         break;
10331
10332       case ex_catch_exception_unhandled:
10333         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10334         break;
10335       
10336       case ex_catch_assert:
10337         ui_out_field_string (uiout, "what", "failed Ada assertions");
10338         break;
10339
10340       default:
10341         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10342         break;
10343     }
10344 }
10345
10346 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10347    for all exception catchpoint kinds.  */
10348
10349 static void
10350 print_mention_exception (enum exception_catchpoint_kind ex,
10351                          struct breakpoint *b)
10352 {
10353   switch (ex)
10354     {
10355       case ex_catch_exception:
10356         if (b->exp_string != NULL)
10357           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10358                            b->number, b->exp_string);
10359         else
10360           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10361         
10362         break;
10363
10364       case ex_catch_exception_unhandled:
10365         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10366                          b->number);
10367         break;
10368       
10369       case ex_catch_assert:
10370         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10371         break;
10372
10373       default:
10374         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10375         break;
10376     }
10377 }
10378
10379 /* Virtual table for "catch exception" breakpoints.  */
10380
10381 static enum print_stop_action
10382 print_it_catch_exception (struct breakpoint *b)
10383 {
10384   return print_it_exception (ex_catch_exception, b);
10385 }
10386
10387 static void
10388 print_one_catch_exception (struct breakpoint *b, CORE_ADDR *last_addr)
10389 {
10390   print_one_exception (ex_catch_exception, b, last_addr);
10391 }
10392
10393 static void
10394 print_mention_catch_exception (struct breakpoint *b)
10395 {
10396   print_mention_exception (ex_catch_exception, b);
10397 }
10398
10399 static struct breakpoint_ops catch_exception_breakpoint_ops =
10400 {
10401   NULL, /* insert */
10402   NULL, /* remove */
10403   NULL, /* breakpoint_hit */
10404   print_it_catch_exception,
10405   print_one_catch_exception,
10406   print_mention_catch_exception
10407 };
10408
10409 /* Virtual table for "catch exception unhandled" breakpoints.  */
10410
10411 static enum print_stop_action
10412 print_it_catch_exception_unhandled (struct breakpoint *b)
10413 {
10414   return print_it_exception (ex_catch_exception_unhandled, b);
10415 }
10416
10417 static void
10418 print_one_catch_exception_unhandled (struct breakpoint *b, CORE_ADDR *last_addr)
10419 {
10420   print_one_exception (ex_catch_exception_unhandled, b, last_addr);
10421 }
10422
10423 static void
10424 print_mention_catch_exception_unhandled (struct breakpoint *b)
10425 {
10426   print_mention_exception (ex_catch_exception_unhandled, b);
10427 }
10428
10429 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10430   NULL, /* insert */
10431   NULL, /* remove */
10432   NULL, /* breakpoint_hit */
10433   print_it_catch_exception_unhandled,
10434   print_one_catch_exception_unhandled,
10435   print_mention_catch_exception_unhandled
10436 };
10437
10438 /* Virtual table for "catch assert" breakpoints.  */
10439
10440 static enum print_stop_action
10441 print_it_catch_assert (struct breakpoint *b)
10442 {
10443   return print_it_exception (ex_catch_assert, b);
10444 }
10445
10446 static void
10447 print_one_catch_assert (struct breakpoint *b, CORE_ADDR *last_addr)
10448 {
10449   print_one_exception (ex_catch_assert, b, last_addr);
10450 }
10451
10452 static void
10453 print_mention_catch_assert (struct breakpoint *b)
10454 {
10455   print_mention_exception (ex_catch_assert, b);
10456 }
10457
10458 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10459   NULL, /* insert */
10460   NULL, /* remove */
10461   NULL, /* breakpoint_hit */
10462   print_it_catch_assert,
10463   print_one_catch_assert,
10464   print_mention_catch_assert
10465 };
10466
10467 /* Return non-zero if B is an Ada exception catchpoint.  */
10468
10469 int
10470 ada_exception_catchpoint_p (struct breakpoint *b)
10471 {
10472   return (b->ops == &catch_exception_breakpoint_ops
10473           || b->ops == &catch_exception_unhandled_breakpoint_ops
10474           || b->ops == &catch_assert_breakpoint_ops);
10475 }
10476
10477 /* Return a newly allocated copy of the first space-separated token
10478    in ARGSP, and then adjust ARGSP to point immediately after that
10479    token.
10480
10481    Return NULL if ARGPS does not contain any more tokens.  */
10482
10483 static char *
10484 ada_get_next_arg (char **argsp)
10485 {
10486   char *args = *argsp;
10487   char *end;
10488   char *result;
10489
10490   /* Skip any leading white space.  */
10491
10492   while (isspace (*args))
10493     args++;
10494
10495   if (args[0] == '\0')
10496     return NULL; /* No more arguments.  */
10497   
10498   /* Find the end of the current argument.  */
10499
10500   end = args;
10501   while (*end != '\0' && !isspace (*end))
10502     end++;
10503
10504   /* Adjust ARGSP to point to the start of the next argument.  */
10505
10506   *argsp = end;
10507
10508   /* Make a copy of the current argument and return it.  */
10509
10510   result = xmalloc (end - args + 1);
10511   strncpy (result, args, end - args);
10512   result[end - args] = '\0';
10513   
10514   return result;
10515 }
10516
10517 /* Split the arguments specified in a "catch exception" command.  
10518    Set EX to the appropriate catchpoint type.
10519    Set EXP_STRING to the name of the specific exception if
10520    specified by the user.  */
10521
10522 static void
10523 catch_ada_exception_command_split (char *args,
10524                                    enum exception_catchpoint_kind *ex,
10525                                    char **exp_string)
10526 {
10527   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10528   char *exception_name;
10529
10530   exception_name = ada_get_next_arg (&args);
10531   make_cleanup (xfree, exception_name);
10532
10533   /* Check that we do not have any more arguments.  Anything else
10534      is unexpected.  */
10535
10536   while (isspace (*args))
10537     args++;
10538
10539   if (args[0] != '\0')
10540     error (_("Junk at end of expression"));
10541
10542   discard_cleanups (old_chain);
10543
10544   if (exception_name == NULL)
10545     {
10546       /* Catch all exceptions.  */
10547       *ex = ex_catch_exception;
10548       *exp_string = NULL;
10549     }
10550   else if (strcmp (exception_name, "unhandled") == 0)
10551     {
10552       /* Catch unhandled exceptions.  */
10553       *ex = ex_catch_exception_unhandled;
10554       *exp_string = NULL;
10555     }
10556   else
10557     {
10558       /* Catch a specific exception.  */
10559       *ex = ex_catch_exception;
10560       *exp_string = exception_name;
10561     }
10562 }
10563
10564 /* Return the name of the symbol on which we should break in order to
10565    implement a catchpoint of the EX kind.  */
10566
10567 static const char *
10568 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10569 {
10570   gdb_assert (exception_info != NULL);
10571
10572   switch (ex)
10573     {
10574       case ex_catch_exception:
10575         return (exception_info->catch_exception_sym);
10576         break;
10577       case ex_catch_exception_unhandled:
10578         return (exception_info->catch_exception_unhandled_sym);
10579         break;
10580       case ex_catch_assert:
10581         return (exception_info->catch_assert_sym);
10582         break;
10583       default:
10584         internal_error (__FILE__, __LINE__,
10585                         _("unexpected catchpoint kind (%d)"), ex);
10586     }
10587 }
10588
10589 /* Return the breakpoint ops "virtual table" used for catchpoints
10590    of the EX kind.  */
10591
10592 static struct breakpoint_ops *
10593 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10594 {
10595   switch (ex)
10596     {
10597       case ex_catch_exception:
10598         return (&catch_exception_breakpoint_ops);
10599         break;
10600       case ex_catch_exception_unhandled:
10601         return (&catch_exception_unhandled_breakpoint_ops);
10602         break;
10603       case ex_catch_assert:
10604         return (&catch_assert_breakpoint_ops);
10605         break;
10606       default:
10607         internal_error (__FILE__, __LINE__,
10608                         _("unexpected catchpoint kind (%d)"), ex);
10609     }
10610 }
10611
10612 /* Return the condition that will be used to match the current exception
10613    being raised with the exception that the user wants to catch.  This
10614    assumes that this condition is used when the inferior just triggered
10615    an exception catchpoint.
10616    
10617    The string returned is a newly allocated string that needs to be
10618    deallocated later.  */
10619
10620 static char *
10621 ada_exception_catchpoint_cond_string (const char *exp_string)
10622 {
10623   int i;
10624
10625   /* The standard exceptions are a special case. They are defined in
10626      runtime units that have been compiled without debugging info; if
10627      EXP_STRING is the not-fully-qualified name of a standard
10628      exception (e.g. "constraint_error") then, during the evaluation
10629      of the condition expression, the symbol lookup on this name would
10630      *not* return this standard exception. The catchpoint condition
10631      may then be set only on user-defined exceptions which have the
10632      same not-fully-qualified name (e.g. my_package.constraint_error).
10633
10634      To avoid this unexcepted behavior, these standard exceptions are
10635      systematically prefixed by "standard". This means that "catch
10636      exception constraint_error" is rewritten into "catch exception
10637      standard.constraint_error".
10638
10639      If an exception named contraint_error is defined in another package of
10640      the inferior program, then the only way to specify this exception as a
10641      breakpoint condition is to use its fully-qualified named:
10642      e.g. my_package.constraint_error.  */
10643
10644   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10645     {
10646       if (strcmp (standard_exc [i], exp_string) == 0)
10647         {
10648           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10649                              exp_string);
10650         }
10651     }
10652   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10653 }
10654
10655 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10656
10657 static struct expression *
10658 ada_parse_catchpoint_condition (char *cond_string,
10659                                 struct symtab_and_line sal)
10660 {
10661   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10662 }
10663
10664 /* Return the symtab_and_line that should be used to insert an exception
10665    catchpoint of the TYPE kind.
10666
10667    EX_STRING should contain the name of a specific exception
10668    that the catchpoint should catch, or NULL otherwise.
10669
10670    The idea behind all the remaining parameters is that their names match
10671    the name of certain fields in the breakpoint structure that are used to
10672    handle exception catchpoints.  This function returns the value to which
10673    these fields should be set, depending on the type of catchpoint we need
10674    to create.
10675    
10676    If COND and COND_STRING are both non-NULL, any value they might
10677    hold will be free'ed, and then replaced by newly allocated ones.
10678    These parameters are left untouched otherwise.  */
10679
10680 static struct symtab_and_line
10681 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10682                    char **addr_string, char **cond_string,
10683                    struct expression **cond, struct breakpoint_ops **ops)
10684 {
10685   const char *sym_name;
10686   struct symbol *sym;
10687   struct symtab_and_line sal;
10688
10689   /* First, find out which exception support info to use.  */
10690   ada_exception_support_info_sniffer ();
10691
10692   /* Then lookup the function on which we will break in order to catch
10693      the Ada exceptions requested by the user.  */
10694
10695   sym_name = ada_exception_sym_name (ex);
10696   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10697
10698   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10699      that should be compiled with debugging information.  As a result, we
10700      expect to find that symbol in the symtabs.  If we don't find it, then
10701      the target most likely does not support Ada exceptions, or we cannot
10702      insert exception breakpoints yet, because the GNAT runtime hasn't been
10703      loaded yet.  */
10704
10705   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10706      in such a way that no debugging information is produced for the symbol
10707      we are looking for.  In this case, we could search the minimal symbols
10708      as a fall-back mechanism.  This would still be operating in degraded
10709      mode, however, as we would still be missing the debugging information
10710      that is needed in order to extract the name of the exception being
10711      raised (this name is printed in the catchpoint message, and is also
10712      used when trying to catch a specific exception).  We do not handle
10713      this case for now.  */
10714
10715   if (sym == NULL)
10716     error (_("Unable to break on '%s' in this configuration."), sym_name);
10717
10718   /* Make sure that the symbol we found corresponds to a function.  */
10719   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10720     error (_("Symbol \"%s\" is not a function (class = %d)"),
10721            sym_name, SYMBOL_CLASS (sym));
10722
10723   sal = find_function_start_sal (sym, 1);
10724
10725   /* Set ADDR_STRING.  */
10726
10727   *addr_string = xstrdup (sym_name);
10728
10729   /* Set the COND and COND_STRING (if not NULL).  */
10730
10731   if (cond_string != NULL && cond != NULL)
10732     {
10733       if (*cond_string != NULL)
10734         {
10735           xfree (*cond_string);
10736           *cond_string = NULL;
10737         }
10738       if (*cond != NULL)
10739         {
10740           xfree (*cond);
10741           *cond = NULL;
10742         }
10743       if (exp_string != NULL)
10744         {
10745           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10746           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10747         }
10748     }
10749
10750   /* Set OPS.  */
10751   *ops = ada_exception_breakpoint_ops (ex);
10752
10753   return sal;
10754 }
10755
10756 /* Parse the arguments (ARGS) of the "catch exception" command.
10757  
10758    Set TYPE to the appropriate exception catchpoint type.
10759    If the user asked the catchpoint to catch only a specific
10760    exception, then save the exception name in ADDR_STRING.
10761
10762    See ada_exception_sal for a description of all the remaining
10763    function arguments of this function.  */
10764
10765 struct symtab_and_line
10766 ada_decode_exception_location (char *args, char **addr_string,
10767                                char **exp_string, char **cond_string,
10768                                struct expression **cond,
10769                                struct breakpoint_ops **ops)
10770 {
10771   enum exception_catchpoint_kind ex;
10772
10773   catch_ada_exception_command_split (args, &ex, exp_string);
10774   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10775                             cond, ops);
10776 }
10777
10778 struct symtab_and_line
10779 ada_decode_assert_location (char *args, char **addr_string,
10780                             struct breakpoint_ops **ops)
10781 {
10782   /* Check that no argument where provided at the end of the command.  */
10783
10784   if (args != NULL)
10785     {
10786       while (isspace (*args))
10787         args++;
10788       if (*args != '\0')
10789         error (_("Junk at end of arguments."));
10790     }
10791
10792   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10793                             ops);
10794 }
10795
10796                                 /* Operators */
10797 /* Information about operators given special treatment in functions
10798    below.  */
10799 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10800
10801 #define ADA_OPERATORS \
10802     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10803     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10804     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10805     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10806     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10807     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10808     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10809     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10810     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10811     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10812     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10813     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10814     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10815     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10816     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10817     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10818     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10819     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10820     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10821
10822 static void
10823 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10824 {
10825   switch (exp->elts[pc - 1].opcode)
10826     {
10827     default:
10828       operator_length_standard (exp, pc, oplenp, argsp);
10829       break;
10830
10831 #define OP_DEFN(op, len, args, binop) \
10832     case op: *oplenp = len; *argsp = args; break;
10833       ADA_OPERATORS;
10834 #undef OP_DEFN
10835
10836     case OP_AGGREGATE:
10837       *oplenp = 3;
10838       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10839       break;
10840
10841     case OP_CHOICES:
10842       *oplenp = 3;
10843       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10844       break;
10845     }
10846 }
10847
10848 static char *
10849 ada_op_name (enum exp_opcode opcode)
10850 {
10851   switch (opcode)
10852     {
10853     default:
10854       return op_name_standard (opcode);
10855
10856 #define OP_DEFN(op, len, args, binop) case op: return #op;
10857       ADA_OPERATORS;
10858 #undef OP_DEFN
10859
10860     case OP_AGGREGATE:
10861       return "OP_AGGREGATE";
10862     case OP_CHOICES:
10863       return "OP_CHOICES";
10864     case OP_NAME:
10865       return "OP_NAME";
10866     }
10867 }
10868
10869 /* As for operator_length, but assumes PC is pointing at the first
10870    element of the operator, and gives meaningful results only for the 
10871    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10872
10873 static void
10874 ada_forward_operator_length (struct expression *exp, int pc,
10875                              int *oplenp, int *argsp)
10876 {
10877   switch (exp->elts[pc].opcode)
10878     {
10879     default:
10880       *oplenp = *argsp = 0;
10881       break;
10882
10883 #define OP_DEFN(op, len, args, binop) \
10884     case op: *oplenp = len; *argsp = args; break;
10885       ADA_OPERATORS;
10886 #undef OP_DEFN
10887
10888     case OP_AGGREGATE:
10889       *oplenp = 3;
10890       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10891       break;
10892
10893     case OP_CHOICES:
10894       *oplenp = 3;
10895       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10896       break;
10897
10898     case OP_STRING:
10899     case OP_NAME:
10900       {
10901         int len = longest_to_int (exp->elts[pc + 1].longconst);
10902         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10903         *argsp = 0;
10904         break;
10905       }
10906     }
10907 }
10908
10909 static int
10910 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10911 {
10912   enum exp_opcode op = exp->elts[elt].opcode;
10913   int oplen, nargs;
10914   int pc = elt;
10915   int i;
10916
10917   ada_forward_operator_length (exp, elt, &oplen, &nargs);
10918
10919   switch (op)
10920     {
10921       /* Ada attributes ('Foo).  */
10922     case OP_ATR_FIRST:
10923     case OP_ATR_LAST:
10924     case OP_ATR_LENGTH:
10925     case OP_ATR_IMAGE:
10926     case OP_ATR_MAX:
10927     case OP_ATR_MIN:
10928     case OP_ATR_MODULUS:
10929     case OP_ATR_POS:
10930     case OP_ATR_SIZE:
10931     case OP_ATR_TAG:
10932     case OP_ATR_VAL:
10933       break;
10934
10935     case UNOP_IN_RANGE:
10936     case UNOP_QUAL:
10937       /* XXX: gdb_sprint_host_address, type_sprint */
10938       fprintf_filtered (stream, _("Type @"));
10939       gdb_print_host_address (exp->elts[pc + 1].type, stream);
10940       fprintf_filtered (stream, " (");
10941       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
10942       fprintf_filtered (stream, ")");
10943       break;
10944     case BINOP_IN_BOUNDS:
10945       fprintf_filtered (stream, " (%d)",
10946                         longest_to_int (exp->elts[pc + 2].longconst));
10947       break;
10948     case TERNOP_IN_RANGE:
10949       break;
10950
10951     case OP_AGGREGATE:
10952     case OP_OTHERS:
10953     case OP_DISCRETE_RANGE:
10954     case OP_POSITIONAL:
10955     case OP_CHOICES:
10956       break;
10957
10958     case OP_NAME:
10959     case OP_STRING:
10960       {
10961         char *name = &exp->elts[elt + 2].string;
10962         int len = longest_to_int (exp->elts[elt + 1].longconst);
10963         fprintf_filtered (stream, "Text: `%.*s'", len, name);
10964         break;
10965       }
10966
10967     default:
10968       return dump_subexp_body_standard (exp, stream, elt);
10969     }
10970
10971   elt += oplen;
10972   for (i = 0; i < nargs; i += 1)
10973     elt = dump_subexp (exp, stream, elt);
10974
10975   return elt;
10976 }
10977
10978 /* The Ada extension of print_subexp (q.v.).  */
10979
10980 static void
10981 ada_print_subexp (struct expression *exp, int *pos,
10982                   struct ui_file *stream, enum precedence prec)
10983 {
10984   int oplen, nargs, i;
10985   int pc = *pos;
10986   enum exp_opcode op = exp->elts[pc].opcode;
10987
10988   ada_forward_operator_length (exp, pc, &oplen, &nargs);
10989
10990   *pos += oplen;
10991   switch (op)
10992     {
10993     default:
10994       *pos -= oplen;
10995       print_subexp_standard (exp, pos, stream, prec);
10996       return;
10997
10998     case OP_VAR_VALUE:
10999       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11000       return;
11001
11002     case BINOP_IN_BOUNDS:
11003       /* XXX: sprint_subexp */
11004       print_subexp (exp, pos, stream, PREC_SUFFIX);
11005       fputs_filtered (" in ", stream);
11006       print_subexp (exp, pos, stream, PREC_SUFFIX);
11007       fputs_filtered ("'range", stream);
11008       if (exp->elts[pc + 1].longconst > 1)
11009         fprintf_filtered (stream, "(%ld)",
11010                           (long) exp->elts[pc + 1].longconst);
11011       return;
11012
11013     case TERNOP_IN_RANGE:
11014       if (prec >= PREC_EQUAL)
11015         fputs_filtered ("(", stream);
11016       /* XXX: sprint_subexp */
11017       print_subexp (exp, pos, stream, PREC_SUFFIX);
11018       fputs_filtered (" in ", stream);
11019       print_subexp (exp, pos, stream, PREC_EQUAL);
11020       fputs_filtered (" .. ", stream);
11021       print_subexp (exp, pos, stream, PREC_EQUAL);
11022       if (prec >= PREC_EQUAL)
11023         fputs_filtered (")", stream);
11024       return;
11025
11026     case OP_ATR_FIRST:
11027     case OP_ATR_LAST:
11028     case OP_ATR_LENGTH:
11029     case OP_ATR_IMAGE:
11030     case OP_ATR_MAX:
11031     case OP_ATR_MIN:
11032     case OP_ATR_MODULUS:
11033     case OP_ATR_POS:
11034     case OP_ATR_SIZE:
11035     case OP_ATR_TAG:
11036     case OP_ATR_VAL:
11037       if (exp->elts[*pos].opcode == OP_TYPE)
11038         {
11039           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11040             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11041           *pos += 3;
11042         }
11043       else
11044         print_subexp (exp, pos, stream, PREC_SUFFIX);
11045       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11046       if (nargs > 1)
11047         {
11048           int tem;
11049           for (tem = 1; tem < nargs; tem += 1)
11050             {
11051               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11052               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11053             }
11054           fputs_filtered (")", stream);
11055         }
11056       return;
11057
11058     case UNOP_QUAL:
11059       type_print (exp->elts[pc + 1].type, "", stream, 0);
11060       fputs_filtered ("'(", stream);
11061       print_subexp (exp, pos, stream, PREC_PREFIX);
11062       fputs_filtered (")", stream);
11063       return;
11064
11065     case UNOP_IN_RANGE:
11066       /* XXX: sprint_subexp */
11067       print_subexp (exp, pos, stream, PREC_SUFFIX);
11068       fputs_filtered (" in ", stream);
11069       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11070       return;
11071
11072     case OP_DISCRETE_RANGE:
11073       print_subexp (exp, pos, stream, PREC_SUFFIX);
11074       fputs_filtered ("..", stream);
11075       print_subexp (exp, pos, stream, PREC_SUFFIX);
11076       return;
11077
11078     case OP_OTHERS:
11079       fputs_filtered ("others => ", stream);
11080       print_subexp (exp, pos, stream, PREC_SUFFIX);
11081       return;
11082
11083     case OP_CHOICES:
11084       for (i = 0; i < nargs-1; i += 1)
11085         {
11086           if (i > 0)
11087             fputs_filtered ("|", stream);
11088           print_subexp (exp, pos, stream, PREC_SUFFIX);
11089         }
11090       fputs_filtered (" => ", stream);
11091       print_subexp (exp, pos, stream, PREC_SUFFIX);
11092       return;
11093       
11094     case OP_POSITIONAL:
11095       print_subexp (exp, pos, stream, PREC_SUFFIX);
11096       return;
11097
11098     case OP_AGGREGATE:
11099       fputs_filtered ("(", stream);
11100       for (i = 0; i < nargs; i += 1)
11101         {
11102           if (i > 0)
11103             fputs_filtered (", ", stream);
11104           print_subexp (exp, pos, stream, PREC_SUFFIX);
11105         }
11106       fputs_filtered (")", stream);
11107       return;
11108     }
11109 }
11110
11111 /* Table mapping opcodes into strings for printing operators
11112    and precedences of the operators.  */
11113
11114 static const struct op_print ada_op_print_tab[] = {
11115   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11116   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11117   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11118   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11119   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11120   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11121   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11122   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11123   {"<=", BINOP_LEQ, PREC_ORDER, 0},
11124   {">=", BINOP_GEQ, PREC_ORDER, 0},
11125   {">", BINOP_GTR, PREC_ORDER, 0},
11126   {"<", BINOP_LESS, PREC_ORDER, 0},
11127   {">>", BINOP_RSH, PREC_SHIFT, 0},
11128   {"<<", BINOP_LSH, PREC_SHIFT, 0},
11129   {"+", BINOP_ADD, PREC_ADD, 0},
11130   {"-", BINOP_SUB, PREC_ADD, 0},
11131   {"&", BINOP_CONCAT, PREC_ADD, 0},
11132   {"*", BINOP_MUL, PREC_MUL, 0},
11133   {"/", BINOP_DIV, PREC_MUL, 0},
11134   {"rem", BINOP_REM, PREC_MUL, 0},
11135   {"mod", BINOP_MOD, PREC_MUL, 0},
11136   {"**", BINOP_EXP, PREC_REPEAT, 0},
11137   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11138   {"-", UNOP_NEG, PREC_PREFIX, 0},
11139   {"+", UNOP_PLUS, PREC_PREFIX, 0},
11140   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11141   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11142   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
11143   {".all", UNOP_IND, PREC_SUFFIX, 1},
11144   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11145   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
11146   {NULL, 0, 0, 0}
11147 };
11148 \f
11149 enum ada_primitive_types {
11150   ada_primitive_type_int,
11151   ada_primitive_type_long,
11152   ada_primitive_type_short,
11153   ada_primitive_type_char,
11154   ada_primitive_type_float,
11155   ada_primitive_type_double,
11156   ada_primitive_type_void,
11157   ada_primitive_type_long_long,
11158   ada_primitive_type_long_double,
11159   ada_primitive_type_natural,
11160   ada_primitive_type_positive,
11161   ada_primitive_type_system_address,
11162   nr_ada_primitive_types
11163 };
11164
11165 static void
11166 ada_language_arch_info (struct gdbarch *gdbarch,
11167                         struct language_arch_info *lai)
11168 {
11169   const struct builtin_type *builtin = builtin_type (gdbarch);
11170   lai->primitive_type_vector
11171     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
11172                               struct type *);
11173   lai->primitive_type_vector [ada_primitive_type_int] =
11174     init_type (TYPE_CODE_INT,
11175                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
11176                0, "integer", (struct objfile *) NULL);
11177   lai->primitive_type_vector [ada_primitive_type_long] =
11178     init_type (TYPE_CODE_INT,
11179                gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
11180                0, "long_integer", (struct objfile *) NULL);
11181   lai->primitive_type_vector [ada_primitive_type_short] =
11182     init_type (TYPE_CODE_INT,
11183                gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT,
11184                0, "short_integer", (struct objfile *) NULL);
11185   lai->string_char_type = 
11186     lai->primitive_type_vector [ada_primitive_type_char] =
11187     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
11188                0, "character", (struct objfile *) NULL);
11189   lai->primitive_type_vector [ada_primitive_type_float] =
11190     init_type (TYPE_CODE_FLT,
11191                gdbarch_float_bit (gdbarch)/ TARGET_CHAR_BIT,
11192                0, "float", (struct objfile *) NULL);
11193   lai->primitive_type_vector [ada_primitive_type_double] =
11194     init_type (TYPE_CODE_FLT,
11195                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
11196                0, "long_float", (struct objfile *) NULL);
11197   lai->primitive_type_vector [ada_primitive_type_long_long] =
11198     init_type (TYPE_CODE_INT, 
11199                gdbarch_long_long_bit (gdbarch) / TARGET_CHAR_BIT,
11200                0, "long_long_integer", (struct objfile *) NULL);
11201   lai->primitive_type_vector [ada_primitive_type_long_double] =
11202     init_type (TYPE_CODE_FLT,
11203                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
11204                0, "long_long_float", (struct objfile *) NULL);
11205   lai->primitive_type_vector [ada_primitive_type_natural] =
11206     init_type (TYPE_CODE_INT,
11207                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
11208                0, "natural", (struct objfile *) NULL);
11209   lai->primitive_type_vector [ada_primitive_type_positive] =
11210     init_type (TYPE_CODE_INT,
11211                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
11212                0, "positive", (struct objfile *) NULL);
11213   lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
11214
11215   lai->primitive_type_vector [ada_primitive_type_system_address] =
11216     lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
11217                                     (struct objfile *) NULL));
11218   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11219     = "system__address";
11220
11221   lai->bool_type_symbol = NULL;
11222   lai->bool_type_default = builtin->builtin_bool;
11223 }
11224 \f
11225                                 /* Language vector */
11226
11227 /* Not really used, but needed in the ada_language_defn.  */
11228
11229 static void
11230 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
11231 {
11232   ada_emit_char (c, type, stream, quoter, 1);
11233 }
11234
11235 static int
11236 parse (void)
11237 {
11238   warnings_issued = 0;
11239   return ada_parse ();
11240 }
11241
11242 static const struct exp_descriptor ada_exp_descriptor = {
11243   ada_print_subexp,
11244   ada_operator_length,
11245   ada_op_name,
11246   ada_dump_subexp_body,
11247   ada_evaluate_subexp
11248 };
11249
11250 const struct language_defn ada_language_defn = {
11251   "ada",                        /* Language name */
11252   language_ada,
11253   range_check_off,
11254   type_check_off,
11255   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11256                                    that's not quite what this means.  */
11257   array_row_major,
11258   macro_expansion_no,
11259   &ada_exp_descriptor,
11260   parse,
11261   ada_error,
11262   resolve,
11263   ada_printchar,                /* Print a character constant */
11264   ada_printstr,                 /* Function to print string constant */
11265   emit_char,                    /* Function to print single char (not used) */
11266   ada_print_type,               /* Print a type using appropriate syntax */
11267   default_print_typedef,        /* Print a typedef using appropriate syntax */
11268   ada_val_print,                /* Print a value using appropriate syntax */
11269   ada_value_print,              /* Print a top-level value */
11270   NULL,                         /* Language specific skip_trampoline */
11271   NULL,                         /* name_of_this */
11272   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11273   basic_lookup_transparent_type,        /* lookup_transparent_type */
11274   ada_la_decode,                /* Language specific symbol demangler */
11275   NULL,                         /* Language specific class_name_from_physname */
11276   ada_op_print_tab,             /* expression operators for printing */
11277   0,                            /* c-style arrays */
11278   1,                            /* String lower bound */
11279   ada_get_gdb_completer_word_break_characters,
11280   ada_make_symbol_completion_list,
11281   ada_language_arch_info,
11282   ada_print_array_index,
11283   default_pass_by_reference,
11284   c_get_string,
11285   LANG_MAGIC
11286 };
11287
11288 /* Provide a prototype to silence -Wmissing-prototypes.  */
11289 extern initialize_file_ftype _initialize_ada_language;
11290
11291 void
11292 _initialize_ada_language (void)
11293 {
11294   add_language (&ada_language_defn);
11295
11296   varsize_limit = 65536;
11297
11298   obstack_init (&symbol_list_obstack);
11299
11300   decoded_names_store = htab_create_alloc
11301     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11302      NULL, xcalloc, xfree);
11303
11304   observer_attach_executable_changed (ada_executable_changed_observer);
11305 }
This page took 0.652566 seconds and 4 git commands to generate.