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