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