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