* ada-lang.c (is_digits_suffix): New function.
[external/binutils.git] / gdb / ada-lang.c
1 /* Ada language support routines for GDB, the GNU debugger.  Copyright (C)
2
3    1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007
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_sub (idx, value_from_longest (builtin_type_int, lwb));
2366       arr = value_add (arr, idx);
2367       type = TYPE_TARGET_TYPE (type);
2368     }
2369
2370   return value_ind (arr);
2371 }
2372
2373 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2374    actual type of ARRAY_PTR is ignored), returns a reference to
2375    the Ada slice of HIGH-LOW+1 elements starting at index LOW.  The lower
2376    bound of this array is LOW, as per Ada rules. */
2377 static struct value *
2378 ada_value_slice_ptr (struct value *array_ptr, struct type *type,
2379                      int low, int high)
2380 {
2381   CORE_ADDR base = value_as_address (array_ptr)
2382     + ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
2383        * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2384   struct type *index_type =
2385     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2386                        low, high);
2387   struct type *slice_type =
2388     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2389   return value_from_pointer (lookup_reference_type (slice_type), base);
2390 }
2391
2392
2393 static struct value *
2394 ada_value_slice (struct value *array, int low, int high)
2395 {
2396   struct type *type = value_type (array);
2397   struct type *index_type =
2398     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2399   struct type *slice_type =
2400     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2401   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2402 }
2403
2404 /* If type is a record type in the form of a standard GNAT array
2405    descriptor, returns the number of dimensions for type.  If arr is a
2406    simple array, returns the number of "array of"s that prefix its
2407    type designation.  Otherwise, returns 0.  */
2408
2409 int
2410 ada_array_arity (struct type *type)
2411 {
2412   int arity;
2413
2414   if (type == NULL)
2415     return 0;
2416
2417   type = desc_base_type (type);
2418
2419   arity = 0;
2420   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2421     return desc_arity (desc_bounds_type (type));
2422   else
2423     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2424       {
2425         arity += 1;
2426         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2427       }
2428
2429   return arity;
2430 }
2431
2432 /* If TYPE is a record type in the form of a standard GNAT array
2433    descriptor or a simple array type, returns the element type for
2434    TYPE after indexing by NINDICES indices, or by all indices if
2435    NINDICES is -1.  Otherwise, returns NULL.  */
2436
2437 struct type *
2438 ada_array_element_type (struct type *type, int nindices)
2439 {
2440   type = desc_base_type (type);
2441
2442   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2443     {
2444       int k;
2445       struct type *p_array_type;
2446
2447       p_array_type = desc_data_type (type);
2448
2449       k = ada_array_arity (type);
2450       if (k == 0)
2451         return NULL;
2452
2453       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2454       if (nindices >= 0 && k > nindices)
2455         k = nindices;
2456       p_array_type = TYPE_TARGET_TYPE (p_array_type);
2457       while (k > 0 && p_array_type != NULL)
2458         {
2459           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2460           k -= 1;
2461         }
2462       return p_array_type;
2463     }
2464   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2465     {
2466       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2467         {
2468           type = TYPE_TARGET_TYPE (type);
2469           nindices -= 1;
2470         }
2471       return type;
2472     }
2473
2474   return NULL;
2475 }
2476
2477 /* The type of nth index in arrays of given type (n numbering from 1).
2478    Does not examine memory.  */
2479
2480 struct type *
2481 ada_index_type (struct type *type, int n)
2482 {
2483   struct type *result_type;
2484
2485   type = desc_base_type (type);
2486
2487   if (n > ada_array_arity (type))
2488     return NULL;
2489
2490   if (ada_is_simple_array_type (type))
2491     {
2492       int i;
2493
2494       for (i = 1; i < n; i += 1)
2495         type = TYPE_TARGET_TYPE (type);
2496       result_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
2497       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2498          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2499          perhaps stabsread.c would make more sense.  */
2500       if (result_type == NULL || TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2501         result_type = builtin_type_int;
2502
2503       return result_type;
2504     }
2505   else
2506     return desc_index_type (desc_bounds_type (type), n);
2507 }
2508
2509 /* Given that arr is an array type, returns the lower bound of the
2510    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2511    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2512    array-descriptor type.  If TYPEP is non-null, *TYPEP is set to the
2513    bounds type.  It works for other arrays with bounds supplied by
2514    run-time quantities other than discriminants.  */
2515
2516 static LONGEST
2517 ada_array_bound_from_type (struct type * arr_type, int n, int which,
2518                            struct type ** typep)
2519 {
2520   struct type *type;
2521   struct type *index_type_desc;
2522
2523   if (ada_is_packed_array_type (arr_type))
2524     arr_type = decode_packed_array_type (arr_type);
2525
2526   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2527     {
2528       if (typep != NULL)
2529         *typep = builtin_type_int;
2530       return (LONGEST) - which;
2531     }
2532
2533   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2534     type = TYPE_TARGET_TYPE (arr_type);
2535   else
2536     type = arr_type;
2537
2538   index_type_desc = ada_find_parallel_type (type, "___XA");
2539   if (index_type_desc == NULL)
2540     {
2541       struct type *index_type;
2542
2543       while (n > 1)
2544         {
2545           type = TYPE_TARGET_TYPE (type);
2546           n -= 1;
2547         }
2548
2549       index_type = TYPE_INDEX_TYPE (type);
2550       if (typep != NULL)
2551         *typep = index_type;
2552
2553       /* The index type is either a range type or an enumerated type.
2554          For the range type, we have some macros that allow us to
2555          extract the value of the low and high bounds.  But they
2556          do now work for enumerated types.  The expressions used
2557          below work for both range and enum types.  */
2558       return
2559         (LONGEST) (which == 0
2560                    ? TYPE_FIELD_BITPOS (index_type, 0)
2561                    : TYPE_FIELD_BITPOS (index_type,
2562                                         TYPE_NFIELDS (index_type) - 1));
2563     }
2564   else
2565     {
2566       struct type *index_type =
2567         to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2568                              NULL, TYPE_OBJFILE (arr_type));
2569
2570       if (typep != NULL)
2571         *typep = index_type;
2572
2573       return
2574         (LONGEST) (which == 0
2575                    ? TYPE_LOW_BOUND (index_type)
2576                    : TYPE_HIGH_BOUND (index_type));
2577     }
2578 }
2579
2580 /* Given that arr is an array value, returns the lower bound of the
2581    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2582    WHICH is 1.  This routine will also work for arrays with bounds
2583    supplied by run-time quantities other than discriminants.  */
2584
2585 struct value *
2586 ada_array_bound (struct value *arr, int n, int which)
2587 {
2588   struct type *arr_type = value_type (arr);
2589
2590   if (ada_is_packed_array_type (arr_type))
2591     return ada_array_bound (decode_packed_array (arr), n, which);
2592   else if (ada_is_simple_array_type (arr_type))
2593     {
2594       struct type *type;
2595       LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
2596       return value_from_longest (type, v);
2597     }
2598   else
2599     return desc_one_bound (desc_bounds (arr), n, which);
2600 }
2601
2602 /* Given that arr is an array value, returns the length of the
2603    nth index.  This routine will also work for arrays with bounds
2604    supplied by run-time quantities other than discriminants.
2605    Does not work for arrays indexed by enumeration types with representation
2606    clauses at the moment.  */
2607
2608 struct value *
2609 ada_array_length (struct value *arr, int n)
2610 {
2611   struct type *arr_type = ada_check_typedef (value_type (arr));
2612
2613   if (ada_is_packed_array_type (arr_type))
2614     return ada_array_length (decode_packed_array (arr), n);
2615
2616   if (ada_is_simple_array_type (arr_type))
2617     {
2618       struct type *type;
2619       LONGEST v =
2620         ada_array_bound_from_type (arr_type, n, 1, &type) -
2621         ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
2622       return value_from_longest (type, v);
2623     }
2624   else
2625     return
2626       value_from_longest (builtin_type_int32,
2627                           value_as_long (desc_one_bound (desc_bounds (arr),
2628                                                          n, 1))
2629                           - value_as_long (desc_one_bound (desc_bounds (arr),
2630                                                            n, 0)) + 1);
2631 }
2632
2633 /* An empty array whose type is that of ARR_TYPE (an array type),
2634    with bounds LOW to LOW-1.  */
2635
2636 static struct value *
2637 empty_array (struct type *arr_type, int low)
2638 {
2639   struct type *index_type =
2640     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2641                        low, low - 1);
2642   struct type *elt_type = ada_array_element_type (arr_type, 1);
2643   return allocate_value (create_array_type (NULL, elt_type, index_type));
2644 }
2645 \f
2646
2647                                 /* Name resolution */
2648
2649 /* The "decoded" name for the user-definable Ada operator corresponding
2650    to OP.  */
2651
2652 static const char *
2653 ada_decoded_op_name (enum exp_opcode op)
2654 {
2655   int i;
2656
2657   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2658     {
2659       if (ada_opname_table[i].op == op)
2660         return ada_opname_table[i].decoded;
2661     }
2662   error (_("Could not find operator name for opcode"));
2663 }
2664
2665
2666 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2667    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2668    undefined namespace) and converts operators that are
2669    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2670    non-null, it provides a preferred result type [at the moment, only
2671    type void has any effect---causing procedures to be preferred over
2672    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2673    return type is preferred.  May change (expand) *EXP.  */
2674
2675 static void
2676 resolve (struct expression **expp, int void_context_p)
2677 {
2678   int pc;
2679   pc = 0;
2680   resolve_subexp (expp, &pc, 1, void_context_p ? builtin_type_void : NULL);
2681 }
2682
2683 /* Resolve the operator of the subexpression beginning at
2684    position *POS of *EXPP.  "Resolving" consists of replacing
2685    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2686    with their resolutions, replacing built-in operators with
2687    function calls to user-defined operators, where appropriate, and,
2688    when DEPROCEDURE_P is non-zero, converting function-valued variables
2689    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2690    are as in ada_resolve, above.  */
2691
2692 static struct value *
2693 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2694                 struct type *context_type)
2695 {
2696   int pc = *pos;
2697   int i;
2698   struct expression *exp;       /* Convenience: == *expp.  */
2699   enum exp_opcode op = (*expp)->elts[pc].opcode;
2700   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2701   int nargs;                    /* Number of operands.  */
2702   int oplen;
2703
2704   argvec = NULL;
2705   nargs = 0;
2706   exp = *expp;
2707
2708   /* Pass one: resolve operands, saving their types and updating *pos,
2709      if needed.  */
2710   switch (op)
2711     {
2712     case OP_FUNCALL:
2713       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2714           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2715         *pos += 7;
2716       else
2717         {
2718           *pos += 3;
2719           resolve_subexp (expp, pos, 0, NULL);
2720         }
2721       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2722       break;
2723
2724     case UNOP_ADDR:
2725       *pos += 1;
2726       resolve_subexp (expp, pos, 0, NULL);
2727       break;
2728
2729     case UNOP_QUAL:
2730       *pos += 3;
2731       resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2732       break;
2733
2734     case OP_ATR_MODULUS:
2735     case OP_ATR_SIZE:
2736     case OP_ATR_TAG:
2737     case OP_ATR_FIRST:
2738     case OP_ATR_LAST:
2739     case OP_ATR_LENGTH:
2740     case OP_ATR_POS:
2741     case OP_ATR_VAL:
2742     case OP_ATR_MIN:
2743     case OP_ATR_MAX:
2744     case TERNOP_IN_RANGE:
2745     case BINOP_IN_BOUNDS:
2746     case UNOP_IN_RANGE:
2747     case OP_AGGREGATE:
2748     case OP_OTHERS:
2749     case OP_CHOICES:
2750     case OP_POSITIONAL:
2751     case OP_DISCRETE_RANGE:
2752     case OP_NAME:
2753       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2754       *pos += oplen;
2755       break;
2756
2757     case BINOP_ASSIGN:
2758       {
2759         struct value *arg1;
2760
2761         *pos += 1;
2762         arg1 = resolve_subexp (expp, pos, 0, NULL);
2763         if (arg1 == NULL)
2764           resolve_subexp (expp, pos, 1, NULL);
2765         else
2766           resolve_subexp (expp, pos, 1, value_type (arg1));
2767         break;
2768       }
2769
2770     case UNOP_CAST:
2771       *pos += 3;
2772       nargs = 1;
2773       break;
2774
2775     case BINOP_ADD:
2776     case BINOP_SUB:
2777     case BINOP_MUL:
2778     case BINOP_DIV:
2779     case BINOP_REM:
2780     case BINOP_MOD:
2781     case BINOP_EXP:
2782     case BINOP_CONCAT:
2783     case BINOP_LOGICAL_AND:
2784     case BINOP_LOGICAL_OR:
2785     case BINOP_BITWISE_AND:
2786     case BINOP_BITWISE_IOR:
2787     case BINOP_BITWISE_XOR:
2788
2789     case BINOP_EQUAL:
2790     case BINOP_NOTEQUAL:
2791     case BINOP_LESS:
2792     case BINOP_GTR:
2793     case BINOP_LEQ:
2794     case BINOP_GEQ:
2795
2796     case BINOP_REPEAT:
2797     case BINOP_SUBSCRIPT:
2798     case BINOP_COMMA:
2799       *pos += 1;
2800       nargs = 2;
2801       break;
2802
2803     case UNOP_NEG:
2804     case UNOP_PLUS:
2805     case UNOP_LOGICAL_NOT:
2806     case UNOP_ABS:
2807     case UNOP_IND:
2808       *pos += 1;
2809       nargs = 1;
2810       break;
2811
2812     case OP_LONG:
2813     case OP_DOUBLE:
2814     case OP_VAR_VALUE:
2815       *pos += 4;
2816       break;
2817
2818     case OP_TYPE:
2819     case OP_BOOL:
2820     case OP_LAST:
2821     case OP_INTERNALVAR:
2822       *pos += 3;
2823       break;
2824
2825     case UNOP_MEMVAL:
2826       *pos += 3;
2827       nargs = 1;
2828       break;
2829
2830     case OP_REGISTER:
2831       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2832       break;
2833
2834     case STRUCTOP_STRUCT:
2835       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2836       nargs = 1;
2837       break;
2838
2839     case TERNOP_SLICE:
2840       *pos += 1;
2841       nargs = 3;
2842       break;
2843
2844     case OP_STRING:
2845       break;
2846
2847     default:
2848       error (_("Unexpected operator during name resolution"));
2849     }
2850
2851   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2852   for (i = 0; i < nargs; i += 1)
2853     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2854   argvec[i] = NULL;
2855   exp = *expp;
2856
2857   /* Pass two: perform any resolution on principal operator.  */
2858   switch (op)
2859     {
2860     default:
2861       break;
2862
2863     case OP_VAR_VALUE:
2864       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2865         {
2866           struct ada_symbol_info *candidates;
2867           int n_candidates;
2868
2869           n_candidates =
2870             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2871                                     (exp->elts[pc + 2].symbol),
2872                                     exp->elts[pc + 1].block, VAR_DOMAIN,
2873                                     &candidates);
2874
2875           if (n_candidates > 1)
2876             {
2877               /* Types tend to get re-introduced locally, so if there
2878                  are any local symbols that are not types, first filter
2879                  out all types.  */
2880               int j;
2881               for (j = 0; j < n_candidates; j += 1)
2882                 switch (SYMBOL_CLASS (candidates[j].sym))
2883                   {
2884                   case LOC_REGISTER:
2885                   case LOC_ARG:
2886                   case LOC_REF_ARG:
2887                   case LOC_REGPARM_ADDR:
2888                   case LOC_LOCAL:
2889                   case LOC_COMPUTED:
2890                     goto FoundNonType;
2891                   default:
2892                     break;
2893                   }
2894             FoundNonType:
2895               if (j < n_candidates)
2896                 {
2897                   j = 0;
2898                   while (j < n_candidates)
2899                     {
2900                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2901                         {
2902                           candidates[j] = candidates[n_candidates - 1];
2903                           n_candidates -= 1;
2904                         }
2905                       else
2906                         j += 1;
2907                     }
2908                 }
2909             }
2910
2911           if (n_candidates == 0)
2912             error (_("No definition found for %s"),
2913                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2914           else if (n_candidates == 1)
2915             i = 0;
2916           else if (deprocedure_p
2917                    && !is_nonfunction (candidates, n_candidates))
2918             {
2919               i = ada_resolve_function
2920                 (candidates, n_candidates, NULL, 0,
2921                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2922                  context_type);
2923               if (i < 0)
2924                 error (_("Could not find a match for %s"),
2925                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2926             }
2927           else
2928             {
2929               printf_filtered (_("Multiple matches for %s\n"),
2930                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2931               user_select_syms (candidates, n_candidates, 1);
2932               i = 0;
2933             }
2934
2935           exp->elts[pc + 1].block = candidates[i].block;
2936           exp->elts[pc + 2].symbol = candidates[i].sym;
2937           if (innermost_block == NULL
2938               || contained_in (candidates[i].block, innermost_block))
2939             innermost_block = candidates[i].block;
2940         }
2941
2942       if (deprocedure_p
2943           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2944               == TYPE_CODE_FUNC))
2945         {
2946           replace_operator_with_call (expp, pc, 0, 0,
2947                                       exp->elts[pc + 2].symbol,
2948                                       exp->elts[pc + 1].block);
2949           exp = *expp;
2950         }
2951       break;
2952
2953     case OP_FUNCALL:
2954       {
2955         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2956             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2957           {
2958             struct ada_symbol_info *candidates;
2959             int n_candidates;
2960
2961             n_candidates =
2962               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2963                                       (exp->elts[pc + 5].symbol),
2964                                       exp->elts[pc + 4].block, VAR_DOMAIN,
2965                                       &candidates);
2966             if (n_candidates == 1)
2967               i = 0;
2968             else
2969               {
2970                 i = ada_resolve_function
2971                   (candidates, n_candidates,
2972                    argvec, nargs,
2973                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2974                    context_type);
2975                 if (i < 0)
2976                   error (_("Could not find a match for %s"),
2977                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2978               }
2979
2980             exp->elts[pc + 4].block = candidates[i].block;
2981             exp->elts[pc + 5].symbol = candidates[i].sym;
2982             if (innermost_block == NULL
2983                 || contained_in (candidates[i].block, innermost_block))
2984               innermost_block = candidates[i].block;
2985           }
2986       }
2987       break;
2988     case BINOP_ADD:
2989     case BINOP_SUB:
2990     case BINOP_MUL:
2991     case BINOP_DIV:
2992     case BINOP_REM:
2993     case BINOP_MOD:
2994     case BINOP_CONCAT:
2995     case BINOP_BITWISE_AND:
2996     case BINOP_BITWISE_IOR:
2997     case BINOP_BITWISE_XOR:
2998     case BINOP_EQUAL:
2999     case BINOP_NOTEQUAL:
3000     case BINOP_LESS:
3001     case BINOP_GTR:
3002     case BINOP_LEQ:
3003     case BINOP_GEQ:
3004     case BINOP_EXP:
3005     case UNOP_NEG:
3006     case UNOP_PLUS:
3007     case UNOP_LOGICAL_NOT:
3008     case UNOP_ABS:
3009       if (possible_user_operator_p (op, argvec))
3010         {
3011           struct ada_symbol_info *candidates;
3012           int n_candidates;
3013
3014           n_candidates =
3015             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3016                                     (struct block *) NULL, VAR_DOMAIN,
3017                                     &candidates);
3018           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3019                                     ada_decoded_op_name (op), NULL);
3020           if (i < 0)
3021             break;
3022
3023           replace_operator_with_call (expp, pc, nargs, 1,
3024                                       candidates[i].sym, candidates[i].block);
3025           exp = *expp;
3026         }
3027       break;
3028
3029     case OP_TYPE:
3030     case OP_REGISTER:
3031       return NULL;
3032     }
3033
3034   *pos = pc;
3035   return evaluate_subexp_type (exp, pos);
3036 }
3037
3038 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3039    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3040    a non-pointer.   A type of 'void' (which is never a valid expression type)
3041    by convention matches anything. */
3042 /* The term "match" here is rather loose.  The match is heuristic and
3043    liberal.  FIXME: TOO liberal, in fact.  */
3044
3045 static int
3046 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3047 {
3048   ftype = ada_check_typedef (ftype);
3049   atype = ada_check_typedef (atype);
3050
3051   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3052     ftype = TYPE_TARGET_TYPE (ftype);
3053   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3054     atype = TYPE_TARGET_TYPE (atype);
3055
3056   if (TYPE_CODE (ftype) == TYPE_CODE_VOID
3057       || TYPE_CODE (atype) == TYPE_CODE_VOID)
3058     return 1;
3059
3060   switch (TYPE_CODE (ftype))
3061     {
3062     default:
3063       return 1;
3064     case TYPE_CODE_PTR:
3065       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3066         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3067                                TYPE_TARGET_TYPE (atype), 0);
3068       else
3069         return (may_deref
3070                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3071     case TYPE_CODE_INT:
3072     case TYPE_CODE_ENUM:
3073     case TYPE_CODE_RANGE:
3074       switch (TYPE_CODE (atype))
3075         {
3076         case TYPE_CODE_INT:
3077         case TYPE_CODE_ENUM:
3078         case TYPE_CODE_RANGE:
3079           return 1;
3080         default:
3081           return 0;
3082         }
3083
3084     case TYPE_CODE_ARRAY:
3085       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3086               || ada_is_array_descriptor_type (atype));
3087
3088     case TYPE_CODE_STRUCT:
3089       if (ada_is_array_descriptor_type (ftype))
3090         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3091                 || ada_is_array_descriptor_type (atype));
3092       else
3093         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3094                 && !ada_is_array_descriptor_type (atype));
3095
3096     case TYPE_CODE_UNION:
3097     case TYPE_CODE_FLT:
3098       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3099     }
3100 }
3101
3102 /* Return non-zero if the formals of FUNC "sufficiently match" the
3103    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3104    may also be an enumeral, in which case it is treated as a 0-
3105    argument function.  */
3106
3107 static int
3108 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3109 {
3110   int i;
3111   struct type *func_type = SYMBOL_TYPE (func);
3112
3113   if (SYMBOL_CLASS (func) == LOC_CONST
3114       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3115     return (n_actuals == 0);
3116   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3117     return 0;
3118
3119   if (TYPE_NFIELDS (func_type) != n_actuals)
3120     return 0;
3121
3122   for (i = 0; i < n_actuals; i += 1)
3123     {
3124       if (actuals[i] == NULL)
3125         return 0;
3126       else
3127         {
3128           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3129           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3130
3131           if (!ada_type_match (ftype, atype, 1))
3132             return 0;
3133         }
3134     }
3135   return 1;
3136 }
3137
3138 /* False iff function type FUNC_TYPE definitely does not produce a value
3139    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3140    FUNC_TYPE is not a valid function type with a non-null return type
3141    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3142
3143 static int
3144 return_match (struct type *func_type, struct type *context_type)
3145 {
3146   struct type *return_type;
3147
3148   if (func_type == NULL)
3149     return 1;
3150
3151   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3152     return_type = base_type (TYPE_TARGET_TYPE (func_type));
3153   else
3154     return_type = base_type (func_type);
3155   if (return_type == NULL)
3156     return 1;
3157
3158   context_type = base_type (context_type);
3159
3160   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3161     return context_type == NULL || return_type == context_type;
3162   else if (context_type == NULL)
3163     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3164   else
3165     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3166 }
3167
3168
3169 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3170    function (if any) that matches the types of the NARGS arguments in
3171    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3172    that returns that type, then eliminate matches that don't.  If
3173    CONTEXT_TYPE is void and there is at least one match that does not
3174    return void, eliminate all matches that do.
3175
3176    Asks the user if there is more than one match remaining.  Returns -1
3177    if there is no such symbol or none is selected.  NAME is used
3178    solely for messages.  May re-arrange and modify SYMS in
3179    the process; the index returned is for the modified vector.  */
3180
3181 static int
3182 ada_resolve_function (struct ada_symbol_info syms[],
3183                       int nsyms, struct value **args, int nargs,
3184                       const char *name, struct type *context_type)
3185 {
3186   int k;
3187   int m;                        /* Number of hits */
3188   struct type *fallback;
3189   struct type *return_type;
3190
3191   return_type = context_type;
3192   if (context_type == NULL)
3193     fallback = builtin_type_void;
3194   else
3195     fallback = NULL;
3196
3197   m = 0;
3198   while (1)
3199     {
3200       for (k = 0; k < nsyms; k += 1)
3201         {
3202           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3203
3204           if (ada_args_match (syms[k].sym, args, nargs)
3205               && return_match (type, return_type))
3206             {
3207               syms[m] = syms[k];
3208               m += 1;
3209             }
3210         }
3211       if (m > 0 || return_type == fallback)
3212         break;
3213       else
3214         return_type = fallback;
3215     }
3216
3217   if (m == 0)
3218     return -1;
3219   else if (m > 1)
3220     {
3221       printf_filtered (_("Multiple matches for %s\n"), name);
3222       user_select_syms (syms, m, 1);
3223       return 0;
3224     }
3225   return 0;
3226 }
3227
3228 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3229    in a listing of choices during disambiguation (see sort_choices, below).
3230    The idea is that overloadings of a subprogram name from the
3231    same package should sort in their source order.  We settle for ordering
3232    such symbols by their trailing number (__N  or $N).  */
3233
3234 static int
3235 encoded_ordered_before (char *N0, char *N1)
3236 {
3237   if (N1 == NULL)
3238     return 0;
3239   else if (N0 == NULL)
3240     return 1;
3241   else
3242     {
3243       int k0, k1;
3244       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3245         ;
3246       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3247         ;
3248       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3249           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3250         {
3251           int n0, n1;
3252           n0 = k0;
3253           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3254             n0 -= 1;
3255           n1 = k1;
3256           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3257             n1 -= 1;
3258           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3259             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3260         }
3261       return (strcmp (N0, N1) < 0);
3262     }
3263 }
3264
3265 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3266    encoded names.  */
3267
3268 static void
3269 sort_choices (struct ada_symbol_info syms[], int nsyms)
3270 {
3271   int i;
3272   for (i = 1; i < nsyms; i += 1)
3273     {
3274       struct ada_symbol_info sym = syms[i];
3275       int j;
3276
3277       for (j = i - 1; j >= 0; j -= 1)
3278         {
3279           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3280                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3281             break;
3282           syms[j + 1] = syms[j];
3283         }
3284       syms[j + 1] = sym;
3285     }
3286 }
3287
3288 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3289    by asking the user (if necessary), returning the number selected, 
3290    and setting the first elements of SYMS items.  Error if no symbols
3291    selected.  */
3292
3293 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3294    to be re-integrated one of these days.  */
3295
3296 int
3297 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3298 {
3299   int i;
3300   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3301   int n_chosen;
3302   int first_choice = (max_results == 1) ? 1 : 2;
3303   const char *select_mode = multiple_symbols_select_mode ();
3304
3305   if (max_results < 1)
3306     error (_("Request to select 0 symbols!"));
3307   if (nsyms <= 1)
3308     return nsyms;
3309
3310   if (select_mode == multiple_symbols_cancel)
3311     error (_("\
3312 canceled because the command is ambiguous\n\
3313 See set/show multiple-symbol."));
3314   
3315   /* If select_mode is "all", then return all possible symbols.
3316      Only do that if more than one symbol can be selected, of course.
3317      Otherwise, display the menu as usual.  */
3318   if (select_mode == multiple_symbols_all && max_results > 1)
3319     return nsyms;
3320
3321   printf_unfiltered (_("[0] cancel\n"));
3322   if (max_results > 1)
3323     printf_unfiltered (_("[1] all\n"));
3324
3325   sort_choices (syms, nsyms);
3326
3327   for (i = 0; i < nsyms; i += 1)
3328     {
3329       if (syms[i].sym == NULL)
3330         continue;
3331
3332       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3333         {
3334           struct symtab_and_line sal =
3335             find_function_start_sal (syms[i].sym, 1);
3336           if (sal.symtab == NULL)
3337             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3338                                i + first_choice,
3339                                SYMBOL_PRINT_NAME (syms[i].sym),
3340                                sal.line);
3341           else
3342             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3343                                SYMBOL_PRINT_NAME (syms[i].sym),
3344                                sal.symtab->filename, sal.line);
3345           continue;
3346         }
3347       else
3348         {
3349           int is_enumeral =
3350             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3351              && SYMBOL_TYPE (syms[i].sym) != NULL
3352              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3353           struct symtab *symtab = symtab_for_sym (syms[i].sym);
3354
3355           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3356             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3357                                i + first_choice,
3358                                SYMBOL_PRINT_NAME (syms[i].sym),
3359                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3360           else if (is_enumeral
3361                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3362             {
3363               printf_unfiltered (("[%d] "), i + first_choice);
3364               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3365                               gdb_stdout, -1, 0);
3366               printf_unfiltered (_("'(%s) (enumeral)\n"),
3367                                  SYMBOL_PRINT_NAME (syms[i].sym));
3368             }
3369           else if (symtab != NULL)
3370             printf_unfiltered (is_enumeral
3371                                ? _("[%d] %s in %s (enumeral)\n")
3372                                : _("[%d] %s at %s:?\n"),
3373                                i + first_choice,
3374                                SYMBOL_PRINT_NAME (syms[i].sym),
3375                                symtab->filename);
3376           else
3377             printf_unfiltered (is_enumeral
3378                                ? _("[%d] %s (enumeral)\n")
3379                                : _("[%d] %s at ?\n"),
3380                                i + first_choice,
3381                                SYMBOL_PRINT_NAME (syms[i].sym));
3382         }
3383     }
3384
3385   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3386                              "overload-choice");
3387
3388   for (i = 0; i < n_chosen; i += 1)
3389     syms[i] = syms[chosen[i]];
3390
3391   return n_chosen;
3392 }
3393
3394 /* Read and validate a set of numeric choices from the user in the
3395    range 0 .. N_CHOICES-1.  Place the results in increasing
3396    order in CHOICES[0 .. N-1], and return N.
3397
3398    The user types choices as a sequence of numbers on one line
3399    separated by blanks, encoding them as follows:
3400
3401      + A choice of 0 means to cancel the selection, throwing an error.
3402      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3403      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3404
3405    The user is not allowed to choose more than MAX_RESULTS values.
3406
3407    ANNOTATION_SUFFIX, if present, is used to annotate the input
3408    prompts (for use with the -f switch).  */
3409
3410 int
3411 get_selections (int *choices, int n_choices, int max_results,
3412                 int is_all_choice, char *annotation_suffix)
3413 {
3414   char *args;
3415   char *prompt;
3416   int n_chosen;
3417   int first_choice = is_all_choice ? 2 : 1;
3418
3419   prompt = getenv ("PS2");
3420   if (prompt == NULL)
3421     prompt = "> ";
3422
3423   args = command_line_input (prompt, 0, annotation_suffix);
3424
3425   if (args == NULL)
3426     error_no_arg (_("one or more choice numbers"));
3427
3428   n_chosen = 0;
3429
3430   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3431      order, as given in args.  Choices are validated.  */
3432   while (1)
3433     {
3434       char *args2;
3435       int choice, j;
3436
3437       while (isspace (*args))
3438         args += 1;
3439       if (*args == '\0' && n_chosen == 0)
3440         error_no_arg (_("one or more choice numbers"));
3441       else if (*args == '\0')
3442         break;
3443
3444       choice = strtol (args, &args2, 10);
3445       if (args == args2 || choice < 0
3446           || choice > n_choices + first_choice - 1)
3447         error (_("Argument must be choice number"));
3448       args = args2;
3449
3450       if (choice == 0)
3451         error (_("cancelled"));
3452
3453       if (choice < first_choice)
3454         {
3455           n_chosen = n_choices;
3456           for (j = 0; j < n_choices; j += 1)
3457             choices[j] = j;
3458           break;
3459         }
3460       choice -= first_choice;
3461
3462       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3463         {
3464         }
3465
3466       if (j < 0 || choice != choices[j])
3467         {
3468           int k;
3469           for (k = n_chosen - 1; k > j; k -= 1)
3470             choices[k + 1] = choices[k];
3471           choices[j + 1] = choice;
3472           n_chosen += 1;
3473         }
3474     }
3475
3476   if (n_chosen > max_results)
3477     error (_("Select no more than %d of the above"), max_results);
3478
3479   return n_chosen;
3480 }
3481
3482 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3483    on the function identified by SYM and BLOCK, and taking NARGS
3484    arguments.  Update *EXPP as needed to hold more space.  */
3485
3486 static void
3487 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3488                             int oplen, struct symbol *sym,
3489                             struct block *block)
3490 {
3491   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3492      symbol, -oplen for operator being replaced).  */
3493   struct expression *newexp = (struct expression *)
3494     xmalloc (sizeof (struct expression)
3495              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3496   struct expression *exp = *expp;
3497
3498   newexp->nelts = exp->nelts + 7 - oplen;
3499   newexp->language_defn = exp->language_defn;
3500   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3501   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3502           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3503
3504   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3505   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3506
3507   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3508   newexp->elts[pc + 4].block = block;
3509   newexp->elts[pc + 5].symbol = sym;
3510
3511   *expp = newexp;
3512   xfree (exp);
3513 }
3514
3515 /* Type-class predicates */
3516
3517 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3518    or FLOAT).  */
3519
3520 static int
3521 numeric_type_p (struct type *type)
3522 {
3523   if (type == NULL)
3524     return 0;
3525   else
3526     {
3527       switch (TYPE_CODE (type))
3528         {
3529         case TYPE_CODE_INT:
3530         case TYPE_CODE_FLT:
3531           return 1;
3532         case TYPE_CODE_RANGE:
3533           return (type == TYPE_TARGET_TYPE (type)
3534                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3535         default:
3536           return 0;
3537         }
3538     }
3539 }
3540
3541 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3542
3543 static int
3544 integer_type_p (struct type *type)
3545 {
3546   if (type == NULL)
3547     return 0;
3548   else
3549     {
3550       switch (TYPE_CODE (type))
3551         {
3552         case TYPE_CODE_INT:
3553           return 1;
3554         case TYPE_CODE_RANGE:
3555           return (type == TYPE_TARGET_TYPE (type)
3556                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3557         default:
3558           return 0;
3559         }
3560     }
3561 }
3562
3563 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3564
3565 static int
3566 scalar_type_p (struct type *type)
3567 {
3568   if (type == NULL)
3569     return 0;
3570   else
3571     {
3572       switch (TYPE_CODE (type))
3573         {
3574         case TYPE_CODE_INT:
3575         case TYPE_CODE_RANGE:
3576         case TYPE_CODE_ENUM:
3577         case TYPE_CODE_FLT:
3578           return 1;
3579         default:
3580           return 0;
3581         }
3582     }
3583 }
3584
3585 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3586
3587 static int
3588 discrete_type_p (struct type *type)
3589 {
3590   if (type == NULL)
3591     return 0;
3592   else
3593     {
3594       switch (TYPE_CODE (type))
3595         {
3596         case TYPE_CODE_INT:
3597         case TYPE_CODE_RANGE:
3598         case TYPE_CODE_ENUM:
3599           return 1;
3600         default:
3601           return 0;
3602         }
3603     }
3604 }
3605
3606 /* Returns non-zero if OP with operands in the vector ARGS could be
3607    a user-defined function.  Errs on the side of pre-defined operators
3608    (i.e., result 0).  */
3609
3610 static int
3611 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3612 {
3613   struct type *type0 =
3614     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3615   struct type *type1 =
3616     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3617
3618   if (type0 == NULL)
3619     return 0;
3620
3621   switch (op)
3622     {
3623     default:
3624       return 0;
3625
3626     case BINOP_ADD:
3627     case BINOP_SUB:
3628     case BINOP_MUL:
3629     case BINOP_DIV:
3630       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3631
3632     case BINOP_REM:
3633     case BINOP_MOD:
3634     case BINOP_BITWISE_AND:
3635     case BINOP_BITWISE_IOR:
3636     case BINOP_BITWISE_XOR:
3637       return (!(integer_type_p (type0) && integer_type_p (type1)));
3638
3639     case BINOP_EQUAL:
3640     case BINOP_NOTEQUAL:
3641     case BINOP_LESS:
3642     case BINOP_GTR:
3643     case BINOP_LEQ:
3644     case BINOP_GEQ:
3645       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3646
3647     case BINOP_CONCAT:
3648       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3649
3650     case BINOP_EXP:
3651       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3652
3653     case UNOP_NEG:
3654     case UNOP_PLUS:
3655     case UNOP_LOGICAL_NOT:
3656     case UNOP_ABS:
3657       return (!numeric_type_p (type0));
3658
3659     }
3660 }
3661 \f
3662                                 /* Renaming */
3663
3664 /* NOTES: 
3665
3666    1. In the following, we assume that a renaming type's name may
3667       have an ___XD suffix.  It would be nice if this went away at some
3668       point.
3669    2. We handle both the (old) purely type-based representation of 
3670       renamings and the (new) variable-based encoding.  At some point,
3671       it is devoutly to be hoped that the former goes away 
3672       (FIXME: hilfinger-2007-07-09).
3673    3. Subprogram renamings are not implemented, although the XRS
3674       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3675
3676 /* If SYM encodes a renaming, 
3677
3678        <renaming> renames <renamed entity>,
3679
3680    sets *LEN to the length of the renamed entity's name,
3681    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3682    the string describing the subcomponent selected from the renamed
3683    entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3684    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3685    are undefined).  Otherwise, returns a value indicating the category
3686    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3687    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3688    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3689    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3690    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3691    may be NULL, in which case they are not assigned.
3692
3693    [Currently, however, GCC does not generate subprogram renamings.]  */
3694
3695 enum ada_renaming_category
3696 ada_parse_renaming (struct symbol *sym,
3697                     const char **renamed_entity, int *len, 
3698                     const char **renaming_expr)
3699 {
3700   enum ada_renaming_category kind;
3701   const char *info;
3702   const char *suffix;
3703
3704   if (sym == NULL)
3705     return ADA_NOT_RENAMING;
3706   switch (SYMBOL_CLASS (sym)) 
3707     {
3708     default:
3709       return ADA_NOT_RENAMING;
3710     case LOC_TYPEDEF:
3711       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3712                                        renamed_entity, len, renaming_expr);
3713     case LOC_LOCAL:
3714     case LOC_STATIC:
3715     case LOC_COMPUTED:
3716     case LOC_OPTIMIZED_OUT:
3717       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3718       if (info == NULL)
3719         return ADA_NOT_RENAMING;
3720       switch (info[5])
3721         {
3722         case '_':
3723           kind = ADA_OBJECT_RENAMING;
3724           info += 6;
3725           break;
3726         case 'E':
3727           kind = ADA_EXCEPTION_RENAMING;
3728           info += 7;
3729           break;
3730         case 'P':
3731           kind = ADA_PACKAGE_RENAMING;
3732           info += 7;
3733           break;
3734         case 'S':
3735           kind = ADA_SUBPROGRAM_RENAMING;
3736           info += 7;
3737           break;
3738         default:
3739           return ADA_NOT_RENAMING;
3740         }
3741     }
3742
3743   if (renamed_entity != NULL)
3744     *renamed_entity = info;
3745   suffix = strstr (info, "___XE");
3746   if (suffix == NULL || suffix == info)
3747     return ADA_NOT_RENAMING;
3748   if (len != NULL)
3749     *len = strlen (info) - strlen (suffix);
3750   suffix += 5;
3751   if (renaming_expr != NULL)
3752     *renaming_expr = suffix;
3753   return kind;
3754 }
3755
3756 /* Assuming TYPE encodes a renaming according to the old encoding in
3757    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3758    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3759    ADA_NOT_RENAMING otherwise.  */
3760 static enum ada_renaming_category
3761 parse_old_style_renaming (struct type *type,
3762                           const char **renamed_entity, int *len, 
3763                           const char **renaming_expr)
3764 {
3765   enum ada_renaming_category kind;
3766   const char *name;
3767   const char *info;
3768   const char *suffix;
3769
3770   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
3771       || TYPE_NFIELDS (type) != 1)
3772     return ADA_NOT_RENAMING;
3773
3774   name = type_name_no_tag (type);
3775   if (name == NULL)
3776     return ADA_NOT_RENAMING;
3777   
3778   name = strstr (name, "___XR");
3779   if (name == NULL)
3780     return ADA_NOT_RENAMING;
3781   switch (name[5])
3782     {
3783     case '\0':
3784     case '_':
3785       kind = ADA_OBJECT_RENAMING;
3786       break;
3787     case 'E':
3788       kind = ADA_EXCEPTION_RENAMING;
3789       break;
3790     case 'P':
3791       kind = ADA_PACKAGE_RENAMING;
3792       break;
3793     case 'S':
3794       kind = ADA_SUBPROGRAM_RENAMING;
3795       break;
3796     default:
3797       return ADA_NOT_RENAMING;
3798     }
3799
3800   info = TYPE_FIELD_NAME (type, 0);
3801   if (info == NULL)
3802     return ADA_NOT_RENAMING;
3803   if (renamed_entity != NULL)
3804     *renamed_entity = info;
3805   suffix = strstr (info, "___XE");
3806   if (renaming_expr != NULL)
3807     *renaming_expr = suffix + 5;
3808   if (suffix == NULL || suffix == info)
3809     return ADA_NOT_RENAMING;
3810   if (len != NULL)
3811     *len = suffix - info;
3812   return kind;
3813 }  
3814
3815 \f
3816
3817                                 /* Evaluation: Function Calls */
3818
3819 /* Return an lvalue containing the value VAL.  This is the identity on
3820    lvalues, and otherwise has the side-effect of pushing a copy of VAL 
3821    on the stack, using and updating *SP as the stack pointer, and 
3822    returning an lvalue whose VALUE_ADDRESS points to the copy.  */
3823
3824 static struct value *
3825 ensure_lval (struct value *val, CORE_ADDR *sp)
3826 {
3827   if (! VALUE_LVAL (val))
3828     {
3829       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3830
3831       /* The following is taken from the structure-return code in
3832          call_function_by_hand. FIXME: Therefore, some refactoring seems 
3833          indicated. */
3834       if (gdbarch_inner_than (current_gdbarch, 1, 2))
3835         {
3836           /* Stack grows downward.  Align SP and VALUE_ADDRESS (val) after
3837              reserving sufficient space. */
3838           *sp -= len;
3839           if (gdbarch_frame_align_p (current_gdbarch))
3840             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3841           VALUE_ADDRESS (val) = *sp;
3842         }
3843       else
3844         {
3845           /* Stack grows upward.  Align the frame, allocate space, and
3846              then again, re-align the frame. */
3847           if (gdbarch_frame_align_p (current_gdbarch))
3848             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3849           VALUE_ADDRESS (val) = *sp;
3850           *sp += len;
3851           if (gdbarch_frame_align_p (current_gdbarch))
3852             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3853         }
3854       VALUE_LVAL (val) = lval_memory;
3855
3856       write_memory (VALUE_ADDRESS (val), value_contents_raw (val), len);
3857     }
3858
3859   return val;
3860 }
3861
3862 /* Return the value ACTUAL, converted to be an appropriate value for a
3863    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
3864    allocating any necessary descriptors (fat pointers), or copies of
3865    values not residing in memory, updating it as needed.  */
3866
3867 struct value *
3868 ada_convert_actual (struct value *actual, struct type *formal_type0,
3869                     CORE_ADDR *sp)
3870 {
3871   struct type *actual_type = ada_check_typedef (value_type (actual));
3872   struct type *formal_type = ada_check_typedef (formal_type0);
3873   struct type *formal_target =
3874     TYPE_CODE (formal_type) == TYPE_CODE_PTR
3875     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3876   struct type *actual_target =
3877     TYPE_CODE (actual_type) == TYPE_CODE_PTR
3878     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3879
3880   if (ada_is_array_descriptor_type (formal_target)
3881       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3882     return make_array_descriptor (formal_type, actual, sp);
3883   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3884            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
3885     {
3886       struct value *result;
3887       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3888           && ada_is_array_descriptor_type (actual_target))
3889         result = desc_data (actual);
3890       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3891         {
3892           if (VALUE_LVAL (actual) != lval_memory)
3893             {
3894               struct value *val;
3895               actual_type = ada_check_typedef (value_type (actual));
3896               val = allocate_value (actual_type);
3897               memcpy ((char *) value_contents_raw (val),
3898                       (char *) value_contents (actual),
3899                       TYPE_LENGTH (actual_type));
3900               actual = ensure_lval (val, sp);
3901             }
3902           result = value_addr (actual);
3903         }
3904       else
3905         return actual;
3906       return value_cast_pointers (formal_type, result);
3907     }
3908   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3909     return ada_value_ind (actual);
3910
3911   return actual;
3912 }
3913
3914
3915 /* Push a descriptor of type TYPE for array value ARR on the stack at
3916    *SP, updating *SP to reflect the new descriptor.  Return either
3917    an lvalue representing the new descriptor, or (if TYPE is a pointer-
3918    to-descriptor type rather than a descriptor type), a struct value *
3919    representing a pointer to this descriptor.  */
3920
3921 static struct value *
3922 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3923 {
3924   struct type *bounds_type = desc_bounds_type (type);
3925   struct type *desc_type = desc_base_type (type);
3926   struct value *descriptor = allocate_value (desc_type);
3927   struct value *bounds = allocate_value (bounds_type);
3928   int i;
3929
3930   for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3931     {
3932       modify_general_field (value_contents_writeable (bounds),
3933                             value_as_long (ada_array_bound (arr, i, 0)),
3934                             desc_bound_bitpos (bounds_type, i, 0),
3935                             desc_bound_bitsize (bounds_type, i, 0));
3936       modify_general_field (value_contents_writeable (bounds),
3937                             value_as_long (ada_array_bound (arr, i, 1)),
3938                             desc_bound_bitpos (bounds_type, i, 1),
3939                             desc_bound_bitsize (bounds_type, i, 1));
3940     }
3941
3942   bounds = ensure_lval (bounds, sp);
3943
3944   modify_general_field (value_contents_writeable (descriptor),
3945                         VALUE_ADDRESS (ensure_lval (arr, sp)),
3946                         fat_pntr_data_bitpos (desc_type),
3947                         fat_pntr_data_bitsize (desc_type));
3948
3949   modify_general_field (value_contents_writeable (descriptor),
3950                         VALUE_ADDRESS (bounds),
3951                         fat_pntr_bounds_bitpos (desc_type),
3952                         fat_pntr_bounds_bitsize (desc_type));
3953
3954   descriptor = ensure_lval (descriptor, sp);
3955
3956   if (TYPE_CODE (type) == TYPE_CODE_PTR)
3957     return value_addr (descriptor);
3958   else
3959     return descriptor;
3960 }
3961 \f
3962 /* Dummy definitions for an experimental caching module that is not
3963  * used in the public sources. */
3964
3965 static int
3966 lookup_cached_symbol (const char *name, domain_enum namespace,
3967                       struct symbol **sym, struct block **block)
3968 {
3969   return 0;
3970 }
3971
3972 static void
3973 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3974               struct block *block)
3975 {
3976 }
3977 \f
3978                                 /* Symbol Lookup */
3979
3980 /* Return the result of a standard (literal, C-like) lookup of NAME in
3981    given DOMAIN, visible from lexical block BLOCK.  */
3982
3983 static struct symbol *
3984 standard_lookup (const char *name, const struct block *block,
3985                  domain_enum domain)
3986 {
3987   struct symbol *sym;
3988
3989   if (lookup_cached_symbol (name, domain, &sym, NULL))
3990     return sym;
3991   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
3992   cache_symbol (name, domain, sym, block_found);
3993   return sym;
3994 }
3995
3996
3997 /* Non-zero iff there is at least one non-function/non-enumeral symbol
3998    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
3999    since they contend in overloading in the same way.  */
4000 static int
4001 is_nonfunction (struct ada_symbol_info syms[], int n)
4002 {
4003   int i;
4004
4005   for (i = 0; i < n; i += 1)
4006     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4007         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4008             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4009       return 1;
4010
4011   return 0;
4012 }
4013
4014 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4015    struct types.  Otherwise, they may not.  */
4016
4017 static int
4018 equiv_types (struct type *type0, struct type *type1)
4019 {
4020   if (type0 == type1)
4021     return 1;
4022   if (type0 == NULL || type1 == NULL
4023       || TYPE_CODE (type0) != TYPE_CODE (type1))
4024     return 0;
4025   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4026        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4027       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4028       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4029     return 1;
4030
4031   return 0;
4032 }
4033
4034 /* True iff SYM0 represents the same entity as SYM1, or one that is
4035    no more defined than that of SYM1.  */
4036
4037 static int
4038 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4039 {
4040   if (sym0 == sym1)
4041     return 1;
4042   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4043       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4044     return 0;
4045
4046   switch (SYMBOL_CLASS (sym0))
4047     {
4048     case LOC_UNDEF:
4049       return 1;
4050     case LOC_TYPEDEF:
4051       {
4052         struct type *type0 = SYMBOL_TYPE (sym0);
4053         struct type *type1 = SYMBOL_TYPE (sym1);
4054         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4055         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4056         int len0 = strlen (name0);
4057         return
4058           TYPE_CODE (type0) == TYPE_CODE (type1)
4059           && (equiv_types (type0, type1)
4060               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4061                   && strncmp (name1 + len0, "___XV", 5) == 0));
4062       }
4063     case LOC_CONST:
4064       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4065         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4066     default:
4067       return 0;
4068     }
4069 }
4070
4071 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4072    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4073
4074 static void
4075 add_defn_to_vec (struct obstack *obstackp,
4076                  struct symbol *sym,
4077                  struct block *block)
4078 {
4079   int i;
4080   size_t tmp;
4081   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4082
4083   /* Do not try to complete stub types, as the debugger is probably
4084      already scanning all symbols matching a certain name at the
4085      time when this function is called.  Trying to replace the stub
4086      type by its associated full type will cause us to restart a scan
4087      which may lead to an infinite recursion.  Instead, the client
4088      collecting the matching symbols will end up collecting several
4089      matches, with at least one of them complete.  It can then filter
4090      out the stub ones if needed.  */
4091
4092   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4093     {
4094       if (lesseq_defined_than (sym, prevDefns[i].sym))
4095         return;
4096       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4097         {
4098           prevDefns[i].sym = sym;
4099           prevDefns[i].block = block;
4100           return;
4101         }
4102     }
4103
4104   {
4105     struct ada_symbol_info info;
4106
4107     info.sym = sym;
4108     info.block = block;
4109     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4110   }
4111 }
4112
4113 /* Number of ada_symbol_info structures currently collected in 
4114    current vector in *OBSTACKP.  */
4115
4116 static int
4117 num_defns_collected (struct obstack *obstackp)
4118 {
4119   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4120 }
4121
4122 /* Vector of ada_symbol_info structures currently collected in current 
4123    vector in *OBSTACKP.  If FINISH, close off the vector and return
4124    its final address.  */
4125
4126 static struct ada_symbol_info *
4127 defns_collected (struct obstack *obstackp, int finish)
4128 {
4129   if (finish)
4130     return obstack_finish (obstackp);
4131   else
4132     return (struct ada_symbol_info *) obstack_base (obstackp);
4133 }
4134
4135 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
4136    Check the global symbols if GLOBAL, the static symbols if not.
4137    Do wild-card match if WILD.  */
4138
4139 static struct partial_symbol *
4140 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
4141                            int global, domain_enum namespace, int wild)
4142 {
4143   struct partial_symbol **start;
4144   int name_len = strlen (name);
4145   int length = (global ? pst->n_global_syms : pst->n_static_syms);
4146   int i;
4147
4148   if (length == 0)
4149     {
4150       return (NULL);
4151     }
4152
4153   start = (global ?
4154            pst->objfile->global_psymbols.list + pst->globals_offset :
4155            pst->objfile->static_psymbols.list + pst->statics_offset);
4156
4157   if (wild)
4158     {
4159       for (i = 0; i < length; i += 1)
4160         {
4161           struct partial_symbol *psym = start[i];
4162
4163           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4164                                      SYMBOL_DOMAIN (psym), namespace)
4165               && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
4166             return psym;
4167         }
4168       return NULL;
4169     }
4170   else
4171     {
4172       if (global)
4173         {
4174           int U;
4175           i = 0;
4176           U = length - 1;
4177           while (U - i > 4)
4178             {
4179               int M = (U + i) >> 1;
4180               struct partial_symbol *psym = start[M];
4181               if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
4182                 i = M + 1;
4183               else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
4184                 U = M - 1;
4185               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
4186                 i = M + 1;
4187               else
4188                 U = M;
4189             }
4190         }
4191       else
4192         i = 0;
4193
4194       while (i < length)
4195         {
4196           struct partial_symbol *psym = start[i];
4197
4198           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4199                                      SYMBOL_DOMAIN (psym), namespace))
4200             {
4201               int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
4202
4203               if (cmp < 0)
4204                 {
4205                   if (global)
4206                     break;
4207                 }
4208               else if (cmp == 0
4209                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4210                                           + name_len))
4211                 return psym;
4212             }
4213           i += 1;
4214         }
4215
4216       if (global)
4217         {
4218           int U;
4219           i = 0;
4220           U = length - 1;
4221           while (U - i > 4)
4222             {
4223               int M = (U + i) >> 1;
4224               struct partial_symbol *psym = start[M];
4225               if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4226                 i = M + 1;
4227               else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4228                 U = M - 1;
4229               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4230                 i = M + 1;
4231               else
4232                 U = M;
4233             }
4234         }
4235       else
4236         i = 0;
4237
4238       while (i < length)
4239         {
4240           struct partial_symbol *psym = start[i];
4241
4242           if (symbol_matches_domain (SYMBOL_LANGUAGE (psym),
4243                                      SYMBOL_DOMAIN (psym), namespace))
4244             {
4245               int cmp;
4246
4247               cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4248               if (cmp == 0)
4249                 {
4250                   cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4251                   if (cmp == 0)
4252                     cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4253                                    name_len);
4254                 }
4255
4256               if (cmp < 0)
4257                 {
4258                   if (global)
4259                     break;
4260                 }
4261               else if (cmp == 0
4262                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4263                                           + name_len + 5))
4264                 return psym;
4265             }
4266           i += 1;
4267         }
4268     }
4269   return NULL;
4270 }
4271
4272 /* Find a symbol table containing symbol SYM or NULL if none.  */
4273
4274 static struct symtab *
4275 symtab_for_sym (struct symbol *sym)
4276 {
4277   struct symtab *s;
4278   struct objfile *objfile;
4279   struct block *b;
4280   struct symbol *tmp_sym;
4281   struct dict_iterator iter;
4282   int j;
4283
4284   ALL_PRIMARY_SYMTABS (objfile, s)
4285   {
4286     switch (SYMBOL_CLASS (sym))
4287       {
4288       case LOC_CONST:
4289       case LOC_STATIC:
4290       case LOC_TYPEDEF:
4291       case LOC_REGISTER:
4292       case LOC_LABEL:
4293       case LOC_BLOCK:
4294       case LOC_CONST_BYTES:
4295         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4296         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4297           return s;
4298         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4299         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4300           return s;
4301         break;
4302       default:
4303         break;
4304       }
4305     switch (SYMBOL_CLASS (sym))
4306       {
4307       case LOC_REGISTER:
4308       case LOC_ARG:
4309       case LOC_REF_ARG:
4310       case LOC_REGPARM_ADDR:
4311       case LOC_LOCAL:
4312       case LOC_TYPEDEF:
4313       case LOC_COMPUTED:
4314         for (j = FIRST_LOCAL_BLOCK;
4315              j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4316           {
4317             b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4318             ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4319               return s;
4320           }
4321         break;
4322       default:
4323         break;
4324       }
4325   }
4326   return NULL;
4327 }
4328
4329 /* Return a minimal symbol matching NAME according to Ada decoding
4330    rules.  Returns NULL if there is no such minimal symbol.  Names 
4331    prefixed with "standard__" are handled specially: "standard__" is 
4332    first stripped off, and only static and global symbols are searched.  */
4333
4334 struct minimal_symbol *
4335 ada_lookup_simple_minsym (const char *name)
4336 {
4337   struct objfile *objfile;
4338   struct minimal_symbol *msymbol;
4339   int wild_match;
4340
4341   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4342     {
4343       name += sizeof ("standard__") - 1;
4344       wild_match = 0;
4345     }
4346   else
4347     wild_match = (strstr (name, "__") == NULL);
4348
4349   ALL_MSYMBOLS (objfile, msymbol)
4350   {
4351     if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4352         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4353       return msymbol;
4354   }
4355
4356   return NULL;
4357 }
4358
4359 /* For all subprograms that statically enclose the subprogram of the
4360    selected frame, add symbols matching identifier NAME in DOMAIN
4361    and their blocks to the list of data in OBSTACKP, as for
4362    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4363    wildcard prefix.  */
4364
4365 static void
4366 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4367                                   const char *name, domain_enum namespace,
4368                                   int wild_match)
4369 {
4370 }
4371
4372 /* True if TYPE is definitely an artificial type supplied to a symbol
4373    for which no debugging information was given in the symbol file.  */
4374
4375 static int
4376 is_nondebugging_type (struct type *type)
4377 {
4378   char *name = ada_type_name (type);
4379   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4380 }
4381
4382 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4383    duplicate other symbols in the list (The only case I know of where
4384    this happens is when object files containing stabs-in-ecoff are
4385    linked with files containing ordinary ecoff debugging symbols (or no
4386    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4387    Returns the number of items in the modified list.  */
4388
4389 static int
4390 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4391 {
4392   int i, j;
4393
4394   i = 0;
4395   while (i < nsyms)
4396     {
4397       if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4398           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4399           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4400         {
4401           for (j = 0; j < nsyms; j += 1)
4402             {
4403               if (i != j
4404                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4405                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4406                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4407                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4408                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4409                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4410                 {
4411                   int k;
4412                   for (k = i + 1; k < nsyms; k += 1)
4413                     syms[k - 1] = syms[k];
4414                   nsyms -= 1;
4415                   goto NextSymbol;
4416                 }
4417             }
4418         }
4419       i += 1;
4420     NextSymbol:
4421       ;
4422     }
4423   return nsyms;
4424 }
4425
4426 /* Given a type that corresponds to a renaming entity, use the type name
4427    to extract the scope (package name or function name, fully qualified,
4428    and following the GNAT encoding convention) where this renaming has been
4429    defined.  The string returned needs to be deallocated after use.  */
4430
4431 static char *
4432 xget_renaming_scope (struct type *renaming_type)
4433 {
4434   /* The renaming types adhere to the following convention:
4435      <scope>__<rename>___<XR extension>. 
4436      So, to extract the scope, we search for the "___XR" extension,
4437      and then backtrack until we find the first "__".  */
4438
4439   const char *name = type_name_no_tag (renaming_type);
4440   char *suffix = strstr (name, "___XR");
4441   char *last;
4442   int scope_len;
4443   char *scope;
4444
4445   /* Now, backtrack a bit until we find the first "__".  Start looking
4446      at suffix - 3, as the <rename> part is at least one character long.  */
4447
4448   for (last = suffix - 3; last > name; last--)
4449     if (last[0] == '_' && last[1] == '_')
4450       break;
4451
4452   /* Make a copy of scope and return it.  */
4453
4454   scope_len = last - name;
4455   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4456
4457   strncpy (scope, name, scope_len);
4458   scope[scope_len] = '\0';
4459
4460   return scope;
4461 }
4462
4463 /* Return nonzero if NAME corresponds to a package name.  */
4464
4465 static int
4466 is_package_name (const char *name)
4467 {
4468   /* Here, We take advantage of the fact that no symbols are generated
4469      for packages, while symbols are generated for each function.
4470      So the condition for NAME represent a package becomes equivalent
4471      to NAME not existing in our list of symbols.  There is only one
4472      small complication with library-level functions (see below).  */
4473
4474   char *fun_name;
4475
4476   /* If it is a function that has not been defined at library level,
4477      then we should be able to look it up in the symbols.  */
4478   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4479     return 0;
4480
4481   /* Library-level function names start with "_ada_".  See if function
4482      "_ada_" followed by NAME can be found.  */
4483
4484   /* Do a quick check that NAME does not contain "__", since library-level
4485      functions names cannot contain "__" in them.  */
4486   if (strstr (name, "__") != NULL)
4487     return 0;
4488
4489   fun_name = xstrprintf ("_ada_%s", name);
4490
4491   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4492 }
4493
4494 /* Return nonzero if SYM corresponds to a renaming entity that is
4495    not visible from FUNCTION_NAME.  */
4496
4497 static int
4498 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4499 {
4500   char *scope;
4501
4502   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4503     return 0;
4504
4505   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4506
4507   make_cleanup (xfree, scope);
4508
4509   /* If the rename has been defined in a package, then it is visible.  */
4510   if (is_package_name (scope))
4511     return 0;
4512
4513   /* Check that the rename is in the current function scope by checking
4514      that its name starts with SCOPE.  */
4515
4516   /* If the function name starts with "_ada_", it means that it is
4517      a library-level function.  Strip this prefix before doing the
4518      comparison, as the encoding for the renaming does not contain
4519      this prefix.  */
4520   if (strncmp (function_name, "_ada_", 5) == 0)
4521     function_name += 5;
4522
4523   return (strncmp (function_name, scope, strlen (scope)) != 0);
4524 }
4525
4526 /* Remove entries from SYMS that corresponds to a renaming entity that
4527    is not visible from the function associated with CURRENT_BLOCK or
4528    that is superfluous due to the presence of more specific renaming
4529    information.  Places surviving symbols in the initial entries of
4530    SYMS and returns the number of surviving symbols.
4531    
4532    Rationale:
4533    First, in cases where an object renaming is implemented as a
4534    reference variable, GNAT may produce both the actual reference
4535    variable and the renaming encoding.  In this case, we discard the
4536    latter.
4537
4538    Second, GNAT emits a type following a specified encoding for each renaming
4539    entity.  Unfortunately, STABS currently does not support the definition
4540    of types that are local to a given lexical block, so all renamings types
4541    are emitted at library level.  As a consequence, if an application
4542    contains two renaming entities using the same name, and a user tries to
4543    print the value of one of these entities, the result of the ada symbol
4544    lookup will also contain the wrong renaming type.
4545
4546    This function partially covers for this limitation by attempting to
4547    remove from the SYMS list renaming symbols that should be visible
4548    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4549    method with the current information available.  The implementation
4550    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4551    
4552       - When the user tries to print a rename in a function while there
4553         is another rename entity defined in a package:  Normally, the
4554         rename in the function has precedence over the rename in the
4555         package, so the latter should be removed from the list.  This is
4556         currently not the case.
4557         
4558       - This function will incorrectly remove valid renames if
4559         the CURRENT_BLOCK corresponds to a function which symbol name
4560         has been changed by an "Export" pragma.  As a consequence,
4561         the user will be unable to print such rename entities.  */
4562
4563 static int
4564 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4565                              int nsyms, const struct block *current_block)
4566 {
4567   struct symbol *current_function;
4568   char *current_function_name;
4569   int i;
4570   int is_new_style_renaming;
4571
4572   /* If there is both a renaming foo___XR... encoded as a variable and
4573      a simple variable foo in the same block, discard the latter.
4574      First, zero out such symbols, then compress. */
4575   is_new_style_renaming = 0;
4576   for (i = 0; i < nsyms; i += 1)
4577     {
4578       struct symbol *sym = syms[i].sym;
4579       struct block *block = syms[i].block;
4580       const char *name;
4581       const char *suffix;
4582
4583       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4584         continue;
4585       name = SYMBOL_LINKAGE_NAME (sym);
4586       suffix = strstr (name, "___XR");
4587
4588       if (suffix != NULL)
4589         {
4590           int name_len = suffix - name;
4591           int j;
4592           is_new_style_renaming = 1;
4593           for (j = 0; j < nsyms; j += 1)
4594             if (i != j && syms[j].sym != NULL
4595                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4596                             name_len) == 0
4597                 && block == syms[j].block)
4598               syms[j].sym = NULL;
4599         }
4600     }
4601   if (is_new_style_renaming)
4602     {
4603       int j, k;
4604
4605       for (j = k = 0; j < nsyms; j += 1)
4606         if (syms[j].sym != NULL)
4607             {
4608               syms[k] = syms[j];
4609               k += 1;
4610             }
4611       return k;
4612     }
4613
4614   /* Extract the function name associated to CURRENT_BLOCK.
4615      Abort if unable to do so.  */
4616
4617   if (current_block == NULL)
4618     return nsyms;
4619
4620   current_function = block_linkage_function (current_block);
4621   if (current_function == NULL)
4622     return nsyms;
4623
4624   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4625   if (current_function_name == NULL)
4626     return nsyms;
4627
4628   /* Check each of the symbols, and remove it from the list if it is
4629      a type corresponding to a renaming that is out of the scope of
4630      the current block.  */
4631
4632   i = 0;
4633   while (i < nsyms)
4634     {
4635       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4636           == ADA_OBJECT_RENAMING
4637           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4638         {
4639           int j;
4640           for (j = i + 1; j < nsyms; j += 1)
4641             syms[j - 1] = syms[j];
4642           nsyms -= 1;
4643         }
4644       else
4645         i += 1;
4646     }
4647
4648   return nsyms;
4649 }
4650
4651 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4652    scope and in global scopes, returning the number of matches.  Sets
4653    *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4654    indicating the symbols found and the blocks and symbol tables (if
4655    any) in which they were found.  This vector are transient---good only to 
4656    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
4657    symbol match within the nest of blocks whose innermost member is BLOCK0,
4658    is the one match returned (no other matches in that or
4659      enclosing blocks is returned).  If there are any matches in or
4660    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4661    search extends to global and file-scope (static) symbol tables.
4662    Names prefixed with "standard__" are handled specially: "standard__" 
4663    is first stripped off, and only static and global symbols are searched.  */
4664
4665 int
4666 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4667                         domain_enum namespace,
4668                         struct ada_symbol_info **results)
4669 {
4670   struct symbol *sym;
4671   struct symtab *s;
4672   struct partial_symtab *ps;
4673   struct blockvector *bv;
4674   struct objfile *objfile;
4675   struct block *block;
4676   const char *name;
4677   struct minimal_symbol *msymbol;
4678   int wild_match;
4679   int cacheIfUnique;
4680   int block_depth;
4681   int ndefns;
4682
4683   obstack_free (&symbol_list_obstack, NULL);
4684   obstack_init (&symbol_list_obstack);
4685
4686   cacheIfUnique = 0;
4687
4688   /* Search specified block and its superiors.  */
4689
4690   wild_match = (strstr (name0, "__") == NULL);
4691   name = name0;
4692   block = (struct block *) block0;      /* FIXME: No cast ought to be
4693                                            needed, but adding const will
4694                                            have a cascade effect.  */
4695   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4696     {
4697       wild_match = 0;
4698       block = NULL;
4699       name = name0 + sizeof ("standard__") - 1;
4700     }
4701
4702   block_depth = 0;
4703   while (block != NULL)
4704     {
4705       block_depth += 1;
4706       ada_add_block_symbols (&symbol_list_obstack, block, name,
4707                              namespace, NULL, wild_match);
4708
4709       /* If we found a non-function match, assume that's the one.  */
4710       if (is_nonfunction (defns_collected (&symbol_list_obstack, 0),
4711                           num_defns_collected (&symbol_list_obstack)))
4712         goto done;
4713
4714       block = BLOCK_SUPERBLOCK (block);
4715     }
4716
4717   /* If no luck so far, try to find NAME as a local symbol in some lexically
4718      enclosing subprogram.  */
4719   if (num_defns_collected (&symbol_list_obstack) == 0 && block_depth > 2)
4720     add_symbols_from_enclosing_procs (&symbol_list_obstack,
4721                                       name, namespace, wild_match);
4722
4723   /* If we found ANY matches among non-global symbols, we're done.  */
4724
4725   if (num_defns_collected (&symbol_list_obstack) > 0)
4726     goto done;
4727
4728   cacheIfUnique = 1;
4729   if (lookup_cached_symbol (name0, namespace, &sym, &block))
4730     {
4731       if (sym != NULL)
4732         add_defn_to_vec (&symbol_list_obstack, sym, block);
4733       goto done;
4734     }
4735
4736   /* Now add symbols from all global blocks: symbol tables, minimal symbol
4737      tables, and psymtab's.  */
4738
4739   ALL_PRIMARY_SYMTABS (objfile, s)
4740   {
4741     QUIT;
4742     bv = BLOCKVECTOR (s);
4743     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4744     ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4745                            objfile, wild_match);
4746   }
4747
4748   if (namespace == VAR_DOMAIN)
4749     {
4750       ALL_MSYMBOLS (objfile, msymbol)
4751       {
4752         if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4753           {
4754             switch (MSYMBOL_TYPE (msymbol))
4755               {
4756               case mst_solib_trampoline:
4757                 break;
4758               default:
4759                 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4760                 if (s != NULL)
4761                   {
4762                     int ndefns0 = num_defns_collected (&symbol_list_obstack);
4763                     char *raw_name = SYMBOL_LINKAGE_NAME (msymbol);
4764                     char *name1;
4765                     const char *suffix;
4766                     QUIT;
4767                     suffix = strrchr (raw_name, '.');
4768                     if (suffix == NULL)
4769                       suffix = strrchr (raw_name, '$');
4770                     if (suffix != NULL && is_digits_suffix (suffix + 1))
4771                       {
4772                         name1 = alloca (suffix - raw_name + 1);
4773                         strncpy (name1, raw_name, suffix - raw_name);
4774                         name1[suffix - raw_name] = '\0';
4775                       }
4776                     else
4777                       name1 = raw_name;
4778                         
4779                     bv = BLOCKVECTOR (s);
4780                     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4781                     ada_add_block_symbols (&symbol_list_obstack, block,
4782                                            name1, namespace, objfile, 0);
4783
4784                     if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4785                       {
4786                         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4787                         ada_add_block_symbols (&symbol_list_obstack, block,
4788                                                name1, namespace, objfile, 0);
4789                       }
4790                   }
4791               }
4792           }
4793       }
4794     }
4795
4796   ALL_PSYMTABS (objfile, ps)
4797   {
4798     QUIT;
4799     if (!ps->readin
4800         && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4801       {
4802         s = PSYMTAB_TO_SYMTAB (ps);
4803         if (!s->primary)
4804           continue;
4805         bv = BLOCKVECTOR (s);
4806         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4807         ada_add_block_symbols (&symbol_list_obstack, block, name,
4808                                namespace, objfile, wild_match);
4809       }
4810   }
4811
4812   /* Now add symbols from all per-file blocks if we've gotten no hits
4813      (Not strictly correct, but perhaps better than an error).
4814      Do the symtabs first, then check the psymtabs.  */
4815
4816   if (num_defns_collected (&symbol_list_obstack) == 0)
4817     {
4818
4819       ALL_PRIMARY_SYMTABS (objfile, s)
4820       {
4821         QUIT;
4822         bv = BLOCKVECTOR (s);
4823         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4824         ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4825                                objfile, wild_match);
4826       }
4827
4828       ALL_PSYMTABS (objfile, ps)
4829       {
4830         QUIT;
4831         if (!ps->readin
4832             && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4833           {
4834             s = PSYMTAB_TO_SYMTAB (ps);
4835             bv = BLOCKVECTOR (s);
4836             if (!s->primary)
4837               continue;
4838             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4839             ada_add_block_symbols (&symbol_list_obstack, block, name,
4840                                    namespace, objfile, wild_match);
4841           }
4842       }
4843     }
4844
4845 done:
4846   ndefns = num_defns_collected (&symbol_list_obstack);
4847   *results = defns_collected (&symbol_list_obstack, 1);
4848
4849   ndefns = remove_extra_symbols (*results, ndefns);
4850
4851   if (ndefns == 0)
4852     cache_symbol (name0, namespace, NULL, NULL);
4853
4854   if (ndefns == 1 && cacheIfUnique)
4855     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
4856
4857   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4858
4859   return ndefns;
4860 }
4861
4862 struct symbol *
4863 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4864                            domain_enum namespace, struct block **block_found)
4865 {
4866   struct ada_symbol_info *candidates;
4867   int n_candidates;
4868
4869   n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4870
4871   if (n_candidates == 0)
4872     return NULL;
4873
4874   if (block_found != NULL)
4875     *block_found = candidates[0].block;
4876
4877   return fixup_symbol_section (candidates[0].sym, NULL);
4878 }  
4879
4880 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4881    scope and in global scopes, or NULL if none.  NAME is folded and
4882    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4883    choosing the first symbol if there are multiple choices.  
4884    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4885    table in which the symbol was found (in both cases, these
4886    assignments occur only if the pointers are non-null).  */
4887 struct symbol *
4888 ada_lookup_symbol (const char *name, const struct block *block0,
4889                    domain_enum namespace, int *is_a_field_of_this)
4890 {
4891   if (is_a_field_of_this != NULL)
4892     *is_a_field_of_this = 0;
4893
4894   return
4895     ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4896                                block0, namespace, NULL);
4897 }
4898
4899 static struct symbol *
4900 ada_lookup_symbol_nonlocal (const char *name,
4901                             const char *linkage_name,
4902                             const struct block *block,
4903                             const domain_enum domain)
4904 {
4905   if (linkage_name == NULL)
4906     linkage_name = name;
4907   return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4908                             NULL);
4909 }
4910
4911
4912 /* True iff STR is a possible encoded suffix of a normal Ada name
4913    that is to be ignored for matching purposes.  Suffixes of parallel
4914    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4915    are given by any of the regular expressions:
4916
4917    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
4918    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
4919    _E[0-9]+[bs]$    [protected object entry suffixes]
4920    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4921
4922    Also, any leading "__[0-9]+" sequence is skipped before the suffix
4923    match is performed.  This sequence is used to differentiate homonyms,
4924    is an optional part of a valid name suffix.  */
4925
4926 static int
4927 is_name_suffix (const char *str)
4928 {
4929   int k;
4930   const char *matching;
4931   const int len = strlen (str);
4932
4933   /* Skip optional leading __[0-9]+.  */
4934
4935   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4936     {
4937       str += 3;
4938       while (isdigit (str[0]))
4939         str += 1;
4940     }
4941   
4942   /* [.$][0-9]+ */
4943
4944   if (str[0] == '.' || str[0] == '$')
4945     {
4946       matching = str + 1;
4947       while (isdigit (matching[0]))
4948         matching += 1;
4949       if (matching[0] == '\0')
4950         return 1;
4951     }
4952
4953   /* ___[0-9]+ */
4954
4955   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4956     {
4957       matching = str + 3;
4958       while (isdigit (matching[0]))
4959         matching += 1;
4960       if (matching[0] == '\0')
4961         return 1;
4962     }
4963
4964 #if 0
4965   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4966      with a N at the end. Unfortunately, the compiler uses the same
4967      convention for other internal types it creates. So treating
4968      all entity names that end with an "N" as a name suffix causes
4969      some regressions. For instance, consider the case of an enumerated
4970      type. To support the 'Image attribute, it creates an array whose
4971      name ends with N.
4972      Having a single character like this as a suffix carrying some
4973      information is a bit risky. Perhaps we should change the encoding
4974      to be something like "_N" instead.  In the meantime, do not do
4975      the following check.  */
4976   /* Protected Object Subprograms */
4977   if (len == 1 && str [0] == 'N')
4978     return 1;
4979 #endif
4980
4981   /* _E[0-9]+[bs]$ */
4982   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4983     {
4984       matching = str + 3;
4985       while (isdigit (matching[0]))
4986         matching += 1;
4987       if ((matching[0] == 'b' || matching[0] == 's')
4988           && matching [1] == '\0')
4989         return 1;
4990     }
4991
4992   /* ??? We should not modify STR directly, as we are doing below.  This
4993      is fine in this case, but may become problematic later if we find
4994      that this alternative did not work, and want to try matching
4995      another one from the begining of STR.  Since we modified it, we
4996      won't be able to find the begining of the string anymore!  */
4997   if (str[0] == 'X')
4998     {
4999       str += 1;
5000       while (str[0] != '_' && str[0] != '\0')
5001         {
5002           if (str[0] != 'n' && str[0] != 'b')
5003             return 0;
5004           str += 1;
5005         }
5006     }
5007
5008   if (str[0] == '\000')
5009     return 1;
5010
5011   if (str[0] == '_')
5012     {
5013       if (str[1] != '_' || str[2] == '\000')
5014         return 0;
5015       if (str[2] == '_')
5016         {
5017           if (strcmp (str + 3, "JM") == 0)
5018             return 1;
5019           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5020              the LJM suffix in favor of the JM one.  But we will
5021              still accept LJM as a valid suffix for a reasonable
5022              amount of time, just to allow ourselves to debug programs
5023              compiled using an older version of GNAT.  */
5024           if (strcmp (str + 3, "LJM") == 0)
5025             return 1;
5026           if (str[3] != 'X')
5027             return 0;
5028           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5029               || str[4] == 'U' || str[4] == 'P')
5030             return 1;
5031           if (str[4] == 'R' && str[5] != 'T')
5032             return 1;
5033           return 0;
5034         }
5035       if (!isdigit (str[2]))
5036         return 0;
5037       for (k = 3; str[k] != '\0'; k += 1)
5038         if (!isdigit (str[k]) && str[k] != '_')
5039           return 0;
5040       return 1;
5041     }
5042   if (str[0] == '$' && isdigit (str[1]))
5043     {
5044       for (k = 2; str[k] != '\0'; k += 1)
5045         if (!isdigit (str[k]) && str[k] != '_')
5046           return 0;
5047       return 1;
5048     }
5049   return 0;
5050 }
5051
5052 /* Return nonzero if the given string contains only digits.
5053    The empty string also matches.  */
5054
5055 static int
5056 is_digits_suffix (const char *str)
5057 {
5058   while (isdigit (str[0]))
5059     str++;
5060   return (str[0] == '\0');
5061 }
5062
5063 /* Return non-zero if the string starting at NAME and ending before
5064    NAME_END contains no capital letters.  */
5065
5066 static int
5067 is_valid_name_for_wild_match (const char *name0)
5068 {
5069   const char *decoded_name = ada_decode (name0);
5070   int i;
5071
5072   /* If the decoded name starts with an angle bracket, it means that
5073      NAME0 does not follow the GNAT encoding format.  It should then
5074      not be allowed as a possible wild match.  */
5075   if (decoded_name[0] == '<')
5076     return 0;
5077
5078   for (i=0; decoded_name[i] != '\0'; i++)
5079     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5080       return 0;
5081
5082   return 1;
5083 }
5084
5085 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
5086    PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1.  Ignores
5087    informational suffixes of NAME (i.e., for which is_name_suffix is
5088    true).  */
5089
5090 static int
5091 wild_match (const char *patn0, int patn_len, const char *name0)
5092 {
5093   char* match;
5094   const char* start;
5095   start = name0;
5096   while (1)
5097     {
5098       match = strstr (start, patn0);
5099       if (match == NULL)
5100         return 0;
5101       if ((match == name0 
5102            || match[-1] == '.' 
5103            || (match > name0 + 1 && match[-1] == '_' && match[-2] == '_')
5104            || (match == name0 + 5 && strncmp ("_ada_", name0, 5) == 0))
5105           && is_name_suffix (match + patn_len))
5106         return (match == name0 || is_valid_name_for_wild_match (name0));
5107       start = match + 1;
5108     }
5109 }
5110
5111
5112 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5113    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5114    (if necessary).  If WILD, treat as NAME with a wildcard prefix. 
5115    OBJFILE is the section containing BLOCK.
5116    SYMTAB is recorded with each symbol added.  */
5117
5118 static void
5119 ada_add_block_symbols (struct obstack *obstackp,
5120                        struct block *block, const char *name,
5121                        domain_enum domain, struct objfile *objfile,
5122                        int wild)
5123 {
5124   struct dict_iterator iter;
5125   int name_len = strlen (name);
5126   /* A matching argument symbol, if any.  */
5127   struct symbol *arg_sym;
5128   /* Set true when we find a matching non-argument symbol.  */
5129   int found_sym;
5130   struct symbol *sym;
5131
5132   arg_sym = NULL;
5133   found_sym = 0;
5134   if (wild)
5135     {
5136       struct symbol *sym;
5137       ALL_BLOCK_SYMBOLS (block, iter, sym)
5138       {
5139         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5140                                    SYMBOL_DOMAIN (sym), domain)
5141             && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5142           {
5143             if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5144               continue;
5145             else if (SYMBOL_IS_ARGUMENT (sym))
5146               arg_sym = sym;
5147             else
5148               {
5149                 found_sym = 1;
5150                 add_defn_to_vec (obstackp,
5151                                  fixup_symbol_section (sym, objfile),
5152                                  block);
5153               }
5154           }
5155       }
5156     }
5157   else
5158     {
5159       ALL_BLOCK_SYMBOLS (block, iter, sym)
5160       {
5161         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5162                                    SYMBOL_DOMAIN (sym), domain))
5163           {
5164             int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5165             if (cmp == 0
5166                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5167               {
5168                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5169                   {
5170                     if (SYMBOL_IS_ARGUMENT (sym))
5171                       arg_sym = sym;
5172                     else
5173                       {
5174                         found_sym = 1;
5175                         add_defn_to_vec (obstackp,
5176                                          fixup_symbol_section (sym, objfile),
5177                                          block);
5178                       }
5179                   }
5180               }
5181           }
5182       }
5183     }
5184
5185   if (!found_sym && arg_sym != NULL)
5186     {
5187       add_defn_to_vec (obstackp,
5188                        fixup_symbol_section (arg_sym, objfile),
5189                        block);
5190     }
5191
5192   if (!wild)
5193     {
5194       arg_sym = NULL;
5195       found_sym = 0;
5196
5197       ALL_BLOCK_SYMBOLS (block, iter, sym)
5198       {
5199         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5200                                    SYMBOL_DOMAIN (sym), domain))
5201           {
5202             int cmp;
5203
5204             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5205             if (cmp == 0)
5206               {
5207                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5208                 if (cmp == 0)
5209                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5210                                  name_len);
5211               }
5212
5213             if (cmp == 0
5214                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5215               {
5216                 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5217                   {
5218                     if (SYMBOL_IS_ARGUMENT (sym))
5219                       arg_sym = sym;
5220                     else
5221                       {
5222                         found_sym = 1;
5223                         add_defn_to_vec (obstackp,
5224                                          fixup_symbol_section (sym, objfile),
5225                                          block);
5226                       }
5227                   }
5228               }
5229           }
5230       }
5231
5232       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5233          They aren't parameters, right?  */
5234       if (!found_sym && arg_sym != NULL)
5235         {
5236           add_defn_to_vec (obstackp,
5237                            fixup_symbol_section (arg_sym, objfile),
5238                            block);
5239         }
5240     }
5241 }
5242 \f
5243
5244                                 /* Symbol Completion */
5245
5246 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5247    name in a form that's appropriate for the completion.  The result
5248    does not need to be deallocated, but is only good until the next call.
5249
5250    TEXT_LEN is equal to the length of TEXT.
5251    Perform a wild match if WILD_MATCH is set.
5252    ENCODED should be set if TEXT represents the start of a symbol name
5253    in its encoded form.  */
5254
5255 static const char *
5256 symbol_completion_match (const char *sym_name,
5257                          const char *text, int text_len,
5258                          int wild_match, int encoded)
5259 {
5260   char *result;
5261   const int verbatim_match = (text[0] == '<');
5262   int match = 0;
5263
5264   if (verbatim_match)
5265     {
5266       /* Strip the leading angle bracket.  */
5267       text = text + 1;
5268       text_len--;
5269     }
5270
5271   /* First, test against the fully qualified name of the symbol.  */
5272
5273   if (strncmp (sym_name, text, text_len) == 0)
5274     match = 1;
5275
5276   if (match && !encoded)
5277     {
5278       /* One needed check before declaring a positive match is to verify
5279          that iff we are doing a verbatim match, the decoded version
5280          of the symbol name starts with '<'.  Otherwise, this symbol name
5281          is not a suitable completion.  */
5282       const char *sym_name_copy = sym_name;
5283       int has_angle_bracket;
5284
5285       sym_name = ada_decode (sym_name);
5286       has_angle_bracket = (sym_name[0] == '<');
5287       match = (has_angle_bracket == verbatim_match);
5288       sym_name = sym_name_copy;
5289     }
5290
5291   if (match && !verbatim_match)
5292     {
5293       /* When doing non-verbatim match, another check that needs to
5294          be done is to verify that the potentially matching symbol name
5295          does not include capital letters, because the ada-mode would
5296          not be able to understand these symbol names without the
5297          angle bracket notation.  */
5298       const char *tmp;
5299
5300       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5301       if (*tmp != '\0')
5302         match = 0;
5303     }
5304
5305   /* Second: Try wild matching...  */
5306
5307   if (!match && wild_match)
5308     {
5309       /* Since we are doing wild matching, this means that TEXT
5310          may represent an unqualified symbol name.  We therefore must
5311          also compare TEXT against the unqualified name of the symbol.  */
5312       sym_name = ada_unqualified_name (ada_decode (sym_name));
5313
5314       if (strncmp (sym_name, text, text_len) == 0)
5315         match = 1;
5316     }
5317
5318   /* Finally: If we found a mach, prepare the result to return.  */
5319
5320   if (!match)
5321     return NULL;
5322
5323   if (verbatim_match)
5324     sym_name = add_angle_brackets (sym_name);
5325
5326   if (!encoded)
5327     sym_name = ada_decode (sym_name);
5328
5329   return sym_name;
5330 }
5331
5332 typedef char *char_ptr;
5333 DEF_VEC_P (char_ptr);
5334
5335 /* A companion function to ada_make_symbol_completion_list().
5336    Check if SYM_NAME represents a symbol which name would be suitable
5337    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5338    it is appended at the end of the given string vector SV.
5339
5340    ORIG_TEXT is the string original string from the user command
5341    that needs to be completed.  WORD is the entire command on which
5342    completion should be performed.  These two parameters are used to
5343    determine which part of the symbol name should be added to the
5344    completion vector.
5345    if WILD_MATCH is set, then wild matching is performed.
5346    ENCODED should be set if TEXT represents a symbol name in its
5347    encoded formed (in which case the completion should also be
5348    encoded).  */
5349
5350 static void
5351 symbol_completion_add (VEC(char_ptr) **sv,
5352                        const char *sym_name,
5353                        const char *text, int text_len,
5354                        const char *orig_text, const char *word,
5355                        int wild_match, int encoded)
5356 {
5357   const char *match = symbol_completion_match (sym_name, text, text_len,
5358                                                wild_match, encoded);
5359   char *completion;
5360
5361   if (match == NULL)
5362     return;
5363
5364   /* We found a match, so add the appropriate completion to the given
5365      string vector.  */
5366
5367   if (word == orig_text)
5368     {
5369       completion = xmalloc (strlen (match) + 5);
5370       strcpy (completion, match);
5371     }
5372   else if (word > orig_text)
5373     {
5374       /* Return some portion of sym_name.  */
5375       completion = xmalloc (strlen (match) + 5);
5376       strcpy (completion, match + (word - orig_text));
5377     }
5378   else
5379     {
5380       /* Return some of ORIG_TEXT plus sym_name.  */
5381       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5382       strncpy (completion, word, orig_text - word);
5383       completion[orig_text - word] = '\0';
5384       strcat (completion, match);
5385     }
5386
5387   VEC_safe_push (char_ptr, *sv, completion);
5388 }
5389
5390 /* Return a list of possible symbol names completing TEXT0.  The list
5391    is NULL terminated.  WORD is the entire command on which completion
5392    is made.  */
5393
5394 static char **
5395 ada_make_symbol_completion_list (char *text0, char *word)
5396 {
5397   char *text;
5398   int text_len;
5399   int wild_match;
5400   int encoded;
5401   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5402   struct symbol *sym;
5403   struct symtab *s;
5404   struct partial_symtab *ps;
5405   struct minimal_symbol *msymbol;
5406   struct objfile *objfile;
5407   struct block *b, *surrounding_static_block = 0;
5408   int i;
5409   struct dict_iterator iter;
5410
5411   if (text0[0] == '<')
5412     {
5413       text = xstrdup (text0);
5414       make_cleanup (xfree, text);
5415       text_len = strlen (text);
5416       wild_match = 0;
5417       encoded = 1;
5418     }
5419   else
5420     {
5421       text = xstrdup (ada_encode (text0));
5422       make_cleanup (xfree, text);
5423       text_len = strlen (text);
5424       for (i = 0; i < text_len; i++)
5425         text[i] = tolower (text[i]);
5426
5427       encoded = (strstr (text0, "__") != NULL);
5428       /* If the name contains a ".", then the user is entering a fully
5429          qualified entity name, and the match must not be done in wild
5430          mode.  Similarly, if the user wants to complete what looks like
5431          an encoded name, the match must not be done in wild mode.  */
5432       wild_match = (strchr (text0, '.') == NULL && !encoded);
5433     }
5434
5435   /* First, look at the partial symtab symbols.  */
5436   ALL_PSYMTABS (objfile, ps)
5437   {
5438     struct partial_symbol **psym;
5439
5440     /* If the psymtab's been read in we'll get it when we search
5441        through the blockvector.  */
5442     if (ps->readin)
5443       continue;
5444
5445     for (psym = objfile->global_psymbols.list + ps->globals_offset;
5446          psym < (objfile->global_psymbols.list + ps->globals_offset
5447                  + ps->n_global_syms); psym++)
5448       {
5449         QUIT;
5450         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5451                                text, text_len, text0, word,
5452                                wild_match, encoded);
5453       }
5454
5455     for (psym = objfile->static_psymbols.list + ps->statics_offset;
5456          psym < (objfile->static_psymbols.list + ps->statics_offset
5457                  + ps->n_static_syms); psym++)
5458       {
5459         QUIT;
5460         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5461                                text, text_len, text0, word,
5462                                wild_match, encoded);
5463       }
5464   }
5465
5466   /* At this point scan through the misc symbol vectors and add each
5467      symbol you find to the list.  Eventually we want to ignore
5468      anything that isn't a text symbol (everything else will be
5469      handled by the psymtab code above).  */
5470
5471   ALL_MSYMBOLS (objfile, msymbol)
5472   {
5473     QUIT;
5474     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5475                            text, text_len, text0, word, wild_match, encoded);
5476   }
5477
5478   /* Search upwards from currently selected frame (so that we can
5479      complete on local vars.  */
5480
5481   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5482     {
5483       if (!BLOCK_SUPERBLOCK (b))
5484         surrounding_static_block = b;   /* For elmin of dups */
5485
5486       ALL_BLOCK_SYMBOLS (b, iter, sym)
5487       {
5488         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5489                                text, text_len, text0, word,
5490                                wild_match, encoded);
5491       }
5492     }
5493
5494   /* Go through the symtabs and check the externs and statics for
5495      symbols which match.  */
5496
5497   ALL_SYMTABS (objfile, s)
5498   {
5499     QUIT;
5500     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5501     ALL_BLOCK_SYMBOLS (b, iter, sym)
5502     {
5503       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5504                              text, text_len, text0, word,
5505                              wild_match, encoded);
5506     }
5507   }
5508
5509   ALL_SYMTABS (objfile, s)
5510   {
5511     QUIT;
5512     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5513     /* Don't do this block twice.  */
5514     if (b == surrounding_static_block)
5515       continue;
5516     ALL_BLOCK_SYMBOLS (b, iter, sym)
5517     {
5518       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5519                              text, text_len, text0, word,
5520                              wild_match, encoded);
5521     }
5522   }
5523
5524   /* Append the closing NULL entry.  */
5525   VEC_safe_push (char_ptr, completions, NULL);
5526
5527   /* Make a copy of the COMPLETIONS VEC before we free it, and then
5528      return the copy.  It's unfortunate that we have to make a copy
5529      of an array that we're about to destroy, but there is nothing much
5530      we can do about it.  Fortunately, it's typically not a very large
5531      array.  */
5532   {
5533     const size_t completions_size = 
5534       VEC_length (char_ptr, completions) * sizeof (char *);
5535     char **result = malloc (completions_size);
5536     
5537     memcpy (result, VEC_address (char_ptr, completions), completions_size);
5538
5539     VEC_free (char_ptr, completions);
5540     return result;
5541   }
5542 }
5543
5544                                 /* Field Access */
5545
5546 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5547    for tagged types.  */
5548
5549 static int
5550 ada_is_dispatch_table_ptr_type (struct type *type)
5551 {
5552   char *name;
5553
5554   if (TYPE_CODE (type) != TYPE_CODE_PTR)
5555     return 0;
5556
5557   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5558   if (name == NULL)
5559     return 0;
5560
5561   return (strcmp (name, "ada__tags__dispatch_table") == 0);
5562 }
5563
5564 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5565    to be invisible to users.  */
5566
5567 int
5568 ada_is_ignored_field (struct type *type, int field_num)
5569 {
5570   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5571     return 1;
5572    
5573   /* Check the name of that field.  */
5574   {
5575     const char *name = TYPE_FIELD_NAME (type, field_num);
5576
5577     /* Anonymous field names should not be printed.
5578        brobecker/2007-02-20: I don't think this can actually happen
5579        but we don't want to print the value of annonymous fields anyway.  */
5580     if (name == NULL)
5581       return 1;
5582
5583     /* A field named "_parent" is internally generated by GNAT for
5584        tagged types, and should not be printed either.  */
5585     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5586       return 1;
5587   }
5588
5589   /* If this is the dispatch table of a tagged type, then ignore.  */
5590   if (ada_is_tagged_type (type, 1)
5591       && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5592     return 1;
5593
5594   /* Not a special field, so it should not be ignored.  */
5595   return 0;
5596 }
5597
5598 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
5599    pointer or reference type whose ultimate target has a tag field. */
5600
5601 int
5602 ada_is_tagged_type (struct type *type, int refok)
5603 {
5604   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5605 }
5606
5607 /* True iff TYPE represents the type of X'Tag */
5608
5609 int
5610 ada_is_tag_type (struct type *type)
5611 {
5612   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5613     return 0;
5614   else
5615     {
5616       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5617       return (name != NULL
5618               && strcmp (name, "ada__tags__dispatch_table") == 0);
5619     }
5620 }
5621
5622 /* The type of the tag on VAL.  */
5623
5624 struct type *
5625 ada_tag_type (struct value *val)
5626 {
5627   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5628 }
5629
5630 /* The value of the tag on VAL.  */
5631
5632 struct value *
5633 ada_value_tag (struct value *val)
5634 {
5635   return ada_value_struct_elt (val, "_tag", 0);
5636 }
5637
5638 /* The value of the tag on the object of type TYPE whose contents are
5639    saved at VALADDR, if it is non-null, or is at memory address
5640    ADDRESS. */
5641
5642 static struct value *
5643 value_tag_from_contents_and_address (struct type *type,
5644                                      const gdb_byte *valaddr,
5645                                      CORE_ADDR address)
5646 {
5647   int tag_byte_offset, dummy1, dummy2;
5648   struct type *tag_type;
5649   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5650                          NULL, NULL, NULL))
5651     {
5652       const gdb_byte *valaddr1 = ((valaddr == NULL)
5653                                   ? NULL
5654                                   : valaddr + tag_byte_offset);
5655       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5656
5657       return value_from_contents_and_address (tag_type, valaddr1, address1);
5658     }
5659   return NULL;
5660 }
5661
5662 static struct type *
5663 type_from_tag (struct value *tag)
5664 {
5665   const char *type_name = ada_tag_name (tag);
5666   if (type_name != NULL)
5667     return ada_find_any_type (ada_encode (type_name));
5668   return NULL;
5669 }
5670
5671 struct tag_args
5672 {
5673   struct value *tag;
5674   char *name;
5675 };
5676
5677
5678 static int ada_tag_name_1 (void *);
5679 static int ada_tag_name_2 (struct tag_args *);
5680
5681 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5682    value ARGS, sets ARGS->name to the tag name of ARGS->tag.  
5683    The value stored in ARGS->name is valid until the next call to 
5684    ada_tag_name_1.  */
5685
5686 static int
5687 ada_tag_name_1 (void *args0)
5688 {
5689   struct tag_args *args = (struct tag_args *) args0;
5690   static char name[1024];
5691   char *p;
5692   struct value *val;
5693   args->name = NULL;
5694   val = ada_value_struct_elt (args->tag, "tsd", 1);
5695   if (val == NULL)
5696     return ada_tag_name_2 (args);
5697   val = ada_value_struct_elt (val, "expanded_name", 1);
5698   if (val == NULL)
5699     return 0;
5700   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5701   for (p = name; *p != '\0'; p += 1)
5702     if (isalpha (*p))
5703       *p = tolower (*p);
5704   args->name = name;
5705   return 0;
5706 }
5707
5708 /* Utility function for ada_tag_name_1 that tries the second
5709    representation for the dispatch table (in which there is no
5710    explicit 'tsd' field in the referent of the tag pointer, and instead
5711    the tsd pointer is stored just before the dispatch table. */
5712    
5713 static int
5714 ada_tag_name_2 (struct tag_args *args)
5715 {
5716   struct type *info_type;
5717   static char name[1024];
5718   char *p;
5719   struct value *val, *valp;
5720
5721   args->name = NULL;
5722   info_type = ada_find_any_type ("ada__tags__type_specific_data");
5723   if (info_type == NULL)
5724     return 0;
5725   info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5726   valp = value_cast (info_type, args->tag);
5727   if (valp == NULL)
5728     return 0;
5729   val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1)));
5730   if (val == NULL)
5731     return 0;
5732   val = ada_value_struct_elt (val, "expanded_name", 1);
5733   if (val == NULL)
5734     return 0;
5735   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5736   for (p = name; *p != '\0'; p += 1)
5737     if (isalpha (*p))
5738       *p = tolower (*p);
5739   args->name = name;
5740   return 0;
5741 }
5742
5743 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5744  * a C string.  */
5745
5746 const char *
5747 ada_tag_name (struct value *tag)
5748 {
5749   struct tag_args args;
5750   if (!ada_is_tag_type (value_type (tag)))
5751     return NULL;
5752   args.tag = tag;
5753   args.name = NULL;
5754   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5755   return args.name;
5756 }
5757
5758 /* The parent type of TYPE, or NULL if none.  */
5759
5760 struct type *
5761 ada_parent_type (struct type *type)
5762 {
5763   int i;
5764
5765   type = ada_check_typedef (type);
5766
5767   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5768     return NULL;
5769
5770   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5771     if (ada_is_parent_field (type, i))
5772       return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5773
5774   return NULL;
5775 }
5776
5777 /* True iff field number FIELD_NUM of structure type TYPE contains the
5778    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5779    a structure type with at least FIELD_NUM+1 fields.  */
5780
5781 int
5782 ada_is_parent_field (struct type *type, int field_num)
5783 {
5784   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5785   return (name != NULL
5786           && (strncmp (name, "PARENT", 6) == 0
5787               || strncmp (name, "_parent", 7) == 0));
5788 }
5789
5790 /* True iff field number FIELD_NUM of structure type TYPE is a
5791    transparent wrapper field (which should be silently traversed when doing
5792    field selection and flattened when printing).  Assumes TYPE is a
5793    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5794    structures.  */
5795
5796 int
5797 ada_is_wrapper_field (struct type *type, int field_num)
5798 {
5799   const char *name = TYPE_FIELD_NAME (type, field_num);
5800   return (name != NULL
5801           && (strncmp (name, "PARENT", 6) == 0
5802               || strcmp (name, "REP") == 0
5803               || strncmp (name, "_parent", 7) == 0
5804               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5805 }
5806
5807 /* True iff field number FIELD_NUM of structure or union type TYPE
5808    is a variant wrapper.  Assumes TYPE is a structure type with at least
5809    FIELD_NUM+1 fields.  */
5810
5811 int
5812 ada_is_variant_part (struct type *type, int field_num)
5813 {
5814   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5815   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5816           || (is_dynamic_field (type, field_num)
5817               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
5818                   == TYPE_CODE_UNION)));
5819 }
5820
5821 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5822    whose discriminants are contained in the record type OUTER_TYPE,
5823    returns the type of the controlling discriminant for the variant.  */
5824
5825 struct type *
5826 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5827 {
5828   char *name = ada_variant_discrim_name (var_type);
5829   struct type *type =
5830     ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5831   if (type == NULL)
5832     return builtin_type_int;
5833   else
5834     return type;
5835 }
5836
5837 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5838    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5839    represents a 'when others' clause; otherwise 0.  */
5840
5841 int
5842 ada_is_others_clause (struct type *type, int field_num)
5843 {
5844   const char *name = TYPE_FIELD_NAME (type, field_num);
5845   return (name != NULL && name[0] == 'O');
5846 }
5847
5848 /* Assuming that TYPE0 is the type of the variant part of a record,
5849    returns the name of the discriminant controlling the variant.
5850    The value is valid until the next call to ada_variant_discrim_name.  */
5851
5852 char *
5853 ada_variant_discrim_name (struct type *type0)
5854 {
5855   static char *result = NULL;
5856   static size_t result_len = 0;
5857   struct type *type;
5858   const char *name;
5859   const char *discrim_end;
5860   const char *discrim_start;
5861
5862   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5863     type = TYPE_TARGET_TYPE (type0);
5864   else
5865     type = type0;
5866
5867   name = ada_type_name (type);
5868
5869   if (name == NULL || name[0] == '\000')
5870     return "";
5871
5872   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5873        discrim_end -= 1)
5874     {
5875       if (strncmp (discrim_end, "___XVN", 6) == 0)
5876         break;
5877     }
5878   if (discrim_end == name)
5879     return "";
5880
5881   for (discrim_start = discrim_end; discrim_start != name + 3;
5882        discrim_start -= 1)
5883     {
5884       if (discrim_start == name + 1)
5885         return "";
5886       if ((discrim_start > name + 3
5887            && strncmp (discrim_start - 3, "___", 3) == 0)
5888           || discrim_start[-1] == '.')
5889         break;
5890     }
5891
5892   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5893   strncpy (result, discrim_start, discrim_end - discrim_start);
5894   result[discrim_end - discrim_start] = '\0';
5895   return result;
5896 }
5897
5898 /* Scan STR for a subtype-encoded number, beginning at position K.
5899    Put the position of the character just past the number scanned in
5900    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
5901    Return 1 if there was a valid number at the given position, and 0
5902    otherwise.  A "subtype-encoded" number consists of the absolute value
5903    in decimal, followed by the letter 'm' to indicate a negative number.
5904    Assumes 0m does not occur.  */
5905
5906 int
5907 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
5908 {
5909   ULONGEST RU;
5910
5911   if (!isdigit (str[k]))
5912     return 0;
5913
5914   /* Do it the hard way so as not to make any assumption about
5915      the relationship of unsigned long (%lu scan format code) and
5916      LONGEST.  */
5917   RU = 0;
5918   while (isdigit (str[k]))
5919     {
5920       RU = RU * 10 + (str[k] - '0');
5921       k += 1;
5922     }
5923
5924   if (str[k] == 'm')
5925     {
5926       if (R != NULL)
5927         *R = (-(LONGEST) (RU - 1)) - 1;
5928       k += 1;
5929     }
5930   else if (R != NULL)
5931     *R = (LONGEST) RU;
5932
5933   /* NOTE on the above: Technically, C does not say what the results of
5934      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5935      number representable as a LONGEST (although either would probably work
5936      in most implementations).  When RU>0, the locution in the then branch
5937      above is always equivalent to the negative of RU.  */
5938
5939   if (new_k != NULL)
5940     *new_k = k;
5941   return 1;
5942 }
5943
5944 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5945    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5946    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
5947
5948 int
5949 ada_in_variant (LONGEST val, struct type *type, int field_num)
5950 {
5951   const char *name = TYPE_FIELD_NAME (type, field_num);
5952   int p;
5953
5954   p = 0;
5955   while (1)
5956     {
5957       switch (name[p])
5958         {
5959         case '\0':
5960           return 0;
5961         case 'S':
5962           {
5963             LONGEST W;
5964             if (!ada_scan_number (name, p + 1, &W, &p))
5965               return 0;
5966             if (val == W)
5967               return 1;
5968             break;
5969           }
5970         case 'R':
5971           {
5972             LONGEST L, U;
5973             if (!ada_scan_number (name, p + 1, &L, &p)
5974                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5975               return 0;
5976             if (val >= L && val <= U)
5977               return 1;
5978             break;
5979           }
5980         case 'O':
5981           return 1;
5982         default:
5983           return 0;
5984         }
5985     }
5986 }
5987
5988 /* FIXME: Lots of redundancy below.  Try to consolidate. */
5989
5990 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5991    ARG_TYPE, extract and return the value of one of its (non-static)
5992    fields.  FIELDNO says which field.   Differs from value_primitive_field
5993    only in that it can handle packed values of arbitrary type.  */
5994
5995 static struct value *
5996 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
5997                            struct type *arg_type)
5998 {
5999   struct type *type;
6000
6001   arg_type = ada_check_typedef (arg_type);
6002   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6003
6004   /* Handle packed fields.  */
6005
6006   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6007     {
6008       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6009       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6010
6011       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6012                                              offset + bit_pos / 8,
6013                                              bit_pos % 8, bit_size, type);
6014     }
6015   else
6016     return value_primitive_field (arg1, offset, fieldno, arg_type);
6017 }
6018
6019 /* Find field with name NAME in object of type TYPE.  If found, 
6020    set the following for each argument that is non-null:
6021     - *FIELD_TYPE_P to the field's type; 
6022     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6023       an object of that type;
6024     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6025     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6026       0 otherwise;
6027    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6028    fields up to but not including the desired field, or by the total
6029    number of fields if not found.   A NULL value of NAME never
6030    matches; the function just counts visible fields in this case.
6031    
6032    Returns 1 if found, 0 otherwise. */
6033
6034 static int
6035 find_struct_field (char *name, struct type *type, int offset,
6036                    struct type **field_type_p,
6037                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6038                    int *index_p)
6039 {
6040   int i;
6041
6042   type = ada_check_typedef (type);
6043
6044   if (field_type_p != NULL)
6045     *field_type_p = NULL;
6046   if (byte_offset_p != NULL)
6047     *byte_offset_p = 0;
6048   if (bit_offset_p != NULL)
6049     *bit_offset_p = 0;
6050   if (bit_size_p != NULL)
6051     *bit_size_p = 0;
6052
6053   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6054     {
6055       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6056       int fld_offset = offset + bit_pos / 8;
6057       char *t_field_name = TYPE_FIELD_NAME (type, i);
6058
6059       if (t_field_name == NULL)
6060         continue;
6061
6062       else if (name != NULL && field_name_match (t_field_name, name))
6063         {
6064           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6065           if (field_type_p != NULL)
6066             *field_type_p = TYPE_FIELD_TYPE (type, i);
6067           if (byte_offset_p != NULL)
6068             *byte_offset_p = fld_offset;
6069           if (bit_offset_p != NULL)
6070             *bit_offset_p = bit_pos % 8;
6071           if (bit_size_p != NULL)
6072             *bit_size_p = bit_size;
6073           return 1;
6074         }
6075       else if (ada_is_wrapper_field (type, i))
6076         {
6077           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6078                                  field_type_p, byte_offset_p, bit_offset_p,
6079                                  bit_size_p, index_p))
6080             return 1;
6081         }
6082       else if (ada_is_variant_part (type, i))
6083         {
6084           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6085              fixed type?? */
6086           int j;
6087           struct type *field_type
6088             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6089
6090           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6091             {
6092               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6093                                      fld_offset
6094                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6095                                      field_type_p, byte_offset_p,
6096                                      bit_offset_p, bit_size_p, index_p))
6097                 return 1;
6098             }
6099         }
6100       else if (index_p != NULL)
6101         *index_p += 1;
6102     }
6103   return 0;
6104 }
6105
6106 /* Number of user-visible fields in record type TYPE. */
6107
6108 static int
6109 num_visible_fields (struct type *type)
6110 {
6111   int n;
6112   n = 0;
6113   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6114   return n;
6115 }
6116
6117 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6118    and search in it assuming it has (class) type TYPE.
6119    If found, return value, else return NULL.
6120
6121    Searches recursively through wrapper fields (e.g., '_parent').  */
6122
6123 static struct value *
6124 ada_search_struct_field (char *name, struct value *arg, int offset,
6125                          struct type *type)
6126 {
6127   int i;
6128   type = ada_check_typedef (type);
6129
6130   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6131     {
6132       char *t_field_name = TYPE_FIELD_NAME (type, i);
6133
6134       if (t_field_name == NULL)
6135         continue;
6136
6137       else if (field_name_match (t_field_name, name))
6138         return ada_value_primitive_field (arg, offset, i, type);
6139
6140       else if (ada_is_wrapper_field (type, i))
6141         {
6142           struct value *v =     /* Do not let indent join lines here. */
6143             ada_search_struct_field (name, arg,
6144                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6145                                      TYPE_FIELD_TYPE (type, i));
6146           if (v != NULL)
6147             return v;
6148         }
6149
6150       else if (ada_is_variant_part (type, i))
6151         {
6152           /* PNH: Do we ever get here?  See find_struct_field. */
6153           int j;
6154           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6155           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6156
6157           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6158             {
6159               struct value *v = ada_search_struct_field /* Force line break.  */
6160                 (name, arg,
6161                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6162                  TYPE_FIELD_TYPE (field_type, j));
6163               if (v != NULL)
6164                 return v;
6165             }
6166         }
6167     }
6168   return NULL;
6169 }
6170
6171 static struct value *ada_index_struct_field_1 (int *, struct value *,
6172                                                int, struct type *);
6173
6174
6175 /* Return field #INDEX in ARG, where the index is that returned by
6176  * find_struct_field through its INDEX_P argument.  Adjust the address
6177  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6178  * If found, return value, else return NULL. */
6179
6180 static struct value *
6181 ada_index_struct_field (int index, struct value *arg, int offset,
6182                         struct type *type)
6183 {
6184   return ada_index_struct_field_1 (&index, arg, offset, type);
6185 }
6186
6187
6188 /* Auxiliary function for ada_index_struct_field.  Like
6189  * ada_index_struct_field, but takes index from *INDEX_P and modifies
6190  * *INDEX_P. */
6191
6192 static struct value *
6193 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6194                           struct type *type)
6195 {
6196   int i;
6197   type = ada_check_typedef (type);
6198
6199   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6200     {
6201       if (TYPE_FIELD_NAME (type, i) == NULL)
6202         continue;
6203       else if (ada_is_wrapper_field (type, i))
6204         {
6205           struct value *v =     /* Do not let indent join lines here. */
6206             ada_index_struct_field_1 (index_p, arg,
6207                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
6208                                       TYPE_FIELD_TYPE (type, i));
6209           if (v != NULL)
6210             return v;
6211         }
6212
6213       else if (ada_is_variant_part (type, i))
6214         {
6215           /* PNH: Do we ever get here?  See ada_search_struct_field,
6216              find_struct_field. */
6217           error (_("Cannot assign this kind of variant record"));
6218         }
6219       else if (*index_p == 0)
6220         return ada_value_primitive_field (arg, offset, i, type);
6221       else
6222         *index_p -= 1;
6223     }
6224   return NULL;
6225 }
6226
6227 /* Given ARG, a value of type (pointer or reference to a)*
6228    structure/union, extract the component named NAME from the ultimate
6229    target structure/union and return it as a value with its
6230    appropriate type.  If ARG is a pointer or reference and the field
6231    is not packed, returns a reference to the field, otherwise the
6232    value of the field (an lvalue if ARG is an lvalue).     
6233
6234    The routine searches for NAME among all members of the structure itself
6235    and (recursively) among all members of any wrapper members
6236    (e.g., '_parent').
6237
6238    If NO_ERR, then simply return NULL in case of error, rather than 
6239    calling error.  */
6240
6241 struct value *
6242 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6243 {
6244   struct type *t, *t1;
6245   struct value *v;
6246
6247   v = NULL;
6248   t1 = t = ada_check_typedef (value_type (arg));
6249   if (TYPE_CODE (t) == TYPE_CODE_REF)
6250     {
6251       t1 = TYPE_TARGET_TYPE (t);
6252       if (t1 == NULL)
6253         goto BadValue;
6254       t1 = ada_check_typedef (t1);
6255       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6256         {
6257           arg = coerce_ref (arg);
6258           t = t1;
6259         }
6260     }
6261
6262   while (TYPE_CODE (t) == TYPE_CODE_PTR)
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 = value_ind (arg);
6271           t = t1;
6272         }
6273       else
6274         break;
6275     }
6276
6277   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6278     goto BadValue;
6279
6280   if (t1 == t)
6281     v = ada_search_struct_field (name, arg, 0, t);
6282   else
6283     {
6284       int bit_offset, bit_size, byte_offset;
6285       struct type *field_type;
6286       CORE_ADDR address;
6287
6288       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6289         address = value_as_address (arg);
6290       else
6291         address = unpack_pointer (t, value_contents (arg));
6292
6293       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6294       if (find_struct_field (name, t1, 0,
6295                              &field_type, &byte_offset, &bit_offset,
6296                              &bit_size, NULL))
6297         {
6298           if (bit_size != 0)
6299             {
6300               if (TYPE_CODE (t) == TYPE_CODE_REF)
6301                 arg = ada_coerce_ref (arg);
6302               else
6303                 arg = ada_value_ind (arg);
6304               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6305                                                   bit_offset, bit_size,
6306                                                   field_type);
6307             }
6308           else
6309             v = value_from_pointer (lookup_reference_type (field_type),
6310                                     address + byte_offset);
6311         }
6312     }
6313
6314   if (v != NULL || no_err)
6315     return v;
6316   else
6317     error (_("There is no member named %s."), name);
6318
6319  BadValue:
6320   if (no_err)
6321     return NULL;
6322   else
6323     error (_("Attempt to extract a component of a value that is not a record."));
6324 }
6325
6326 /* Given a type TYPE, look up the type of the component of type named NAME.
6327    If DISPP is non-null, add its byte displacement from the beginning of a
6328    structure (pointed to by a value) of type TYPE to *DISPP (does not
6329    work for packed fields).
6330
6331    Matches any field whose name has NAME as a prefix, possibly
6332    followed by "___".
6333
6334    TYPE can be either a struct or union. If REFOK, TYPE may also 
6335    be a (pointer or reference)+ to a struct or union, and the
6336    ultimate target type will be searched.
6337
6338    Looks recursively into variant clauses and parent types.
6339
6340    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6341    TYPE is not a type of the right kind.  */
6342
6343 static struct type *
6344 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6345                             int noerr, int *dispp)
6346 {
6347   int i;
6348
6349   if (name == NULL)
6350     goto BadName;
6351
6352   if (refok && type != NULL)
6353     while (1)
6354       {
6355         type = ada_check_typedef (type);
6356         if (TYPE_CODE (type) != TYPE_CODE_PTR
6357             && TYPE_CODE (type) != TYPE_CODE_REF)
6358           break;
6359         type = TYPE_TARGET_TYPE (type);
6360       }
6361
6362   if (type == NULL
6363       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6364           && TYPE_CODE (type) != TYPE_CODE_UNION))
6365     {
6366       if (noerr)
6367         return NULL;
6368       else
6369         {
6370           target_terminal_ours ();
6371           gdb_flush (gdb_stdout);
6372           if (type == NULL)
6373             error (_("Type (null) is not a structure or union type"));
6374           else
6375             {
6376               /* XXX: type_sprint */
6377               fprintf_unfiltered (gdb_stderr, _("Type "));
6378               type_print (type, "", gdb_stderr, -1);
6379               error (_(" is not a structure or union type"));
6380             }
6381         }
6382     }
6383
6384   type = to_static_fixed_type (type);
6385
6386   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6387     {
6388       char *t_field_name = TYPE_FIELD_NAME (type, i);
6389       struct type *t;
6390       int disp;
6391
6392       if (t_field_name == NULL)
6393         continue;
6394
6395       else if (field_name_match (t_field_name, name))
6396         {
6397           if (dispp != NULL)
6398             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6399           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6400         }
6401
6402       else if (ada_is_wrapper_field (type, i))
6403         {
6404           disp = 0;
6405           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6406                                           0, 1, &disp);
6407           if (t != NULL)
6408             {
6409               if (dispp != NULL)
6410                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6411               return t;
6412             }
6413         }
6414
6415       else if (ada_is_variant_part (type, i))
6416         {
6417           int j;
6418           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6419
6420           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6421             {
6422               disp = 0;
6423               t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6424                                               name, 0, 1, &disp);
6425               if (t != NULL)
6426                 {
6427                   if (dispp != NULL)
6428                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6429                   return t;
6430                 }
6431             }
6432         }
6433
6434     }
6435
6436 BadName:
6437   if (!noerr)
6438     {
6439       target_terminal_ours ();
6440       gdb_flush (gdb_stdout);
6441       if (name == NULL)
6442         {
6443           /* XXX: type_sprint */
6444           fprintf_unfiltered (gdb_stderr, _("Type "));
6445           type_print (type, "", gdb_stderr, -1);
6446           error (_(" has no component named <null>"));
6447         }
6448       else
6449         {
6450           /* XXX: type_sprint */
6451           fprintf_unfiltered (gdb_stderr, _("Type "));
6452           type_print (type, "", gdb_stderr, -1);
6453           error (_(" has no component named %s"), name);
6454         }
6455     }
6456
6457   return NULL;
6458 }
6459
6460 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6461    within a value of type OUTER_TYPE that is stored in GDB at
6462    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6463    numbering from 0) is applicable.  Returns -1 if none are.  */
6464
6465 int
6466 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6467                            const gdb_byte *outer_valaddr)
6468 {
6469   int others_clause;
6470   int i;
6471   char *discrim_name = ada_variant_discrim_name (var_type);
6472   struct value *outer;
6473   struct value *discrim;
6474   LONGEST discrim_val;
6475
6476   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6477   discrim = ada_value_struct_elt (outer, discrim_name, 1);
6478   if (discrim == NULL)
6479     return -1;
6480   discrim_val = value_as_long (discrim);
6481
6482   others_clause = -1;
6483   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6484     {
6485       if (ada_is_others_clause (var_type, i))
6486         others_clause = i;
6487       else if (ada_in_variant (discrim_val, var_type, i))
6488         return i;
6489     }
6490
6491   return others_clause;
6492 }
6493 \f
6494
6495
6496                                 /* Dynamic-Sized Records */
6497
6498 /* Strategy: The type ostensibly attached to a value with dynamic size
6499    (i.e., a size that is not statically recorded in the debugging
6500    data) does not accurately reflect the size or layout of the value.
6501    Our strategy is to convert these values to values with accurate,
6502    conventional types that are constructed on the fly.  */
6503
6504 /* There is a subtle and tricky problem here.  In general, we cannot
6505    determine the size of dynamic records without its data.  However,
6506    the 'struct value' data structure, which GDB uses to represent
6507    quantities in the inferior process (the target), requires the size
6508    of the type at the time of its allocation in order to reserve space
6509    for GDB's internal copy of the data.  That's why the
6510    'to_fixed_xxx_type' routines take (target) addresses as parameters,
6511    rather than struct value*s.
6512
6513    However, GDB's internal history variables ($1, $2, etc.) are
6514    struct value*s containing internal copies of the data that are not, in
6515    general, the same as the data at their corresponding addresses in
6516    the target.  Fortunately, the types we give to these values are all
6517    conventional, fixed-size types (as per the strategy described
6518    above), so that we don't usually have to perform the
6519    'to_fixed_xxx_type' conversions to look at their values.
6520    Unfortunately, there is one exception: if one of the internal
6521    history variables is an array whose elements are unconstrained
6522    records, then we will need to create distinct fixed types for each
6523    element selected.  */
6524
6525 /* The upshot of all of this is that many routines take a (type, host
6526    address, target address) triple as arguments to represent a value.
6527    The host address, if non-null, is supposed to contain an internal
6528    copy of the relevant data; otherwise, the program is to consult the
6529    target at the target address.  */
6530
6531 /* Assuming that VAL0 represents a pointer value, the result of
6532    dereferencing it.  Differs from value_ind in its treatment of
6533    dynamic-sized types.  */
6534
6535 struct value *
6536 ada_value_ind (struct value *val0)
6537 {
6538   struct value *val = unwrap_value (value_ind (val0));
6539   return ada_to_fixed_value (val);
6540 }
6541
6542 /* The value resulting from dereferencing any "reference to"
6543    qualifiers on VAL0.  */
6544
6545 static struct value *
6546 ada_coerce_ref (struct value *val0)
6547 {
6548   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6549     {
6550       struct value *val = val0;
6551       val = coerce_ref (val);
6552       val = unwrap_value (val);
6553       return ada_to_fixed_value (val);
6554     }
6555   else
6556     return val0;
6557 }
6558
6559 /* Return OFF rounded upward if necessary to a multiple of
6560    ALIGNMENT (a power of 2).  */
6561
6562 static unsigned int
6563 align_value (unsigned int off, unsigned int alignment)
6564 {
6565   return (off + alignment - 1) & ~(alignment - 1);
6566 }
6567
6568 /* Return the bit alignment required for field #F of template type TYPE.  */
6569
6570 static unsigned int
6571 field_alignment (struct type *type, int f)
6572 {
6573   const char *name = TYPE_FIELD_NAME (type, f);
6574   int len;
6575   int align_offset;
6576
6577   /* The field name should never be null, unless the debugging information
6578      is somehow malformed.  In this case, we assume the field does not
6579      require any alignment.  */
6580   if (name == NULL)
6581     return 1;
6582
6583   len = strlen (name);
6584
6585   if (!isdigit (name[len - 1]))
6586     return 1;
6587
6588   if (isdigit (name[len - 2]))
6589     align_offset = len - 2;
6590   else
6591     align_offset = len - 1;
6592
6593   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6594     return TARGET_CHAR_BIT;
6595
6596   return atoi (name + align_offset) * TARGET_CHAR_BIT;
6597 }
6598
6599 /* Find a symbol named NAME.  Ignores ambiguity.  */
6600
6601 struct symbol *
6602 ada_find_any_symbol (const char *name)
6603 {
6604   struct symbol *sym;
6605
6606   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6607   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6608     return sym;
6609
6610   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6611   return sym;
6612 }
6613
6614 /* Find a type named NAME.  Ignores ambiguity.  */
6615
6616 struct type *
6617 ada_find_any_type (const char *name)
6618 {
6619   struct symbol *sym = ada_find_any_symbol (name);
6620
6621   if (sym != NULL)
6622     return SYMBOL_TYPE (sym);
6623
6624   return NULL;
6625 }
6626
6627 /* Given NAME and an associated BLOCK, search all symbols for
6628    NAME suffixed with  "___XR", which is the ``renaming'' symbol
6629    associated to NAME.  Return this symbol if found, return
6630    NULL otherwise.  */
6631
6632 struct symbol *
6633 ada_find_renaming_symbol (const char *name, struct block *block)
6634 {
6635   struct symbol *sym;
6636
6637   sym = find_old_style_renaming_symbol (name, block);
6638
6639   if (sym != NULL)
6640     return sym;
6641
6642   /* Not right yet.  FIXME pnh 7/20/2007. */
6643   sym = ada_find_any_symbol (name);
6644   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6645     return sym;
6646   else
6647     return NULL;
6648 }
6649
6650 static struct symbol *
6651 find_old_style_renaming_symbol (const char *name, struct block *block)
6652 {
6653   const struct symbol *function_sym = block_linkage_function (block);
6654   char *rename;
6655
6656   if (function_sym != NULL)
6657     {
6658       /* If the symbol is defined inside a function, NAME is not fully
6659          qualified.  This means we need to prepend the function name
6660          as well as adding the ``___XR'' suffix to build the name of
6661          the associated renaming symbol.  */
6662       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6663       /* Function names sometimes contain suffixes used
6664          for instance to qualify nested subprograms.  When building
6665          the XR type name, we need to make sure that this suffix is
6666          not included.  So do not include any suffix in the function
6667          name length below.  */
6668       const int function_name_len = ada_name_prefix_len (function_name);
6669       const int rename_len = function_name_len + 2      /*  "__" */
6670         + strlen (name) + 6 /* "___XR\0" */ ;
6671
6672       /* Strip the suffix if necessary.  */
6673       function_name[function_name_len] = '\0';
6674
6675       /* Library-level functions are a special case, as GNAT adds
6676          a ``_ada_'' prefix to the function name to avoid namespace
6677          pollution.  However, the renaming symbols themselves do not
6678          have this prefix, so we need to skip this prefix if present.  */
6679       if (function_name_len > 5 /* "_ada_" */
6680           && strstr (function_name, "_ada_") == function_name)
6681         function_name = function_name + 5;
6682
6683       rename = (char *) alloca (rename_len * sizeof (char));
6684       sprintf (rename, "%s__%s___XR", function_name, name);
6685     }
6686   else
6687     {
6688       const int rename_len = strlen (name) + 6;
6689       rename = (char *) alloca (rename_len * sizeof (char));
6690       sprintf (rename, "%s___XR", name);
6691     }
6692
6693   return ada_find_any_symbol (rename);
6694 }
6695
6696 /* Because of GNAT encoding conventions, several GDB symbols may match a
6697    given type name.  If the type denoted by TYPE0 is to be preferred to
6698    that of TYPE1 for purposes of type printing, return non-zero;
6699    otherwise return 0.  */
6700
6701 int
6702 ada_prefer_type (struct type *type0, struct type *type1)
6703 {
6704   if (type1 == NULL)
6705     return 1;
6706   else if (type0 == NULL)
6707     return 0;
6708   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6709     return 1;
6710   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6711     return 0;
6712   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6713     return 1;
6714   else if (ada_is_packed_array_type (type0))
6715     return 1;
6716   else if (ada_is_array_descriptor_type (type0)
6717            && !ada_is_array_descriptor_type (type1))
6718     return 1;
6719   else
6720     {
6721       const char *type0_name = type_name_no_tag (type0);
6722       const char *type1_name = type_name_no_tag (type1);
6723
6724       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6725           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6726         return 1;
6727     }
6728   return 0;
6729 }
6730
6731 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6732    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
6733
6734 char *
6735 ada_type_name (struct type *type)
6736 {
6737   if (type == NULL)
6738     return NULL;
6739   else if (TYPE_NAME (type) != NULL)
6740     return TYPE_NAME (type);
6741   else
6742     return TYPE_TAG_NAME (type);
6743 }
6744
6745 /* Find a parallel type to TYPE whose name is formed by appending
6746    SUFFIX to the name of TYPE.  */
6747
6748 struct type *
6749 ada_find_parallel_type (struct type *type, const char *suffix)
6750 {
6751   static char *name;
6752   static size_t name_len = 0;
6753   int len;
6754   char *typename = ada_type_name (type);
6755
6756   if (typename == NULL)
6757     return NULL;
6758
6759   len = strlen (typename);
6760
6761   GROW_VECT (name, name_len, len + strlen (suffix) + 1);
6762
6763   strcpy (name, typename);
6764   strcpy (name + len, suffix);
6765
6766   return ada_find_any_type (name);
6767 }
6768
6769
6770 /* If TYPE is a variable-size record type, return the corresponding template
6771    type describing its fields.  Otherwise, return NULL.  */
6772
6773 static struct type *
6774 dynamic_template_type (struct type *type)
6775 {
6776   type = ada_check_typedef (type);
6777
6778   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6779       || ada_type_name (type) == NULL)
6780     return NULL;
6781   else
6782     {
6783       int len = strlen (ada_type_name (type));
6784       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6785         return type;
6786       else
6787         return ada_find_parallel_type (type, "___XVE");
6788     }
6789 }
6790
6791 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6792    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
6793
6794 static int
6795 is_dynamic_field (struct type *templ_type, int field_num)
6796 {
6797   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6798   return name != NULL
6799     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6800     && strstr (name, "___XVL") != NULL;
6801 }
6802
6803 /* The index of the variant field of TYPE, or -1 if TYPE does not
6804    represent a variant record type.  */
6805
6806 static int
6807 variant_field_index (struct type *type)
6808 {
6809   int f;
6810
6811   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6812     return -1;
6813
6814   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6815     {
6816       if (ada_is_variant_part (type, f))
6817         return f;
6818     }
6819   return -1;
6820 }
6821
6822 /* A record type with no fields.  */
6823
6824 static struct type *
6825 empty_record (struct objfile *objfile)
6826 {
6827   struct type *type = alloc_type (objfile);
6828   TYPE_CODE (type) = TYPE_CODE_STRUCT;
6829   TYPE_NFIELDS (type) = 0;
6830   TYPE_FIELDS (type) = NULL;
6831   TYPE_NAME (type) = "<empty>";
6832   TYPE_TAG_NAME (type) = NULL;
6833   TYPE_LENGTH (type) = 0;
6834   return type;
6835 }
6836
6837 /* An ordinary record type (with fixed-length fields) that describes
6838    the value of type TYPE at VALADDR or ADDRESS (see comments at
6839    the beginning of this section) VAL according to GNAT conventions.
6840    DVAL0 should describe the (portion of a) record that contains any
6841    necessary discriminants.  It should be NULL if value_type (VAL) is
6842    an outer-level type (i.e., as opposed to a branch of a variant.)  A
6843    variant field (unless unchecked) is replaced by a particular branch
6844    of the variant.
6845
6846    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6847    length are not statically known are discarded.  As a consequence,
6848    VALADDR, ADDRESS and DVAL0 are ignored.
6849
6850    NOTE: Limitations: For now, we assume that dynamic fields and
6851    variants occupy whole numbers of bytes.  However, they need not be
6852    byte-aligned.  */
6853
6854 struct type *
6855 ada_template_to_fixed_record_type_1 (struct type *type,
6856                                      const gdb_byte *valaddr,
6857                                      CORE_ADDR address, struct value *dval0,
6858                                      int keep_dynamic_fields)
6859 {
6860   struct value *mark = value_mark ();
6861   struct value *dval;
6862   struct type *rtype;
6863   int nfields, bit_len;
6864   int variant_field;
6865   long off;
6866   int fld_bit_len, bit_incr;
6867   int f;
6868
6869   /* Compute the number of fields in this record type that are going
6870      to be processed: unless keep_dynamic_fields, this includes only
6871      fields whose position and length are static will be processed.  */
6872   if (keep_dynamic_fields)
6873     nfields = TYPE_NFIELDS (type);
6874   else
6875     {
6876       nfields = 0;
6877       while (nfields < TYPE_NFIELDS (type)
6878              && !ada_is_variant_part (type, nfields)
6879              && !is_dynamic_field (type, nfields))
6880         nfields++;
6881     }
6882
6883   rtype = alloc_type (TYPE_OBJFILE (type));
6884   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6885   INIT_CPLUS_SPECIFIC (rtype);
6886   TYPE_NFIELDS (rtype) = nfields;
6887   TYPE_FIELDS (rtype) = (struct field *)
6888     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6889   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6890   TYPE_NAME (rtype) = ada_type_name (type);
6891   TYPE_TAG_NAME (rtype) = NULL;
6892   TYPE_FIXED_INSTANCE (rtype) = 1;
6893
6894   off = 0;
6895   bit_len = 0;
6896   variant_field = -1;
6897
6898   for (f = 0; f < nfields; f += 1)
6899     {
6900       off = align_value (off, field_alignment (type, f))
6901         + TYPE_FIELD_BITPOS (type, f);
6902       TYPE_FIELD_BITPOS (rtype, f) = off;
6903       TYPE_FIELD_BITSIZE (rtype, f) = 0;
6904
6905       if (ada_is_variant_part (type, f))
6906         {
6907           variant_field = f;
6908           fld_bit_len = bit_incr = 0;
6909         }
6910       else if (is_dynamic_field (type, f))
6911         {
6912           if (dval0 == NULL)
6913             dval = value_from_contents_and_address (rtype, valaddr, address);
6914           else
6915             dval = dval0;
6916
6917           /* Get the fixed type of the field. Note that, in this case, we
6918              do not want to get the real type out of the tag: if the current
6919              field is the parent part of a tagged record, we will get the
6920              tag of the object. Clearly wrong: the real type of the parent
6921              is not the real type of the child. We would end up in an infinite
6922              loop.  */
6923           TYPE_FIELD_TYPE (rtype, f) =
6924             ada_to_fixed_type
6925             (ada_get_base_type
6926              (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6927              cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6928              cond_offset_target (address, off / TARGET_CHAR_BIT), dval, 0);
6929           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6930           bit_incr = fld_bit_len =
6931             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6932         }
6933       else
6934         {
6935           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6936           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6937           if (TYPE_FIELD_BITSIZE (type, f) > 0)
6938             bit_incr = fld_bit_len =
6939               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6940           else
6941             bit_incr = fld_bit_len =
6942               TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6943         }
6944       if (off + fld_bit_len > bit_len)
6945         bit_len = off + fld_bit_len;
6946       off += bit_incr;
6947       TYPE_LENGTH (rtype) =
6948         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6949     }
6950
6951   /* We handle the variant part, if any, at the end because of certain
6952      odd cases in which it is re-ordered so as NOT the last field of
6953      the record.  This can happen in the presence of representation
6954      clauses.  */
6955   if (variant_field >= 0)
6956     {
6957       struct type *branch_type;
6958
6959       off = TYPE_FIELD_BITPOS (rtype, variant_field);
6960
6961       if (dval0 == NULL)
6962         dval = value_from_contents_and_address (rtype, valaddr, address);
6963       else
6964         dval = dval0;
6965
6966       branch_type =
6967         to_fixed_variant_branch_type
6968         (TYPE_FIELD_TYPE (type, variant_field),
6969          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6970          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
6971       if (branch_type == NULL)
6972         {
6973           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
6974             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
6975           TYPE_NFIELDS (rtype) -= 1;
6976         }
6977       else
6978         {
6979           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
6980           TYPE_FIELD_NAME (rtype, variant_field) = "S";
6981           fld_bit_len =
6982             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
6983             TARGET_CHAR_BIT;
6984           if (off + fld_bit_len > bit_len)
6985             bit_len = off + fld_bit_len;
6986           TYPE_LENGTH (rtype) =
6987             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
6988         }
6989     }
6990
6991   /* According to exp_dbug.ads, the size of TYPE for variable-size records
6992      should contain the alignment of that record, which should be a strictly
6993      positive value.  If null or negative, then something is wrong, most
6994      probably in the debug info.  In that case, we don't round up the size
6995      of the resulting type. If this record is not part of another structure,
6996      the current RTYPE length might be good enough for our purposes.  */
6997   if (TYPE_LENGTH (type) <= 0)
6998     {
6999       if (TYPE_NAME (rtype))
7000         warning (_("Invalid type size for `%s' detected: %d."),
7001                  TYPE_NAME (rtype), TYPE_LENGTH (type));
7002       else
7003         warning (_("Invalid type size for <unnamed> detected: %d."),
7004                  TYPE_LENGTH (type));
7005     }
7006   else
7007     {
7008       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7009                                          TYPE_LENGTH (type));
7010     }
7011
7012   value_free_to_mark (mark);
7013   if (TYPE_LENGTH (rtype) > varsize_limit)
7014     error (_("record type with dynamic size is larger than varsize-limit"));
7015   return rtype;
7016 }
7017
7018 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7019    of 1.  */
7020
7021 static struct type *
7022 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7023                                CORE_ADDR address, struct value *dval0)
7024 {
7025   return ada_template_to_fixed_record_type_1 (type, valaddr,
7026                                               address, dval0, 1);
7027 }
7028
7029 /* An ordinary record type in which ___XVL-convention fields and
7030    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7031    static approximations, containing all possible fields.  Uses
7032    no runtime values.  Useless for use in values, but that's OK,
7033    since the results are used only for type determinations.   Works on both
7034    structs and unions.  Representation note: to save space, we memorize
7035    the result of this function in the TYPE_TARGET_TYPE of the
7036    template type.  */
7037
7038 static struct type *
7039 template_to_static_fixed_type (struct type *type0)
7040 {
7041   struct type *type;
7042   int nfields;
7043   int f;
7044
7045   if (TYPE_TARGET_TYPE (type0) != NULL)
7046     return TYPE_TARGET_TYPE (type0);
7047
7048   nfields = TYPE_NFIELDS (type0);
7049   type = type0;
7050
7051   for (f = 0; f < nfields; f += 1)
7052     {
7053       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
7054       struct type *new_type;
7055
7056       if (is_dynamic_field (type0, f))
7057         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7058       else
7059         new_type = static_unwrap_type (field_type);
7060       if (type == type0 && new_type != field_type)
7061         {
7062           TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
7063           TYPE_CODE (type) = TYPE_CODE (type0);
7064           INIT_CPLUS_SPECIFIC (type);
7065           TYPE_NFIELDS (type) = nfields;
7066           TYPE_FIELDS (type) = (struct field *)
7067             TYPE_ALLOC (type, nfields * sizeof (struct field));
7068           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7069                   sizeof (struct field) * nfields);
7070           TYPE_NAME (type) = ada_type_name (type0);
7071           TYPE_TAG_NAME (type) = NULL;
7072           TYPE_FIXED_INSTANCE (type) = 1;
7073           TYPE_LENGTH (type) = 0;
7074         }
7075       TYPE_FIELD_TYPE (type, f) = new_type;
7076       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7077     }
7078   return type;
7079 }
7080
7081 /* Given an object of type TYPE whose contents are at VALADDR and
7082    whose address in memory is ADDRESS, returns a revision of TYPE,
7083    which should be a non-dynamic-sized record, in which the variant
7084    part, if any, is replaced with the appropriate branch.  Looks
7085    for discriminant values in DVAL0, which can be NULL if the record
7086    contains the necessary discriminant values.  */
7087
7088 static struct type *
7089 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
7090                                    CORE_ADDR address, struct value *dval0)
7091 {
7092   struct value *mark = value_mark ();
7093   struct value *dval;
7094   struct type *rtype;
7095   struct type *branch_type;
7096   int nfields = TYPE_NFIELDS (type);
7097   int variant_field = variant_field_index (type);
7098
7099   if (variant_field == -1)
7100     return type;
7101
7102   if (dval0 == NULL)
7103     dval = value_from_contents_and_address (type, valaddr, address);
7104   else
7105     dval = dval0;
7106
7107   rtype = alloc_type (TYPE_OBJFILE (type));
7108   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7109   INIT_CPLUS_SPECIFIC (rtype);
7110   TYPE_NFIELDS (rtype) = nfields;
7111   TYPE_FIELDS (rtype) =
7112     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7113   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7114           sizeof (struct field) * nfields);
7115   TYPE_NAME (rtype) = ada_type_name (type);
7116   TYPE_TAG_NAME (rtype) = NULL;
7117   TYPE_FIXED_INSTANCE (rtype) = 1;
7118   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7119
7120   branch_type = to_fixed_variant_branch_type
7121     (TYPE_FIELD_TYPE (type, variant_field),
7122      cond_offset_host (valaddr,
7123                        TYPE_FIELD_BITPOS (type, variant_field)
7124                        / TARGET_CHAR_BIT),
7125      cond_offset_target (address,
7126                          TYPE_FIELD_BITPOS (type, variant_field)
7127                          / TARGET_CHAR_BIT), dval);
7128   if (branch_type == NULL)
7129     {
7130       int f;
7131       for (f = variant_field + 1; f < nfields; f += 1)
7132         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7133       TYPE_NFIELDS (rtype) -= 1;
7134     }
7135   else
7136     {
7137       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7138       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7139       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7140       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7141     }
7142   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7143
7144   value_free_to_mark (mark);
7145   return rtype;
7146 }
7147
7148 /* An ordinary record type (with fixed-length fields) that describes
7149    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7150    beginning of this section].   Any necessary discriminants' values
7151    should be in DVAL, a record value; it may be NULL if the object
7152    at ADDR itself contains any necessary discriminant values.
7153    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7154    values from the record are needed.  Except in the case that DVAL,
7155    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7156    unchecked) is replaced by a particular branch of the variant.
7157
7158    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7159    is questionable and may be removed.  It can arise during the
7160    processing of an unconstrained-array-of-record type where all the
7161    variant branches have exactly the same size.  This is because in
7162    such cases, the compiler does not bother to use the XVS convention
7163    when encoding the record.  I am currently dubious of this
7164    shortcut and suspect the compiler should be altered.  FIXME.  */
7165
7166 static struct type *
7167 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7168                       CORE_ADDR address, struct value *dval)
7169 {
7170   struct type *templ_type;
7171
7172   if (TYPE_FIXED_INSTANCE (type0))
7173     return type0;
7174
7175   templ_type = dynamic_template_type (type0);
7176
7177   if (templ_type != NULL)
7178     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7179   else if (variant_field_index (type0) >= 0)
7180     {
7181       if (dval == NULL && valaddr == NULL && address == 0)
7182         return type0;
7183       return to_record_with_fixed_variant_part (type0, valaddr, address,
7184                                                 dval);
7185     }
7186   else
7187     {
7188       TYPE_FIXED_INSTANCE (type0) = 1;
7189       return type0;
7190     }
7191
7192 }
7193
7194 /* An ordinary record type (with fixed-length fields) that describes
7195    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7196    union type.  Any necessary discriminants' values should be in DVAL,
7197    a record value.  That is, this routine selects the appropriate
7198    branch of the union at ADDR according to the discriminant value
7199    indicated in the union's type name.  */
7200
7201 static struct type *
7202 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7203                               CORE_ADDR address, struct value *dval)
7204 {
7205   int which;
7206   struct type *templ_type;
7207   struct type *var_type;
7208
7209   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7210     var_type = TYPE_TARGET_TYPE (var_type0);
7211   else
7212     var_type = var_type0;
7213
7214   templ_type = ada_find_parallel_type (var_type, "___XVU");
7215
7216   if (templ_type != NULL)
7217     var_type = templ_type;
7218
7219   which =
7220     ada_which_variant_applies (var_type,
7221                                value_type (dval), value_contents (dval));
7222
7223   if (which < 0)
7224     return empty_record (TYPE_OBJFILE (var_type));
7225   else if (is_dynamic_field (var_type, which))
7226     return to_fixed_record_type
7227       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7228        valaddr, address, dval);
7229   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7230     return
7231       to_fixed_record_type
7232       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7233   else
7234     return TYPE_FIELD_TYPE (var_type, which);
7235 }
7236
7237 /* Assuming that TYPE0 is an array type describing the type of a value
7238    at ADDR, and that DVAL describes a record containing any
7239    discriminants used in TYPE0, returns a type for the value that
7240    contains no dynamic components (that is, no components whose sizes
7241    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
7242    true, gives an error message if the resulting type's size is over
7243    varsize_limit.  */
7244
7245 static struct type *
7246 to_fixed_array_type (struct type *type0, struct value *dval,
7247                      int ignore_too_big)
7248 {
7249   struct type *index_type_desc;
7250   struct type *result;
7251
7252   if (ada_is_packed_array_type (type0)  /* revisit? */
7253       || TYPE_FIXED_INSTANCE (type0))
7254     return type0;
7255
7256   index_type_desc = ada_find_parallel_type (type0, "___XA");
7257   if (index_type_desc == NULL)
7258     {
7259       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7260       /* NOTE: elt_type---the fixed version of elt_type0---should never
7261          depend on the contents of the array in properly constructed
7262          debugging data.  */
7263       /* Create a fixed version of the array element type.
7264          We're not providing the address of an element here,
7265          and thus the actual object value cannot be inspected to do
7266          the conversion.  This should not be a problem, since arrays of
7267          unconstrained objects are not allowed.  In particular, all
7268          the elements of an array of a tagged type should all be of
7269          the same type specified in the debugging info.  No need to
7270          consult the object tag.  */
7271       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7272
7273       if (elt_type0 == elt_type)
7274         result = type0;
7275       else
7276         result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7277                                     elt_type, TYPE_INDEX_TYPE (type0));
7278     }
7279   else
7280     {
7281       int i;
7282       struct type *elt_type0;
7283
7284       elt_type0 = type0;
7285       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7286         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7287
7288       /* NOTE: result---the fixed version of elt_type0---should never
7289          depend on the contents of the array in properly constructed
7290          debugging data.  */
7291       /* Create a fixed version of the array element type.
7292          We're not providing the address of an element here,
7293          and thus the actual object value cannot be inspected to do
7294          the conversion.  This should not be a problem, since arrays of
7295          unconstrained objects are not allowed.  In particular, all
7296          the elements of an array of a tagged type should all be of
7297          the same type specified in the debugging info.  No need to
7298          consult the object tag.  */
7299       result =
7300         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7301       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7302         {
7303           struct type *range_type =
7304             to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
7305                                  dval, TYPE_OBJFILE (type0));
7306           result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7307                                       result, range_type);
7308         }
7309       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
7310         error (_("array type with dynamic size is larger than varsize-limit"));
7311     }
7312
7313   TYPE_FIXED_INSTANCE (result) = 1;
7314   return result;
7315 }
7316
7317
7318 /* A standard type (containing no dynamically sized components)
7319    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7320    DVAL describes a record containing any discriminants used in TYPE0,
7321    and may be NULL if there are none, or if the object of type TYPE at
7322    ADDRESS or in VALADDR contains these discriminants.
7323    
7324    If CHECK_TAG is not null, in the case of tagged types, this function
7325    attempts to locate the object's tag and use it to compute the actual
7326    type.  However, when ADDRESS is null, we cannot use it to determine the
7327    location of the tag, and therefore compute the tagged type's actual type.
7328    So we return the tagged type without consulting the tag.  */
7329    
7330 static struct type *
7331 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
7332                    CORE_ADDR address, struct value *dval, int check_tag)
7333 {
7334   type = ada_check_typedef (type);
7335   switch (TYPE_CODE (type))
7336     {
7337     default:
7338       return type;
7339     case TYPE_CODE_STRUCT:
7340       {
7341         struct type *static_type = to_static_fixed_type (type);
7342         struct type *fixed_record_type =
7343           to_fixed_record_type (type, valaddr, address, NULL);
7344         /* If STATIC_TYPE is a tagged type and we know the object's address,
7345            then we can determine its tag, and compute the object's actual
7346            type from there. Note that we have to use the fixed record
7347            type (the parent part of the record may have dynamic fields
7348            and the way the location of _tag is expressed may depend on
7349            them).  */
7350
7351         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
7352           {
7353             struct type *real_type =
7354               type_from_tag (value_tag_from_contents_and_address
7355                              (fixed_record_type,
7356                               valaddr,
7357                               address));
7358             if (real_type != NULL)
7359               return to_fixed_record_type (real_type, valaddr, address, NULL);
7360           }
7361         return fixed_record_type;
7362       }
7363     case TYPE_CODE_ARRAY:
7364       return to_fixed_array_type (type, dval, 1);
7365     case TYPE_CODE_UNION:
7366       if (dval == NULL)
7367         return type;
7368       else
7369         return to_fixed_variant_branch_type (type, valaddr, address, dval);
7370     }
7371 }
7372
7373 /* The same as ada_to_fixed_type_1, except that it preserves the type
7374    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7375    ada_to_fixed_type_1 would return the type referenced by TYPE.  */
7376
7377 struct type *
7378 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7379                    CORE_ADDR address, struct value *dval, int check_tag)
7380
7381 {
7382   struct type *fixed_type =
7383     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7384
7385   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7386       && TYPE_TARGET_TYPE (type) == fixed_type)
7387     return type;
7388
7389   return fixed_type;
7390 }
7391
7392 /* A standard (static-sized) type corresponding as well as possible to
7393    TYPE0, but based on no runtime data.  */
7394
7395 static struct type *
7396 to_static_fixed_type (struct type *type0)
7397 {
7398   struct type *type;
7399
7400   if (type0 == NULL)
7401     return NULL;
7402
7403   if (TYPE_FIXED_INSTANCE (type0))
7404     return type0;
7405
7406   type0 = ada_check_typedef (type0);
7407
7408   switch (TYPE_CODE (type0))
7409     {
7410     default:
7411       return type0;
7412     case TYPE_CODE_STRUCT:
7413       type = dynamic_template_type (type0);
7414       if (type != NULL)
7415         return template_to_static_fixed_type (type);
7416       else
7417         return template_to_static_fixed_type (type0);
7418     case TYPE_CODE_UNION:
7419       type = ada_find_parallel_type (type0, "___XVU");
7420       if (type != NULL)
7421         return template_to_static_fixed_type (type);
7422       else
7423         return template_to_static_fixed_type (type0);
7424     }
7425 }
7426
7427 /* A static approximation of TYPE with all type wrappers removed.  */
7428
7429 static struct type *
7430 static_unwrap_type (struct type *type)
7431 {
7432   if (ada_is_aligner_type (type))
7433     {
7434       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
7435       if (ada_type_name (type1) == NULL)
7436         TYPE_NAME (type1) = ada_type_name (type);
7437
7438       return static_unwrap_type (type1);
7439     }
7440   else
7441     {
7442       struct type *raw_real_type = ada_get_base_type (type);
7443       if (raw_real_type == type)
7444         return type;
7445       else
7446         return to_static_fixed_type (raw_real_type);
7447     }
7448 }
7449
7450 /* In some cases, incomplete and private types require
7451    cross-references that are not resolved as records (for example,
7452       type Foo;
7453       type FooP is access Foo;
7454       V: FooP;
7455       type Foo is array ...;
7456    ).  In these cases, since there is no mechanism for producing
7457    cross-references to such types, we instead substitute for FooP a
7458    stub enumeration type that is nowhere resolved, and whose tag is
7459    the name of the actual type.  Call these types "non-record stubs".  */
7460
7461 /* A type equivalent to TYPE that is not a non-record stub, if one
7462    exists, otherwise TYPE.  */
7463
7464 struct type *
7465 ada_check_typedef (struct type *type)
7466 {
7467   if (type == NULL)
7468     return NULL;
7469
7470   CHECK_TYPEDEF (type);
7471   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
7472       || !TYPE_STUB (type)
7473       || TYPE_TAG_NAME (type) == NULL)
7474     return type;
7475   else
7476     {
7477       char *name = TYPE_TAG_NAME (type);
7478       struct type *type1 = ada_find_any_type (name);
7479       return (type1 == NULL) ? type : type1;
7480     }
7481 }
7482
7483 /* A value representing the data at VALADDR/ADDRESS as described by
7484    type TYPE0, but with a standard (static-sized) type that correctly
7485    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
7486    type, then return VAL0 [this feature is simply to avoid redundant
7487    creation of struct values].  */
7488
7489 static struct value *
7490 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7491                            struct value *val0)
7492 {
7493   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
7494   if (type == type0 && val0 != NULL)
7495     return val0;
7496   else
7497     return value_from_contents_and_address (type, 0, address);
7498 }
7499
7500 /* A value representing VAL, but with a standard (static-sized) type
7501    that correctly describes it.  Does not necessarily create a new
7502    value.  */
7503
7504 static struct value *
7505 ada_to_fixed_value (struct value *val)
7506 {
7507   return ada_to_fixed_value_create (value_type (val),
7508                                     VALUE_ADDRESS (val) + value_offset (val),
7509                                     val);
7510 }
7511
7512 /* A value representing VAL, but with a standard (static-sized) type
7513    chosen to approximate the real type of VAL as well as possible, but
7514    without consulting any runtime values.  For Ada dynamic-sized
7515    types, therefore, the type of the result is likely to be inaccurate.  */
7516
7517 struct value *
7518 ada_to_static_fixed_value (struct value *val)
7519 {
7520   struct type *type =
7521     to_static_fixed_type (static_unwrap_type (value_type (val)));
7522   if (type == value_type (val))
7523     return val;
7524   else
7525     return coerce_unspec_val_to_type (val, type);
7526 }
7527 \f
7528
7529 /* Attributes */
7530
7531 /* Table mapping attribute numbers to names.
7532    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
7533
7534 static const char *attribute_names[] = {
7535   "<?>",
7536
7537   "first",
7538   "last",
7539   "length",
7540   "image",
7541   "max",
7542   "min",
7543   "modulus",
7544   "pos",
7545   "size",
7546   "tag",
7547   "val",
7548   0
7549 };
7550
7551 const char *
7552 ada_attribute_name (enum exp_opcode n)
7553 {
7554   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7555     return attribute_names[n - OP_ATR_FIRST + 1];
7556   else
7557     return attribute_names[0];
7558 }
7559
7560 /* Evaluate the 'POS attribute applied to ARG.  */
7561
7562 static LONGEST
7563 pos_atr (struct value *arg)
7564 {
7565   struct value *val = coerce_ref (arg);
7566   struct type *type = value_type (val);
7567
7568   if (!discrete_type_p (type))
7569     error (_("'POS only defined on discrete types"));
7570
7571   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7572     {
7573       int i;
7574       LONGEST v = value_as_long (val);
7575
7576       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7577         {
7578           if (v == TYPE_FIELD_BITPOS (type, i))
7579             return i;
7580         }
7581       error (_("enumeration value is invalid: can't find 'POS"));
7582     }
7583   else
7584     return value_as_long (val);
7585 }
7586
7587 static struct value *
7588 value_pos_atr (struct value *arg)
7589 {
7590   return value_from_longest (builtin_type_int, pos_atr (arg));
7591 }
7592
7593 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
7594
7595 static struct value *
7596 value_val_atr (struct type *type, struct value *arg)
7597 {
7598   if (!discrete_type_p (type))
7599     error (_("'VAL only defined on discrete types"));
7600   if (!integer_type_p (value_type (arg)))
7601     error (_("'VAL requires integral argument"));
7602
7603   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7604     {
7605       long pos = value_as_long (arg);
7606       if (pos < 0 || pos >= TYPE_NFIELDS (type))
7607         error (_("argument to 'VAL out of range"));
7608       return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
7609     }
7610   else
7611     return value_from_longest (type, value_as_long (arg));
7612 }
7613 \f
7614
7615                                 /* Evaluation */
7616
7617 /* True if TYPE appears to be an Ada character type.
7618    [At the moment, this is true only for Character and Wide_Character;
7619    It is a heuristic test that could stand improvement].  */
7620
7621 int
7622 ada_is_character_type (struct type *type)
7623 {
7624   const char *name;
7625
7626   /* If the type code says it's a character, then assume it really is,
7627      and don't check any further.  */
7628   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
7629     return 1;
7630   
7631   /* Otherwise, assume it's a character type iff it is a discrete type
7632      with a known character type name.  */
7633   name = ada_type_name (type);
7634   return (name != NULL
7635           && (TYPE_CODE (type) == TYPE_CODE_INT
7636               || TYPE_CODE (type) == TYPE_CODE_RANGE)
7637           && (strcmp (name, "character") == 0
7638               || strcmp (name, "wide_character") == 0
7639               || strcmp (name, "wide_wide_character") == 0
7640               || strcmp (name, "unsigned char") == 0));
7641 }
7642
7643 /* True if TYPE appears to be an Ada string type.  */
7644
7645 int
7646 ada_is_string_type (struct type *type)
7647 {
7648   type = ada_check_typedef (type);
7649   if (type != NULL
7650       && TYPE_CODE (type) != TYPE_CODE_PTR
7651       && (ada_is_simple_array_type (type)
7652           || ada_is_array_descriptor_type (type))
7653       && ada_array_arity (type) == 1)
7654     {
7655       struct type *elttype = ada_array_element_type (type, 1);
7656
7657       return ada_is_character_type (elttype);
7658     }
7659   else
7660     return 0;
7661 }
7662
7663
7664 /* True if TYPE is a struct type introduced by the compiler to force the
7665    alignment of a value.  Such types have a single field with a
7666    distinctive name.  */
7667
7668 int
7669 ada_is_aligner_type (struct type *type)
7670 {
7671   type = ada_check_typedef (type);
7672
7673   /* If we can find a parallel XVS type, then the XVS type should
7674      be used instead of this type.  And hence, this is not an aligner
7675      type.  */
7676   if (ada_find_parallel_type (type, "___XVS") != NULL)
7677     return 0;
7678
7679   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
7680           && TYPE_NFIELDS (type) == 1
7681           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
7682 }
7683
7684 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
7685    the parallel type.  */
7686
7687 struct type *
7688 ada_get_base_type (struct type *raw_type)
7689 {
7690   struct type *real_type_namer;
7691   struct type *raw_real_type;
7692
7693   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7694     return raw_type;
7695
7696   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
7697   if (real_type_namer == NULL
7698       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7699       || TYPE_NFIELDS (real_type_namer) != 1)
7700     return raw_type;
7701
7702   raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7703   if (raw_real_type == NULL)
7704     return raw_type;
7705   else
7706     return raw_real_type;
7707 }
7708
7709 /* The type of value designated by TYPE, with all aligners removed.  */
7710
7711 struct type *
7712 ada_aligned_type (struct type *type)
7713 {
7714   if (ada_is_aligner_type (type))
7715     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7716   else
7717     return ada_get_base_type (type);
7718 }
7719
7720
7721 /* The address of the aligned value in an object at address VALADDR
7722    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
7723
7724 const gdb_byte *
7725 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
7726 {
7727   if (ada_is_aligner_type (type))
7728     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
7729                                    valaddr +
7730                                    TYPE_FIELD_BITPOS (type,
7731                                                       0) / TARGET_CHAR_BIT);
7732   else
7733     return valaddr;
7734 }
7735
7736
7737
7738 /* The printed representation of an enumeration literal with encoded
7739    name NAME.  The value is good to the next call of ada_enum_name.  */
7740 const char *
7741 ada_enum_name (const char *name)
7742 {
7743   static char *result;
7744   static size_t result_len = 0;
7745   char *tmp;
7746
7747   /* First, unqualify the enumeration name:
7748      1. Search for the last '.' character.  If we find one, then skip
7749      all the preceeding characters, the unqualified name starts
7750      right after that dot.
7751      2. Otherwise, we may be debugging on a target where the compiler
7752      translates dots into "__".  Search forward for double underscores,
7753      but stop searching when we hit an overloading suffix, which is
7754      of the form "__" followed by digits.  */
7755
7756   tmp = strrchr (name, '.');
7757   if (tmp != NULL)
7758     name = tmp + 1;
7759   else
7760     {
7761       while ((tmp = strstr (name, "__")) != NULL)
7762         {
7763           if (isdigit (tmp[2]))
7764             break;
7765           else
7766             name = tmp + 2;
7767         }
7768     }
7769
7770   if (name[0] == 'Q')
7771     {
7772       int v;
7773       if (name[1] == 'U' || name[1] == 'W')
7774         {
7775           if (sscanf (name + 2, "%x", &v) != 1)
7776             return name;
7777         }
7778       else
7779         return name;
7780
7781       GROW_VECT (result, result_len, 16);
7782       if (isascii (v) && isprint (v))
7783         sprintf (result, "'%c'", v);
7784       else if (name[1] == 'U')
7785         sprintf (result, "[\"%02x\"]", v);
7786       else
7787         sprintf (result, "[\"%04x\"]", v);
7788
7789       return result;
7790     }
7791   else
7792     {
7793       tmp = strstr (name, "__");
7794       if (tmp == NULL)
7795         tmp = strstr (name, "$");
7796       if (tmp != NULL)
7797         {
7798           GROW_VECT (result, result_len, tmp - name + 1);
7799           strncpy (result, name, tmp - name);
7800           result[tmp - name] = '\0';
7801           return result;
7802         }
7803
7804       return name;
7805     }
7806 }
7807
7808 static struct value *
7809 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
7810                  enum noside noside)
7811 {
7812   return (*exp->language_defn->la_exp_desc->evaluate_exp)
7813     (expect_type, exp, pos, noside);
7814 }
7815
7816 /* Evaluate the subexpression of EXP starting at *POS as for
7817    evaluate_type, updating *POS to point just past the evaluated
7818    expression.  */
7819
7820 static struct value *
7821 evaluate_subexp_type (struct expression *exp, int *pos)
7822 {
7823   return (*exp->language_defn->la_exp_desc->evaluate_exp)
7824     (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7825 }
7826
7827 /* If VAL is wrapped in an aligner or subtype wrapper, return the
7828    value it wraps.  */
7829
7830 static struct value *
7831 unwrap_value (struct value *val)
7832 {
7833   struct type *type = ada_check_typedef (value_type (val));
7834   if (ada_is_aligner_type (type))
7835     {
7836       struct value *v = ada_value_struct_elt (val, "F", 0);
7837       struct type *val_type = ada_check_typedef (value_type (v));
7838       if (ada_type_name (val_type) == NULL)
7839         TYPE_NAME (val_type) = ada_type_name (type);
7840
7841       return unwrap_value (v);
7842     }
7843   else
7844     {
7845       struct type *raw_real_type =
7846         ada_check_typedef (ada_get_base_type (type));
7847
7848       if (type == raw_real_type)
7849         return val;
7850
7851       return
7852         coerce_unspec_val_to_type
7853         (val, ada_to_fixed_type (raw_real_type, 0,
7854                                  VALUE_ADDRESS (val) + value_offset (val),
7855                                  NULL, 1));
7856     }
7857 }
7858
7859 static struct value *
7860 cast_to_fixed (struct type *type, struct value *arg)
7861 {
7862   LONGEST val;
7863
7864   if (type == value_type (arg))
7865     return arg;
7866   else if (ada_is_fixed_point_type (value_type (arg)))
7867     val = ada_float_to_fixed (type,
7868                               ada_fixed_to_float (value_type (arg),
7869                                                   value_as_long (arg)));
7870   else
7871     {
7872       DOUBLEST argd =
7873         value_as_double (value_cast (builtin_type_double, value_copy (arg)));
7874       val = ada_float_to_fixed (type, argd);
7875     }
7876
7877   return value_from_longest (type, val);
7878 }
7879
7880 static struct value *
7881 cast_from_fixed_to_double (struct value *arg)
7882 {
7883   DOUBLEST val = ada_fixed_to_float (value_type (arg),
7884                                      value_as_long (arg));
7885   return value_from_double (builtin_type_double, val);
7886 }
7887
7888 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7889    return the converted value.  */
7890
7891 static struct value *
7892 coerce_for_assign (struct type *type, struct value *val)
7893 {
7894   struct type *type2 = value_type (val);
7895   if (type == type2)
7896     return val;
7897
7898   type2 = ada_check_typedef (type2);
7899   type = ada_check_typedef (type);
7900
7901   if (TYPE_CODE (type2) == TYPE_CODE_PTR
7902       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7903     {
7904       val = ada_value_ind (val);
7905       type2 = value_type (val);
7906     }
7907
7908   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7909       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7910     {
7911       if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7912           || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7913           != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7914         error (_("Incompatible types in assignment"));
7915       deprecated_set_value_type (val, type);
7916     }
7917   return val;
7918 }
7919
7920 static struct value *
7921 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
7922 {
7923   struct value *val;
7924   struct type *type1, *type2;
7925   LONGEST v, v1, v2;
7926
7927   arg1 = coerce_ref (arg1);
7928   arg2 = coerce_ref (arg2);
7929   type1 = base_type (ada_check_typedef (value_type (arg1)));
7930   type2 = base_type (ada_check_typedef (value_type (arg2)));
7931
7932   if (TYPE_CODE (type1) != TYPE_CODE_INT
7933       || TYPE_CODE (type2) != TYPE_CODE_INT)
7934     return value_binop (arg1, arg2, op);
7935
7936   switch (op)
7937     {
7938     case BINOP_MOD:
7939     case BINOP_DIV:
7940     case BINOP_REM:
7941       break;
7942     default:
7943       return value_binop (arg1, arg2, op);
7944     }
7945
7946   v2 = value_as_long (arg2);
7947   if (v2 == 0)
7948     error (_("second operand of %s must not be zero."), op_string (op));
7949
7950   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
7951     return value_binop (arg1, arg2, op);
7952
7953   v1 = value_as_long (arg1);
7954   switch (op)
7955     {
7956     case BINOP_DIV:
7957       v = v1 / v2;
7958       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
7959         v += v > 0 ? -1 : 1;
7960       break;
7961     case BINOP_REM:
7962       v = v1 % v2;
7963       if (v * v1 < 0)
7964         v -= v2;
7965       break;
7966     default:
7967       /* Should not reach this point.  */
7968       v = 0;
7969     }
7970
7971   val = allocate_value (type1);
7972   store_unsigned_integer (value_contents_raw (val),
7973                           TYPE_LENGTH (value_type (val)), v);
7974   return val;
7975 }
7976
7977 static int
7978 ada_value_equal (struct value *arg1, struct value *arg2)
7979 {
7980   if (ada_is_direct_array_type (value_type (arg1))
7981       || ada_is_direct_array_type (value_type (arg2)))
7982     {
7983       /* Automatically dereference any array reference before
7984          we attempt to perform the comparison.  */
7985       arg1 = ada_coerce_ref (arg1);
7986       arg2 = ada_coerce_ref (arg2);
7987       
7988       arg1 = ada_coerce_to_simple_array (arg1);
7989       arg2 = ada_coerce_to_simple_array (arg2);
7990       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
7991           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
7992         error (_("Attempt to compare array with non-array"));
7993       /* FIXME: The following works only for types whose
7994          representations use all bits (no padding or undefined bits)
7995          and do not have user-defined equality.  */
7996       return
7997         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
7998         && memcmp (value_contents (arg1), value_contents (arg2),
7999                    TYPE_LENGTH (value_type (arg1))) == 0;
8000     }
8001   return value_equal (arg1, arg2);
8002 }
8003
8004 /* Total number of component associations in the aggregate starting at
8005    index PC in EXP.  Assumes that index PC is the start of an
8006    OP_AGGREGATE. */
8007
8008 static int
8009 num_component_specs (struct expression *exp, int pc)
8010 {
8011   int n, m, i;
8012   m = exp->elts[pc + 1].longconst;
8013   pc += 3;
8014   n = 0;
8015   for (i = 0; i < m; i += 1)
8016     {
8017       switch (exp->elts[pc].opcode) 
8018         {
8019         default:
8020           n += 1;
8021           break;
8022         case OP_CHOICES:
8023           n += exp->elts[pc + 1].longconst;
8024           break;
8025         }
8026       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8027     }
8028   return n;
8029 }
8030
8031 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
8032    component of LHS (a simple array or a record), updating *POS past
8033    the expression, assuming that LHS is contained in CONTAINER.  Does
8034    not modify the inferior's memory, nor does it modify LHS (unless
8035    LHS == CONTAINER).  */
8036
8037 static void
8038 assign_component (struct value *container, struct value *lhs, LONGEST index,
8039                   struct expression *exp, int *pos)
8040 {
8041   struct value *mark = value_mark ();
8042   struct value *elt;
8043   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8044     {
8045       struct value *index_val = value_from_longest (builtin_type_int, index);
8046       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8047     }
8048   else
8049     {
8050       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8051       elt = ada_to_fixed_value (unwrap_value (elt));
8052     }
8053
8054   if (exp->elts[*pos].opcode == OP_AGGREGATE)
8055     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8056   else
8057     value_assign_to_component (container, elt, 
8058                                ada_evaluate_subexp (NULL, exp, pos, 
8059                                                     EVAL_NORMAL));
8060
8061   value_free_to_mark (mark);
8062 }
8063
8064 /* Assuming that LHS represents an lvalue having a record or array
8065    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8066    of that aggregate's value to LHS, advancing *POS past the
8067    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
8068    lvalue containing LHS (possibly LHS itself).  Does not modify
8069    the inferior's memory, nor does it modify the contents of 
8070    LHS (unless == CONTAINER).  Returns the modified CONTAINER. */
8071
8072 static struct value *
8073 assign_aggregate (struct value *container, 
8074                   struct value *lhs, struct expression *exp, 
8075                   int *pos, enum noside noside)
8076 {
8077   struct type *lhs_type;
8078   int n = exp->elts[*pos+1].longconst;
8079   LONGEST low_index, high_index;
8080   int num_specs;
8081   LONGEST *indices;
8082   int max_indices, num_indices;
8083   int is_array_aggregate;
8084   int i;
8085   struct value *mark = value_mark ();
8086
8087   *pos += 3;
8088   if (noside != EVAL_NORMAL)
8089     {
8090       int i;
8091       for (i = 0; i < n; i += 1)
8092         ada_evaluate_subexp (NULL, exp, pos, noside);
8093       return container;
8094     }
8095
8096   container = ada_coerce_ref (container);
8097   if (ada_is_direct_array_type (value_type (container)))
8098     container = ada_coerce_to_simple_array (container);
8099   lhs = ada_coerce_ref (lhs);
8100   if (!deprecated_value_modifiable (lhs))
8101     error (_("Left operand of assignment is not a modifiable lvalue."));
8102
8103   lhs_type = value_type (lhs);
8104   if (ada_is_direct_array_type (lhs_type))
8105     {
8106       lhs = ada_coerce_to_simple_array (lhs);
8107       lhs_type = value_type (lhs);
8108       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8109       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8110       is_array_aggregate = 1;
8111     }
8112   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8113     {
8114       low_index = 0;
8115       high_index = num_visible_fields (lhs_type) - 1;
8116       is_array_aggregate = 0;
8117     }
8118   else
8119     error (_("Left-hand side must be array or record."));
8120
8121   num_specs = num_component_specs (exp, *pos - 3);
8122   max_indices = 4 * num_specs + 4;
8123   indices = alloca (max_indices * sizeof (indices[0]));
8124   indices[0] = indices[1] = low_index - 1;
8125   indices[2] = indices[3] = high_index + 1;
8126   num_indices = 4;
8127
8128   for (i = 0; i < n; i += 1)
8129     {
8130       switch (exp->elts[*pos].opcode)
8131         {
8132         case OP_CHOICES:
8133           aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
8134                                          &num_indices, max_indices,
8135                                          low_index, high_index);
8136           break;
8137         case OP_POSITIONAL:
8138           aggregate_assign_positional (container, lhs, exp, pos, indices,
8139                                        &num_indices, max_indices,
8140                                        low_index, high_index);
8141           break;
8142         case OP_OTHERS:
8143           if (i != n-1)
8144             error (_("Misplaced 'others' clause"));
8145           aggregate_assign_others (container, lhs, exp, pos, indices, 
8146                                    num_indices, low_index, high_index);
8147           break;
8148         default:
8149           error (_("Internal error: bad aggregate clause"));
8150         }
8151     }
8152
8153   return container;
8154 }
8155               
8156 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8157    construct at *POS, updating *POS past the construct, given that
8158    the positions are relative to lower bound LOW, where HIGH is the 
8159    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
8160    updating *NUM_INDICES as needed.  CONTAINER is as for
8161    assign_aggregate. */
8162 static void
8163 aggregate_assign_positional (struct value *container,
8164                              struct value *lhs, struct expression *exp,
8165                              int *pos, LONGEST *indices, int *num_indices,
8166                              int max_indices, LONGEST low, LONGEST high) 
8167 {
8168   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8169   
8170   if (ind - 1 == high)
8171     warning (_("Extra components in aggregate ignored."));
8172   if (ind <= high)
8173     {
8174       add_component_interval (ind, ind, indices, num_indices, max_indices);
8175       *pos += 3;
8176       assign_component (container, lhs, ind, exp, pos);
8177     }
8178   else
8179     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8180 }
8181
8182 /* Assign into the components of LHS indexed by the OP_CHOICES
8183    construct at *POS, updating *POS past the construct, given that
8184    the allowable indices are LOW..HIGH.  Record the indices assigned
8185    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8186    needed.  CONTAINER is as for assign_aggregate. */
8187 static void
8188 aggregate_assign_from_choices (struct value *container,
8189                                struct value *lhs, struct expression *exp,
8190                                int *pos, LONGEST *indices, int *num_indices,
8191                                int max_indices, LONGEST low, LONGEST high) 
8192 {
8193   int j;
8194   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8195   int choice_pos, expr_pc;
8196   int is_array = ada_is_direct_array_type (value_type (lhs));
8197
8198   choice_pos = *pos += 3;
8199
8200   for (j = 0; j < n_choices; j += 1)
8201     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8202   expr_pc = *pos;
8203   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8204   
8205   for (j = 0; j < n_choices; j += 1)
8206     {
8207       LONGEST lower, upper;
8208       enum exp_opcode op = exp->elts[choice_pos].opcode;
8209       if (op == OP_DISCRETE_RANGE)
8210         {
8211           choice_pos += 1;
8212           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8213                                                       EVAL_NORMAL));
8214           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
8215                                                       EVAL_NORMAL));
8216         }
8217       else if (is_array)
8218         {
8219           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
8220                                                       EVAL_NORMAL));
8221           upper = lower;
8222         }
8223       else
8224         {
8225           int ind;
8226           char *name;
8227           switch (op)
8228             {
8229             case OP_NAME:
8230               name = &exp->elts[choice_pos + 2].string;
8231               break;
8232             case OP_VAR_VALUE:
8233               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8234               break;
8235             default:
8236               error (_("Invalid record component association."));
8237             }
8238           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8239           ind = 0;
8240           if (! find_struct_field (name, value_type (lhs), 0, 
8241                                    NULL, NULL, NULL, NULL, &ind))
8242             error (_("Unknown component name: %s."), name);
8243           lower = upper = ind;
8244         }
8245
8246       if (lower <= upper && (lower < low || upper > high))
8247         error (_("Index in component association out of bounds."));
8248
8249       add_component_interval (lower, upper, indices, num_indices,
8250                               max_indices);
8251       while (lower <= upper)
8252         {
8253           int pos1;
8254           pos1 = expr_pc;
8255           assign_component (container, lhs, lower, exp, &pos1);
8256           lower += 1;
8257         }
8258     }
8259 }
8260
8261 /* Assign the value of the expression in the OP_OTHERS construct in
8262    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8263    have not been previously assigned.  The index intervals already assigned
8264    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
8265    OP_OTHERS clause.  CONTAINER is as for assign_aggregate*/
8266 static void
8267 aggregate_assign_others (struct value *container,
8268                          struct value *lhs, struct expression *exp,
8269                          int *pos, LONGEST *indices, int num_indices,
8270                          LONGEST low, LONGEST high) 
8271 {
8272   int i;
8273   int expr_pc = *pos+1;
8274   
8275   for (i = 0; i < num_indices - 2; i += 2)
8276     {
8277       LONGEST ind;
8278       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8279         {
8280           int pos;
8281           pos = expr_pc;
8282           assign_component (container, lhs, ind, exp, &pos);
8283         }
8284     }
8285   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8286 }
8287
8288 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
8289    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8290    modifying *SIZE as needed.  It is an error if *SIZE exceeds
8291    MAX_SIZE.  The resulting intervals do not overlap.  */
8292 static void
8293 add_component_interval (LONGEST low, LONGEST high, 
8294                         LONGEST* indices, int *size, int max_size)
8295 {
8296   int i, j;
8297   for (i = 0; i < *size; i += 2) {
8298     if (high >= indices[i] && low <= indices[i + 1])
8299       {
8300         int kh;
8301         for (kh = i + 2; kh < *size; kh += 2)
8302           if (high < indices[kh])
8303             break;
8304         if (low < indices[i])
8305           indices[i] = low;
8306         indices[i + 1] = indices[kh - 1];
8307         if (high > indices[i + 1])
8308           indices[i + 1] = high;
8309         memcpy (indices + i + 2, indices + kh, *size - kh);
8310         *size -= kh - i - 2;
8311         return;
8312       }
8313     else if (high < indices[i])
8314       break;
8315   }
8316         
8317   if (*size == max_size)
8318     error (_("Internal error: miscounted aggregate components."));
8319   *size += 2;
8320   for (j = *size-1; j >= i+2; j -= 1)
8321     indices[j] = indices[j - 2];
8322   indices[i] = low;
8323   indices[i + 1] = high;
8324 }
8325
8326 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8327    is different.  */
8328
8329 static struct value *
8330 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8331 {
8332   if (type == ada_check_typedef (value_type (arg2)))
8333     return arg2;
8334
8335   if (ada_is_fixed_point_type (type))
8336     return (cast_to_fixed (type, arg2));
8337
8338   if (ada_is_fixed_point_type (value_type (arg2)))
8339     return value_cast (type, cast_from_fixed_to_double (arg2));
8340
8341   return value_cast (type, arg2);
8342 }
8343
8344 static struct value *
8345 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8346                      int *pos, enum noside noside)
8347 {
8348   enum exp_opcode op;
8349   int tem, tem2, tem3;
8350   int pc;
8351   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8352   struct type *type;
8353   int nargs, oplen;
8354   struct value **argvec;
8355
8356   pc = *pos;
8357   *pos += 1;
8358   op = exp->elts[pc].opcode;
8359
8360   switch (op)
8361     {
8362     default:
8363       *pos -= 1;
8364       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8365       arg1 = unwrap_value (arg1);
8366
8367       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8368          then we need to perform the conversion manually, because
8369          evaluate_subexp_standard doesn't do it.  This conversion is
8370          necessary in Ada because the different kinds of float/fixed
8371          types in Ada have different representations.
8372
8373          Similarly, we need to perform the conversion from OP_LONG
8374          ourselves.  */
8375       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8376         arg1 = ada_value_cast (expect_type, arg1, noside);
8377
8378       return arg1;
8379
8380     case OP_STRING:
8381       {
8382         struct value *result;
8383         *pos -= 1;
8384         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8385         /* The result type will have code OP_STRING, bashed there from 
8386            OP_ARRAY.  Bash it back.  */
8387         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8388           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8389         return result;
8390       }
8391
8392     case UNOP_CAST:
8393       (*pos) += 2;
8394       type = exp->elts[pc + 1].type;
8395       arg1 = evaluate_subexp (type, exp, pos, noside);
8396       if (noside == EVAL_SKIP)
8397         goto nosideret;
8398       arg1 = ada_value_cast (type, arg1, noside);
8399       return arg1;
8400
8401     case UNOP_QUAL:
8402       (*pos) += 2;
8403       type = exp->elts[pc + 1].type;
8404       return ada_evaluate_subexp (type, exp, pos, noside);
8405
8406     case BINOP_ASSIGN:
8407       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8408       if (exp->elts[*pos].opcode == OP_AGGREGATE)
8409         {
8410           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8411           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8412             return arg1;
8413           return ada_value_assign (arg1, arg1);
8414         }
8415       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8416          except if the lhs of our assignment is a convenience variable.
8417          In the case of assigning to a convenience variable, the lhs
8418          should be exactly the result of the evaluation of the rhs.  */
8419       type = value_type (arg1);
8420       if (VALUE_LVAL (arg1) == lval_internalvar)
8421          type = NULL;
8422       arg2 = evaluate_subexp (type, exp, pos, noside);
8423       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8424         return arg1;
8425       if (ada_is_fixed_point_type (value_type (arg1)))
8426         arg2 = cast_to_fixed (value_type (arg1), arg2);
8427       else if (ada_is_fixed_point_type (value_type (arg2)))
8428         error
8429           (_("Fixed-point values must be assigned to fixed-point variables"));
8430       else
8431         arg2 = coerce_for_assign (value_type (arg1), arg2);
8432       return ada_value_assign (arg1, arg2);
8433
8434     case BINOP_ADD:
8435       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8436       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8437       if (noside == EVAL_SKIP)
8438         goto nosideret;
8439       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8440         return (value_from_longest
8441                  (value_type (arg1),
8442                   value_as_long (arg1) + value_as_long (arg2)));
8443       if ((ada_is_fixed_point_type (value_type (arg1))
8444            || ada_is_fixed_point_type (value_type (arg2)))
8445           && value_type (arg1) != value_type (arg2))
8446         error (_("Operands of fixed-point addition must have the same type"));
8447       /* Do the addition, and cast the result to the type of the first
8448          argument.  We cannot cast the result to a reference type, so if
8449          ARG1 is a reference type, find its underlying type.  */
8450       type = value_type (arg1);
8451       while (TYPE_CODE (type) == TYPE_CODE_REF)
8452         type = TYPE_TARGET_TYPE (type);
8453       return value_cast (type, value_add (arg1, arg2));
8454
8455     case BINOP_SUB:
8456       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8457       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8458       if (noside == EVAL_SKIP)
8459         goto nosideret;
8460       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8461         return (value_from_longest
8462                  (value_type (arg1),
8463                   value_as_long (arg1) - value_as_long (arg2)));
8464       if ((ada_is_fixed_point_type (value_type (arg1))
8465            || ada_is_fixed_point_type (value_type (arg2)))
8466           && value_type (arg1) != value_type (arg2))
8467         error (_("Operands of fixed-point subtraction must have the same type"));
8468       /* Do the substraction, and cast the result to the type of the first
8469          argument.  We cannot cast the result to a reference type, so if
8470          ARG1 is a reference type, find its underlying type.  */
8471       type = value_type (arg1);
8472       while (TYPE_CODE (type) == TYPE_CODE_REF)
8473         type = TYPE_TARGET_TYPE (type);
8474       return value_cast (type, value_sub (arg1, arg2));
8475
8476     case BINOP_MUL:
8477     case BINOP_DIV:
8478       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8479       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8480       if (noside == EVAL_SKIP)
8481         goto nosideret;
8482       else if (noside == EVAL_AVOID_SIDE_EFFECTS
8483                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8484         return value_zero (value_type (arg1), not_lval);
8485       else
8486         {
8487           if (ada_is_fixed_point_type (value_type (arg1)))
8488             arg1 = cast_from_fixed_to_double (arg1);
8489           if (ada_is_fixed_point_type (value_type (arg2)))
8490             arg2 = cast_from_fixed_to_double (arg2);
8491           return ada_value_binop (arg1, arg2, op);
8492         }
8493
8494     case BINOP_REM:
8495     case BINOP_MOD:
8496       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8497       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8498       if (noside == EVAL_SKIP)
8499         goto nosideret;
8500       else if (noside == EVAL_AVOID_SIDE_EFFECTS
8501                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8502         return value_zero (value_type (arg1), not_lval);
8503       else
8504         return ada_value_binop (arg1, arg2, op);
8505
8506     case BINOP_EQUAL:
8507     case BINOP_NOTEQUAL:
8508       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8509       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8510       if (noside == EVAL_SKIP)
8511         goto nosideret;
8512       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8513         tem = 0;
8514       else
8515         tem = ada_value_equal (arg1, arg2);
8516       if (op == BINOP_NOTEQUAL)
8517         tem = !tem;
8518       return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
8519
8520     case UNOP_NEG:
8521       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8522       if (noside == EVAL_SKIP)
8523         goto nosideret;
8524       else if (ada_is_fixed_point_type (value_type (arg1)))
8525         return value_cast (value_type (arg1), value_neg (arg1));
8526       else
8527         return value_neg (arg1);
8528
8529     case BINOP_LOGICAL_AND:
8530     case BINOP_LOGICAL_OR:
8531     case UNOP_LOGICAL_NOT:
8532       {
8533         struct value *val;
8534
8535         *pos -= 1;
8536         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8537         return value_cast (LA_BOOL_TYPE, val);
8538       }
8539
8540     case BINOP_BITWISE_AND:
8541     case BINOP_BITWISE_IOR:
8542     case BINOP_BITWISE_XOR:
8543       {
8544         struct value *val;
8545
8546         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8547         *pos = pc;
8548         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8549
8550         return value_cast (value_type (arg1), val);
8551       }
8552
8553     case OP_VAR_VALUE:
8554       *pos -= 1;
8555
8556       /* Tagged types are a little special in the fact that the real type
8557          is dynamic and can only be determined by inspecting the object
8558          value.  So even if we're support to do an EVAL_AVOID_SIDE_EFFECTS
8559          evaluation, we force an EVAL_NORMAL evaluation for tagged types.  */
8560       if (noside == EVAL_AVOID_SIDE_EFFECTS
8561           && ada_is_tagged_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol), 1))
8562         noside = EVAL_NORMAL;
8563
8564       if (noside == EVAL_SKIP)
8565         {
8566           *pos += 4;
8567           goto nosideret;
8568         }
8569       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8570         /* Only encountered when an unresolved symbol occurs in a
8571            context other than a function call, in which case, it is
8572            invalid.  */
8573         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8574                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8575       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8576         {
8577           *pos += 4;
8578           return value_zero
8579             (to_static_fixed_type
8580              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8581              not_lval);
8582         }
8583       else
8584         {
8585           arg1 =
8586             unwrap_value (evaluate_subexp_standard
8587                           (expect_type, exp, pos, noside));
8588           return ada_to_fixed_value (arg1);
8589         }
8590
8591     case OP_FUNCALL:
8592       (*pos) += 2;
8593
8594       /* Allocate arg vector, including space for the function to be
8595          called in argvec[0] and a terminating NULL.  */
8596       nargs = longest_to_int (exp->elts[pc + 1].longconst);
8597       argvec =
8598         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8599
8600       if (exp->elts[*pos].opcode == OP_VAR_VALUE
8601           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8602         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8603                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8604       else
8605         {
8606           for (tem = 0; tem <= nargs; tem += 1)
8607             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8608           argvec[tem] = 0;
8609
8610           if (noside == EVAL_SKIP)
8611             goto nosideret;
8612         }
8613
8614       if (ada_is_packed_array_type (desc_base_type (value_type (argvec[0]))))
8615         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8616       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8617                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8618                    && VALUE_LVAL (argvec[0]) == lval_memory))
8619         argvec[0] = value_addr (argvec[0]);
8620
8621       type = ada_check_typedef (value_type (argvec[0]));
8622       if (TYPE_CODE (type) == TYPE_CODE_PTR)
8623         {
8624           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8625             {
8626             case TYPE_CODE_FUNC:
8627               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8628               break;
8629             case TYPE_CODE_ARRAY:
8630               break;
8631             case TYPE_CODE_STRUCT:
8632               if (noside != EVAL_AVOID_SIDE_EFFECTS)
8633                 argvec[0] = ada_value_ind (argvec[0]);
8634               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8635               break;
8636             default:
8637               error (_("cannot subscript or call something of type `%s'"),
8638                      ada_type_name (value_type (argvec[0])));
8639               break;
8640             }
8641         }
8642
8643       switch (TYPE_CODE (type))
8644         {
8645         case TYPE_CODE_FUNC:
8646           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8647             return allocate_value (TYPE_TARGET_TYPE (type));
8648           return call_function_by_hand (argvec[0], nargs, argvec + 1);
8649         case TYPE_CODE_STRUCT:
8650           {
8651             int arity;
8652
8653             arity = ada_array_arity (type);
8654             type = ada_array_element_type (type, nargs);
8655             if (type == NULL)
8656               error (_("cannot subscript or call a record"));
8657             if (arity != nargs)
8658               error (_("wrong number of subscripts; expecting %d"), arity);
8659             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8660               return value_zero (ada_aligned_type (type), lval_memory);
8661             return
8662               unwrap_value (ada_value_subscript
8663                             (argvec[0], nargs, argvec + 1));
8664           }
8665         case TYPE_CODE_ARRAY:
8666           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8667             {
8668               type = ada_array_element_type (type, nargs);
8669               if (type == NULL)
8670                 error (_("element type of array unknown"));
8671               else
8672                 return value_zero (ada_aligned_type (type), lval_memory);
8673             }
8674           return
8675             unwrap_value (ada_value_subscript
8676                           (ada_coerce_to_simple_array (argvec[0]),
8677                            nargs, argvec + 1));
8678         case TYPE_CODE_PTR:     /* Pointer to array */
8679           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8680           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8681             {
8682               type = ada_array_element_type (type, nargs);
8683               if (type == NULL)
8684                 error (_("element type of array unknown"));
8685               else
8686                 return value_zero (ada_aligned_type (type), lval_memory);
8687             }
8688           return
8689             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8690                                                    nargs, argvec + 1));
8691
8692         default:
8693           error (_("Attempt to index or call something other than an "
8694                    "array or function"));
8695         }
8696
8697     case TERNOP_SLICE:
8698       {
8699         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8700         struct value *low_bound_val =
8701           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8702         struct value *high_bound_val =
8703           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8704         LONGEST low_bound;
8705         LONGEST high_bound;
8706         low_bound_val = coerce_ref (low_bound_val);
8707         high_bound_val = coerce_ref (high_bound_val);
8708         low_bound = pos_atr (low_bound_val);
8709         high_bound = pos_atr (high_bound_val);
8710
8711         if (noside == EVAL_SKIP)
8712           goto nosideret;
8713
8714         /* If this is a reference to an aligner type, then remove all
8715            the aligners.  */
8716         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8717             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8718           TYPE_TARGET_TYPE (value_type (array)) =
8719             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8720
8721         if (ada_is_packed_array_type (value_type (array)))
8722           error (_("cannot slice a packed array"));
8723
8724         /* If this is a reference to an array or an array lvalue,
8725            convert to a pointer.  */
8726         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8727             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8728                 && VALUE_LVAL (array) == lval_memory))
8729           array = value_addr (array);
8730
8731         if (noside == EVAL_AVOID_SIDE_EFFECTS
8732             && ada_is_array_descriptor_type (ada_check_typedef
8733                                              (value_type (array))))
8734           return empty_array (ada_type_of_array (array, 0), low_bound);
8735
8736         array = ada_coerce_to_simple_array_ptr (array);
8737
8738         /* If we have more than one level of pointer indirection,
8739            dereference the value until we get only one level.  */
8740         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
8741                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
8742                      == TYPE_CODE_PTR))
8743           array = value_ind (array);
8744
8745         /* Make sure we really do have an array type before going further,
8746            to avoid a SEGV when trying to get the index type or the target
8747            type later down the road if the debug info generated by
8748            the compiler is incorrect or incomplete.  */
8749         if (!ada_is_simple_array_type (value_type (array)))
8750           error (_("cannot take slice of non-array"));
8751
8752         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
8753           {
8754             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
8755               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
8756                                   low_bound);
8757             else
8758               {
8759                 struct type *arr_type0 =
8760                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
8761                                        NULL, 1);
8762                 return ada_value_slice_ptr (array, arr_type0,
8763                                             longest_to_int (low_bound),
8764                                             longest_to_int (high_bound));
8765               }
8766           }
8767         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8768           return array;
8769         else if (high_bound < low_bound)
8770           return empty_array (value_type (array), low_bound);
8771         else
8772           return ada_value_slice (array, longest_to_int (low_bound),
8773                                   longest_to_int (high_bound));
8774       }
8775
8776     case UNOP_IN_RANGE:
8777       (*pos) += 2;
8778       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8779       type = exp->elts[pc + 1].type;
8780
8781       if (noside == EVAL_SKIP)
8782         goto nosideret;
8783
8784       switch (TYPE_CODE (type))
8785         {
8786         default:
8787           lim_warning (_("Membership test incompletely implemented; "
8788                          "always returns true"));
8789           return value_from_longest (builtin_type_int, (LONGEST) 1);
8790
8791         case TYPE_CODE_RANGE:
8792           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
8793           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
8794           return
8795             value_from_longest (builtin_type_int,
8796                                 (value_less (arg1, arg3)
8797                                  || value_equal (arg1, arg3))
8798                                 && (value_less (arg2, arg1)
8799                                     || value_equal (arg2, arg1)));
8800         }
8801
8802     case BINOP_IN_BOUNDS:
8803       (*pos) += 2;
8804       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8805       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8806
8807       if (noside == EVAL_SKIP)
8808         goto nosideret;
8809
8810       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8811         return value_zero (builtin_type_int, not_lval);
8812
8813       tem = longest_to_int (exp->elts[pc + 1].longconst);
8814
8815       if (tem < 1 || tem > ada_array_arity (value_type (arg2)))
8816         error (_("invalid dimension number to 'range"));
8817
8818       arg3 = ada_array_bound (arg2, tem, 1);
8819       arg2 = ada_array_bound (arg2, tem, 0);
8820
8821       return
8822         value_from_longest (builtin_type_int,
8823                             (value_less (arg1, arg3)
8824                              || value_equal (arg1, arg3))
8825                             && (value_less (arg2, arg1)
8826                                 || value_equal (arg2, arg1)));
8827
8828     case TERNOP_IN_RANGE:
8829       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8830       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8831       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8832
8833       if (noside == EVAL_SKIP)
8834         goto nosideret;
8835
8836       return
8837         value_from_longest (builtin_type_int,
8838                             (value_less (arg1, arg3)
8839                              || value_equal (arg1, arg3))
8840                             && (value_less (arg2, arg1)
8841                                 || value_equal (arg2, arg1)));
8842
8843     case OP_ATR_FIRST:
8844     case OP_ATR_LAST:
8845     case OP_ATR_LENGTH:
8846       {
8847         struct type *type_arg;
8848         if (exp->elts[*pos].opcode == OP_TYPE)
8849           {
8850             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8851             arg1 = NULL;
8852             type_arg = exp->elts[pc + 2].type;
8853           }
8854         else
8855           {
8856             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8857             type_arg = NULL;
8858           }
8859
8860         if (exp->elts[*pos].opcode != OP_LONG)
8861           error (_("Invalid operand to '%s"), ada_attribute_name (op));
8862         tem = longest_to_int (exp->elts[*pos + 2].longconst);
8863         *pos += 4;
8864
8865         if (noside == EVAL_SKIP)
8866           goto nosideret;
8867
8868         if (type_arg == NULL)
8869           {
8870             arg1 = ada_coerce_ref (arg1);
8871
8872             if (ada_is_packed_array_type (value_type (arg1)))
8873               arg1 = ada_coerce_to_simple_array (arg1);
8874
8875             if (tem < 1 || tem > ada_array_arity (value_type (arg1)))
8876               error (_("invalid dimension number to '%s"),
8877                      ada_attribute_name (op));
8878
8879             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8880               {
8881                 type = ada_index_type (value_type (arg1), tem);
8882                 if (type == NULL)
8883                   error
8884                     (_("attempt to take bound of something that is not an array"));
8885                 return allocate_value (type);
8886               }
8887
8888             switch (op)
8889               {
8890               default:          /* Should never happen.  */
8891                 error (_("unexpected attribute encountered"));
8892               case OP_ATR_FIRST:
8893                 return ada_array_bound (arg1, tem, 0);
8894               case OP_ATR_LAST:
8895                 return ada_array_bound (arg1, tem, 1);
8896               case OP_ATR_LENGTH:
8897                 return ada_array_length (arg1, tem);
8898               }
8899           }
8900         else if (discrete_type_p (type_arg))
8901           {
8902             struct type *range_type;
8903             char *name = ada_type_name (type_arg);
8904             range_type = NULL;
8905             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
8906               range_type =
8907                 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
8908             if (range_type == NULL)
8909               range_type = type_arg;
8910             switch (op)
8911               {
8912               default:
8913                 error (_("unexpected attribute encountered"));
8914               case OP_ATR_FIRST:
8915                 return value_from_longest 
8916                   (range_type, discrete_type_low_bound (range_type));
8917               case OP_ATR_LAST:
8918                 return value_from_longest
8919                   (range_type, discrete_type_high_bound (range_type));
8920               case OP_ATR_LENGTH:
8921                 error (_("the 'length attribute applies only to array types"));
8922               }
8923           }
8924         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
8925           error (_("unimplemented type attribute"));
8926         else
8927           {
8928             LONGEST low, high;
8929
8930             if (ada_is_packed_array_type (type_arg))
8931               type_arg = decode_packed_array_type (type_arg);
8932
8933             if (tem < 1 || tem > ada_array_arity (type_arg))
8934               error (_("invalid dimension number to '%s"),
8935                      ada_attribute_name (op));
8936
8937             type = ada_index_type (type_arg, tem);
8938             if (type == NULL)
8939               error
8940                 (_("attempt to take bound of something that is not an array"));
8941             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8942               return allocate_value (type);
8943
8944             switch (op)
8945               {
8946               default:
8947                 error (_("unexpected attribute encountered"));
8948               case OP_ATR_FIRST:
8949                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
8950                 return value_from_longest (type, low);
8951               case OP_ATR_LAST:
8952                 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
8953                 return value_from_longest (type, high);
8954               case OP_ATR_LENGTH:
8955                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
8956                 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
8957                 return value_from_longest (type, high - low + 1);
8958               }
8959           }
8960       }
8961
8962     case OP_ATR_TAG:
8963       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8964       if (noside == EVAL_SKIP)
8965         goto nosideret;
8966
8967       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8968         return value_zero (ada_tag_type (arg1), not_lval);
8969
8970       return ada_value_tag (arg1);
8971
8972     case OP_ATR_MIN:
8973     case OP_ATR_MAX:
8974       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8975       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8976       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8977       if (noside == EVAL_SKIP)
8978         goto nosideret;
8979       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8980         return value_zero (value_type (arg1), not_lval);
8981       else
8982         return value_binop (arg1, arg2,
8983                             op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
8984
8985     case OP_ATR_MODULUS:
8986       {
8987         struct type *type_arg = exp->elts[pc + 2].type;
8988         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8989
8990         if (noside == EVAL_SKIP)
8991           goto nosideret;
8992
8993         if (!ada_is_modular_type (type_arg))
8994           error (_("'modulus must be applied to modular type"));
8995
8996         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
8997                                    ada_modulus (type_arg));
8998       }
8999
9000
9001     case OP_ATR_POS:
9002       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9003       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9004       if (noside == EVAL_SKIP)
9005         goto nosideret;
9006       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9007         return value_zero (builtin_type_int, not_lval);
9008       else
9009         return value_pos_atr (arg1);
9010
9011     case OP_ATR_SIZE:
9012       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9013       if (noside == EVAL_SKIP)
9014         goto nosideret;
9015       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9016         return value_zero (builtin_type_int32, not_lval);
9017       else
9018         return value_from_longest (builtin_type_int32,
9019                                    TARGET_CHAR_BIT
9020                                    * TYPE_LENGTH (value_type (arg1)));
9021
9022     case OP_ATR_VAL:
9023       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9024       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9025       type = exp->elts[pc + 2].type;
9026       if (noside == EVAL_SKIP)
9027         goto nosideret;
9028       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9029         return value_zero (type, not_lval);
9030       else
9031         return value_val_atr (type, arg1);
9032
9033     case BINOP_EXP:
9034       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9035       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9036       if (noside == EVAL_SKIP)
9037         goto nosideret;
9038       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9039         return value_zero (value_type (arg1), not_lval);
9040       else
9041         return value_binop (arg1, arg2, op);
9042
9043     case UNOP_PLUS:
9044       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9045       if (noside == EVAL_SKIP)
9046         goto nosideret;
9047       else
9048         return arg1;
9049
9050     case UNOP_ABS:
9051       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9052       if (noside == EVAL_SKIP)
9053         goto nosideret;
9054       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9055         return value_neg (arg1);
9056       else
9057         return arg1;
9058
9059     case UNOP_IND:
9060       if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
9061         expect_type = TYPE_TARGET_TYPE (ada_check_typedef (expect_type));
9062       arg1 = evaluate_subexp (expect_type, exp, pos, noside);
9063       if (noside == EVAL_SKIP)
9064         goto nosideret;
9065       type = ada_check_typedef (value_type (arg1));
9066       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9067         {
9068           if (ada_is_array_descriptor_type (type))
9069             /* GDB allows dereferencing GNAT array descriptors.  */
9070             {
9071               struct type *arrType = ada_type_of_array (arg1, 0);
9072               if (arrType == NULL)
9073                 error (_("Attempt to dereference null array pointer."));
9074               return value_at_lazy (arrType, 0);
9075             }
9076           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9077                    || TYPE_CODE (type) == TYPE_CODE_REF
9078                    /* In C you can dereference an array to get the 1st elt.  */
9079                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9080             {
9081               type = to_static_fixed_type
9082                 (ada_aligned_type
9083                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9084               check_size (type);
9085               return value_zero (type, lval_memory);
9086             }
9087           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9088             /* GDB allows dereferencing an int.  */
9089             return value_zero (builtin_type_int, lval_memory);
9090           else
9091             error (_("Attempt to take contents of a non-pointer value."));
9092         }
9093       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9094       type = ada_check_typedef (value_type (arg1));
9095
9096       if (ada_is_array_descriptor_type (type))
9097         /* GDB allows dereferencing GNAT array descriptors.  */
9098         return ada_coerce_to_simple_array (arg1);
9099       else
9100         return ada_value_ind (arg1);
9101
9102     case STRUCTOP_STRUCT:
9103       tem = longest_to_int (exp->elts[pc + 1].longconst);
9104       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9105       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9106       if (noside == EVAL_SKIP)
9107         goto nosideret;
9108       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9109         {
9110           struct type *type1 = value_type (arg1);
9111           if (ada_is_tagged_type (type1, 1))
9112             {
9113               type = ada_lookup_struct_elt_type (type1,
9114                                                  &exp->elts[pc + 2].string,
9115                                                  1, 1, NULL);
9116               if (type == NULL)
9117                 /* In this case, we assume that the field COULD exist
9118                    in some extension of the type.  Return an object of 
9119                    "type" void, which will match any formal 
9120                    (see ada_type_match). */
9121                 return value_zero (builtin_type_void, lval_memory);
9122             }
9123           else
9124             type =
9125               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9126                                           0, NULL);
9127
9128           return value_zero (ada_aligned_type (type), lval_memory);
9129         }
9130       else
9131         return
9132           ada_to_fixed_value (unwrap_value
9133                               (ada_value_struct_elt
9134                                (arg1, &exp->elts[pc + 2].string, 0)));
9135     case OP_TYPE:
9136       /* The value is not supposed to be used.  This is here to make it
9137          easier to accommodate expressions that contain types.  */
9138       (*pos) += 2;
9139       if (noside == EVAL_SKIP)
9140         goto nosideret;
9141       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9142         return allocate_value (exp->elts[pc + 1].type);
9143       else
9144         error (_("Attempt to use a type name as an expression"));
9145
9146     case OP_AGGREGATE:
9147     case OP_CHOICES:
9148     case OP_OTHERS:
9149     case OP_DISCRETE_RANGE:
9150     case OP_POSITIONAL:
9151     case OP_NAME:
9152       if (noside == EVAL_NORMAL)
9153         switch (op) 
9154           {
9155           case OP_NAME:
9156             error (_("Undefined name, ambiguous name, or renaming used in "
9157                      "component association: %s."), &exp->elts[pc+2].string);
9158           case OP_AGGREGATE:
9159             error (_("Aggregates only allowed on the right of an assignment"));
9160           default:
9161             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9162           }
9163
9164       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9165       *pos += oplen - 1;
9166       for (tem = 0; tem < nargs; tem += 1) 
9167         ada_evaluate_subexp (NULL, exp, pos, noside);
9168       goto nosideret;
9169     }
9170
9171 nosideret:
9172   return value_from_longest (builtin_type_long, (LONGEST) 1);
9173 }
9174 \f
9175
9176                                 /* Fixed point */
9177
9178 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9179    type name that encodes the 'small and 'delta information.
9180    Otherwise, return NULL.  */
9181
9182 static const char *
9183 fixed_type_info (struct type *type)
9184 {
9185   const char *name = ada_type_name (type);
9186   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9187
9188   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9189     {
9190       const char *tail = strstr (name, "___XF_");
9191       if (tail == NULL)
9192         return NULL;
9193       else
9194         return tail + 5;
9195     }
9196   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9197     return fixed_type_info (TYPE_TARGET_TYPE (type));
9198   else
9199     return NULL;
9200 }
9201
9202 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9203
9204 int
9205 ada_is_fixed_point_type (struct type *type)
9206 {
9207   return fixed_type_info (type) != NULL;
9208 }
9209
9210 /* Return non-zero iff TYPE represents a System.Address type.  */
9211
9212 int
9213 ada_is_system_address_type (struct type *type)
9214 {
9215   return (TYPE_NAME (type)
9216           && strcmp (TYPE_NAME (type), "system__address") == 0);
9217 }
9218
9219 /* Assuming that TYPE is the representation of an Ada fixed-point
9220    type, return its delta, or -1 if the type is malformed and the
9221    delta cannot be determined.  */
9222
9223 DOUBLEST
9224 ada_delta (struct type *type)
9225 {
9226   const char *encoding = fixed_type_info (type);
9227   long num, den;
9228
9229   if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
9230     return -1.0;
9231   else
9232     return (DOUBLEST) num / (DOUBLEST) den;
9233 }
9234
9235 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9236    factor ('SMALL value) associated with the type.  */
9237
9238 static DOUBLEST
9239 scaling_factor (struct type *type)
9240 {
9241   const char *encoding = fixed_type_info (type);
9242   unsigned long num0, den0, num1, den1;
9243   int n;
9244
9245   n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
9246
9247   if (n < 2)
9248     return 1.0;
9249   else if (n == 4)
9250     return (DOUBLEST) num1 / (DOUBLEST) den1;
9251   else
9252     return (DOUBLEST) num0 / (DOUBLEST) den0;
9253 }
9254
9255
9256 /* Assuming that X is the representation of a value of fixed-point
9257    type TYPE, return its floating-point equivalent.  */
9258
9259 DOUBLEST
9260 ada_fixed_to_float (struct type *type, LONGEST x)
9261 {
9262   return (DOUBLEST) x *scaling_factor (type);
9263 }
9264
9265 /* The representation of a fixed-point value of type TYPE
9266    corresponding to the value X.  */
9267
9268 LONGEST
9269 ada_float_to_fixed (struct type *type, DOUBLEST x)
9270 {
9271   return (LONGEST) (x / scaling_factor (type) + 0.5);
9272 }
9273
9274
9275                                 /* VAX floating formats */
9276
9277 /* Non-zero iff TYPE represents one of the special VAX floating-point
9278    types.  */
9279
9280 int
9281 ada_is_vax_floating_type (struct type *type)
9282 {
9283   int name_len =
9284     (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9285   return
9286     name_len > 6
9287     && (TYPE_CODE (type) == TYPE_CODE_INT
9288         || TYPE_CODE (type) == TYPE_CODE_RANGE)
9289     && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9290 }
9291
9292 /* The type of special VAX floating-point type this is, assuming
9293    ada_is_vax_floating_point.  */
9294
9295 int
9296 ada_vax_float_type_suffix (struct type *type)
9297 {
9298   return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9299 }
9300
9301 /* A value representing the special debugging function that outputs
9302    VAX floating-point values of the type represented by TYPE.  Assumes
9303    ada_is_vax_floating_type (TYPE).  */
9304
9305 struct value *
9306 ada_vax_float_print_function (struct type *type)
9307 {
9308   switch (ada_vax_float_type_suffix (type))
9309     {
9310     case 'F':
9311       return get_var_value ("DEBUG_STRING_F", 0);
9312     case 'D':
9313       return get_var_value ("DEBUG_STRING_D", 0);
9314     case 'G':
9315       return get_var_value ("DEBUG_STRING_G", 0);
9316     default:
9317       error (_("invalid VAX floating-point type"));
9318     }
9319 }
9320 \f
9321
9322                                 /* Range types */
9323
9324 /* Scan STR beginning at position K for a discriminant name, and
9325    return the value of that discriminant field of DVAL in *PX.  If
9326    PNEW_K is not null, put the position of the character beyond the
9327    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9328    not alter *PX and *PNEW_K if unsuccessful.  */
9329
9330 static int
9331 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9332                     int *pnew_k)
9333 {
9334   static char *bound_buffer = NULL;
9335   static size_t bound_buffer_len = 0;
9336   char *bound;
9337   char *pend;
9338   struct value *bound_val;
9339
9340   if (dval == NULL || str == NULL || str[k] == '\0')
9341     return 0;
9342
9343   pend = strstr (str + k, "__");
9344   if (pend == NULL)
9345     {
9346       bound = str + k;
9347       k += strlen (bound);
9348     }
9349   else
9350     {
9351       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9352       bound = bound_buffer;
9353       strncpy (bound_buffer, str + k, pend - (str + k));
9354       bound[pend - (str + k)] = '\0';
9355       k = pend - str;
9356     }
9357
9358   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9359   if (bound_val == NULL)
9360     return 0;
9361
9362   *px = value_as_long (bound_val);
9363   if (pnew_k != NULL)
9364     *pnew_k = k;
9365   return 1;
9366 }
9367
9368 /* Value of variable named NAME in the current environment.  If
9369    no such variable found, then if ERR_MSG is null, returns 0, and
9370    otherwise causes an error with message ERR_MSG.  */
9371
9372 static struct value *
9373 get_var_value (char *name, char *err_msg)
9374 {
9375   struct ada_symbol_info *syms;
9376   int nsyms;
9377
9378   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9379                                   &syms);
9380
9381   if (nsyms != 1)
9382     {
9383       if (err_msg == NULL)
9384         return 0;
9385       else
9386         error (("%s"), err_msg);
9387     }
9388
9389   return value_of_variable (syms[0].sym, syms[0].block);
9390 }
9391
9392 /* Value of integer variable named NAME in the current environment.  If
9393    no such variable found, returns 0, and sets *FLAG to 0.  If
9394    successful, sets *FLAG to 1.  */
9395
9396 LONGEST
9397 get_int_var_value (char *name, int *flag)
9398 {
9399   struct value *var_val = get_var_value (name, 0);
9400
9401   if (var_val == 0)
9402     {
9403       if (flag != NULL)
9404         *flag = 0;
9405       return 0;
9406     }
9407   else
9408     {
9409       if (flag != NULL)
9410         *flag = 1;
9411       return value_as_long (var_val);
9412     }
9413 }
9414
9415
9416 /* Return a range type whose base type is that of the range type named
9417    NAME in the current environment, and whose bounds are calculated
9418    from NAME according to the GNAT range encoding conventions.
9419    Extract discriminant values, if needed, from DVAL.  If a new type
9420    must be created, allocate in OBJFILE's space.  The bounds
9421    information, in general, is encoded in NAME, the base type given in
9422    the named range type.  */
9423
9424 static struct type *
9425 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9426 {
9427   struct type *raw_type = ada_find_any_type (name);
9428   struct type *base_type;
9429   char *subtype_info;
9430
9431   if (raw_type == NULL)
9432     base_type = builtin_type_int;
9433   else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9434     base_type = TYPE_TARGET_TYPE (raw_type);
9435   else
9436     base_type = raw_type;
9437
9438   subtype_info = strstr (name, "___XD");
9439   if (subtype_info == NULL)
9440     {
9441       LONGEST L = discrete_type_low_bound (raw_type);
9442       LONGEST U = discrete_type_high_bound (raw_type);
9443       if (L < INT_MIN || U > INT_MAX)
9444         return raw_type;
9445       else
9446         return create_range_type (alloc_type (objfile), raw_type, 
9447                                   discrete_type_low_bound (raw_type),
9448                                   discrete_type_high_bound (raw_type));
9449     }
9450   else
9451     {
9452       static char *name_buf = NULL;
9453       static size_t name_len = 0;
9454       int prefix_len = subtype_info - name;
9455       LONGEST L, U;
9456       struct type *type;
9457       char *bounds_str;
9458       int n;
9459
9460       GROW_VECT (name_buf, name_len, prefix_len + 5);
9461       strncpy (name_buf, name, prefix_len);
9462       name_buf[prefix_len] = '\0';
9463
9464       subtype_info += 5;
9465       bounds_str = strchr (subtype_info, '_');
9466       n = 1;
9467
9468       if (*subtype_info == 'L')
9469         {
9470           if (!ada_scan_number (bounds_str, n, &L, &n)
9471               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9472             return raw_type;
9473           if (bounds_str[n] == '_')
9474             n += 2;
9475           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9476             n += 1;
9477           subtype_info += 1;
9478         }
9479       else
9480         {
9481           int ok;
9482           strcpy (name_buf + prefix_len, "___L");
9483           L = get_int_var_value (name_buf, &ok);
9484           if (!ok)
9485             {
9486               lim_warning (_("Unknown lower bound, using 1."));
9487               L = 1;
9488             }
9489         }
9490
9491       if (*subtype_info == 'U')
9492         {
9493           if (!ada_scan_number (bounds_str, n, &U, &n)
9494               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9495             return raw_type;
9496         }
9497       else
9498         {
9499           int ok;
9500           strcpy (name_buf + prefix_len, "___U");
9501           U = get_int_var_value (name_buf, &ok);
9502           if (!ok)
9503             {
9504               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9505               U = L;
9506             }
9507         }
9508
9509       if (objfile == NULL)
9510         objfile = TYPE_OBJFILE (base_type);
9511       type = create_range_type (alloc_type (objfile), base_type, L, U);
9512       TYPE_NAME (type) = name;
9513       return type;
9514     }
9515 }
9516
9517 /* True iff NAME is the name of a range type.  */
9518
9519 int
9520 ada_is_range_type_name (const char *name)
9521 {
9522   return (name != NULL && strstr (name, "___XD"));
9523 }
9524 \f
9525
9526                                 /* Modular types */
9527
9528 /* True iff TYPE is an Ada modular type.  */
9529
9530 int
9531 ada_is_modular_type (struct type *type)
9532 {
9533   struct type *subranged_type = base_type (type);
9534
9535   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9536           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9537           && TYPE_UNSIGNED (subranged_type));
9538 }
9539
9540 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9541
9542 ULONGEST
9543 ada_modulus (struct type * type)
9544 {
9545   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
9546 }
9547 \f
9548
9549 /* Ada exception catchpoint support:
9550    ---------------------------------
9551
9552    We support 3 kinds of exception catchpoints:
9553      . catchpoints on Ada exceptions
9554      . catchpoints on unhandled Ada exceptions
9555      . catchpoints on failed assertions
9556
9557    Exceptions raised during failed assertions, or unhandled exceptions
9558    could perfectly be caught with the general catchpoint on Ada exceptions.
9559    However, we can easily differentiate these two special cases, and having
9560    the option to distinguish these two cases from the rest can be useful
9561    to zero-in on certain situations.
9562
9563    Exception catchpoints are a specialized form of breakpoint,
9564    since they rely on inserting breakpoints inside known routines
9565    of the GNAT runtime.  The implementation therefore uses a standard
9566    breakpoint structure of the BP_BREAKPOINT type, but with its own set
9567    of breakpoint_ops.
9568
9569    Support in the runtime for exception catchpoints have been changed
9570    a few times already, and these changes affect the implementation
9571    of these catchpoints.  In order to be able to support several
9572    variants of the runtime, we use a sniffer that will determine
9573    the runtime variant used by the program being debugged.
9574
9575    At this time, we do not support the use of conditions on Ada exception
9576    catchpoints.  The COND and COND_STRING fields are therefore set
9577    to NULL (most of the time, see below).
9578    
9579    Conditions where EXP_STRING, COND, and COND_STRING are used:
9580
9581      When a user specifies the name of a specific exception in the case
9582      of catchpoints on Ada exceptions, we store the name of that exception
9583      in the EXP_STRING.  We then translate this request into an actual
9584      condition stored in COND_STRING, and then parse it into an expression
9585      stored in COND.  */
9586
9587 /* The different types of catchpoints that we introduced for catching
9588    Ada exceptions.  */
9589
9590 enum exception_catchpoint_kind
9591 {
9592   ex_catch_exception,
9593   ex_catch_exception_unhandled,
9594   ex_catch_assert
9595 };
9596
9597 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9598
9599 /* A structure that describes how to support exception catchpoints
9600    for a given executable.  */
9601
9602 struct exception_support_info
9603 {
9604    /* The name of the symbol to break on in order to insert
9605       a catchpoint on exceptions.  */
9606    const char *catch_exception_sym;
9607
9608    /* The name of the symbol to break on in order to insert
9609       a catchpoint on unhandled exceptions.  */
9610    const char *catch_exception_unhandled_sym;
9611
9612    /* The name of the symbol to break on in order to insert
9613       a catchpoint on failed assertions.  */
9614    const char *catch_assert_sym;
9615
9616    /* Assuming that the inferior just triggered an unhandled exception
9617       catchpoint, this function is responsible for returning the address
9618       in inferior memory where the name of that exception is stored.
9619       Return zero if the address could not be computed.  */
9620    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9621 };
9622
9623 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9624 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9625
9626 /* The following exception support info structure describes how to
9627    implement exception catchpoints with the latest version of the
9628    Ada runtime (as of 2007-03-06).  */
9629
9630 static const struct exception_support_info default_exception_support_info =
9631 {
9632   "__gnat_debug_raise_exception", /* catch_exception_sym */
9633   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9634   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9635   ada_unhandled_exception_name_addr
9636 };
9637
9638 /* The following exception support info structure describes how to
9639    implement exception catchpoints with a slightly older version
9640    of the Ada runtime.  */
9641
9642 static const struct exception_support_info exception_support_info_fallback =
9643 {
9644   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9645   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9646   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
9647   ada_unhandled_exception_name_addr_from_raise
9648 };
9649
9650 /* For each executable, we sniff which exception info structure to use
9651    and cache it in the following global variable.  */
9652
9653 static const struct exception_support_info *exception_info = NULL;
9654
9655 /* Inspect the Ada runtime and determine which exception info structure
9656    should be used to provide support for exception catchpoints.
9657
9658    This function will always set exception_info, or raise an error.  */
9659
9660 static void
9661 ada_exception_support_info_sniffer (void)
9662 {
9663   struct symbol *sym;
9664
9665   /* If the exception info is already known, then no need to recompute it.  */
9666   if (exception_info != NULL)
9667     return;
9668
9669   /* Check the latest (default) exception support info.  */
9670   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
9671                          NULL, VAR_DOMAIN);
9672   if (sym != NULL)
9673     {
9674       exception_info = &default_exception_support_info;
9675       return;
9676     }
9677
9678   /* Try our fallback exception suport info.  */
9679   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
9680                          NULL, VAR_DOMAIN);
9681   if (sym != NULL)
9682     {
9683       exception_info = &exception_support_info_fallback;
9684       return;
9685     }
9686
9687   /* Sometimes, it is normal for us to not be able to find the routine
9688      we are looking for.  This happens when the program is linked with
9689      the shared version of the GNAT runtime, and the program has not been
9690      started yet.  Inform the user of these two possible causes if
9691      applicable.  */
9692
9693   if (ada_update_initial_language (language_unknown, NULL) != language_ada)
9694     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
9695
9696   /* If the symbol does not exist, then check that the program is
9697      already started, to make sure that shared libraries have been
9698      loaded.  If it is not started, this may mean that the symbol is
9699      in a shared library.  */
9700
9701   if (ptid_get_pid (inferior_ptid) == 0)
9702     error (_("Unable to insert catchpoint. Try to start the program first."));
9703
9704   /* At this point, we know that we are debugging an Ada program and
9705      that the inferior has been started, but we still are not able to
9706      find the run-time symbols. That can mean that we are in
9707      configurable run time mode, or that a-except as been optimized
9708      out by the linker...  In any case, at this point it is not worth
9709      supporting this feature.  */
9710
9711   error (_("Cannot insert catchpoints in this configuration."));
9712 }
9713
9714 /* An observer of "executable_changed" events.
9715    Its role is to clear certain cached values that need to be recomputed
9716    each time a new executable is loaded by GDB.  */
9717
9718 static void
9719 ada_executable_changed_observer (void)
9720 {
9721   /* If the executable changed, then it is possible that the Ada runtime
9722      is different.  So we need to invalidate the exception support info
9723      cache.  */
9724   exception_info = NULL;
9725 }
9726
9727 /* Return the name of the function at PC, NULL if could not find it.
9728    This function only checks the debugging information, not the symbol
9729    table.  */
9730
9731 static char *
9732 function_name_from_pc (CORE_ADDR pc)
9733 {
9734   char *func_name;
9735
9736   if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
9737     return NULL;
9738
9739   return func_name;
9740 }
9741
9742 /* True iff FRAME is very likely to be that of a function that is
9743    part of the runtime system.  This is all very heuristic, but is
9744    intended to be used as advice as to what frames are uninteresting
9745    to most users.  */
9746
9747 static int
9748 is_known_support_routine (struct frame_info *frame)
9749 {
9750   struct symtab_and_line sal;
9751   char *func_name;
9752   int i;
9753
9754   /* If this code does not have any debugging information (no symtab),
9755      This cannot be any user code.  */
9756
9757   find_frame_sal (frame, &sal);
9758   if (sal.symtab == NULL)
9759     return 1;
9760
9761   /* If there is a symtab, but the associated source file cannot be
9762      located, then assume this is not user code:  Selecting a frame
9763      for which we cannot display the code would not be very helpful
9764      for the user.  This should also take care of case such as VxWorks
9765      where the kernel has some debugging info provided for a few units.  */
9766
9767   if (symtab_to_fullname (sal.symtab) == NULL)
9768     return 1;
9769
9770   /* Check the unit filename againt the Ada runtime file naming.
9771      We also check the name of the objfile against the name of some
9772      known system libraries that sometimes come with debugging info
9773      too.  */
9774
9775   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
9776     {
9777       re_comp (known_runtime_file_name_patterns[i]);
9778       if (re_exec (sal.symtab->filename))
9779         return 1;
9780       if (sal.symtab->objfile != NULL
9781           && re_exec (sal.symtab->objfile->name))
9782         return 1;
9783     }
9784
9785   /* Check whether the function is a GNAT-generated entity.  */
9786
9787   func_name = function_name_from_pc (get_frame_address_in_block (frame));
9788   if (func_name == NULL)
9789     return 1;
9790
9791   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
9792     {
9793       re_comp (known_auxiliary_function_name_patterns[i]);
9794       if (re_exec (func_name))
9795         return 1;
9796     }
9797
9798   return 0;
9799 }
9800
9801 /* Find the first frame that contains debugging information and that is not
9802    part of the Ada run-time, starting from FI and moving upward.  */
9803
9804 static void
9805 ada_find_printable_frame (struct frame_info *fi)
9806 {
9807   for (; fi != NULL; fi = get_prev_frame (fi))
9808     {
9809       if (!is_known_support_routine (fi))
9810         {
9811           select_frame (fi);
9812           break;
9813         }
9814     }
9815
9816 }
9817
9818 /* Assuming that the inferior just triggered an unhandled exception
9819    catchpoint, return the address in inferior memory where the name
9820    of the exception is stored.
9821    
9822    Return zero if the address could not be computed.  */
9823
9824 static CORE_ADDR
9825 ada_unhandled_exception_name_addr (void)
9826 {
9827   return parse_and_eval_address ("e.full_name");
9828 }
9829
9830 /* Same as ada_unhandled_exception_name_addr, except that this function
9831    should be used when the inferior uses an older version of the runtime,
9832    where the exception name needs to be extracted from a specific frame
9833    several frames up in the callstack.  */
9834
9835 static CORE_ADDR
9836 ada_unhandled_exception_name_addr_from_raise (void)
9837 {
9838   int frame_level;
9839   struct frame_info *fi;
9840
9841   /* To determine the name of this exception, we need to select
9842      the frame corresponding to RAISE_SYM_NAME.  This frame is
9843      at least 3 levels up, so we simply skip the first 3 frames
9844      without checking the name of their associated function.  */
9845   fi = get_current_frame ();
9846   for (frame_level = 0; frame_level < 3; frame_level += 1)
9847     if (fi != NULL)
9848       fi = get_prev_frame (fi); 
9849
9850   while (fi != NULL)
9851     {
9852       const char *func_name =
9853         function_name_from_pc (get_frame_address_in_block (fi));
9854       if (func_name != NULL
9855           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
9856         break; /* We found the frame we were looking for...  */
9857       fi = get_prev_frame (fi);
9858     }
9859
9860   if (fi == NULL)
9861     return 0;
9862
9863   select_frame (fi);
9864   return parse_and_eval_address ("id.full_name");
9865 }
9866
9867 /* Assuming the inferior just triggered an Ada exception catchpoint
9868    (of any type), return the address in inferior memory where the name
9869    of the exception is stored, if applicable.
9870
9871    Return zero if the address could not be computed, or if not relevant.  */
9872
9873 static CORE_ADDR
9874 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
9875                            struct breakpoint *b)
9876 {
9877   switch (ex)
9878     {
9879       case ex_catch_exception:
9880         return (parse_and_eval_address ("e.full_name"));
9881         break;
9882
9883       case ex_catch_exception_unhandled:
9884         return exception_info->unhandled_exception_name_addr ();
9885         break;
9886       
9887       case ex_catch_assert:
9888         return 0;  /* Exception name is not relevant in this case.  */
9889         break;
9890
9891       default:
9892         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
9893         break;
9894     }
9895
9896   return 0; /* Should never be reached.  */
9897 }
9898
9899 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
9900    any error that ada_exception_name_addr_1 might cause to be thrown.
9901    When an error is intercepted, a warning with the error message is printed,
9902    and zero is returned.  */
9903
9904 static CORE_ADDR
9905 ada_exception_name_addr (enum exception_catchpoint_kind ex,
9906                          struct breakpoint *b)
9907 {
9908   struct gdb_exception e;
9909   CORE_ADDR result = 0;
9910
9911   TRY_CATCH (e, RETURN_MASK_ERROR)
9912     {
9913       result = ada_exception_name_addr_1 (ex, b);
9914     }
9915
9916   if (e.reason < 0)
9917     {
9918       warning (_("failed to get exception name: %s"), e.message);
9919       return 0;
9920     }
9921
9922   return result;
9923 }
9924
9925 /* Implement the PRINT_IT method in the breakpoint_ops structure
9926    for all exception catchpoint kinds.  */
9927
9928 static enum print_stop_action
9929 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
9930 {
9931   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
9932   char exception_name[256];
9933
9934   if (addr != 0)
9935     {
9936       read_memory (addr, exception_name, sizeof (exception_name) - 1);
9937       exception_name [sizeof (exception_name) - 1] = '\0';
9938     }
9939
9940   ada_find_printable_frame (get_current_frame ());
9941
9942   annotate_catchpoint (b->number);
9943   switch (ex)
9944     {
9945       case ex_catch_exception:
9946         if (addr != 0)
9947           printf_filtered (_("\nCatchpoint %d, %s at "),
9948                            b->number, exception_name);
9949         else
9950           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
9951         break;
9952       case ex_catch_exception_unhandled:
9953         if (addr != 0)
9954           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
9955                            b->number, exception_name);
9956         else
9957           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
9958                            b->number);
9959         break;
9960       case ex_catch_assert:
9961         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
9962                          b->number);
9963         break;
9964     }
9965
9966   return PRINT_SRC_AND_LOC;
9967 }
9968
9969 /* Implement the PRINT_ONE method in the breakpoint_ops structure
9970    for all exception catchpoint kinds.  */
9971
9972 static void
9973 print_one_exception (enum exception_catchpoint_kind ex,
9974                      struct breakpoint *b, CORE_ADDR *last_addr)
9975
9976   if (addressprint)
9977     {
9978       annotate_field (4);
9979       ui_out_field_core_addr (uiout, "addr", b->loc->address);
9980     }
9981
9982   annotate_field (5);
9983   *last_addr = b->loc->address;
9984   switch (ex)
9985     {
9986       case ex_catch_exception:
9987         if (b->exp_string != NULL)
9988           {
9989             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
9990             
9991             ui_out_field_string (uiout, "what", msg);
9992             xfree (msg);
9993           }
9994         else
9995           ui_out_field_string (uiout, "what", "all Ada exceptions");
9996         
9997         break;
9998
9999       case ex_catch_exception_unhandled:
10000         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10001         break;
10002       
10003       case ex_catch_assert:
10004         ui_out_field_string (uiout, "what", "failed Ada assertions");
10005         break;
10006
10007       default:
10008         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10009         break;
10010     }
10011 }
10012
10013 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10014    for all exception catchpoint kinds.  */
10015
10016 static void
10017 print_mention_exception (enum exception_catchpoint_kind ex,
10018                          struct breakpoint *b)
10019 {
10020   switch (ex)
10021     {
10022       case ex_catch_exception:
10023         if (b->exp_string != NULL)
10024           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10025                            b->number, b->exp_string);
10026         else
10027           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10028         
10029         break;
10030
10031       case ex_catch_exception_unhandled:
10032         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10033                          b->number);
10034         break;
10035       
10036       case ex_catch_assert:
10037         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10038         break;
10039
10040       default:
10041         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10042         break;
10043     }
10044 }
10045
10046 /* Virtual table for "catch exception" breakpoints.  */
10047
10048 static enum print_stop_action
10049 print_it_catch_exception (struct breakpoint *b)
10050 {
10051   return print_it_exception (ex_catch_exception, b);
10052 }
10053
10054 static void
10055 print_one_catch_exception (struct breakpoint *b, CORE_ADDR *last_addr)
10056 {
10057   print_one_exception (ex_catch_exception, b, last_addr);
10058 }
10059
10060 static void
10061 print_mention_catch_exception (struct breakpoint *b)
10062 {
10063   print_mention_exception (ex_catch_exception, b);
10064 }
10065
10066 static struct breakpoint_ops catch_exception_breakpoint_ops =
10067 {
10068   print_it_catch_exception,
10069   print_one_catch_exception,
10070   print_mention_catch_exception
10071 };
10072
10073 /* Virtual table for "catch exception unhandled" breakpoints.  */
10074
10075 static enum print_stop_action
10076 print_it_catch_exception_unhandled (struct breakpoint *b)
10077 {
10078   return print_it_exception (ex_catch_exception_unhandled, b);
10079 }
10080
10081 static void
10082 print_one_catch_exception_unhandled (struct breakpoint *b, CORE_ADDR *last_addr)
10083 {
10084   print_one_exception (ex_catch_exception_unhandled, b, last_addr);
10085 }
10086
10087 static void
10088 print_mention_catch_exception_unhandled (struct breakpoint *b)
10089 {
10090   print_mention_exception (ex_catch_exception_unhandled, b);
10091 }
10092
10093 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10094   print_it_catch_exception_unhandled,
10095   print_one_catch_exception_unhandled,
10096   print_mention_catch_exception_unhandled
10097 };
10098
10099 /* Virtual table for "catch assert" breakpoints.  */
10100
10101 static enum print_stop_action
10102 print_it_catch_assert (struct breakpoint *b)
10103 {
10104   return print_it_exception (ex_catch_assert, b);
10105 }
10106
10107 static void
10108 print_one_catch_assert (struct breakpoint *b, CORE_ADDR *last_addr)
10109 {
10110   print_one_exception (ex_catch_assert, b, last_addr);
10111 }
10112
10113 static void
10114 print_mention_catch_assert (struct breakpoint *b)
10115 {
10116   print_mention_exception (ex_catch_assert, b);
10117 }
10118
10119 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10120   print_it_catch_assert,
10121   print_one_catch_assert,
10122   print_mention_catch_assert
10123 };
10124
10125 /* Return non-zero if B is an Ada exception catchpoint.  */
10126
10127 int
10128 ada_exception_catchpoint_p (struct breakpoint *b)
10129 {
10130   return (b->ops == &catch_exception_breakpoint_ops
10131           || b->ops == &catch_exception_unhandled_breakpoint_ops
10132           || b->ops == &catch_assert_breakpoint_ops);
10133 }
10134
10135 /* Return a newly allocated copy of the first space-separated token
10136    in ARGSP, and then adjust ARGSP to point immediately after that
10137    token.
10138
10139    Return NULL if ARGPS does not contain any more tokens.  */
10140
10141 static char *
10142 ada_get_next_arg (char **argsp)
10143 {
10144   char *args = *argsp;
10145   char *end;
10146   char *result;
10147
10148   /* Skip any leading white space.  */
10149
10150   while (isspace (*args))
10151     args++;
10152
10153   if (args[0] == '\0')
10154     return NULL; /* No more arguments.  */
10155   
10156   /* Find the end of the current argument.  */
10157
10158   end = args;
10159   while (*end != '\0' && !isspace (*end))
10160     end++;
10161
10162   /* Adjust ARGSP to point to the start of the next argument.  */
10163
10164   *argsp = end;
10165
10166   /* Make a copy of the current argument and return it.  */
10167
10168   result = xmalloc (end - args + 1);
10169   strncpy (result, args, end - args);
10170   result[end - args] = '\0';
10171   
10172   return result;
10173 }
10174
10175 /* Split the arguments specified in a "catch exception" command.  
10176    Set EX to the appropriate catchpoint type.
10177    Set EXP_STRING to the name of the specific exception if
10178    specified by the user.  */
10179
10180 static void
10181 catch_ada_exception_command_split (char *args,
10182                                    enum exception_catchpoint_kind *ex,
10183                                    char **exp_string)
10184 {
10185   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10186   char *exception_name;
10187
10188   exception_name = ada_get_next_arg (&args);
10189   make_cleanup (xfree, exception_name);
10190
10191   /* Check that we do not have any more arguments.  Anything else
10192      is unexpected.  */
10193
10194   while (isspace (*args))
10195     args++;
10196
10197   if (args[0] != '\0')
10198     error (_("Junk at end of expression"));
10199
10200   discard_cleanups (old_chain);
10201
10202   if (exception_name == NULL)
10203     {
10204       /* Catch all exceptions.  */
10205       *ex = ex_catch_exception;
10206       *exp_string = NULL;
10207     }
10208   else if (strcmp (exception_name, "unhandled") == 0)
10209     {
10210       /* Catch unhandled exceptions.  */
10211       *ex = ex_catch_exception_unhandled;
10212       *exp_string = NULL;
10213     }
10214   else
10215     {
10216       /* Catch a specific exception.  */
10217       *ex = ex_catch_exception;
10218       *exp_string = exception_name;
10219     }
10220 }
10221
10222 /* Return the name of the symbol on which we should break in order to
10223    implement a catchpoint of the EX kind.  */
10224
10225 static const char *
10226 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10227 {
10228   gdb_assert (exception_info != NULL);
10229
10230   switch (ex)
10231     {
10232       case ex_catch_exception:
10233         return (exception_info->catch_exception_sym);
10234         break;
10235       case ex_catch_exception_unhandled:
10236         return (exception_info->catch_exception_unhandled_sym);
10237         break;
10238       case ex_catch_assert:
10239         return (exception_info->catch_assert_sym);
10240         break;
10241       default:
10242         internal_error (__FILE__, __LINE__,
10243                         _("unexpected catchpoint kind (%d)"), ex);
10244     }
10245 }
10246
10247 /* Return the breakpoint ops "virtual table" used for catchpoints
10248    of the EX kind.  */
10249
10250 static struct breakpoint_ops *
10251 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10252 {
10253   switch (ex)
10254     {
10255       case ex_catch_exception:
10256         return (&catch_exception_breakpoint_ops);
10257         break;
10258       case ex_catch_exception_unhandled:
10259         return (&catch_exception_unhandled_breakpoint_ops);
10260         break;
10261       case ex_catch_assert:
10262         return (&catch_assert_breakpoint_ops);
10263         break;
10264       default:
10265         internal_error (__FILE__, __LINE__,
10266                         _("unexpected catchpoint kind (%d)"), ex);
10267     }
10268 }
10269
10270 /* Return the condition that will be used to match the current exception
10271    being raised with the exception that the user wants to catch.  This
10272    assumes that this condition is used when the inferior just triggered
10273    an exception catchpoint.
10274    
10275    The string returned is a newly allocated string that needs to be
10276    deallocated later.  */
10277
10278 static char *
10279 ada_exception_catchpoint_cond_string (const char *exp_string)
10280 {
10281   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10282 }
10283
10284 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10285
10286 static struct expression *
10287 ada_parse_catchpoint_condition (char *cond_string,
10288                                 struct symtab_and_line sal)
10289 {
10290   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10291 }
10292
10293 /* Return the symtab_and_line that should be used to insert an exception
10294    catchpoint of the TYPE kind.
10295
10296    EX_STRING should contain the name of a specific exception
10297    that the catchpoint should catch, or NULL otherwise.
10298
10299    The idea behind all the remaining parameters is that their names match
10300    the name of certain fields in the breakpoint structure that are used to
10301    handle exception catchpoints.  This function returns the value to which
10302    these fields should be set, depending on the type of catchpoint we need
10303    to create.
10304    
10305    If COND and COND_STRING are both non-NULL, any value they might
10306    hold will be free'ed, and then replaced by newly allocated ones.
10307    These parameters are left untouched otherwise.  */
10308
10309 static struct symtab_and_line
10310 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10311                    char **addr_string, char **cond_string,
10312                    struct expression **cond, struct breakpoint_ops **ops)
10313 {
10314   const char *sym_name;
10315   struct symbol *sym;
10316   struct symtab_and_line sal;
10317
10318   /* First, find out which exception support info to use.  */
10319   ada_exception_support_info_sniffer ();
10320
10321   /* Then lookup the function on which we will break in order to catch
10322      the Ada exceptions requested by the user.  */
10323
10324   sym_name = ada_exception_sym_name (ex);
10325   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10326
10327   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10328      that should be compiled with debugging information.  As a result, we
10329      expect to find that symbol in the symtabs.  If we don't find it, then
10330      the target most likely does not support Ada exceptions, or we cannot
10331      insert exception breakpoints yet, because the GNAT runtime hasn't been
10332      loaded yet.  */
10333
10334   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10335      in such a way that no debugging information is produced for the symbol
10336      we are looking for.  In this case, we could search the minimal symbols
10337      as a fall-back mechanism.  This would still be operating in degraded
10338      mode, however, as we would still be missing the debugging information
10339      that is needed in order to extract the name of the exception being
10340      raised (this name is printed in the catchpoint message, and is also
10341      used when trying to catch a specific exception).  We do not handle
10342      this case for now.  */
10343
10344   if (sym == NULL)
10345     error (_("Unable to break on '%s' in this configuration."), sym_name);
10346
10347   /* Make sure that the symbol we found corresponds to a function.  */
10348   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10349     error (_("Symbol \"%s\" is not a function (class = %d)"),
10350            sym_name, SYMBOL_CLASS (sym));
10351
10352   sal = find_function_start_sal (sym, 1);
10353
10354   /* Set ADDR_STRING.  */
10355
10356   *addr_string = xstrdup (sym_name);
10357
10358   /* Set the COND and COND_STRING (if not NULL).  */
10359
10360   if (cond_string != NULL && cond != NULL)
10361     {
10362       if (*cond_string != NULL)
10363         {
10364           xfree (*cond_string);
10365           *cond_string = NULL;
10366         }
10367       if (*cond != NULL)
10368         {
10369           xfree (*cond);
10370           *cond = NULL;
10371         }
10372       if (exp_string != NULL)
10373         {
10374           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10375           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10376         }
10377     }
10378
10379   /* Set OPS.  */
10380   *ops = ada_exception_breakpoint_ops (ex);
10381
10382   return sal;
10383 }
10384
10385 /* Parse the arguments (ARGS) of the "catch exception" command.
10386  
10387    Set TYPE to the appropriate exception catchpoint type.
10388    If the user asked the catchpoint to catch only a specific
10389    exception, then save the exception name in ADDR_STRING.
10390
10391    See ada_exception_sal for a description of all the remaining
10392    function arguments of this function.  */
10393
10394 struct symtab_and_line
10395 ada_decode_exception_location (char *args, char **addr_string,
10396                                char **exp_string, char **cond_string,
10397                                struct expression **cond,
10398                                struct breakpoint_ops **ops)
10399 {
10400   enum exception_catchpoint_kind ex;
10401
10402   catch_ada_exception_command_split (args, &ex, exp_string);
10403   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10404                             cond, ops);
10405 }
10406
10407 struct symtab_and_line
10408 ada_decode_assert_location (char *args, char **addr_string,
10409                             struct breakpoint_ops **ops)
10410 {
10411   /* Check that no argument where provided at the end of the command.  */
10412
10413   if (args != NULL)
10414     {
10415       while (isspace (*args))
10416         args++;
10417       if (*args != '\0')
10418         error (_("Junk at end of arguments."));
10419     }
10420
10421   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10422                             ops);
10423 }
10424
10425                                 /* Operators */
10426 /* Information about operators given special treatment in functions
10427    below.  */
10428 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10429
10430 #define ADA_OPERATORS \
10431     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10432     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10433     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10434     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10435     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10436     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10437     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10438     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10439     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10440     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10441     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10442     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10443     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10444     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10445     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10446     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10447     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10448     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10449     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10450
10451 static void
10452 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10453 {
10454   switch (exp->elts[pc - 1].opcode)
10455     {
10456     default:
10457       operator_length_standard (exp, pc, oplenp, argsp);
10458       break;
10459
10460 #define OP_DEFN(op, len, args, binop) \
10461     case op: *oplenp = len; *argsp = args; break;
10462       ADA_OPERATORS;
10463 #undef OP_DEFN
10464
10465     case OP_AGGREGATE:
10466       *oplenp = 3;
10467       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10468       break;
10469
10470     case OP_CHOICES:
10471       *oplenp = 3;
10472       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10473       break;
10474     }
10475 }
10476
10477 static char *
10478 ada_op_name (enum exp_opcode opcode)
10479 {
10480   switch (opcode)
10481     {
10482     default:
10483       return op_name_standard (opcode);
10484
10485 #define OP_DEFN(op, len, args, binop) case op: return #op;
10486       ADA_OPERATORS;
10487 #undef OP_DEFN
10488
10489     case OP_AGGREGATE:
10490       return "OP_AGGREGATE";
10491     case OP_CHOICES:
10492       return "OP_CHOICES";
10493     case OP_NAME:
10494       return "OP_NAME";
10495     }
10496 }
10497
10498 /* As for operator_length, but assumes PC is pointing at the first
10499    element of the operator, and gives meaningful results only for the 
10500    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10501
10502 static void
10503 ada_forward_operator_length (struct expression *exp, int pc,
10504                              int *oplenp, int *argsp)
10505 {
10506   switch (exp->elts[pc].opcode)
10507     {
10508     default:
10509       *oplenp = *argsp = 0;
10510       break;
10511
10512 #define OP_DEFN(op, len, args, binop) \
10513     case op: *oplenp = len; *argsp = args; break;
10514       ADA_OPERATORS;
10515 #undef OP_DEFN
10516
10517     case OP_AGGREGATE:
10518       *oplenp = 3;
10519       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10520       break;
10521
10522     case OP_CHOICES:
10523       *oplenp = 3;
10524       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10525       break;
10526
10527     case OP_STRING:
10528     case OP_NAME:
10529       {
10530         int len = longest_to_int (exp->elts[pc + 1].longconst);
10531         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10532         *argsp = 0;
10533         break;
10534       }
10535     }
10536 }
10537
10538 static int
10539 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10540 {
10541   enum exp_opcode op = exp->elts[elt].opcode;
10542   int oplen, nargs;
10543   int pc = elt;
10544   int i;
10545
10546   ada_forward_operator_length (exp, elt, &oplen, &nargs);
10547
10548   switch (op)
10549     {
10550       /* Ada attributes ('Foo).  */
10551     case OP_ATR_FIRST:
10552     case OP_ATR_LAST:
10553     case OP_ATR_LENGTH:
10554     case OP_ATR_IMAGE:
10555     case OP_ATR_MAX:
10556     case OP_ATR_MIN:
10557     case OP_ATR_MODULUS:
10558     case OP_ATR_POS:
10559     case OP_ATR_SIZE:
10560     case OP_ATR_TAG:
10561     case OP_ATR_VAL:
10562       break;
10563
10564     case UNOP_IN_RANGE:
10565     case UNOP_QUAL:
10566       /* XXX: gdb_sprint_host_address, type_sprint */
10567       fprintf_filtered (stream, _("Type @"));
10568       gdb_print_host_address (exp->elts[pc + 1].type, stream);
10569       fprintf_filtered (stream, " (");
10570       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
10571       fprintf_filtered (stream, ")");
10572       break;
10573     case BINOP_IN_BOUNDS:
10574       fprintf_filtered (stream, " (%d)",
10575                         longest_to_int (exp->elts[pc + 2].longconst));
10576       break;
10577     case TERNOP_IN_RANGE:
10578       break;
10579
10580     case OP_AGGREGATE:
10581     case OP_OTHERS:
10582     case OP_DISCRETE_RANGE:
10583     case OP_POSITIONAL:
10584     case OP_CHOICES:
10585       break;
10586
10587     case OP_NAME:
10588     case OP_STRING:
10589       {
10590         char *name = &exp->elts[elt + 2].string;
10591         int len = longest_to_int (exp->elts[elt + 1].longconst);
10592         fprintf_filtered (stream, "Text: `%.*s'", len, name);
10593         break;
10594       }
10595
10596     default:
10597       return dump_subexp_body_standard (exp, stream, elt);
10598     }
10599
10600   elt += oplen;
10601   for (i = 0; i < nargs; i += 1)
10602     elt = dump_subexp (exp, stream, elt);
10603
10604   return elt;
10605 }
10606
10607 /* The Ada extension of print_subexp (q.v.).  */
10608
10609 static void
10610 ada_print_subexp (struct expression *exp, int *pos,
10611                   struct ui_file *stream, enum precedence prec)
10612 {
10613   int oplen, nargs, i;
10614   int pc = *pos;
10615   enum exp_opcode op = exp->elts[pc].opcode;
10616
10617   ada_forward_operator_length (exp, pc, &oplen, &nargs);
10618
10619   *pos += oplen;
10620   switch (op)
10621     {
10622     default:
10623       *pos -= oplen;
10624       print_subexp_standard (exp, pos, stream, prec);
10625       return;
10626
10627     case OP_VAR_VALUE:
10628       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
10629       return;
10630
10631     case BINOP_IN_BOUNDS:
10632       /* XXX: sprint_subexp */
10633       print_subexp (exp, pos, stream, PREC_SUFFIX);
10634       fputs_filtered (" in ", stream);
10635       print_subexp (exp, pos, stream, PREC_SUFFIX);
10636       fputs_filtered ("'range", stream);
10637       if (exp->elts[pc + 1].longconst > 1)
10638         fprintf_filtered (stream, "(%ld)",
10639                           (long) exp->elts[pc + 1].longconst);
10640       return;
10641
10642     case TERNOP_IN_RANGE:
10643       if (prec >= PREC_EQUAL)
10644         fputs_filtered ("(", stream);
10645       /* XXX: sprint_subexp */
10646       print_subexp (exp, pos, stream, PREC_SUFFIX);
10647       fputs_filtered (" in ", stream);
10648       print_subexp (exp, pos, stream, PREC_EQUAL);
10649       fputs_filtered (" .. ", stream);
10650       print_subexp (exp, pos, stream, PREC_EQUAL);
10651       if (prec >= PREC_EQUAL)
10652         fputs_filtered (")", stream);
10653       return;
10654
10655     case OP_ATR_FIRST:
10656     case OP_ATR_LAST:
10657     case OP_ATR_LENGTH:
10658     case OP_ATR_IMAGE:
10659     case OP_ATR_MAX:
10660     case OP_ATR_MIN:
10661     case OP_ATR_MODULUS:
10662     case OP_ATR_POS:
10663     case OP_ATR_SIZE:
10664     case OP_ATR_TAG:
10665     case OP_ATR_VAL:
10666       if (exp->elts[*pos].opcode == OP_TYPE)
10667         {
10668           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
10669             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
10670           *pos += 3;
10671         }
10672       else
10673         print_subexp (exp, pos, stream, PREC_SUFFIX);
10674       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
10675       if (nargs > 1)
10676         {
10677           int tem;
10678           for (tem = 1; tem < nargs; tem += 1)
10679             {
10680               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
10681               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
10682             }
10683           fputs_filtered (")", stream);
10684         }
10685       return;
10686
10687     case UNOP_QUAL:
10688       type_print (exp->elts[pc + 1].type, "", stream, 0);
10689       fputs_filtered ("'(", stream);
10690       print_subexp (exp, pos, stream, PREC_PREFIX);
10691       fputs_filtered (")", stream);
10692       return;
10693
10694     case UNOP_IN_RANGE:
10695       /* XXX: sprint_subexp */
10696       print_subexp (exp, pos, stream, PREC_SUFFIX);
10697       fputs_filtered (" in ", stream);
10698       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
10699       return;
10700
10701     case OP_DISCRETE_RANGE:
10702       print_subexp (exp, pos, stream, PREC_SUFFIX);
10703       fputs_filtered ("..", stream);
10704       print_subexp (exp, pos, stream, PREC_SUFFIX);
10705       return;
10706
10707     case OP_OTHERS:
10708       fputs_filtered ("others => ", stream);
10709       print_subexp (exp, pos, stream, PREC_SUFFIX);
10710       return;
10711
10712     case OP_CHOICES:
10713       for (i = 0; i < nargs-1; i += 1)
10714         {
10715           if (i > 0)
10716             fputs_filtered ("|", stream);
10717           print_subexp (exp, pos, stream, PREC_SUFFIX);
10718         }
10719       fputs_filtered (" => ", stream);
10720       print_subexp (exp, pos, stream, PREC_SUFFIX);
10721       return;
10722       
10723     case OP_POSITIONAL:
10724       print_subexp (exp, pos, stream, PREC_SUFFIX);
10725       return;
10726
10727     case OP_AGGREGATE:
10728       fputs_filtered ("(", stream);
10729       for (i = 0; i < nargs; i += 1)
10730         {
10731           if (i > 0)
10732             fputs_filtered (", ", stream);
10733           print_subexp (exp, pos, stream, PREC_SUFFIX);
10734         }
10735       fputs_filtered (")", stream);
10736       return;
10737     }
10738 }
10739
10740 /* Table mapping opcodes into strings for printing operators
10741    and precedences of the operators.  */
10742
10743 static const struct op_print ada_op_print_tab[] = {
10744   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
10745   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
10746   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
10747   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
10748   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
10749   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
10750   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
10751   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
10752   {"<=", BINOP_LEQ, PREC_ORDER, 0},
10753   {">=", BINOP_GEQ, PREC_ORDER, 0},
10754   {">", BINOP_GTR, PREC_ORDER, 0},
10755   {"<", BINOP_LESS, PREC_ORDER, 0},
10756   {">>", BINOP_RSH, PREC_SHIFT, 0},
10757   {"<<", BINOP_LSH, PREC_SHIFT, 0},
10758   {"+", BINOP_ADD, PREC_ADD, 0},
10759   {"-", BINOP_SUB, PREC_ADD, 0},
10760   {"&", BINOP_CONCAT, PREC_ADD, 0},
10761   {"*", BINOP_MUL, PREC_MUL, 0},
10762   {"/", BINOP_DIV, PREC_MUL, 0},
10763   {"rem", BINOP_REM, PREC_MUL, 0},
10764   {"mod", BINOP_MOD, PREC_MUL, 0},
10765   {"**", BINOP_EXP, PREC_REPEAT, 0},
10766   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
10767   {"-", UNOP_NEG, PREC_PREFIX, 0},
10768   {"+", UNOP_PLUS, PREC_PREFIX, 0},
10769   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
10770   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
10771   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
10772   {".all", UNOP_IND, PREC_SUFFIX, 1},
10773   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
10774   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
10775   {NULL, 0, 0, 0}
10776 };
10777 \f
10778 enum ada_primitive_types {
10779   ada_primitive_type_int,
10780   ada_primitive_type_long,
10781   ada_primitive_type_short,
10782   ada_primitive_type_char,
10783   ada_primitive_type_float,
10784   ada_primitive_type_double,
10785   ada_primitive_type_void,
10786   ada_primitive_type_long_long,
10787   ada_primitive_type_long_double,
10788   ada_primitive_type_natural,
10789   ada_primitive_type_positive,
10790   ada_primitive_type_system_address,
10791   nr_ada_primitive_types
10792 };
10793
10794 static void
10795 ada_language_arch_info (struct gdbarch *gdbarch,
10796                         struct language_arch_info *lai)
10797 {
10798   const struct builtin_type *builtin = builtin_type (gdbarch);
10799   lai->primitive_type_vector
10800     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
10801                               struct type *);
10802   lai->primitive_type_vector [ada_primitive_type_int] =
10803     init_type (TYPE_CODE_INT,
10804                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10805                0, "integer", (struct objfile *) NULL);
10806   lai->primitive_type_vector [ada_primitive_type_long] =
10807     init_type (TYPE_CODE_INT,
10808                gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
10809                0, "long_integer", (struct objfile *) NULL);
10810   lai->primitive_type_vector [ada_primitive_type_short] =
10811     init_type (TYPE_CODE_INT,
10812                gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT,
10813                0, "short_integer", (struct objfile *) NULL);
10814   lai->string_char_type = 
10815     lai->primitive_type_vector [ada_primitive_type_char] =
10816     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10817                0, "character", (struct objfile *) NULL);
10818   lai->primitive_type_vector [ada_primitive_type_float] =
10819     init_type (TYPE_CODE_FLT,
10820                gdbarch_float_bit (gdbarch)/ TARGET_CHAR_BIT,
10821                0, "float", (struct objfile *) NULL);
10822   lai->primitive_type_vector [ada_primitive_type_double] =
10823     init_type (TYPE_CODE_FLT,
10824                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10825                0, "long_float", (struct objfile *) NULL);
10826   lai->primitive_type_vector [ada_primitive_type_long_long] =
10827     init_type (TYPE_CODE_INT, 
10828                gdbarch_long_long_bit (gdbarch) / TARGET_CHAR_BIT,
10829                0, "long_long_integer", (struct objfile *) NULL);
10830   lai->primitive_type_vector [ada_primitive_type_long_double] =
10831     init_type (TYPE_CODE_FLT,
10832                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10833                0, "long_long_float", (struct objfile *) NULL);
10834   lai->primitive_type_vector [ada_primitive_type_natural] =
10835     init_type (TYPE_CODE_INT,
10836                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10837                0, "natural", (struct objfile *) NULL);
10838   lai->primitive_type_vector [ada_primitive_type_positive] =
10839     init_type (TYPE_CODE_INT,
10840                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10841                0, "positive", (struct objfile *) NULL);
10842   lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
10843
10844   lai->primitive_type_vector [ada_primitive_type_system_address] =
10845     lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
10846                                     (struct objfile *) NULL));
10847   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
10848     = "system__address";
10849 }
10850 \f
10851                                 /* Language vector */
10852
10853 /* Not really used, but needed in the ada_language_defn.  */
10854
10855 static void
10856 emit_char (int c, struct ui_file *stream, int quoter)
10857 {
10858   ada_emit_char (c, stream, quoter, 1);
10859 }
10860
10861 static int
10862 parse (void)
10863 {
10864   warnings_issued = 0;
10865   return ada_parse ();
10866 }
10867
10868 static const struct exp_descriptor ada_exp_descriptor = {
10869   ada_print_subexp,
10870   ada_operator_length,
10871   ada_op_name,
10872   ada_dump_subexp_body,
10873   ada_evaluate_subexp
10874 };
10875
10876 const struct language_defn ada_language_defn = {
10877   "ada",                        /* Language name */
10878   language_ada,
10879   range_check_off,
10880   type_check_off,
10881   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
10882                                    that's not quite what this means.  */
10883   array_row_major,
10884   &ada_exp_descriptor,
10885   parse,
10886   ada_error,
10887   resolve,
10888   ada_printchar,                /* Print a character constant */
10889   ada_printstr,                 /* Function to print string constant */
10890   emit_char,                    /* Function to print single char (not used) */
10891   ada_print_type,               /* Print a type using appropriate syntax */
10892   ada_val_print,                /* Print a value using appropriate syntax */
10893   ada_value_print,              /* Print a top-level value */
10894   NULL,                         /* Language specific skip_trampoline */
10895   NULL,                         /* name_of_this */
10896   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
10897   basic_lookup_transparent_type,        /* lookup_transparent_type */
10898   ada_la_decode,                /* Language specific symbol demangler */
10899   NULL,                         /* Language specific class_name_from_physname */
10900   ada_op_print_tab,             /* expression operators for printing */
10901   0,                            /* c-style arrays */
10902   1,                            /* String lower bound */
10903   ada_get_gdb_completer_word_break_characters,
10904   ada_make_symbol_completion_list,
10905   ada_language_arch_info,
10906   ada_print_array_index,
10907   default_pass_by_reference,
10908   LANG_MAGIC
10909 };
10910
10911 void
10912 _initialize_ada_language (void)
10913 {
10914   add_language (&ada_language_defn);
10915
10916   varsize_limit = 65536;
10917
10918   obstack_init (&symbol_list_obstack);
10919
10920   decoded_names_store = htab_create_alloc
10921     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
10922      NULL, xcalloc, xfree);
10923
10924   observer_attach_executable_changed (ada_executable_changed_observer);
10925 }