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