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