OSDN Git Service

2009-12-09 Phil Muldoon <pmuldoon@redhat.com>
[pf3gnuchains/pf3gnuchains3x.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       observer_notify_memory_changed (to_addr, len, buffer);
2293
2294       val = value_copy (toval);
2295       memcpy (value_contents_raw (val), value_contents (fromval),
2296               TYPE_LENGTH (type));
2297       deprecated_set_value_type (val, type);
2298
2299       return val;
2300     }
2301
2302   return value_assign (toval, fromval);
2303 }
2304
2305
2306 /* Given that COMPONENT is a memory lvalue that is part of the lvalue 
2307  * CONTAINER, assign the contents of VAL to COMPONENTS's place in 
2308  * CONTAINER.  Modifies the VALUE_CONTENTS of CONTAINER only, not 
2309  * COMPONENT, and not the inferior's memory.  The current contents 
2310  * of COMPONENT are ignored.  */
2311 static void
2312 value_assign_to_component (struct value *container, struct value *component,
2313                            struct value *val)
2314 {
2315   LONGEST offset_in_container =
2316     (LONGEST)  (value_address (component) - value_address (container));
2317   int bit_offset_in_container = 
2318     value_bitpos (component) - value_bitpos (container);
2319   int bits;
2320   
2321   val = value_cast (value_type (component), val);
2322
2323   if (value_bitsize (component) == 0)
2324     bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2325   else
2326     bits = value_bitsize (component);
2327
2328   if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2329     move_bits (value_contents_writeable (container) + offset_in_container, 
2330                value_bitpos (container) + bit_offset_in_container,
2331                value_contents (val),
2332                TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
2333                bits, 1);
2334   else
2335     move_bits (value_contents_writeable (container) + offset_in_container, 
2336                value_bitpos (container) + bit_offset_in_container,
2337                value_contents (val), 0, bits, 0);
2338 }              
2339                         
2340 /* The value of the element of array ARR at the ARITY indices given in IND.
2341    ARR may be either a simple array, GNAT array descriptor, or pointer
2342    thereto.  */
2343
2344 struct value *
2345 ada_value_subscript (struct value *arr, int arity, struct value **ind)
2346 {
2347   int k;
2348   struct value *elt;
2349   struct type *elt_type;
2350
2351   elt = ada_coerce_to_simple_array (arr);
2352
2353   elt_type = ada_check_typedef (value_type (elt));
2354   if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
2355       && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2356     return value_subscript_packed (elt, arity, ind);
2357
2358   for (k = 0; k < arity; k += 1)
2359     {
2360       if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
2361         error (_("too many subscripts (%d expected)"), k);
2362       elt = value_subscript (elt, pos_atr (ind[k]));
2363     }
2364   return elt;
2365 }
2366
2367 /* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2368    value of the element of *ARR at the ARITY indices given in
2369    IND.  Does not read the entire array into memory.  */
2370
2371 static struct value *
2372 ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
2373                          struct value **ind)
2374 {
2375   int k;
2376
2377   for (k = 0; k < arity; k += 1)
2378     {
2379       LONGEST lwb, upb;
2380
2381       if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2382         error (_("too many subscripts (%d expected)"), k);
2383       arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
2384                         value_copy (arr));
2385       get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2386       arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
2387       type = TYPE_TARGET_TYPE (type);
2388     }
2389
2390   return value_ind (arr);
2391 }
2392
2393 /* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
2394    actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2395    elements starting at index LOW.  The lower bound of this array is LOW, as
2396    per Ada rules. */
2397 static struct value *
2398 ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2399                           int low, int high)
2400 {
2401   CORE_ADDR base = value_as_address (array_ptr)
2402     + ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
2403        * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
2404   struct type *index_type =
2405     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
2406                        low, high);
2407   struct type *slice_type =
2408     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2409   return value_at_lazy (slice_type, base);
2410 }
2411
2412
2413 static struct value *
2414 ada_value_slice (struct value *array, int low, int high)
2415 {
2416   struct type *type = value_type (array);
2417   struct type *index_type =
2418     create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
2419   struct type *slice_type =
2420     create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
2421   return value_cast (slice_type, value_slice (array, low, high - low + 1));
2422 }
2423
2424 /* If type is a record type in the form of a standard GNAT array
2425    descriptor, returns the number of dimensions for type.  If arr is a
2426    simple array, returns the number of "array of"s that prefix its
2427    type designation.  Otherwise, returns 0.  */
2428
2429 int
2430 ada_array_arity (struct type *type)
2431 {
2432   int arity;
2433
2434   if (type == NULL)
2435     return 0;
2436
2437   type = desc_base_type (type);
2438
2439   arity = 0;
2440   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2441     return desc_arity (desc_bounds_type (type));
2442   else
2443     while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2444       {
2445         arity += 1;
2446         type = ada_check_typedef (TYPE_TARGET_TYPE (type));
2447       }
2448
2449   return arity;
2450 }
2451
2452 /* If TYPE is a record type in the form of a standard GNAT array
2453    descriptor or a simple array type, returns the element type for
2454    TYPE after indexing by NINDICES indices, or by all indices if
2455    NINDICES is -1.  Otherwise, returns NULL.  */
2456
2457 struct type *
2458 ada_array_element_type (struct type *type, int nindices)
2459 {
2460   type = desc_base_type (type);
2461
2462   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
2463     {
2464       int k;
2465       struct type *p_array_type;
2466
2467       p_array_type = desc_data_target_type (type);
2468
2469       k = ada_array_arity (type);
2470       if (k == 0)
2471         return NULL;
2472
2473       /* Initially p_array_type = elt_type(*)[]...(k times)...[].  */
2474       if (nindices >= 0 && k > nindices)
2475         k = nindices;
2476       while (k > 0 && p_array_type != NULL)
2477         {
2478           p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2479           k -= 1;
2480         }
2481       return p_array_type;
2482     }
2483   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2484     {
2485       while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
2486         {
2487           type = TYPE_TARGET_TYPE (type);
2488           nindices -= 1;
2489         }
2490       return type;
2491     }
2492
2493   return NULL;
2494 }
2495
2496 /* The type of nth index in arrays of given type (n numbering from 1).
2497    Does not examine memory.  Throws an error if N is invalid or TYPE
2498    is not an array type.  NAME is the name of the Ada attribute being
2499    evaluated ('range, 'first, 'last, or 'length); it is used in building
2500    the error message.  */
2501
2502 static struct type *
2503 ada_index_type (struct type *type, int n, const char *name)
2504 {
2505   struct type *result_type;
2506
2507   type = desc_base_type (type);
2508
2509   if (n < 0 || n > ada_array_arity (type))
2510     error (_("invalid dimension number to '%s"), name);
2511
2512   if (ada_is_simple_array_type (type))
2513     {
2514       int i;
2515
2516       for (i = 1; i < n; i += 1)
2517         type = TYPE_TARGET_TYPE (type);
2518       result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
2519       /* FIXME: The stabs type r(0,0);bound;bound in an array type
2520          has a target type of TYPE_CODE_UNDEF.  We compensate here, but
2521          perhaps stabsread.c would make more sense.  */
2522       if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2523         result_type = NULL;
2524     }
2525   else
2526     {
2527       result_type = desc_index_type (desc_bounds_type (type), n);
2528       if (result_type == NULL)
2529         error (_("attempt to take bound of something that is not an array"));
2530     }
2531
2532   return result_type;
2533 }
2534
2535 /* Given that arr is an array type, returns the lower bound of the
2536    Nth index (numbering from 1) if WHICH is 0, and the upper bound if
2537    WHICH is 1.  This returns bounds 0 .. -1 if ARR_TYPE is an
2538    array-descriptor type.  It works for other arrays with bounds supplied
2539    by run-time quantities other than discriminants.  */
2540
2541 static LONGEST
2542 ada_array_bound_from_type (struct type * arr_type, int n, int which)
2543 {
2544   struct type *type, *elt_type, *index_type_desc, *index_type;
2545   LONGEST retval;
2546   int i;
2547
2548   gdb_assert (which == 0 || which == 1);
2549
2550   if (ada_is_constrained_packed_array_type (arr_type))
2551     arr_type = decode_constrained_packed_array_type (arr_type);
2552
2553   if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
2554     return (LONGEST) - which;
2555
2556   if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2557     type = TYPE_TARGET_TYPE (arr_type);
2558   else
2559     type = arr_type;
2560
2561   elt_type = type;
2562   for (i = n; i > 1; i--)
2563     elt_type = TYPE_TARGET_TYPE (type);
2564
2565   index_type_desc = ada_find_parallel_type (type, "___XA");
2566   if (index_type_desc != NULL)
2567     index_type = to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n - 1),
2568                                       NULL, TYPE_INDEX_TYPE (elt_type));
2569   else
2570     index_type = TYPE_INDEX_TYPE (elt_type);
2571
2572   switch (TYPE_CODE (index_type))
2573     {
2574     case TYPE_CODE_RANGE:
2575       retval = which == 0 ? TYPE_LOW_BOUND (index_type)
2576                           : TYPE_HIGH_BOUND (index_type);
2577       break;
2578     case TYPE_CODE_ENUM:
2579       retval = which == 0 ? TYPE_FIELD_BITPOS (index_type, 0)
2580                           : TYPE_FIELD_BITPOS (index_type,
2581                                                TYPE_NFIELDS (index_type) - 1);
2582       break;
2583     default:
2584       internal_error (__FILE__, __LINE__, _("invalid type code of index type"));
2585     }
2586
2587   return retval;
2588 }
2589
2590 /* Given that arr is an array value, returns the lower bound of the
2591    nth index (numbering from 1) if WHICH is 0, and the upper bound if
2592    WHICH is 1.  This routine will also work for arrays with bounds
2593    supplied by run-time quantities other than discriminants.  */
2594
2595 static LONGEST
2596 ada_array_bound (struct value *arr, int n, int which)
2597 {
2598   struct type *arr_type = value_type (arr);
2599
2600   if (ada_is_constrained_packed_array_type (arr_type))
2601     return ada_array_bound (decode_constrained_packed_array (arr), n, which);
2602   else if (ada_is_simple_array_type (arr_type))
2603     return ada_array_bound_from_type (arr_type, n, which);
2604   else
2605     return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
2606 }
2607
2608 /* Given that arr is an array value, returns the length of the
2609    nth index.  This routine will also work for arrays with bounds
2610    supplied by run-time quantities other than discriminants.
2611    Does not work for arrays indexed by enumeration types with representation
2612    clauses at the moment.  */
2613
2614 static LONGEST
2615 ada_array_length (struct value *arr, int n)
2616 {
2617   struct type *arr_type = ada_check_typedef (value_type (arr));
2618
2619   if (ada_is_constrained_packed_array_type (arr_type))
2620     return ada_array_length (decode_constrained_packed_array (arr), n);
2621
2622   if (ada_is_simple_array_type (arr_type))
2623     return (ada_array_bound_from_type (arr_type, n, 1)
2624             - ada_array_bound_from_type (arr_type, n, 0) + 1);
2625   else
2626     return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2627             - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
2628 }
2629
2630 /* An empty array whose type is that of ARR_TYPE (an array type),
2631    with bounds LOW to LOW-1.  */
2632
2633 static struct value *
2634 empty_array (struct type *arr_type, int low)
2635 {
2636   struct type *index_type =
2637     create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2638                        low, low - 1);
2639   struct type *elt_type = ada_array_element_type (arr_type, 1);
2640   return allocate_value (create_array_type (NULL, elt_type, index_type));
2641 }
2642 \f
2643
2644                                 /* Name resolution */
2645
2646 /* The "decoded" name for the user-definable Ada operator corresponding
2647    to OP.  */
2648
2649 static const char *
2650 ada_decoded_op_name (enum exp_opcode op)
2651 {
2652   int i;
2653
2654   for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
2655     {
2656       if (ada_opname_table[i].op == op)
2657         return ada_opname_table[i].decoded;
2658     }
2659   error (_("Could not find operator name for opcode"));
2660 }
2661
2662
2663 /* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2664    references (marked by OP_VAR_VALUE nodes in which the symbol has an
2665    undefined namespace) and converts operators that are
2666    user-defined into appropriate function calls.  If CONTEXT_TYPE is
2667    non-null, it provides a preferred result type [at the moment, only
2668    type void has any effect---causing procedures to be preferred over
2669    functions in calls].  A null CONTEXT_TYPE indicates that a non-void
2670    return type is preferred.  May change (expand) *EXP.  */
2671
2672 static void
2673 resolve (struct expression **expp, int void_context_p)
2674 {
2675   struct type *context_type = NULL;
2676   int pc = 0;
2677
2678   if (void_context_p)
2679     context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2680
2681   resolve_subexp (expp, &pc, 1, context_type);
2682 }
2683
2684 /* Resolve the operator of the subexpression beginning at
2685    position *POS of *EXPP.  "Resolving" consists of replacing
2686    the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2687    with their resolutions, replacing built-in operators with
2688    function calls to user-defined operators, where appropriate, and,
2689    when DEPROCEDURE_P is non-zero, converting function-valued variables
2690    into parameterless calls.  May expand *EXPP.  The CONTEXT_TYPE functions
2691    are as in ada_resolve, above.  */
2692
2693 static struct value *
2694 resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
2695                 struct type *context_type)
2696 {
2697   int pc = *pos;
2698   int i;
2699   struct expression *exp;       /* Convenience: == *expp.  */
2700   enum exp_opcode op = (*expp)->elts[pc].opcode;
2701   struct value **argvec;        /* Vector of operand types (alloca'ed).  */
2702   int nargs;                    /* Number of operands.  */
2703   int oplen;
2704
2705   argvec = NULL;
2706   nargs = 0;
2707   exp = *expp;
2708
2709   /* Pass one: resolve operands, saving their types and updating *pos,
2710      if needed.  */
2711   switch (op)
2712     {
2713     case OP_FUNCALL:
2714       if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2715           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2716         *pos += 7;
2717       else
2718         {
2719           *pos += 3;
2720           resolve_subexp (expp, pos, 0, NULL);
2721         }
2722       nargs = longest_to_int (exp->elts[pc + 1].longconst);
2723       break;
2724
2725     case UNOP_ADDR:
2726       *pos += 1;
2727       resolve_subexp (expp, pos, 0, NULL);
2728       break;
2729
2730     case UNOP_QUAL:
2731       *pos += 3;
2732       resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
2733       break;
2734
2735     case OP_ATR_MODULUS:
2736     case OP_ATR_SIZE:
2737     case OP_ATR_TAG:
2738     case OP_ATR_FIRST:
2739     case OP_ATR_LAST:
2740     case OP_ATR_LENGTH:
2741     case OP_ATR_POS:
2742     case OP_ATR_VAL:
2743     case OP_ATR_MIN:
2744     case OP_ATR_MAX:
2745     case TERNOP_IN_RANGE:
2746     case BINOP_IN_BOUNDS:
2747     case UNOP_IN_RANGE:
2748     case OP_AGGREGATE:
2749     case OP_OTHERS:
2750     case OP_CHOICES:
2751     case OP_POSITIONAL:
2752     case OP_DISCRETE_RANGE:
2753     case OP_NAME:
2754       ada_forward_operator_length (exp, pc, &oplen, &nargs);
2755       *pos += oplen;
2756       break;
2757
2758     case BINOP_ASSIGN:
2759       {
2760         struct value *arg1;
2761
2762         *pos += 1;
2763         arg1 = resolve_subexp (expp, pos, 0, NULL);
2764         if (arg1 == NULL)
2765           resolve_subexp (expp, pos, 1, NULL);
2766         else
2767           resolve_subexp (expp, pos, 1, value_type (arg1));
2768         break;
2769       }
2770
2771     case UNOP_CAST:
2772       *pos += 3;
2773       nargs = 1;
2774       break;
2775
2776     case BINOP_ADD:
2777     case BINOP_SUB:
2778     case BINOP_MUL:
2779     case BINOP_DIV:
2780     case BINOP_REM:
2781     case BINOP_MOD:
2782     case BINOP_EXP:
2783     case BINOP_CONCAT:
2784     case BINOP_LOGICAL_AND:
2785     case BINOP_LOGICAL_OR:
2786     case BINOP_BITWISE_AND:
2787     case BINOP_BITWISE_IOR:
2788     case BINOP_BITWISE_XOR:
2789
2790     case BINOP_EQUAL:
2791     case BINOP_NOTEQUAL:
2792     case BINOP_LESS:
2793     case BINOP_GTR:
2794     case BINOP_LEQ:
2795     case BINOP_GEQ:
2796
2797     case BINOP_REPEAT:
2798     case BINOP_SUBSCRIPT:
2799     case BINOP_COMMA:
2800       *pos += 1;
2801       nargs = 2;
2802       break;
2803
2804     case UNOP_NEG:
2805     case UNOP_PLUS:
2806     case UNOP_LOGICAL_NOT:
2807     case UNOP_ABS:
2808     case UNOP_IND:
2809       *pos += 1;
2810       nargs = 1;
2811       break;
2812
2813     case OP_LONG:
2814     case OP_DOUBLE:
2815     case OP_VAR_VALUE:
2816       *pos += 4;
2817       break;
2818
2819     case OP_TYPE:
2820     case OP_BOOL:
2821     case OP_LAST:
2822     case OP_INTERNALVAR:
2823       *pos += 3;
2824       break;
2825
2826     case UNOP_MEMVAL:
2827       *pos += 3;
2828       nargs = 1;
2829       break;
2830
2831     case OP_REGISTER:
2832       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2833       break;
2834
2835     case STRUCTOP_STRUCT:
2836       *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2837       nargs = 1;
2838       break;
2839
2840     case TERNOP_SLICE:
2841       *pos += 1;
2842       nargs = 3;
2843       break;
2844
2845     case OP_STRING:
2846       break;
2847
2848     default:
2849       error (_("Unexpected operator during name resolution"));
2850     }
2851
2852   argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
2853   for (i = 0; i < nargs; i += 1)
2854     argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2855   argvec[i] = NULL;
2856   exp = *expp;
2857
2858   /* Pass two: perform any resolution on principal operator.  */
2859   switch (op)
2860     {
2861     default:
2862       break;
2863
2864     case OP_VAR_VALUE:
2865       if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
2866         {
2867           struct ada_symbol_info *candidates;
2868           int n_candidates;
2869
2870           n_candidates =
2871             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2872                                     (exp->elts[pc + 2].symbol),
2873                                     exp->elts[pc + 1].block, VAR_DOMAIN,
2874                                     &candidates);
2875
2876           if (n_candidates > 1)
2877             {
2878               /* Types tend to get re-introduced locally, so if there
2879                  are any local symbols that are not types, first filter
2880                  out all types.  */
2881               int j;
2882               for (j = 0; j < n_candidates; j += 1)
2883                 switch (SYMBOL_CLASS (candidates[j].sym))
2884                   {
2885                   case LOC_REGISTER:
2886                   case LOC_ARG:
2887                   case LOC_REF_ARG:
2888                   case LOC_REGPARM_ADDR:
2889                   case LOC_LOCAL:
2890                   case LOC_COMPUTED:
2891                     goto FoundNonType;
2892                   default:
2893                     break;
2894                   }
2895             FoundNonType:
2896               if (j < n_candidates)
2897                 {
2898                   j = 0;
2899                   while (j < n_candidates)
2900                     {
2901                       if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
2902                         {
2903                           candidates[j] = candidates[n_candidates - 1];
2904                           n_candidates -= 1;
2905                         }
2906                       else
2907                         j += 1;
2908                     }
2909                 }
2910             }
2911
2912           if (n_candidates == 0)
2913             error (_("No definition found for %s"),
2914                    SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2915           else if (n_candidates == 1)
2916             i = 0;
2917           else if (deprocedure_p
2918                    && !is_nonfunction (candidates, n_candidates))
2919             {
2920               i = ada_resolve_function
2921                 (candidates, n_candidates, NULL, 0,
2922                  SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2923                  context_type);
2924               if (i < 0)
2925                 error (_("Could not find a match for %s"),
2926                        SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2927             }
2928           else
2929             {
2930               printf_filtered (_("Multiple matches for %s\n"),
2931                                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
2932               user_select_syms (candidates, n_candidates, 1);
2933               i = 0;
2934             }
2935
2936           exp->elts[pc + 1].block = candidates[i].block;
2937           exp->elts[pc + 2].symbol = candidates[i].sym;
2938           if (innermost_block == NULL
2939               || contained_in (candidates[i].block, innermost_block))
2940             innermost_block = candidates[i].block;
2941         }
2942
2943       if (deprocedure_p
2944           && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
2945               == TYPE_CODE_FUNC))
2946         {
2947           replace_operator_with_call (expp, pc, 0, 0,
2948                                       exp->elts[pc + 2].symbol,
2949                                       exp->elts[pc + 1].block);
2950           exp = *expp;
2951         }
2952       break;
2953
2954     case OP_FUNCALL:
2955       {
2956         if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
2957             && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2958           {
2959             struct ada_symbol_info *candidates;
2960             int n_candidates;
2961
2962             n_candidates =
2963               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2964                                       (exp->elts[pc + 5].symbol),
2965                                       exp->elts[pc + 4].block, VAR_DOMAIN,
2966                                       &candidates);
2967             if (n_candidates == 1)
2968               i = 0;
2969             else
2970               {
2971                 i = ada_resolve_function
2972                   (candidates, n_candidates,
2973                    argvec, nargs,
2974                    SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2975                    context_type);
2976                 if (i < 0)
2977                   error (_("Could not find a match for %s"),
2978                          SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
2979               }
2980
2981             exp->elts[pc + 4].block = candidates[i].block;
2982             exp->elts[pc + 5].symbol = candidates[i].sym;
2983             if (innermost_block == NULL
2984                 || contained_in (candidates[i].block, innermost_block))
2985               innermost_block = candidates[i].block;
2986           }
2987       }
2988       break;
2989     case BINOP_ADD:
2990     case BINOP_SUB:
2991     case BINOP_MUL:
2992     case BINOP_DIV:
2993     case BINOP_REM:
2994     case BINOP_MOD:
2995     case BINOP_CONCAT:
2996     case BINOP_BITWISE_AND:
2997     case BINOP_BITWISE_IOR:
2998     case BINOP_BITWISE_XOR:
2999     case BINOP_EQUAL:
3000     case BINOP_NOTEQUAL:
3001     case BINOP_LESS:
3002     case BINOP_GTR:
3003     case BINOP_LEQ:
3004     case BINOP_GEQ:
3005     case BINOP_EXP:
3006     case UNOP_NEG:
3007     case UNOP_PLUS:
3008     case UNOP_LOGICAL_NOT:
3009     case UNOP_ABS:
3010       if (possible_user_operator_p (op, argvec))
3011         {
3012           struct ada_symbol_info *candidates;
3013           int n_candidates;
3014
3015           n_candidates =
3016             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3017                                     (struct block *) NULL, VAR_DOMAIN,
3018                                     &candidates);
3019           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
3020                                     ada_decoded_op_name (op), NULL);
3021           if (i < 0)
3022             break;
3023
3024           replace_operator_with_call (expp, pc, nargs, 1,
3025                                       candidates[i].sym, candidates[i].block);
3026           exp = *expp;
3027         }
3028       break;
3029
3030     case OP_TYPE:
3031     case OP_REGISTER:
3032       return NULL;
3033     }
3034
3035   *pos = pc;
3036   return evaluate_subexp_type (exp, pos);
3037 }
3038
3039 /* Return non-zero if formal type FTYPE matches actual type ATYPE.  If
3040    MAY_DEREF is non-zero, the formal may be a pointer and the actual
3041    a non-pointer.  */
3042 /* The term "match" here is rather loose.  The match is heuristic and
3043    liberal.  */
3044
3045 static int
3046 ada_type_match (struct type *ftype, struct type *atype, int may_deref)
3047 {
3048   ftype = ada_check_typedef (ftype);
3049   atype = ada_check_typedef (atype);
3050
3051   if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3052     ftype = TYPE_TARGET_TYPE (ftype);
3053   if (TYPE_CODE (atype) == TYPE_CODE_REF)
3054     atype = TYPE_TARGET_TYPE (atype);
3055
3056   switch (TYPE_CODE (ftype))
3057     {
3058     default:
3059       return TYPE_CODE (ftype) == TYPE_CODE (atype);
3060     case TYPE_CODE_PTR:
3061       if (TYPE_CODE (atype) == TYPE_CODE_PTR)
3062         return ada_type_match (TYPE_TARGET_TYPE (ftype),
3063                                TYPE_TARGET_TYPE (atype), 0);
3064       else
3065         return (may_deref
3066                 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3067     case TYPE_CODE_INT:
3068     case TYPE_CODE_ENUM:
3069     case TYPE_CODE_RANGE:
3070       switch (TYPE_CODE (atype))
3071         {
3072         case TYPE_CODE_INT:
3073         case TYPE_CODE_ENUM:
3074         case TYPE_CODE_RANGE:
3075           return 1;
3076         default:
3077           return 0;
3078         }
3079
3080     case TYPE_CODE_ARRAY:
3081       return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3082               || ada_is_array_descriptor_type (atype));
3083
3084     case TYPE_CODE_STRUCT:
3085       if (ada_is_array_descriptor_type (ftype))
3086         return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3087                 || ada_is_array_descriptor_type (atype));
3088       else
3089         return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3090                 && !ada_is_array_descriptor_type (atype));
3091
3092     case TYPE_CODE_UNION:
3093     case TYPE_CODE_FLT:
3094       return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3095     }
3096 }
3097
3098 /* Return non-zero if the formals of FUNC "sufficiently match" the
3099    vector of actual argument types ACTUALS of size N_ACTUALS.  FUNC
3100    may also be an enumeral, in which case it is treated as a 0-
3101    argument function.  */
3102
3103 static int
3104 ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3105 {
3106   int i;
3107   struct type *func_type = SYMBOL_TYPE (func);
3108
3109   if (SYMBOL_CLASS (func) == LOC_CONST
3110       && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
3111     return (n_actuals == 0);
3112   else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3113     return 0;
3114
3115   if (TYPE_NFIELDS (func_type) != n_actuals)
3116     return 0;
3117
3118   for (i = 0; i < n_actuals; i += 1)
3119     {
3120       if (actuals[i] == NULL)
3121         return 0;
3122       else
3123         {
3124           struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, i));
3125           struct type *atype = ada_check_typedef (value_type (actuals[i]));
3126
3127           if (!ada_type_match (ftype, atype, 1))
3128             return 0;
3129         }
3130     }
3131   return 1;
3132 }
3133
3134 /* False iff function type FUNC_TYPE definitely does not produce a value
3135    compatible with type CONTEXT_TYPE.  Conservatively returns 1 if
3136    FUNC_TYPE is not a valid function type with a non-null return type
3137    or an enumerated type.  A null CONTEXT_TYPE indicates any non-void type.  */
3138
3139 static int
3140 return_match (struct type *func_type, struct type *context_type)
3141 {
3142   struct type *return_type;
3143
3144   if (func_type == NULL)
3145     return 1;
3146
3147   if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3148     return_type = base_type (TYPE_TARGET_TYPE (func_type));
3149   else
3150     return_type = base_type (func_type);
3151   if (return_type == NULL)
3152     return 1;
3153
3154   context_type = base_type (context_type);
3155
3156   if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3157     return context_type == NULL || return_type == context_type;
3158   else if (context_type == NULL)
3159     return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3160   else
3161     return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3162 }
3163
3164
3165 /* Returns the index in SYMS[0..NSYMS-1] that contains  the symbol for the
3166    function (if any) that matches the types of the NARGS arguments in
3167    ARGS.  If CONTEXT_TYPE is non-null and there is at least one match
3168    that returns that type, then eliminate matches that don't.  If
3169    CONTEXT_TYPE is void and there is at least one match that does not
3170    return void, eliminate all matches that do.
3171
3172    Asks the user if there is more than one match remaining.  Returns -1
3173    if there is no such symbol or none is selected.  NAME is used
3174    solely for messages.  May re-arrange and modify SYMS in
3175    the process; the index returned is for the modified vector.  */
3176
3177 static int
3178 ada_resolve_function (struct ada_symbol_info syms[],
3179                       int nsyms, struct value **args, int nargs,
3180                       const char *name, struct type *context_type)
3181 {
3182   int fallback;
3183   int k;
3184   int m;                        /* Number of hits */
3185
3186   m = 0;
3187   /* In the first pass of the loop, we only accept functions matching
3188      context_type.  If none are found, we add a second pass of the loop
3189      where every function is accepted.  */
3190   for (fallback = 0; m == 0 && fallback < 2; fallback++)
3191     {
3192       for (k = 0; k < nsyms; k += 1)
3193         {
3194           struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
3195
3196           if (ada_args_match (syms[k].sym, args, nargs)
3197               && (fallback || return_match (type, context_type)))
3198             {
3199               syms[m] = syms[k];
3200               m += 1;
3201             }
3202         }
3203     }
3204
3205   if (m == 0)
3206     return -1;
3207   else if (m > 1)
3208     {
3209       printf_filtered (_("Multiple matches for %s\n"), name);
3210       user_select_syms (syms, m, 1);
3211       return 0;
3212     }
3213   return 0;
3214 }
3215
3216 /* Returns true (non-zero) iff decoded name N0 should appear before N1
3217    in a listing of choices during disambiguation (see sort_choices, below).
3218    The idea is that overloadings of a subprogram name from the
3219    same package should sort in their source order.  We settle for ordering
3220    such symbols by their trailing number (__N  or $N).  */
3221
3222 static int
3223 encoded_ordered_before (char *N0, char *N1)
3224 {
3225   if (N1 == NULL)
3226     return 0;
3227   else if (N0 == NULL)
3228     return 1;
3229   else
3230     {
3231       int k0, k1;
3232       for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3233         ;
3234       for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3235         ;
3236       if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3237           && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3238         {
3239           int n0, n1;
3240           n0 = k0;
3241           while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3242             n0 -= 1;
3243           n1 = k1;
3244           while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3245             n1 -= 1;
3246           if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3247             return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3248         }
3249       return (strcmp (N0, N1) < 0);
3250     }
3251 }
3252
3253 /* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3254    encoded names.  */
3255
3256 static void
3257 sort_choices (struct ada_symbol_info syms[], int nsyms)
3258 {
3259   int i;
3260   for (i = 1; i < nsyms; i += 1)
3261     {
3262       struct ada_symbol_info sym = syms[i];
3263       int j;
3264
3265       for (j = i - 1; j >= 0; j -= 1)
3266         {
3267           if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3268                                       SYMBOL_LINKAGE_NAME (sym.sym)))
3269             break;
3270           syms[j + 1] = syms[j];
3271         }
3272       syms[j + 1] = sym;
3273     }
3274 }
3275
3276 /* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0 
3277    by asking the user (if necessary), returning the number selected, 
3278    and setting the first elements of SYMS items.  Error if no symbols
3279    selected.  */
3280
3281 /* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3282    to be re-integrated one of these days.  */
3283
3284 int
3285 user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
3286 {
3287   int i;
3288   int *chosen = (int *) alloca (sizeof (int) * nsyms);
3289   int n_chosen;
3290   int first_choice = (max_results == 1) ? 1 : 2;
3291   const char *select_mode = multiple_symbols_select_mode ();
3292
3293   if (max_results < 1)
3294     error (_("Request to select 0 symbols!"));
3295   if (nsyms <= 1)
3296     return nsyms;
3297
3298   if (select_mode == multiple_symbols_cancel)
3299     error (_("\
3300 canceled because the command is ambiguous\n\
3301 See set/show multiple-symbol."));
3302   
3303   /* If select_mode is "all", then return all possible symbols.
3304      Only do that if more than one symbol can be selected, of course.
3305      Otherwise, display the menu as usual.  */
3306   if (select_mode == multiple_symbols_all && max_results > 1)
3307     return nsyms;
3308
3309   printf_unfiltered (_("[0] cancel\n"));
3310   if (max_results > 1)
3311     printf_unfiltered (_("[1] all\n"));
3312
3313   sort_choices (syms, nsyms);
3314
3315   for (i = 0; i < nsyms; i += 1)
3316     {
3317       if (syms[i].sym == NULL)
3318         continue;
3319
3320       if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3321         {
3322           struct symtab_and_line sal =
3323             find_function_start_sal (syms[i].sym, 1);
3324           if (sal.symtab == NULL)
3325             printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3326                                i + first_choice,
3327                                SYMBOL_PRINT_NAME (syms[i].sym),
3328                                sal.line);
3329           else
3330             printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3331                                SYMBOL_PRINT_NAME (syms[i].sym),
3332                                sal.symtab->filename, sal.line);
3333           continue;
3334         }
3335       else
3336         {
3337           int is_enumeral =
3338             (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3339              && SYMBOL_TYPE (syms[i].sym) != NULL
3340              && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
3341           struct symtab *symtab = syms[i].sym->symtab;
3342
3343           if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
3344             printf_unfiltered (_("[%d] %s at %s:%d\n"),
3345                                i + first_choice,
3346                                SYMBOL_PRINT_NAME (syms[i].sym),
3347                                symtab->filename, SYMBOL_LINE (syms[i].sym));
3348           else if (is_enumeral
3349                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
3350             {
3351               printf_unfiltered (("[%d] "), i + first_choice);
3352               ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3353                               gdb_stdout, -1, 0);
3354               printf_unfiltered (_("'(%s) (enumeral)\n"),
3355                                  SYMBOL_PRINT_NAME (syms[i].sym));
3356             }
3357           else if (symtab != NULL)
3358             printf_unfiltered (is_enumeral
3359                                ? _("[%d] %s in %s (enumeral)\n")
3360                                : _("[%d] %s at %s:?\n"),
3361                                i + first_choice,
3362                                SYMBOL_PRINT_NAME (syms[i].sym),
3363                                symtab->filename);
3364           else
3365             printf_unfiltered (is_enumeral
3366                                ? _("[%d] %s (enumeral)\n")
3367                                : _("[%d] %s at ?\n"),
3368                                i + first_choice,
3369                                SYMBOL_PRINT_NAME (syms[i].sym));
3370         }
3371     }
3372
3373   n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3374                              "overload-choice");
3375
3376   for (i = 0; i < n_chosen; i += 1)
3377     syms[i] = syms[chosen[i]];
3378
3379   return n_chosen;
3380 }
3381
3382 /* Read and validate a set of numeric choices from the user in the
3383    range 0 .. N_CHOICES-1.  Place the results in increasing
3384    order in CHOICES[0 .. N-1], and return N.
3385
3386    The user types choices as a sequence of numbers on one line
3387    separated by blanks, encoding them as follows:
3388
3389      + A choice of 0 means to cancel the selection, throwing an error.
3390      + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3391      + The user chooses k by typing k+IS_ALL_CHOICE+1.
3392
3393    The user is not allowed to choose more than MAX_RESULTS values.
3394
3395    ANNOTATION_SUFFIX, if present, is used to annotate the input
3396    prompts (for use with the -f switch).  */
3397
3398 int
3399 get_selections (int *choices, int n_choices, int max_results,
3400                 int is_all_choice, char *annotation_suffix)
3401 {
3402   char *args;
3403   char *prompt;
3404   int n_chosen;
3405   int first_choice = is_all_choice ? 2 : 1;
3406
3407   prompt = getenv ("PS2");
3408   if (prompt == NULL)
3409     prompt = "> ";
3410
3411   args = command_line_input (prompt, 0, annotation_suffix);
3412
3413   if (args == NULL)
3414     error_no_arg (_("one or more choice numbers"));
3415
3416   n_chosen = 0;
3417
3418   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3419      order, as given in args.  Choices are validated.  */
3420   while (1)
3421     {
3422       char *args2;
3423       int choice, j;
3424
3425       while (isspace (*args))
3426         args += 1;
3427       if (*args == '\0' && n_chosen == 0)
3428         error_no_arg (_("one or more choice numbers"));
3429       else if (*args == '\0')
3430         break;
3431
3432       choice = strtol (args, &args2, 10);
3433       if (args == args2 || choice < 0
3434           || choice > n_choices + first_choice - 1)
3435         error (_("Argument must be choice number"));
3436       args = args2;
3437
3438       if (choice == 0)
3439         error (_("cancelled"));
3440
3441       if (choice < first_choice)
3442         {
3443           n_chosen = n_choices;
3444           for (j = 0; j < n_choices; j += 1)
3445             choices[j] = j;
3446           break;
3447         }
3448       choice -= first_choice;
3449
3450       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3451         {
3452         }
3453
3454       if (j < 0 || choice != choices[j])
3455         {
3456           int k;
3457           for (k = n_chosen - 1; k > j; k -= 1)
3458             choices[k + 1] = choices[k];
3459           choices[j + 1] = choice;
3460           n_chosen += 1;
3461         }
3462     }
3463
3464   if (n_chosen > max_results)
3465     error (_("Select no more than %d of the above"), max_results);
3466
3467   return n_chosen;
3468 }
3469
3470 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3471    on the function identified by SYM and BLOCK, and taking NARGS
3472    arguments.  Update *EXPP as needed to hold more space.  */
3473
3474 static void
3475 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3476                             int oplen, struct symbol *sym,
3477                             struct block *block)
3478 {
3479   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3480      symbol, -oplen for operator being replaced).  */
3481   struct expression *newexp = (struct expression *)
3482     xmalloc (sizeof (struct expression)
3483              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3484   struct expression *exp = *expp;
3485
3486   newexp->nelts = exp->nelts + 7 - oplen;
3487   newexp->language_defn = exp->language_defn;
3488   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3489   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3490           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3491
3492   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3493   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3494
3495   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3496   newexp->elts[pc + 4].block = block;
3497   newexp->elts[pc + 5].symbol = sym;
3498
3499   *expp = newexp;
3500   xfree (exp);
3501 }
3502
3503 /* Type-class predicates */
3504
3505 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3506    or FLOAT).  */
3507
3508 static int
3509 numeric_type_p (struct type *type)
3510 {
3511   if (type == NULL)
3512     return 0;
3513   else
3514     {
3515       switch (TYPE_CODE (type))
3516         {
3517         case TYPE_CODE_INT:
3518         case TYPE_CODE_FLT:
3519           return 1;
3520         case TYPE_CODE_RANGE:
3521           return (type == TYPE_TARGET_TYPE (type)
3522                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3523         default:
3524           return 0;
3525         }
3526     }
3527 }
3528
3529 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3530
3531 static int
3532 integer_type_p (struct type *type)
3533 {
3534   if (type == NULL)
3535     return 0;
3536   else
3537     {
3538       switch (TYPE_CODE (type))
3539         {
3540         case TYPE_CODE_INT:
3541           return 1;
3542         case TYPE_CODE_RANGE:
3543           return (type == TYPE_TARGET_TYPE (type)
3544                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3545         default:
3546           return 0;
3547         }
3548     }
3549 }
3550
3551 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3552
3553 static int
3554 scalar_type_p (struct type *type)
3555 {
3556   if (type == NULL)
3557     return 0;
3558   else
3559     {
3560       switch (TYPE_CODE (type))
3561         {
3562         case TYPE_CODE_INT:
3563         case TYPE_CODE_RANGE:
3564         case TYPE_CODE_ENUM:
3565         case TYPE_CODE_FLT:
3566           return 1;
3567         default:
3568           return 0;
3569         }
3570     }
3571 }
3572
3573 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3574
3575 static int
3576 discrete_type_p (struct type *type)
3577 {
3578   if (type == NULL)
3579     return 0;
3580   else
3581     {
3582       switch (TYPE_CODE (type))
3583         {
3584         case TYPE_CODE_INT:
3585         case TYPE_CODE_RANGE:
3586         case TYPE_CODE_ENUM:
3587         case TYPE_CODE_BOOL:
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     1. Introduction:
8392     ----------------
8393
8394     We usually evaluate an Ada expression in order to print its value.
8395     We also evaluate an expression in order to print its type, which
8396     happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
8397     but we'll focus mostly on the EVAL_NORMAL phase.  In practice, the
8398     EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
8399     the evaluation compared to the EVAL_NORMAL, but is otherwise very
8400     similar.
8401
8402     Evaluating expressions is a little more complicated for Ada entities
8403     than it is for entities in languages such as C.  The main reason for
8404     this is that Ada provides types whose definition might be dynamic.
8405     One example of such types is variant records.  Or another example
8406     would be an array whose bounds can only be known at run time.
8407
8408     The following description is a general guide as to what should be
8409     done (and what should NOT be done) in order to evaluate an expression
8410     involving such types, and when.  This does not cover how the semantic
8411     information is encoded by GNAT as this is covered separatly.  For the
8412     document used as the reference for the GNAT encoding, see exp_dbug.ads
8413     in the GNAT sources.
8414
8415     Ideally, we should embed each part of this description next to its
8416     associated code.  Unfortunately, the amount of code is so vast right
8417     now that it's hard to see whether the code handling a particular
8418     situation might be duplicated or not.  One day, when the code is
8419     cleaned up, this guide might become redundant with the comments
8420     inserted in the code, and we might want to remove it.
8421
8422     2. ``Fixing'' an Entity, the Simple Case:
8423     -----------------------------------------
8424
8425     When evaluating Ada expressions, the tricky issue is that they may
8426     reference entities whose type contents and size are not statically
8427     known.  Consider for instance a variant record:
8428
8429        type Rec (Empty : Boolean := True) is record
8430           case Empty is
8431              when True => null;
8432              when False => Value : Integer;
8433           end case;
8434        end record;
8435        Yes : Rec := (Empty => False, Value => 1);
8436        No  : Rec := (empty => True);
8437
8438     The size and contents of that record depends on the value of the
8439     descriminant (Rec.Empty).  At this point, neither the debugging
8440     information nor the associated type structure in GDB are able to
8441     express such dynamic types.  So what the debugger does is to create
8442     "fixed" versions of the type that applies to the specific object.
8443     We also informally refer to this opperation as "fixing" an object,
8444     which means creating its associated fixed type.
8445
8446     Example: when printing the value of variable "Yes" above, its fixed
8447     type would look like this:
8448
8449        type Rec is record
8450           Empty : Boolean;
8451           Value : Integer;
8452        end record;
8453
8454     On the other hand, if we printed the value of "No", its fixed type
8455     would become:
8456
8457        type Rec is record
8458           Empty : Boolean;
8459        end record;
8460
8461     Things become a little more complicated when trying to fix an entity
8462     with a dynamic type that directly contains another dynamic type,
8463     such as an array of variant records, for instance.  There are
8464     two possible cases: Arrays, and records.
8465
8466     3. ``Fixing'' Arrays:
8467     ---------------------
8468
8469     The type structure in GDB describes an array in terms of its bounds,
8470     and the type of its elements.  By design, all elements in the array
8471     have the same type and we cannot represent an array of variant elements
8472     using the current type structure in GDB.  When fixing an array,
8473     we cannot fix the array element, as we would potentially need one
8474     fixed type per element of the array.  As a result, the best we can do
8475     when fixing an array is to produce an array whose bounds and size
8476     are correct (allowing us to read it from memory), but without having
8477     touched its element type.  Fixing each element will be done later,
8478     when (if) necessary.
8479
8480     Arrays are a little simpler to handle than records, because the same
8481     amount of memory is allocated for each element of the array, even if
8482     the amount of space actually used by each element differs from element
8483     to element.  Consider for instance the following array of type Rec:
8484
8485        type Rec_Array is array (1 .. 2) of Rec;
8486
8487     The actual amount of memory occupied by each element might be different
8488     from element to element, depending on the value of their discriminant.
8489     But the amount of space reserved for each element in the array remains
8490     fixed regardless.  So we simply need to compute that size using
8491     the debugging information available, from which we can then determine
8492     the array size (we multiply the number of elements of the array by
8493     the size of each element).
8494
8495     The simplest case is when we have an array of a constrained element
8496     type. For instance, consider the following type declarations:
8497
8498         type Bounded_String (Max_Size : Integer) is
8499            Length : Integer;
8500            Buffer : String (1 .. Max_Size);
8501         end record;
8502         type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
8503
8504     In this case, the compiler describes the array as an array of
8505     variable-size elements (identified by its XVS suffix) for which
8506     the size can be read in the parallel XVZ variable.
8507
8508     In the case of an array of an unconstrained element type, the compiler
8509     wraps the array element inside a private PAD type.  This type should not
8510     be shown to the user, and must be "unwrap"'ed before printing.  Note
8511     that we also use the adjective "aligner" in our code to designate
8512     these wrapper types.
8513
8514     In some cases, the size allocated for each element is statically
8515     known.  In that case, the PAD type already has the correct size,
8516     and the array element should remain unfixed.
8517
8518     But there are cases when this size is not statically known.
8519     For instance, assuming that "Five" is an integer variable:
8520
8521         type Dynamic is array (1 .. Five) of Integer;
8522         type Wrapper (Has_Length : Boolean := False) is record
8523            Data : Dynamic;
8524            case Has_Length is
8525               when True => Length : Integer;
8526               when False => null;
8527            end case;
8528         end record;
8529         type Wrapper_Array is array (1 .. 2) of Wrapper;
8530
8531         Hello : Wrapper_Array := (others => (Has_Length => True,
8532                                              Data => (others => 17),
8533                                              Length => 1));
8534
8535
8536     The debugging info would describe variable Hello as being an
8537     array of a PAD type.  The size of that PAD type is not statically
8538     known, but can be determined using a parallel XVZ variable.
8539     In that case, a copy of the PAD type with the correct size should
8540     be used for the fixed array.
8541
8542     3. ``Fixing'' record type objects:
8543     ----------------------------------
8544
8545     Things are slightly different from arrays in the case of dynamic
8546     record types.  In this case, in order to compute the associated
8547     fixed type, we need to determine the size and offset of each of
8548     its components.  This, in turn, requires us to compute the fixed
8549     type of each of these components.
8550
8551     Consider for instance the example:
8552
8553         type Bounded_String (Max_Size : Natural) is record
8554            Str : String (1 .. Max_Size);
8555            Length : Natural;
8556         end record;
8557         My_String : Bounded_String (Max_Size => 10);
8558
8559     In that case, the position of field "Length" depends on the size
8560     of field Str, which itself depends on the value of the Max_Size
8561     discriminant.  In order to fix the type of variable My_String,
8562     we need to fix the type of field Str.  Therefore, fixing a variant
8563     record requires us to fix each of its components.
8564
8565     However, if a component does not have a dynamic size, the component
8566     should not be fixed.  In particular, fields that use a PAD type
8567     should not fixed.  Here is an example where this might happen
8568     (assuming type Rec above):
8569
8570        type Container (Big : Boolean) is record
8571           First : Rec;
8572           After : Integer;
8573           case Big is
8574              when True => Another : Integer;
8575              when False => null;
8576           end case;
8577        end record;
8578        My_Container : Container := (Big => False,
8579                                     First => (Empty => True),
8580                                     After => 42);
8581
8582     In that example, the compiler creates a PAD type for component First,
8583     whose size is constant, and then positions the component After just
8584     right after it.  The offset of component After is therefore constant
8585     in this case.
8586
8587     The debugger computes the position of each field based on an algorithm
8588     that uses, among other things, the actual position and size of the field
8589     preceding it.  Let's now imagine that the user is trying to print
8590     the value of My_Container.  If the type fixing was recursive, we would
8591     end up computing the offset of field After based on the size of the
8592     fixed version of field First.  And since in our example First has
8593     only one actual field, the size of the fixed type is actually smaller
8594     than the amount of space allocated to that field, and thus we would
8595     compute the wrong offset of field After.
8596
8597     To make things more complicated, we need to watch out for dynamic
8598     components of variant records (identified by the ___XVL suffix in
8599     the component name).  Even if the target type is a PAD type, the size
8600     of that type might not be statically known.  So the PAD type needs
8601     to be unwrapped and the resulting type needs to be fixed.  Otherwise,
8602     we might end up with the wrong size for our component.  This can be
8603     observed with the following type declarations:
8604
8605         type Octal is new Integer range 0 .. 7;
8606         type Octal_Array is array (Positive range <>) of Octal;
8607         pragma Pack (Octal_Array);
8608
8609         type Octal_Buffer (Size : Positive) is record
8610            Buffer : Octal_Array (1 .. Size);
8611            Length : Integer;
8612         end record;
8613
8614     In that case, Buffer is a PAD type whose size is unset and needs
8615     to be computed by fixing the unwrapped type.
8616
8617     4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
8618     ----------------------------------------------------------
8619
8620     Lastly, when should the sub-elements of an entity that remained unfixed
8621     thus far, be actually fixed?
8622
8623     The answer is: Only when referencing that element.  For instance
8624     when selecting one component of a record, this specific component
8625     should be fixed at that point in time.  Or when printing the value
8626     of a record, each component should be fixed before its value gets
8627     printed.  Similarly for arrays, the element of the array should be
8628     fixed when printing each element of the array, or when extracting
8629     one element out of that array.  On the other hand, fixing should
8630     not be performed on the elements when taking a slice of an array!
8631
8632     Note that one of the side-effects of miscomputing the offset and
8633     size of each field is that we end up also miscomputing the size
8634     of the containing type.  This can have adverse results when computing
8635     the value of an entity.  GDB fetches the value of an entity based
8636     on the size of its type, and thus a wrong size causes GDB to fetch
8637     the wrong amount of memory.  In the case where the computed size is
8638     too small, GDB fetches too little data to print the value of our
8639     entiry.  Results in this case as unpredicatble, as we usually read
8640     past the buffer containing the data =:-o.  */
8641
8642 /* Implement the evaluate_exp routine in the exp_descriptor structure
8643    for the Ada language.  */
8644
8645 static struct value *
8646 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8647                      int *pos, enum noside noside)
8648 {
8649   enum exp_opcode op;
8650   int tem, tem2, tem3;
8651   int pc;
8652   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8653   struct type *type;
8654   int nargs, oplen;
8655   struct value **argvec;
8656
8657   pc = *pos;
8658   *pos += 1;
8659   op = exp->elts[pc].opcode;
8660
8661   switch (op)
8662     {
8663     default:
8664       *pos -= 1;
8665       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8666       arg1 = unwrap_value (arg1);
8667
8668       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8669          then we need to perform the conversion manually, because
8670          evaluate_subexp_standard doesn't do it.  This conversion is
8671          necessary in Ada because the different kinds of float/fixed
8672          types in Ada have different representations.
8673
8674          Similarly, we need to perform the conversion from OP_LONG
8675          ourselves.  */
8676       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8677         arg1 = ada_value_cast (expect_type, arg1, noside);
8678
8679       return arg1;
8680
8681     case OP_STRING:
8682       {
8683         struct value *result;
8684         *pos -= 1;
8685         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8686         /* The result type will have code OP_STRING, bashed there from 
8687            OP_ARRAY.  Bash it back.  */
8688         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8689           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8690         return result;
8691       }
8692
8693     case UNOP_CAST:
8694       (*pos) += 2;
8695       type = exp->elts[pc + 1].type;
8696       arg1 = evaluate_subexp (type, exp, pos, noside);
8697       if (noside == EVAL_SKIP)
8698         goto nosideret;
8699       arg1 = ada_value_cast (type, arg1, noside);
8700       return arg1;
8701
8702     case UNOP_QUAL:
8703       (*pos) += 2;
8704       type = exp->elts[pc + 1].type;
8705       return ada_evaluate_subexp (type, exp, pos, noside);
8706
8707     case BINOP_ASSIGN:
8708       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8709       if (exp->elts[*pos].opcode == OP_AGGREGATE)
8710         {
8711           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8712           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8713             return arg1;
8714           return ada_value_assign (arg1, arg1);
8715         }
8716       /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8717          except if the lhs of our assignment is a convenience variable.
8718          In the case of assigning to a convenience variable, the lhs
8719          should be exactly the result of the evaluation of the rhs.  */
8720       type = value_type (arg1);
8721       if (VALUE_LVAL (arg1) == lval_internalvar)
8722          type = NULL;
8723       arg2 = evaluate_subexp (type, exp, pos, noside);
8724       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8725         return arg1;
8726       if (ada_is_fixed_point_type (value_type (arg1)))
8727         arg2 = cast_to_fixed (value_type (arg1), arg2);
8728       else if (ada_is_fixed_point_type (value_type (arg2)))
8729         error
8730           (_("Fixed-point values must be assigned to fixed-point variables"));
8731       else
8732         arg2 = coerce_for_assign (value_type (arg1), arg2);
8733       return ada_value_assign (arg1, arg2);
8734
8735     case BINOP_ADD:
8736       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8737       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8738       if (noside == EVAL_SKIP)
8739         goto nosideret;
8740       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8741         return (value_from_longest
8742                  (value_type (arg1),
8743                   value_as_long (arg1) + value_as_long (arg2)));
8744       if ((ada_is_fixed_point_type (value_type (arg1))
8745            || ada_is_fixed_point_type (value_type (arg2)))
8746           && value_type (arg1) != value_type (arg2))
8747         error (_("Operands of fixed-point addition must have the same type"));
8748       /* Do the addition, and cast the result to the type of the first
8749          argument.  We cannot cast the result to a reference type, so if
8750          ARG1 is a reference type, find its underlying type.  */
8751       type = value_type (arg1);
8752       while (TYPE_CODE (type) == TYPE_CODE_REF)
8753         type = TYPE_TARGET_TYPE (type);
8754       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8755       return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
8756
8757     case BINOP_SUB:
8758       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8759       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8760       if (noside == EVAL_SKIP)
8761         goto nosideret;
8762       if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8763         return (value_from_longest
8764                  (value_type (arg1),
8765                   value_as_long (arg1) - value_as_long (arg2)));
8766       if ((ada_is_fixed_point_type (value_type (arg1))
8767            || ada_is_fixed_point_type (value_type (arg2)))
8768           && value_type (arg1) != value_type (arg2))
8769         error (_("Operands of fixed-point subtraction must have the same type"));
8770       /* Do the substraction, and cast the result to the type of the first
8771          argument.  We cannot cast the result to a reference type, so if
8772          ARG1 is a reference type, find its underlying type.  */
8773       type = value_type (arg1);
8774       while (TYPE_CODE (type) == TYPE_CODE_REF)
8775         type = TYPE_TARGET_TYPE (type);
8776       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8777       return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
8778
8779     case BINOP_MUL:
8780     case BINOP_DIV:
8781     case BINOP_REM:
8782     case BINOP_MOD:
8783       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8784       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8785       if (noside == EVAL_SKIP)
8786         goto nosideret;
8787       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8788         {
8789           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8790           return value_zero (value_type (arg1), not_lval);
8791         }
8792       else
8793         {
8794           type = builtin_type (exp->gdbarch)->builtin_double;
8795           if (ada_is_fixed_point_type (value_type (arg1)))
8796             arg1 = cast_from_fixed (type, arg1);
8797           if (ada_is_fixed_point_type (value_type (arg2)))
8798             arg2 = cast_from_fixed (type, arg2);
8799           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8800           return ada_value_binop (arg1, arg2, op);
8801         }
8802
8803     case BINOP_EQUAL:
8804     case BINOP_NOTEQUAL:
8805       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8806       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8807       if (noside == EVAL_SKIP)
8808         goto nosideret;
8809       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8810         tem = 0;
8811       else
8812         {
8813           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8814           tem = ada_value_equal (arg1, arg2);
8815         }
8816       if (op == BINOP_NOTEQUAL)
8817         tem = !tem;
8818       type = language_bool_type (exp->language_defn, exp->gdbarch);
8819       return value_from_longest (type, (LONGEST) tem);
8820
8821     case UNOP_NEG:
8822       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8823       if (noside == EVAL_SKIP)
8824         goto nosideret;
8825       else if (ada_is_fixed_point_type (value_type (arg1)))
8826         return value_cast (value_type (arg1), value_neg (arg1));
8827       else
8828         {
8829           unop_promote (exp->language_defn, exp->gdbarch, &arg1);
8830           return value_neg (arg1);
8831         }
8832
8833     case BINOP_LOGICAL_AND:
8834     case BINOP_LOGICAL_OR:
8835     case UNOP_LOGICAL_NOT:
8836       {
8837         struct value *val;
8838
8839         *pos -= 1;
8840         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8841         type = language_bool_type (exp->language_defn, exp->gdbarch);
8842         return value_cast (type, val);
8843       }
8844
8845     case BINOP_BITWISE_AND:
8846     case BINOP_BITWISE_IOR:
8847     case BINOP_BITWISE_XOR:
8848       {
8849         struct value *val;
8850
8851         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8852         *pos = pc;
8853         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8854
8855         return value_cast (value_type (arg1), val);
8856       }
8857
8858     case OP_VAR_VALUE:
8859       *pos -= 1;
8860
8861       if (noside == EVAL_SKIP)
8862         {
8863           *pos += 4;
8864           goto nosideret;
8865         }
8866       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8867         /* Only encountered when an unresolved symbol occurs in a
8868            context other than a function call, in which case, it is
8869            invalid.  */
8870         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8871                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8872       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8873         {
8874           type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
8875           if (ada_is_tagged_type (type, 0))
8876           {
8877             /* Tagged types are a little special in the fact that the real
8878                type is dynamic and can only be determined by inspecting the
8879                object's tag.  This means that we need to get the object's
8880                value first (EVAL_NORMAL) and then extract the actual object
8881                type from its tag.
8882
8883                Note that we cannot skip the final step where we extract
8884                the object type from its tag, because the EVAL_NORMAL phase
8885                results in dynamic components being resolved into fixed ones.
8886                This can cause problems when trying to print the type
8887                description of tagged types whose parent has a dynamic size:
8888                We use the type name of the "_parent" component in order
8889                to print the name of the ancestor type in the type description.
8890                If that component had a dynamic size, the resolution into
8891                a fixed type would result in the loss of that type name,
8892                thus preventing us from printing the name of the ancestor
8893                type in the type description.  */
8894             struct type *actual_type;
8895
8896             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
8897             actual_type = type_from_tag (ada_value_tag (arg1));
8898             if (actual_type == NULL)
8899               /* If, for some reason, we were unable to determine
8900                  the actual type from the tag, then use the static
8901                  approximation that we just computed as a fallback.
8902                  This can happen if the debugging information is
8903                  incomplete, for instance.  */
8904               actual_type = type;
8905
8906             return value_zero (actual_type, not_lval);
8907           }
8908
8909           *pos += 4;
8910           return value_zero
8911             (to_static_fixed_type
8912              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8913              not_lval);
8914         }
8915       else
8916         {
8917           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8918           arg1 = unwrap_value (arg1);
8919           return ada_to_fixed_value (arg1);
8920         }
8921
8922     case OP_FUNCALL:
8923       (*pos) += 2;
8924
8925       /* Allocate arg vector, including space for the function to be
8926          called in argvec[0] and a terminating NULL.  */
8927       nargs = longest_to_int (exp->elts[pc + 1].longconst);
8928       argvec =
8929         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8930
8931       if (exp->elts[*pos].opcode == OP_VAR_VALUE
8932           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8933         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8934                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8935       else
8936         {
8937           for (tem = 0; tem <= nargs; tem += 1)
8938             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8939           argvec[tem] = 0;
8940
8941           if (noside == EVAL_SKIP)
8942             goto nosideret;
8943         }
8944
8945       if (ada_is_constrained_packed_array_type
8946           (desc_base_type (value_type (argvec[0]))))
8947         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8948       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8949                && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
8950         /* This is a packed array that has already been fixed, and
8951            therefore already coerced to a simple array.  Nothing further
8952            to do.  */
8953         ;
8954       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8955                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8956                    && VALUE_LVAL (argvec[0]) == lval_memory))
8957         argvec[0] = value_addr (argvec[0]);
8958
8959       type = ada_check_typedef (value_type (argvec[0]));
8960       if (TYPE_CODE (type) == TYPE_CODE_PTR)
8961         {
8962           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8963             {
8964             case TYPE_CODE_FUNC:
8965               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8966               break;
8967             case TYPE_CODE_ARRAY:
8968               break;
8969             case TYPE_CODE_STRUCT:
8970               if (noside != EVAL_AVOID_SIDE_EFFECTS)
8971                 argvec[0] = ada_value_ind (argvec[0]);
8972               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8973               break;
8974             default:
8975               error (_("cannot subscript or call something of type `%s'"),
8976                      ada_type_name (value_type (argvec[0])));
8977               break;
8978             }
8979         }
8980
8981       switch (TYPE_CODE (type))
8982         {
8983         case TYPE_CODE_FUNC:
8984           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8985             return allocate_value (TYPE_TARGET_TYPE (type));
8986           return call_function_by_hand (argvec[0], nargs, argvec + 1);
8987         case TYPE_CODE_STRUCT:
8988           {
8989             int arity;
8990
8991             arity = ada_array_arity (type);
8992             type = ada_array_element_type (type, nargs);
8993             if (type == NULL)
8994               error (_("cannot subscript or call a record"));
8995             if (arity != nargs)
8996               error (_("wrong number of subscripts; expecting %d"), arity);
8997             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8998               return value_zero (ada_aligned_type (type), lval_memory);
8999             return
9000               unwrap_value (ada_value_subscript
9001                             (argvec[0], nargs, argvec + 1));
9002           }
9003         case TYPE_CODE_ARRAY:
9004           if (noside == EVAL_AVOID_SIDE_EFFECTS)
9005             {
9006               type = ada_array_element_type (type, nargs);
9007               if (type == NULL)
9008                 error (_("element type of array unknown"));
9009               else
9010                 return value_zero (ada_aligned_type (type), lval_memory);
9011             }
9012           return
9013             unwrap_value (ada_value_subscript
9014                           (ada_coerce_to_simple_array (argvec[0]),
9015                            nargs, argvec + 1));
9016         case TYPE_CODE_PTR:     /* Pointer to array */
9017           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
9018           if (noside == EVAL_AVOID_SIDE_EFFECTS)
9019             {
9020               type = ada_array_element_type (type, nargs);
9021               if (type == NULL)
9022                 error (_("element type of array unknown"));
9023               else
9024                 return value_zero (ada_aligned_type (type), lval_memory);
9025             }
9026           return
9027             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
9028                                                    nargs, argvec + 1));
9029
9030         default:
9031           error (_("Attempt to index or call something other than an "
9032                    "array or function"));
9033         }
9034
9035     case TERNOP_SLICE:
9036       {
9037         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9038         struct value *low_bound_val =
9039           evaluate_subexp (NULL_TYPE, exp, pos, noside);
9040         struct value *high_bound_val =
9041           evaluate_subexp (NULL_TYPE, exp, pos, noside);
9042         LONGEST low_bound;
9043         LONGEST high_bound;
9044         low_bound_val = coerce_ref (low_bound_val);
9045         high_bound_val = coerce_ref (high_bound_val);
9046         low_bound = pos_atr (low_bound_val);
9047         high_bound = pos_atr (high_bound_val);
9048
9049         if (noside == EVAL_SKIP)
9050           goto nosideret;
9051
9052         /* If this is a reference to an aligner type, then remove all
9053            the aligners.  */
9054         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9055             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
9056           TYPE_TARGET_TYPE (value_type (array)) =
9057             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
9058
9059         if (ada_is_constrained_packed_array_type (value_type (array)))
9060           error (_("cannot slice a packed array"));
9061
9062         /* If this is a reference to an array or an array lvalue,
9063            convert to a pointer.  */
9064         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9065             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
9066                 && VALUE_LVAL (array) == lval_memory))
9067           array = value_addr (array);
9068
9069         if (noside == EVAL_AVOID_SIDE_EFFECTS
9070             && ada_is_array_descriptor_type (ada_check_typedef
9071                                              (value_type (array))))
9072           return empty_array (ada_type_of_array (array, 0), low_bound);
9073
9074         array = ada_coerce_to_simple_array_ptr (array);
9075
9076         /* If we have more than one level of pointer indirection,
9077            dereference the value until we get only one level.  */
9078         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9079                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
9080                      == TYPE_CODE_PTR))
9081           array = value_ind (array);
9082
9083         /* Make sure we really do have an array type before going further,
9084            to avoid a SEGV when trying to get the index type or the target
9085            type later down the road if the debug info generated by
9086            the compiler is incorrect or incomplete.  */
9087         if (!ada_is_simple_array_type (value_type (array)))
9088           error (_("cannot take slice of non-array"));
9089
9090         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
9091           {
9092             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
9093               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
9094                                   low_bound);
9095             else
9096               {
9097                 struct type *arr_type0 =
9098                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
9099                                        NULL, 1);
9100                 return ada_value_slice_from_ptr (array, arr_type0,
9101                                                  longest_to_int (low_bound),
9102                                                  longest_to_int (high_bound));
9103               }
9104           }
9105         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9106           return array;
9107         else if (high_bound < low_bound)
9108           return empty_array (value_type (array), low_bound);
9109         else
9110           return ada_value_slice (array, longest_to_int (low_bound),
9111                                   longest_to_int (high_bound));
9112       }
9113
9114     case UNOP_IN_RANGE:
9115       (*pos) += 2;
9116       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9117       type = check_typedef (exp->elts[pc + 1].type);
9118
9119       if (noside == EVAL_SKIP)
9120         goto nosideret;
9121
9122       switch (TYPE_CODE (type))
9123         {
9124         default:
9125           lim_warning (_("Membership test incompletely implemented; "
9126                          "always returns true"));
9127           type = language_bool_type (exp->language_defn, exp->gdbarch);
9128           return value_from_longest (type, (LONGEST) 1);
9129
9130         case TYPE_CODE_RANGE:
9131           arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9132           arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
9133           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9134           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9135           type = language_bool_type (exp->language_defn, exp->gdbarch);
9136           return
9137             value_from_longest (type,
9138                                 (value_less (arg1, arg3)
9139                                  || value_equal (arg1, arg3))
9140                                 && (value_less (arg2, arg1)
9141                                     || value_equal (arg2, arg1)));
9142         }
9143
9144     case BINOP_IN_BOUNDS:
9145       (*pos) += 2;
9146       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9147       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9148
9149       if (noside == EVAL_SKIP)
9150         goto nosideret;
9151
9152       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9153         {
9154           type = language_bool_type (exp->language_defn, exp->gdbarch);
9155           return value_zero (type, not_lval);
9156         }
9157
9158       tem = longest_to_int (exp->elts[pc + 1].longconst);
9159
9160       type = ada_index_type (value_type (arg2), tem, "range");
9161       if (!type)
9162         type = value_type (arg1);
9163
9164       arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9165       arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
9166
9167       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9168       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9169       type = language_bool_type (exp->language_defn, exp->gdbarch);
9170       return
9171         value_from_longest (type,
9172                             (value_less (arg1, arg3)
9173                              || value_equal (arg1, arg3))
9174                             && (value_less (arg2, arg1)
9175                                 || value_equal (arg2, arg1)));
9176
9177     case TERNOP_IN_RANGE:
9178       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9179       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9180       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9181
9182       if (noside == EVAL_SKIP)
9183         goto nosideret;
9184
9185       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9186       binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9187       type = language_bool_type (exp->language_defn, exp->gdbarch);
9188       return
9189         value_from_longest (type,
9190                             (value_less (arg1, arg3)
9191                              || value_equal (arg1, arg3))
9192                             && (value_less (arg2, arg1)
9193                                 || value_equal (arg2, arg1)));
9194
9195     case OP_ATR_FIRST:
9196     case OP_ATR_LAST:
9197     case OP_ATR_LENGTH:
9198       {
9199         struct type *type_arg;
9200         if (exp->elts[*pos].opcode == OP_TYPE)
9201           {
9202             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9203             arg1 = NULL;
9204             type_arg = check_typedef (exp->elts[pc + 2].type);
9205           }
9206         else
9207           {
9208             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9209             type_arg = NULL;
9210           }
9211
9212         if (exp->elts[*pos].opcode != OP_LONG)
9213           error (_("Invalid operand to '%s"), ada_attribute_name (op));
9214         tem = longest_to_int (exp->elts[*pos + 2].longconst);
9215         *pos += 4;
9216
9217         if (noside == EVAL_SKIP)
9218           goto nosideret;
9219
9220         if (type_arg == NULL)
9221           {
9222             arg1 = ada_coerce_ref (arg1);
9223
9224             if (ada_is_constrained_packed_array_type (value_type (arg1)))
9225               arg1 = ada_coerce_to_simple_array (arg1);
9226
9227             type = ada_index_type (value_type (arg1), tem,
9228                                    ada_attribute_name (op));
9229             if (type == NULL)
9230               type = builtin_type (exp->gdbarch)->builtin_int;
9231
9232             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9233               return allocate_value (type);
9234
9235             switch (op)
9236               {
9237               default:          /* Should never happen.  */
9238                 error (_("unexpected attribute encountered"));
9239               case OP_ATR_FIRST:
9240                 return value_from_longest
9241                         (type, ada_array_bound (arg1, tem, 0));
9242               case OP_ATR_LAST:
9243                 return value_from_longest
9244                         (type, ada_array_bound (arg1, tem, 1));
9245               case OP_ATR_LENGTH:
9246                 return value_from_longest
9247                         (type, ada_array_length (arg1, tem));
9248               }
9249           }
9250         else if (discrete_type_p (type_arg))
9251           {
9252             struct type *range_type;
9253             char *name = ada_type_name (type_arg);
9254             range_type = NULL;
9255             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9256               range_type = to_fixed_range_type (name, NULL, type_arg);
9257             if (range_type == NULL)
9258               range_type = type_arg;
9259             switch (op)
9260               {
9261               default:
9262                 error (_("unexpected attribute encountered"));
9263               case OP_ATR_FIRST:
9264                 return value_from_longest 
9265                   (range_type, discrete_type_low_bound (range_type));
9266               case OP_ATR_LAST:
9267                 return value_from_longest
9268                   (range_type, discrete_type_high_bound (range_type));
9269               case OP_ATR_LENGTH:
9270                 error (_("the 'length attribute applies only to array types"));
9271               }
9272           }
9273         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9274           error (_("unimplemented type attribute"));
9275         else
9276           {
9277             LONGEST low, high;
9278
9279             if (ada_is_constrained_packed_array_type (type_arg))
9280               type_arg = decode_constrained_packed_array_type (type_arg);
9281
9282             type = ada_index_type (type_arg, tem, ada_attribute_name (op));
9283             if (type == NULL)
9284               type = builtin_type (exp->gdbarch)->builtin_int;
9285
9286             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9287               return allocate_value (type);
9288
9289             switch (op)
9290               {
9291               default:
9292                 error (_("unexpected attribute encountered"));
9293               case OP_ATR_FIRST:
9294                 low = ada_array_bound_from_type (type_arg, tem, 0);
9295                 return value_from_longest (type, low);
9296               case OP_ATR_LAST:
9297                 high = ada_array_bound_from_type (type_arg, tem, 1);
9298                 return value_from_longest (type, high);
9299               case OP_ATR_LENGTH:
9300                 low = ada_array_bound_from_type (type_arg, tem, 0);
9301                 high = ada_array_bound_from_type (type_arg, tem, 1);
9302                 return value_from_longest (type, high - low + 1);
9303               }
9304           }
9305       }
9306
9307     case OP_ATR_TAG:
9308       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9309       if (noside == EVAL_SKIP)
9310         goto nosideret;
9311
9312       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9313         return value_zero (ada_tag_type (arg1), not_lval);
9314
9315       return ada_value_tag (arg1);
9316
9317     case OP_ATR_MIN:
9318     case OP_ATR_MAX:
9319       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9320       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9321       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9322       if (noside == EVAL_SKIP)
9323         goto nosideret;
9324       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9325         return value_zero (value_type (arg1), not_lval);
9326       else
9327         {
9328           binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9329           return value_binop (arg1, arg2,
9330                               op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9331         }
9332
9333     case OP_ATR_MODULUS:
9334       {
9335         struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
9336         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9337
9338         if (noside == EVAL_SKIP)
9339           goto nosideret;
9340
9341         if (!ada_is_modular_type (type_arg))
9342           error (_("'modulus must be applied to modular type"));
9343
9344         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9345                                    ada_modulus (type_arg));
9346       }
9347
9348
9349     case OP_ATR_POS:
9350       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9351       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9352       if (noside == EVAL_SKIP)
9353         goto nosideret;
9354       type = builtin_type (exp->gdbarch)->builtin_int;
9355       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9356         return value_zero (type, not_lval);
9357       else
9358         return value_pos_atr (type, arg1);
9359
9360     case OP_ATR_SIZE:
9361       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9362       type = value_type (arg1);
9363
9364       /* If the argument is a reference, then dereference its type, since
9365          the user is really asking for the size of the actual object,
9366          not the size of the pointer.  */
9367       if (TYPE_CODE (type) == TYPE_CODE_REF)
9368         type = TYPE_TARGET_TYPE (type);
9369
9370       if (noside == EVAL_SKIP)
9371         goto nosideret;
9372       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9373         return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
9374       else
9375         return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
9376                                    TARGET_CHAR_BIT * TYPE_LENGTH (type));
9377
9378     case OP_ATR_VAL:
9379       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9380       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9381       type = exp->elts[pc + 2].type;
9382       if (noside == EVAL_SKIP)
9383         goto nosideret;
9384       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9385         return value_zero (type, not_lval);
9386       else
9387         return value_val_atr (type, arg1);
9388
9389     case BINOP_EXP:
9390       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9391       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9392       if (noside == EVAL_SKIP)
9393         goto nosideret;
9394       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9395         return value_zero (value_type (arg1), not_lval);
9396       else
9397         {
9398           /* For integer exponentiation operations,
9399              only promote the first argument.  */
9400           if (is_integral_type (value_type (arg2)))
9401             unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9402           else
9403             binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9404
9405           return value_binop (arg1, arg2, op);
9406         }
9407
9408     case UNOP_PLUS:
9409       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9410       if (noside == EVAL_SKIP)
9411         goto nosideret;
9412       else
9413         return arg1;
9414
9415     case UNOP_ABS:
9416       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9417       if (noside == EVAL_SKIP)
9418         goto nosideret;
9419       unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9420       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9421         return value_neg (arg1);
9422       else
9423         return arg1;
9424
9425     case UNOP_IND:
9426       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9427       if (noside == EVAL_SKIP)
9428         goto nosideret;
9429       type = ada_check_typedef (value_type (arg1));
9430       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9431         {
9432           if (ada_is_array_descriptor_type (type))
9433             /* GDB allows dereferencing GNAT array descriptors.  */
9434             {
9435               struct type *arrType = ada_type_of_array (arg1, 0);
9436               if (arrType == NULL)
9437                 error (_("Attempt to dereference null array pointer."));
9438               return value_at_lazy (arrType, 0);
9439             }
9440           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9441                    || TYPE_CODE (type) == TYPE_CODE_REF
9442                    /* In C you can dereference an array to get the 1st elt.  */
9443                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9444             {
9445               type = to_static_fixed_type
9446                 (ada_aligned_type
9447                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9448               check_size (type);
9449               return value_zero (type, lval_memory);
9450             }
9451           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9452             {
9453               /* GDB allows dereferencing an int.  */
9454               if (expect_type == NULL)
9455                 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9456                                    lval_memory);
9457               else
9458                 {
9459                   expect_type = 
9460                     to_static_fixed_type (ada_aligned_type (expect_type));
9461                   return value_zero (expect_type, lval_memory);
9462                 }
9463             }
9464           else
9465             error (_("Attempt to take contents of a non-pointer value."));
9466         }
9467       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9468       type = ada_check_typedef (value_type (arg1));
9469
9470       if (TYPE_CODE (type) == TYPE_CODE_INT)
9471           /* GDB allows dereferencing an int.  If we were given
9472              the expect_type, then use that as the target type.
9473              Otherwise, assume that the target type is an int.  */
9474         {
9475           if (expect_type != NULL)
9476             return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9477                                               arg1));
9478           else
9479             return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9480                                   (CORE_ADDR) value_as_address (arg1));
9481         }
9482
9483       if (ada_is_array_descriptor_type (type))
9484         /* GDB allows dereferencing GNAT array descriptors.  */
9485         return ada_coerce_to_simple_array (arg1);
9486       else
9487         return ada_value_ind (arg1);
9488
9489     case STRUCTOP_STRUCT:
9490       tem = longest_to_int (exp->elts[pc + 1].longconst);
9491       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9492       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9493       if (noside == EVAL_SKIP)
9494         goto nosideret;
9495       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9496         {
9497           struct type *type1 = value_type (arg1);
9498           if (ada_is_tagged_type (type1, 1))
9499             {
9500               type = ada_lookup_struct_elt_type (type1,
9501                                                  &exp->elts[pc + 2].string,
9502                                                  1, 1, NULL);
9503               if (type == NULL)
9504                 /* In this case, we assume that the field COULD exist
9505                    in some extension of the type.  Return an object of 
9506                    "type" void, which will match any formal 
9507                    (see ada_type_match). */
9508                 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
9509                                    lval_memory);
9510             }
9511           else
9512             type =
9513               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9514                                           0, NULL);
9515
9516           return value_zero (ada_aligned_type (type), lval_memory);
9517         }
9518       else
9519         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9520         arg1 = unwrap_value (arg1);
9521         return ada_to_fixed_value (arg1);
9522
9523     case OP_TYPE:
9524       /* The value is not supposed to be used.  This is here to make it
9525          easier to accommodate expressions that contain types.  */
9526       (*pos) += 2;
9527       if (noside == EVAL_SKIP)
9528         goto nosideret;
9529       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9530         return allocate_value (exp->elts[pc + 1].type);
9531       else
9532         error (_("Attempt to use a type name as an expression"));
9533
9534     case OP_AGGREGATE:
9535     case OP_CHOICES:
9536     case OP_OTHERS:
9537     case OP_DISCRETE_RANGE:
9538     case OP_POSITIONAL:
9539     case OP_NAME:
9540       if (noside == EVAL_NORMAL)
9541         switch (op) 
9542           {
9543           case OP_NAME:
9544             error (_("Undefined name, ambiguous name, or renaming used in "
9545                      "component association: %s."), &exp->elts[pc+2].string);
9546           case OP_AGGREGATE:
9547             error (_("Aggregates only allowed on the right of an assignment"));
9548           default:
9549             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9550           }
9551
9552       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9553       *pos += oplen - 1;
9554       for (tem = 0; tem < nargs; tem += 1) 
9555         ada_evaluate_subexp (NULL, exp, pos, noside);
9556       goto nosideret;
9557     }
9558
9559 nosideret:
9560   return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
9561 }
9562 \f
9563
9564                                 /* Fixed point */
9565
9566 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9567    type name that encodes the 'small and 'delta information.
9568    Otherwise, return NULL.  */
9569
9570 static const char *
9571 fixed_type_info (struct type *type)
9572 {
9573   const char *name = ada_type_name (type);
9574   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9575
9576   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9577     {
9578       const char *tail = strstr (name, "___XF_");
9579       if (tail == NULL)
9580         return NULL;
9581       else
9582         return tail + 5;
9583     }
9584   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9585     return fixed_type_info (TYPE_TARGET_TYPE (type));
9586   else
9587     return NULL;
9588 }
9589
9590 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9591
9592 int
9593 ada_is_fixed_point_type (struct type *type)
9594 {
9595   return fixed_type_info (type) != NULL;
9596 }
9597
9598 /* Return non-zero iff TYPE represents a System.Address type.  */
9599
9600 int
9601 ada_is_system_address_type (struct type *type)
9602 {
9603   return (TYPE_NAME (type)
9604           && strcmp (TYPE_NAME (type), "system__address") == 0);
9605 }
9606
9607 /* Assuming that TYPE is the representation of an Ada fixed-point
9608    type, return its delta, or -1 if the type is malformed and the
9609    delta cannot be determined.  */
9610
9611 DOUBLEST
9612 ada_delta (struct type *type)
9613 {
9614   const char *encoding = fixed_type_info (type);
9615   DOUBLEST num, den;
9616
9617   /* Strictly speaking, num and den are encoded as integer.  However,
9618      they may not fit into a long, and they will have to be converted
9619      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9620   if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9621               &num, &den) < 2)
9622     return -1.0;
9623   else
9624     return num / den;
9625 }
9626
9627 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9628    factor ('SMALL value) associated with the type.  */
9629
9630 static DOUBLEST
9631 scaling_factor (struct type *type)
9632 {
9633   const char *encoding = fixed_type_info (type);
9634   DOUBLEST num0, den0, num1, den1;
9635   int n;
9636
9637   /* Strictly speaking, num's and den's are encoded as integer.  However,
9638      they may not fit into a long, and they will have to be converted
9639      to DOUBLEST anyway.  So scan them as DOUBLEST.  */
9640   n = sscanf (encoding,
9641               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
9642               "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9643               &num0, &den0, &num1, &den1);
9644
9645   if (n < 2)
9646     return 1.0;
9647   else if (n == 4)
9648     return num1 / den1;
9649   else
9650     return num0 / den0;
9651 }
9652
9653
9654 /* Assuming that X is the representation of a value of fixed-point
9655    type TYPE, return its floating-point equivalent.  */
9656
9657 DOUBLEST
9658 ada_fixed_to_float (struct type *type, LONGEST x)
9659 {
9660   return (DOUBLEST) x *scaling_factor (type);
9661 }
9662
9663 /* The representation of a fixed-point value of type TYPE
9664    corresponding to the value X.  */
9665
9666 LONGEST
9667 ada_float_to_fixed (struct type *type, DOUBLEST x)
9668 {
9669   return (LONGEST) (x / scaling_factor (type) + 0.5);
9670 }
9671
9672
9673                                 /* VAX floating formats */
9674
9675 /* Non-zero iff TYPE represents one of the special VAX floating-point
9676    types.  */
9677
9678 int
9679 ada_is_vax_floating_type (struct type *type)
9680 {
9681   int name_len =
9682     (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9683   return
9684     name_len > 6
9685     && (TYPE_CODE (type) == TYPE_CODE_INT
9686         || TYPE_CODE (type) == TYPE_CODE_RANGE)
9687     && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9688 }
9689
9690 /* The type of special VAX floating-point type this is, assuming
9691    ada_is_vax_floating_point.  */
9692
9693 int
9694 ada_vax_float_type_suffix (struct type *type)
9695 {
9696   return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9697 }
9698
9699 /* A value representing the special debugging function that outputs
9700    VAX floating-point values of the type represented by TYPE.  Assumes
9701    ada_is_vax_floating_type (TYPE).  */
9702
9703 struct value *
9704 ada_vax_float_print_function (struct type *type)
9705 {
9706   switch (ada_vax_float_type_suffix (type))
9707     {
9708     case 'F':
9709       return get_var_value ("DEBUG_STRING_F", 0);
9710     case 'D':
9711       return get_var_value ("DEBUG_STRING_D", 0);
9712     case 'G':
9713       return get_var_value ("DEBUG_STRING_G", 0);
9714     default:
9715       error (_("invalid VAX floating-point type"));
9716     }
9717 }
9718 \f
9719
9720                                 /* Range types */
9721
9722 /* Scan STR beginning at position K for a discriminant name, and
9723    return the value of that discriminant field of DVAL in *PX.  If
9724    PNEW_K is not null, put the position of the character beyond the
9725    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9726    not alter *PX and *PNEW_K if unsuccessful.  */
9727
9728 static int
9729 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9730                     int *pnew_k)
9731 {
9732   static char *bound_buffer = NULL;
9733   static size_t bound_buffer_len = 0;
9734   char *bound;
9735   char *pend;
9736   struct value *bound_val;
9737
9738   if (dval == NULL || str == NULL || str[k] == '\0')
9739     return 0;
9740
9741   pend = strstr (str + k, "__");
9742   if (pend == NULL)
9743     {
9744       bound = str + k;
9745       k += strlen (bound);
9746     }
9747   else
9748     {
9749       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9750       bound = bound_buffer;
9751       strncpy (bound_buffer, str + k, pend - (str + k));
9752       bound[pend - (str + k)] = '\0';
9753       k = pend - str;
9754     }
9755
9756   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9757   if (bound_val == NULL)
9758     return 0;
9759
9760   *px = value_as_long (bound_val);
9761   if (pnew_k != NULL)
9762     *pnew_k = k;
9763   return 1;
9764 }
9765
9766 /* Value of variable named NAME in the current environment.  If
9767    no such variable found, then if ERR_MSG is null, returns 0, and
9768    otherwise causes an error with message ERR_MSG.  */
9769
9770 static struct value *
9771 get_var_value (char *name, char *err_msg)
9772 {
9773   struct ada_symbol_info *syms;
9774   int nsyms;
9775
9776   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9777                                   &syms);
9778
9779   if (nsyms != 1)
9780     {
9781       if (err_msg == NULL)
9782         return 0;
9783       else
9784         error (("%s"), err_msg);
9785     }
9786
9787   return value_of_variable (syms[0].sym, syms[0].block);
9788 }
9789
9790 /* Value of integer variable named NAME in the current environment.  If
9791    no such variable found, returns 0, and sets *FLAG to 0.  If
9792    successful, sets *FLAG to 1.  */
9793
9794 LONGEST
9795 get_int_var_value (char *name, int *flag)
9796 {
9797   struct value *var_val = get_var_value (name, 0);
9798
9799   if (var_val == 0)
9800     {
9801       if (flag != NULL)
9802         *flag = 0;
9803       return 0;
9804     }
9805   else
9806     {
9807       if (flag != NULL)
9808         *flag = 1;
9809       return value_as_long (var_val);
9810     }
9811 }
9812
9813
9814 /* Return a range type whose base type is that of the range type named
9815    NAME in the current environment, and whose bounds are calculated
9816    from NAME according to the GNAT range encoding conventions.
9817    Extract discriminant values, if needed, from DVAL.  ORIG_TYPE is the
9818    corresponding range type from debug information; fall back to using it
9819    if symbol lookup fails.  If a new type must be created, allocate it
9820    like ORIG_TYPE was.  The bounds information, in general, is encoded
9821    in NAME, the base type given in the named range type.  */
9822
9823 static struct type *
9824 to_fixed_range_type (char *name, struct value *dval, struct type *orig_type)
9825 {
9826   struct type *raw_type = ada_find_any_type (name);
9827   struct type *base_type;
9828   char *subtype_info;
9829
9830   /* Fall back to the original type if symbol lookup failed.  */
9831   if (raw_type == NULL)
9832     raw_type = orig_type;
9833
9834   if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9835     base_type = TYPE_TARGET_TYPE (raw_type);
9836   else
9837     base_type = raw_type;
9838
9839   subtype_info = strstr (name, "___XD");
9840   if (subtype_info == NULL)
9841     {
9842       LONGEST L = discrete_type_low_bound (raw_type);
9843       LONGEST U = discrete_type_high_bound (raw_type);
9844       if (L < INT_MIN || U > INT_MAX)
9845         return raw_type;
9846       else
9847         return create_range_type (alloc_type_copy (orig_type), raw_type,
9848                                   discrete_type_low_bound (raw_type),
9849                                   discrete_type_high_bound (raw_type));
9850     }
9851   else
9852     {
9853       static char *name_buf = NULL;
9854       static size_t name_len = 0;
9855       int prefix_len = subtype_info - name;
9856       LONGEST L, U;
9857       struct type *type;
9858       char *bounds_str;
9859       int n;
9860
9861       GROW_VECT (name_buf, name_len, prefix_len + 5);
9862       strncpy (name_buf, name, prefix_len);
9863       name_buf[prefix_len] = '\0';
9864
9865       subtype_info += 5;
9866       bounds_str = strchr (subtype_info, '_');
9867       n = 1;
9868
9869       if (*subtype_info == 'L')
9870         {
9871           if (!ada_scan_number (bounds_str, n, &L, &n)
9872               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9873             return raw_type;
9874           if (bounds_str[n] == '_')
9875             n += 2;
9876           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9877             n += 1;
9878           subtype_info += 1;
9879         }
9880       else
9881         {
9882           int ok;
9883           strcpy (name_buf + prefix_len, "___L");
9884           L = get_int_var_value (name_buf, &ok);
9885           if (!ok)
9886             {
9887               lim_warning (_("Unknown lower bound, using 1."));
9888               L = 1;
9889             }
9890         }
9891
9892       if (*subtype_info == 'U')
9893         {
9894           if (!ada_scan_number (bounds_str, n, &U, &n)
9895               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9896             return raw_type;
9897         }
9898       else
9899         {
9900           int ok;
9901           strcpy (name_buf + prefix_len, "___U");
9902           U = get_int_var_value (name_buf, &ok);
9903           if (!ok)
9904             {
9905               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9906               U = L;
9907             }
9908         }
9909
9910       type = create_range_type (alloc_type_copy (orig_type), base_type, L, U);
9911       TYPE_NAME (type) = name;
9912       return type;
9913     }
9914 }
9915
9916 /* True iff NAME is the name of a range type.  */
9917
9918 int
9919 ada_is_range_type_name (const char *name)
9920 {
9921   return (name != NULL && strstr (name, "___XD"));
9922 }
9923 \f
9924
9925                                 /* Modular types */
9926
9927 /* True iff TYPE is an Ada modular type.  */
9928
9929 int
9930 ada_is_modular_type (struct type *type)
9931 {
9932   struct type *subranged_type = base_type (type);
9933
9934   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9935           && TYPE_CODE (subranged_type) == TYPE_CODE_INT
9936           && TYPE_UNSIGNED (subranged_type));
9937 }
9938
9939 /* Try to determine the lower and upper bounds of the given modular type
9940    using the type name only.  Return non-zero and set L and U as the lower
9941    and upper bounds (respectively) if successful.  */
9942
9943 int
9944 ada_modulus_from_name (struct type *type, ULONGEST *modulus)
9945 {
9946   char *name = ada_type_name (type);
9947   char *suffix;
9948   int k;
9949   LONGEST U;
9950
9951   if (name == NULL)
9952     return 0;
9953
9954   /* Discrete type bounds are encoded using an __XD suffix.  In our case,
9955      we are looking for static bounds, which means an __XDLU suffix.
9956      Moreover, we know that the lower bound of modular types is always
9957      zero, so the actual suffix should start with "__XDLU_0__", and
9958      then be followed by the upper bound value.  */
9959   suffix = strstr (name, "__XDLU_0__");
9960   if (suffix == NULL)
9961     return 0;
9962   k = 10;
9963   if (!ada_scan_number (suffix, k, &U, NULL))
9964     return 0;
9965
9966   *modulus = (ULONGEST) U + 1;
9967   return 1;
9968 }
9969
9970 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9971
9972 ULONGEST
9973 ada_modulus (struct type *type)
9974 {
9975   ULONGEST modulus;
9976
9977   /* Normally, the modulus of a modular type is equal to the value of
9978      its upper bound + 1.  However, the upper bound is currently stored
9979      as an int, which is not always big enough to hold the actual bound
9980      value.  To workaround this, try to take advantage of the encoding
9981      that GNAT uses with with discrete types.  To avoid some unnecessary
9982      parsing, we do this only when the size of TYPE is greater than
9983      the size of the field holding the bound.  */
9984   if (TYPE_LENGTH (type) > sizeof (TYPE_HIGH_BOUND (type))
9985       && ada_modulus_from_name (type, &modulus))
9986     return modulus;
9987
9988   return (ULONGEST) (unsigned int) TYPE_HIGH_BOUND (type) + 1;
9989 }
9990 \f
9991
9992 /* Ada exception catchpoint support:
9993    ---------------------------------
9994
9995    We support 3 kinds of exception catchpoints:
9996      . catchpoints on Ada exceptions
9997      . catchpoints on unhandled Ada exceptions
9998      . catchpoints on failed assertions
9999
10000    Exceptions raised during failed assertions, or unhandled exceptions
10001    could perfectly be caught with the general catchpoint on Ada exceptions.
10002    However, we can easily differentiate these two special cases, and having
10003    the option to distinguish these two cases from the rest can be useful
10004    to zero-in on certain situations.
10005
10006    Exception catchpoints are a specialized form of breakpoint,
10007    since they rely on inserting breakpoints inside known routines
10008    of the GNAT runtime.  The implementation therefore uses a standard
10009    breakpoint structure of the BP_BREAKPOINT type, but with its own set
10010    of breakpoint_ops.
10011
10012    Support in the runtime for exception catchpoints have been changed
10013    a few times already, and these changes affect the implementation
10014    of these catchpoints.  In order to be able to support several
10015    variants of the runtime, we use a sniffer that will determine
10016    the runtime variant used by the program being debugged.
10017
10018    At this time, we do not support the use of conditions on Ada exception
10019    catchpoints.  The COND and COND_STRING fields are therefore set
10020    to NULL (most of the time, see below).
10021    
10022    Conditions where EXP_STRING, COND, and COND_STRING are used:
10023
10024      When a user specifies the name of a specific exception in the case
10025      of catchpoints on Ada exceptions, we store the name of that exception
10026      in the EXP_STRING.  We then translate this request into an actual
10027      condition stored in COND_STRING, and then parse it into an expression
10028      stored in COND.  */
10029
10030 /* The different types of catchpoints that we introduced for catching
10031    Ada exceptions.  */
10032
10033 enum exception_catchpoint_kind
10034 {
10035   ex_catch_exception,
10036   ex_catch_exception_unhandled,
10037   ex_catch_assert
10038 };
10039
10040 /* Ada's standard exceptions.  */
10041
10042 static char *standard_exc[] = {
10043   "constraint_error",
10044   "program_error",
10045   "storage_error",
10046   "tasking_error"
10047 };
10048
10049 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10050
10051 /* A structure that describes how to support exception catchpoints
10052    for a given executable.  */
10053
10054 struct exception_support_info
10055 {
10056    /* The name of the symbol to break on in order to insert
10057       a catchpoint on exceptions.  */
10058    const char *catch_exception_sym;
10059
10060    /* The name of the symbol to break on in order to insert
10061       a catchpoint on unhandled exceptions.  */
10062    const char *catch_exception_unhandled_sym;
10063
10064    /* The name of the symbol to break on in order to insert
10065       a catchpoint on failed assertions.  */
10066    const char *catch_assert_sym;
10067
10068    /* Assuming that the inferior just triggered an unhandled exception
10069       catchpoint, this function is responsible for returning the address
10070       in inferior memory where the name of that exception is stored.
10071       Return zero if the address could not be computed.  */
10072    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
10073 };
10074
10075 static CORE_ADDR ada_unhandled_exception_name_addr (void);
10076 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
10077
10078 /* The following exception support info structure describes how to
10079    implement exception catchpoints with the latest version of the
10080    Ada runtime (as of 2007-03-06).  */
10081
10082 static const struct exception_support_info default_exception_support_info =
10083 {
10084   "__gnat_debug_raise_exception", /* catch_exception_sym */
10085   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10086   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
10087   ada_unhandled_exception_name_addr
10088 };
10089
10090 /* The following exception support info structure describes how to
10091    implement exception catchpoints with a slightly older version
10092    of the Ada runtime.  */
10093
10094 static const struct exception_support_info exception_support_info_fallback =
10095 {
10096   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
10097   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10098   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
10099   ada_unhandled_exception_name_addr_from_raise
10100 };
10101
10102 /* For each executable, we sniff which exception info structure to use
10103    and cache it in the following global variable.  */
10104
10105 static const struct exception_support_info *exception_info = NULL;
10106
10107 /* Inspect the Ada runtime and determine which exception info structure
10108    should be used to provide support for exception catchpoints.
10109
10110    This function will always set exception_info, or raise an error.  */
10111
10112 static void
10113 ada_exception_support_info_sniffer (void)
10114 {
10115   struct symbol *sym;
10116
10117   /* If the exception info is already known, then no need to recompute it.  */
10118   if (exception_info != NULL)
10119     return;
10120
10121   /* Check the latest (default) exception support info.  */
10122   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
10123                          NULL, VAR_DOMAIN);
10124   if (sym != NULL)
10125     {
10126       exception_info = &default_exception_support_info;
10127       return;
10128     }
10129
10130   /* Try our fallback exception suport info.  */
10131   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10132                          NULL, VAR_DOMAIN);
10133   if (sym != NULL)
10134     {
10135       exception_info = &exception_support_info_fallback;
10136       return;
10137     }
10138
10139   /* Sometimes, it is normal for us to not be able to find the routine
10140      we are looking for.  This happens when the program is linked with
10141      the shared version of the GNAT runtime, and the program has not been
10142      started yet.  Inform the user of these two possible causes if
10143      applicable.  */
10144
10145   if (ada_update_initial_language (language_unknown, NULL) != language_ada)
10146     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
10147
10148   /* If the symbol does not exist, then check that the program is
10149      already started, to make sure that shared libraries have been
10150      loaded.  If it is not started, this may mean that the symbol is
10151      in a shared library.  */
10152
10153   if (ptid_get_pid (inferior_ptid) == 0)
10154     error (_("Unable to insert catchpoint. Try to start the program first."));
10155
10156   /* At this point, we know that we are debugging an Ada program and
10157      that the inferior has been started, but we still are not able to
10158      find the run-time symbols. That can mean that we are in
10159      configurable run time mode, or that a-except as been optimized
10160      out by the linker...  In any case, at this point it is not worth
10161      supporting this feature.  */
10162
10163   error (_("Cannot insert catchpoints in this configuration."));
10164 }
10165
10166 /* An observer of "executable_changed" events.
10167    Its role is to clear certain cached values that need to be recomputed
10168    each time a new executable is loaded by GDB.  */
10169
10170 static void
10171 ada_executable_changed_observer (void)
10172 {
10173   /* If the executable changed, then it is possible that the Ada runtime
10174      is different.  So we need to invalidate the exception support info
10175      cache.  */
10176   exception_info = NULL;
10177 }
10178
10179 /* Return the name of the function at PC, NULL if could not find it.
10180    This function only checks the debugging information, not the symbol
10181    table.  */
10182
10183 static char *
10184 function_name_from_pc (CORE_ADDR pc)
10185 {
10186   char *func_name;
10187
10188   if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
10189     return NULL;
10190
10191   return func_name;
10192 }
10193
10194 /* True iff FRAME is very likely to be that of a function that is
10195    part of the runtime system.  This is all very heuristic, but is
10196    intended to be used as advice as to what frames are uninteresting
10197    to most users.  */
10198
10199 static int
10200 is_known_support_routine (struct frame_info *frame)
10201 {
10202   struct symtab_and_line sal;
10203   char *func_name;
10204   int i;
10205
10206   /* If this code does not have any debugging information (no symtab),
10207      This cannot be any user code.  */
10208
10209   find_frame_sal (frame, &sal);
10210   if (sal.symtab == NULL)
10211     return 1;
10212
10213   /* If there is a symtab, but the associated source file cannot be
10214      located, then assume this is not user code:  Selecting a frame
10215      for which we cannot display the code would not be very helpful
10216      for the user.  This should also take care of case such as VxWorks
10217      where the kernel has some debugging info provided for a few units.  */
10218
10219   if (symtab_to_fullname (sal.symtab) == NULL)
10220     return 1;
10221
10222   /* Check the unit filename againt the Ada runtime file naming.
10223      We also check the name of the objfile against the name of some
10224      known system libraries that sometimes come with debugging info
10225      too.  */
10226
10227   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10228     {
10229       re_comp (known_runtime_file_name_patterns[i]);
10230       if (re_exec (sal.symtab->filename))
10231         return 1;
10232       if (sal.symtab->objfile != NULL
10233           && re_exec (sal.symtab->objfile->name))
10234         return 1;
10235     }
10236
10237   /* Check whether the function is a GNAT-generated entity.  */
10238
10239   func_name = function_name_from_pc (get_frame_address_in_block (frame));
10240   if (func_name == NULL)
10241     return 1;
10242
10243   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10244     {
10245       re_comp (known_auxiliary_function_name_patterns[i]);
10246       if (re_exec (func_name))
10247         return 1;
10248     }
10249
10250   return 0;
10251 }
10252
10253 /* Find the first frame that contains debugging information and that is not
10254    part of the Ada run-time, starting from FI and moving upward.  */
10255
10256 void
10257 ada_find_printable_frame (struct frame_info *fi)
10258 {
10259   for (; fi != NULL; fi = get_prev_frame (fi))
10260     {
10261       if (!is_known_support_routine (fi))
10262         {
10263           select_frame (fi);
10264           break;
10265         }
10266     }
10267
10268 }
10269
10270 /* Assuming that the inferior just triggered an unhandled exception
10271    catchpoint, return the address in inferior memory where the name
10272    of the exception is stored.
10273    
10274    Return zero if the address could not be computed.  */
10275
10276 static CORE_ADDR
10277 ada_unhandled_exception_name_addr (void)
10278 {
10279   return parse_and_eval_address ("e.full_name");
10280 }
10281
10282 /* Same as ada_unhandled_exception_name_addr, except that this function
10283    should be used when the inferior uses an older version of the runtime,
10284    where the exception name needs to be extracted from a specific frame
10285    several frames up in the callstack.  */
10286
10287 static CORE_ADDR
10288 ada_unhandled_exception_name_addr_from_raise (void)
10289 {
10290   int frame_level;
10291   struct frame_info *fi;
10292
10293   /* To determine the name of this exception, we need to select
10294      the frame corresponding to RAISE_SYM_NAME.  This frame is
10295      at least 3 levels up, so we simply skip the first 3 frames
10296      without checking the name of their associated function.  */
10297   fi = get_current_frame ();
10298   for (frame_level = 0; frame_level < 3; frame_level += 1)
10299     if (fi != NULL)
10300       fi = get_prev_frame (fi); 
10301
10302   while (fi != NULL)
10303     {
10304       const char *func_name =
10305         function_name_from_pc (get_frame_address_in_block (fi));
10306       if (func_name != NULL
10307           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
10308         break; /* We found the frame we were looking for...  */
10309       fi = get_prev_frame (fi);
10310     }
10311
10312   if (fi == NULL)
10313     return 0;
10314
10315   select_frame (fi);
10316   return parse_and_eval_address ("id.full_name");
10317 }
10318
10319 /* Assuming the inferior just triggered an Ada exception catchpoint
10320    (of any type), return the address in inferior memory where the name
10321    of the exception is stored, if applicable.
10322
10323    Return zero if the address could not be computed, or if not relevant.  */
10324
10325 static CORE_ADDR
10326 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10327                            struct breakpoint *b)
10328 {
10329   switch (ex)
10330     {
10331       case ex_catch_exception:
10332         return (parse_and_eval_address ("e.full_name"));
10333         break;
10334
10335       case ex_catch_exception_unhandled:
10336         return exception_info->unhandled_exception_name_addr ();
10337         break;
10338       
10339       case ex_catch_assert:
10340         return 0;  /* Exception name is not relevant in this case.  */
10341         break;
10342
10343       default:
10344         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10345         break;
10346     }
10347
10348   return 0; /* Should never be reached.  */
10349 }
10350
10351 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10352    any error that ada_exception_name_addr_1 might cause to be thrown.
10353    When an error is intercepted, a warning with the error message is printed,
10354    and zero is returned.  */
10355
10356 static CORE_ADDR
10357 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10358                          struct breakpoint *b)
10359 {
10360   struct gdb_exception e;
10361   CORE_ADDR result = 0;
10362
10363   TRY_CATCH (e, RETURN_MASK_ERROR)
10364     {
10365       result = ada_exception_name_addr_1 (ex, b);
10366     }
10367
10368   if (e.reason < 0)
10369     {
10370       warning (_("failed to get exception name: %s"), e.message);
10371       return 0;
10372     }
10373
10374   return result;
10375 }
10376
10377 /* Implement the PRINT_IT method in the breakpoint_ops structure
10378    for all exception catchpoint kinds.  */
10379
10380 static enum print_stop_action
10381 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10382 {
10383   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10384   char exception_name[256];
10385
10386   if (addr != 0)
10387     {
10388       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10389       exception_name [sizeof (exception_name) - 1] = '\0';
10390     }
10391
10392   ada_find_printable_frame (get_current_frame ());
10393
10394   annotate_catchpoint (b->number);
10395   switch (ex)
10396     {
10397       case ex_catch_exception:
10398         if (addr != 0)
10399           printf_filtered (_("\nCatchpoint %d, %s at "),
10400                            b->number, exception_name);
10401         else
10402           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10403         break;
10404       case ex_catch_exception_unhandled:
10405         if (addr != 0)
10406           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10407                            b->number, exception_name);
10408         else
10409           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10410                            b->number);
10411         break;
10412       case ex_catch_assert:
10413         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10414                          b->number);
10415         break;
10416     }
10417
10418   return PRINT_SRC_AND_LOC;
10419 }
10420
10421 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10422    for all exception catchpoint kinds.  */
10423
10424 static void
10425 print_one_exception (enum exception_catchpoint_kind ex,
10426                      struct breakpoint *b, struct bp_location **last_loc)
10427
10428   struct value_print_options opts;
10429
10430   get_user_print_options (&opts);
10431   if (opts.addressprint)
10432     {
10433       annotate_field (4);
10434       ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
10435     }
10436
10437   annotate_field (5);
10438   *last_loc = b->loc;
10439   switch (ex)
10440     {
10441       case ex_catch_exception:
10442         if (b->exp_string != NULL)
10443           {
10444             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10445             
10446             ui_out_field_string (uiout, "what", msg);
10447             xfree (msg);
10448           }
10449         else
10450           ui_out_field_string (uiout, "what", "all Ada exceptions");
10451         
10452         break;
10453
10454       case ex_catch_exception_unhandled:
10455         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10456         break;
10457       
10458       case ex_catch_assert:
10459         ui_out_field_string (uiout, "what", "failed Ada assertions");
10460         break;
10461
10462       default:
10463         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10464         break;
10465     }
10466 }
10467
10468 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10469    for all exception catchpoint kinds.  */
10470
10471 static void
10472 print_mention_exception (enum exception_catchpoint_kind ex,
10473                          struct breakpoint *b)
10474 {
10475   switch (ex)
10476     {
10477       case ex_catch_exception:
10478         if (b->exp_string != NULL)
10479           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10480                            b->number, b->exp_string);
10481         else
10482           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10483         
10484         break;
10485
10486       case ex_catch_exception_unhandled:
10487         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10488                          b->number);
10489         break;
10490       
10491       case ex_catch_assert:
10492         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10493         break;
10494
10495       default:
10496         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10497         break;
10498     }
10499 }
10500
10501 /* Virtual table for "catch exception" breakpoints.  */
10502
10503 static enum print_stop_action
10504 print_it_catch_exception (struct breakpoint *b)
10505 {
10506   return print_it_exception (ex_catch_exception, b);
10507 }
10508
10509 static void
10510 print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
10511 {
10512   print_one_exception (ex_catch_exception, b, last_loc);
10513 }
10514
10515 static void
10516 print_mention_catch_exception (struct breakpoint *b)
10517 {
10518   print_mention_exception (ex_catch_exception, b);
10519 }
10520
10521 static struct breakpoint_ops catch_exception_breakpoint_ops =
10522 {
10523   NULL, /* insert */
10524   NULL, /* remove */
10525   NULL, /* breakpoint_hit */
10526   print_it_catch_exception,
10527   print_one_catch_exception,
10528   print_mention_catch_exception
10529 };
10530
10531 /* Virtual table for "catch exception unhandled" breakpoints.  */
10532
10533 static enum print_stop_action
10534 print_it_catch_exception_unhandled (struct breakpoint *b)
10535 {
10536   return print_it_exception (ex_catch_exception_unhandled, b);
10537 }
10538
10539 static void
10540 print_one_catch_exception_unhandled (struct breakpoint *b,
10541                                      struct bp_location **last_loc)
10542 {
10543   print_one_exception (ex_catch_exception_unhandled, b, last_loc);
10544 }
10545
10546 static void
10547 print_mention_catch_exception_unhandled (struct breakpoint *b)
10548 {
10549   print_mention_exception (ex_catch_exception_unhandled, b);
10550 }
10551
10552 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10553   NULL, /* insert */
10554   NULL, /* remove */
10555   NULL, /* breakpoint_hit */
10556   print_it_catch_exception_unhandled,
10557   print_one_catch_exception_unhandled,
10558   print_mention_catch_exception_unhandled
10559 };
10560
10561 /* Virtual table for "catch assert" breakpoints.  */
10562
10563 static enum print_stop_action
10564 print_it_catch_assert (struct breakpoint *b)
10565 {
10566   return print_it_exception (ex_catch_assert, b);
10567 }
10568
10569 static void
10570 print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
10571 {
10572   print_one_exception (ex_catch_assert, b, last_loc);
10573 }
10574
10575 static void
10576 print_mention_catch_assert (struct breakpoint *b)
10577 {
10578   print_mention_exception (ex_catch_assert, b);
10579 }
10580
10581 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10582   NULL, /* insert */
10583   NULL, /* remove */
10584   NULL, /* breakpoint_hit */
10585   print_it_catch_assert,
10586   print_one_catch_assert,
10587   print_mention_catch_assert
10588 };
10589
10590 /* Return non-zero if B is an Ada exception catchpoint.  */
10591
10592 int
10593 ada_exception_catchpoint_p (struct breakpoint *b)
10594 {
10595   return (b->ops == &catch_exception_breakpoint_ops
10596           || b->ops == &catch_exception_unhandled_breakpoint_ops
10597           || b->ops == &catch_assert_breakpoint_ops);
10598 }
10599
10600 /* Return a newly allocated copy of the first space-separated token
10601    in ARGSP, and then adjust ARGSP to point immediately after that
10602    token.
10603
10604    Return NULL if ARGPS does not contain any more tokens.  */
10605
10606 static char *
10607 ada_get_next_arg (char **argsp)
10608 {
10609   char *args = *argsp;
10610   char *end;
10611   char *result;
10612
10613   /* Skip any leading white space.  */
10614
10615   while (isspace (*args))
10616     args++;
10617
10618   if (args[0] == '\0')
10619     return NULL; /* No more arguments.  */
10620   
10621   /* Find the end of the current argument.  */
10622
10623   end = args;
10624   while (*end != '\0' && !isspace (*end))
10625     end++;
10626
10627   /* Adjust ARGSP to point to the start of the next argument.  */
10628
10629   *argsp = end;
10630
10631   /* Make a copy of the current argument and return it.  */
10632
10633   result = xmalloc (end - args + 1);
10634   strncpy (result, args, end - args);
10635   result[end - args] = '\0';
10636   
10637   return result;
10638 }
10639
10640 /* Split the arguments specified in a "catch exception" command.  
10641    Set EX to the appropriate catchpoint type.
10642    Set EXP_STRING to the name of the specific exception if
10643    specified by the user.  */
10644
10645 static void
10646 catch_ada_exception_command_split (char *args,
10647                                    enum exception_catchpoint_kind *ex,
10648                                    char **exp_string)
10649 {
10650   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10651   char *exception_name;
10652
10653   exception_name = ada_get_next_arg (&args);
10654   make_cleanup (xfree, exception_name);
10655
10656   /* Check that we do not have any more arguments.  Anything else
10657      is unexpected.  */
10658
10659   while (isspace (*args))
10660     args++;
10661
10662   if (args[0] != '\0')
10663     error (_("Junk at end of expression"));
10664
10665   discard_cleanups (old_chain);
10666
10667   if (exception_name == NULL)
10668     {
10669       /* Catch all exceptions.  */
10670       *ex = ex_catch_exception;
10671       *exp_string = NULL;
10672     }
10673   else if (strcmp (exception_name, "unhandled") == 0)
10674     {
10675       /* Catch unhandled exceptions.  */
10676       *ex = ex_catch_exception_unhandled;
10677       *exp_string = NULL;
10678     }
10679   else
10680     {
10681       /* Catch a specific exception.  */
10682       *ex = ex_catch_exception;
10683       *exp_string = exception_name;
10684     }
10685 }
10686
10687 /* Return the name of the symbol on which we should break in order to
10688    implement a catchpoint of the EX kind.  */
10689
10690 static const char *
10691 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10692 {
10693   gdb_assert (exception_info != NULL);
10694
10695   switch (ex)
10696     {
10697       case ex_catch_exception:
10698         return (exception_info->catch_exception_sym);
10699         break;
10700       case ex_catch_exception_unhandled:
10701         return (exception_info->catch_exception_unhandled_sym);
10702         break;
10703       case ex_catch_assert:
10704         return (exception_info->catch_assert_sym);
10705         break;
10706       default:
10707         internal_error (__FILE__, __LINE__,
10708                         _("unexpected catchpoint kind (%d)"), ex);
10709     }
10710 }
10711
10712 /* Return the breakpoint ops "virtual table" used for catchpoints
10713    of the EX kind.  */
10714
10715 static struct breakpoint_ops *
10716 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10717 {
10718   switch (ex)
10719     {
10720       case ex_catch_exception:
10721         return (&catch_exception_breakpoint_ops);
10722         break;
10723       case ex_catch_exception_unhandled:
10724         return (&catch_exception_unhandled_breakpoint_ops);
10725         break;
10726       case ex_catch_assert:
10727         return (&catch_assert_breakpoint_ops);
10728         break;
10729       default:
10730         internal_error (__FILE__, __LINE__,
10731                         _("unexpected catchpoint kind (%d)"), ex);
10732     }
10733 }
10734
10735 /* Return the condition that will be used to match the current exception
10736    being raised with the exception that the user wants to catch.  This
10737    assumes that this condition is used when the inferior just triggered
10738    an exception catchpoint.
10739    
10740    The string returned is a newly allocated string that needs to be
10741    deallocated later.  */
10742
10743 static char *
10744 ada_exception_catchpoint_cond_string (const char *exp_string)
10745 {
10746   int i;
10747
10748   /* The standard exceptions are a special case. They are defined in
10749      runtime units that have been compiled without debugging info; if
10750      EXP_STRING is the not-fully-qualified name of a standard
10751      exception (e.g. "constraint_error") then, during the evaluation
10752      of the condition expression, the symbol lookup on this name would
10753      *not* return this standard exception. The catchpoint condition
10754      may then be set only on user-defined exceptions which have the
10755      same not-fully-qualified name (e.g. my_package.constraint_error).
10756
10757      To avoid this unexcepted behavior, these standard exceptions are
10758      systematically prefixed by "standard". This means that "catch
10759      exception constraint_error" is rewritten into "catch exception
10760      standard.constraint_error".
10761
10762      If an exception named contraint_error is defined in another package of
10763      the inferior program, then the only way to specify this exception as a
10764      breakpoint condition is to use its fully-qualified named:
10765      e.g. my_package.constraint_error.  */
10766
10767   for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10768     {
10769       if (strcmp (standard_exc [i], exp_string) == 0)
10770         {
10771           return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10772                              exp_string);
10773         }
10774     }
10775   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10776 }
10777
10778 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10779
10780 static struct expression *
10781 ada_parse_catchpoint_condition (char *cond_string,
10782                                 struct symtab_and_line sal)
10783 {
10784   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10785 }
10786
10787 /* Return the symtab_and_line that should be used to insert an exception
10788    catchpoint of the TYPE kind.
10789
10790    EX_STRING should contain the name of a specific exception
10791    that the catchpoint should catch, or NULL otherwise.
10792
10793    The idea behind all the remaining parameters is that their names match
10794    the name of certain fields in the breakpoint structure that are used to
10795    handle exception catchpoints.  This function returns the value to which
10796    these fields should be set, depending on the type of catchpoint we need
10797    to create.
10798    
10799    If COND and COND_STRING are both non-NULL, any value they might
10800    hold will be free'ed, and then replaced by newly allocated ones.
10801    These parameters are left untouched otherwise.  */
10802
10803 static struct symtab_and_line
10804 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10805                    char **addr_string, char **cond_string,
10806                    struct expression **cond, struct breakpoint_ops **ops)
10807 {
10808   const char *sym_name;
10809   struct symbol *sym;
10810   struct symtab_and_line sal;
10811
10812   /* First, find out which exception support info to use.  */
10813   ada_exception_support_info_sniffer ();
10814
10815   /* Then lookup the function on which we will break in order to catch
10816      the Ada exceptions requested by the user.  */
10817
10818   sym_name = ada_exception_sym_name (ex);
10819   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10820
10821   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10822      that should be compiled with debugging information.  As a result, we
10823      expect to find that symbol in the symtabs.  If we don't find it, then
10824      the target most likely does not support Ada exceptions, or we cannot
10825      insert exception breakpoints yet, because the GNAT runtime hasn't been
10826      loaded yet.  */
10827
10828   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10829      in such a way that no debugging information is produced for the symbol
10830      we are looking for.  In this case, we could search the minimal symbols
10831      as a fall-back mechanism.  This would still be operating in degraded
10832      mode, however, as we would still be missing the debugging information
10833      that is needed in order to extract the name of the exception being
10834      raised (this name is printed in the catchpoint message, and is also
10835      used when trying to catch a specific exception).  We do not handle
10836      this case for now.  */
10837
10838   if (sym == NULL)
10839     error (_("Unable to break on '%s' in this configuration."), sym_name);
10840
10841   /* Make sure that the symbol we found corresponds to a function.  */
10842   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10843     error (_("Symbol \"%s\" is not a function (class = %d)"),
10844            sym_name, SYMBOL_CLASS (sym));
10845
10846   sal = find_function_start_sal (sym, 1);
10847
10848   /* Set ADDR_STRING.  */
10849
10850   *addr_string = xstrdup (sym_name);
10851
10852   /* Set the COND and COND_STRING (if not NULL).  */
10853
10854   if (cond_string != NULL && cond != NULL)
10855     {
10856       if (*cond_string != NULL)
10857         {
10858           xfree (*cond_string);
10859           *cond_string = NULL;
10860         }
10861       if (*cond != NULL)
10862         {
10863           xfree (*cond);
10864           *cond = NULL;
10865         }
10866       if (exp_string != NULL)
10867         {
10868           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10869           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10870         }
10871     }
10872
10873   /* Set OPS.  */
10874   *ops = ada_exception_breakpoint_ops (ex);
10875
10876   return sal;
10877 }
10878
10879 /* Parse the arguments (ARGS) of the "catch exception" command.
10880  
10881    Set TYPE to the appropriate exception catchpoint type.
10882    If the user asked the catchpoint to catch only a specific
10883    exception, then save the exception name in ADDR_STRING.
10884
10885    See ada_exception_sal for a description of all the remaining
10886    function arguments of this function.  */
10887
10888 struct symtab_and_line
10889 ada_decode_exception_location (char *args, char **addr_string,
10890                                char **exp_string, char **cond_string,
10891                                struct expression **cond,
10892                                struct breakpoint_ops **ops)
10893 {
10894   enum exception_catchpoint_kind ex;
10895
10896   catch_ada_exception_command_split (args, &ex, exp_string);
10897   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10898                             cond, ops);
10899 }
10900
10901 struct symtab_and_line
10902 ada_decode_assert_location (char *args, char **addr_string,
10903                             struct breakpoint_ops **ops)
10904 {
10905   /* Check that no argument where provided at the end of the command.  */
10906
10907   if (args != NULL)
10908     {
10909       while (isspace (*args))
10910         args++;
10911       if (*args != '\0')
10912         error (_("Junk at end of arguments."));
10913     }
10914
10915   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10916                             ops);
10917 }
10918
10919                                 /* Operators */
10920 /* Information about operators given special treatment in functions
10921    below.  */
10922 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10923
10924 #define ADA_OPERATORS \
10925     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10926     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10927     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10928     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10929     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10930     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10931     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10932     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10933     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10934     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10935     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10936     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10937     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10938     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10939     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10940     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10941     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10942     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10943     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10944
10945 static void
10946 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10947 {
10948   switch (exp->elts[pc - 1].opcode)
10949     {
10950     default:
10951       operator_length_standard (exp, pc, oplenp, argsp);
10952       break;
10953
10954 #define OP_DEFN(op, len, args, binop) \
10955     case op: *oplenp = len; *argsp = args; break;
10956       ADA_OPERATORS;
10957 #undef OP_DEFN
10958
10959     case OP_AGGREGATE:
10960       *oplenp = 3;
10961       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10962       break;
10963
10964     case OP_CHOICES:
10965       *oplenp = 3;
10966       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10967       break;
10968     }
10969 }
10970
10971 static char *
10972 ada_op_name (enum exp_opcode opcode)
10973 {
10974   switch (opcode)
10975     {
10976     default:
10977       return op_name_standard (opcode);
10978
10979 #define OP_DEFN(op, len, args, binop) case op: return #op;
10980       ADA_OPERATORS;
10981 #undef OP_DEFN
10982
10983     case OP_AGGREGATE:
10984       return "OP_AGGREGATE";
10985     case OP_CHOICES:
10986       return "OP_CHOICES";
10987     case OP_NAME:
10988       return "OP_NAME";
10989     }
10990 }
10991
10992 /* As for operator_length, but assumes PC is pointing at the first
10993    element of the operator, and gives meaningful results only for the 
10994    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10995
10996 static void
10997 ada_forward_operator_length (struct expression *exp, int pc,
10998                              int *oplenp, int *argsp)
10999 {
11000   switch (exp->elts[pc].opcode)
11001     {
11002     default:
11003       *oplenp = *argsp = 0;
11004       break;
11005
11006 #define OP_DEFN(op, len, args, binop) \
11007     case op: *oplenp = len; *argsp = args; break;
11008       ADA_OPERATORS;
11009 #undef OP_DEFN
11010
11011     case OP_AGGREGATE:
11012       *oplenp = 3;
11013       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
11014       break;
11015
11016     case OP_CHOICES:
11017       *oplenp = 3;
11018       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
11019       break;
11020
11021     case OP_STRING:
11022     case OP_NAME:
11023       {
11024         int len = longest_to_int (exp->elts[pc + 1].longconst);
11025         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
11026         *argsp = 0;
11027         break;
11028       }
11029     }
11030 }
11031
11032 static int
11033 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
11034 {
11035   enum exp_opcode op = exp->elts[elt].opcode;
11036   int oplen, nargs;
11037   int pc = elt;
11038   int i;
11039
11040   ada_forward_operator_length (exp, elt, &oplen, &nargs);
11041
11042   switch (op)
11043     {
11044       /* Ada attributes ('Foo).  */
11045     case OP_ATR_FIRST:
11046     case OP_ATR_LAST:
11047     case OP_ATR_LENGTH:
11048     case OP_ATR_IMAGE:
11049     case OP_ATR_MAX:
11050     case OP_ATR_MIN:
11051     case OP_ATR_MODULUS:
11052     case OP_ATR_POS:
11053     case OP_ATR_SIZE:
11054     case OP_ATR_TAG:
11055     case OP_ATR_VAL:
11056       break;
11057
11058     case UNOP_IN_RANGE:
11059     case UNOP_QUAL:
11060       /* XXX: gdb_sprint_host_address, type_sprint */
11061       fprintf_filtered (stream, _("Type @"));
11062       gdb_print_host_address (exp->elts[pc + 1].type, stream);
11063       fprintf_filtered (stream, " (");
11064       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
11065       fprintf_filtered (stream, ")");
11066       break;
11067     case BINOP_IN_BOUNDS:
11068       fprintf_filtered (stream, " (%d)",
11069                         longest_to_int (exp->elts[pc + 2].longconst));
11070       break;
11071     case TERNOP_IN_RANGE:
11072       break;
11073
11074     case OP_AGGREGATE:
11075     case OP_OTHERS:
11076     case OP_DISCRETE_RANGE:
11077     case OP_POSITIONAL:
11078     case OP_CHOICES:
11079       break;
11080
11081     case OP_NAME:
11082     case OP_STRING:
11083       {
11084         char *name = &exp->elts[elt + 2].string;
11085         int len = longest_to_int (exp->elts[elt + 1].longconst);
11086         fprintf_filtered (stream, "Text: `%.*s'", len, name);
11087         break;
11088       }
11089
11090     default:
11091       return dump_subexp_body_standard (exp, stream, elt);
11092     }
11093
11094   elt += oplen;
11095   for (i = 0; i < nargs; i += 1)
11096     elt = dump_subexp (exp, stream, elt);
11097
11098   return elt;
11099 }
11100
11101 /* The Ada extension of print_subexp (q.v.).  */
11102
11103 static void
11104 ada_print_subexp (struct expression *exp, int *pos,
11105                   struct ui_file *stream, enum precedence prec)
11106 {
11107   int oplen, nargs, i;
11108   int pc = *pos;
11109   enum exp_opcode op = exp->elts[pc].opcode;
11110
11111   ada_forward_operator_length (exp, pc, &oplen, &nargs);
11112
11113   *pos += oplen;
11114   switch (op)
11115     {
11116     default:
11117       *pos -= oplen;
11118       print_subexp_standard (exp, pos, stream, prec);
11119       return;
11120
11121     case OP_VAR_VALUE:
11122       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11123       return;
11124
11125     case BINOP_IN_BOUNDS:
11126       /* XXX: sprint_subexp */
11127       print_subexp (exp, pos, stream, PREC_SUFFIX);
11128       fputs_filtered (" in ", stream);
11129       print_subexp (exp, pos, stream, PREC_SUFFIX);
11130       fputs_filtered ("'range", stream);
11131       if (exp->elts[pc + 1].longconst > 1)
11132         fprintf_filtered (stream, "(%ld)",
11133                           (long) exp->elts[pc + 1].longconst);
11134       return;
11135
11136     case TERNOP_IN_RANGE:
11137       if (prec >= PREC_EQUAL)
11138         fputs_filtered ("(", stream);
11139       /* XXX: sprint_subexp */
11140       print_subexp (exp, pos, stream, PREC_SUFFIX);
11141       fputs_filtered (" in ", stream);
11142       print_subexp (exp, pos, stream, PREC_EQUAL);
11143       fputs_filtered (" .. ", stream);
11144       print_subexp (exp, pos, stream, PREC_EQUAL);
11145       if (prec >= PREC_EQUAL)
11146         fputs_filtered (")", stream);
11147       return;
11148
11149     case OP_ATR_FIRST:
11150     case OP_ATR_LAST:
11151     case OP_ATR_LENGTH:
11152     case OP_ATR_IMAGE:
11153     case OP_ATR_MAX:
11154     case OP_ATR_MIN:
11155     case OP_ATR_MODULUS:
11156     case OP_ATR_POS:
11157     case OP_ATR_SIZE:
11158     case OP_ATR_TAG:
11159     case OP_ATR_VAL:
11160       if (exp->elts[*pos].opcode == OP_TYPE)
11161         {
11162           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11163             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11164           *pos += 3;
11165         }
11166       else
11167         print_subexp (exp, pos, stream, PREC_SUFFIX);
11168       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11169       if (nargs > 1)
11170         {
11171           int tem;
11172           for (tem = 1; tem < nargs; tem += 1)
11173             {
11174               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11175               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11176             }
11177           fputs_filtered (")", stream);
11178         }
11179       return;
11180
11181     case UNOP_QUAL:
11182       type_print (exp->elts[pc + 1].type, "", stream, 0);
11183       fputs_filtered ("'(", stream);
11184       print_subexp (exp, pos, stream, PREC_PREFIX);
11185       fputs_filtered (")", stream);
11186       return;
11187
11188     case UNOP_IN_RANGE:
11189       /* XXX: sprint_subexp */
11190       print_subexp (exp, pos, stream, PREC_SUFFIX);
11191       fputs_filtered (" in ", stream);
11192       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11193       return;
11194
11195     case OP_DISCRETE_RANGE:
11196       print_subexp (exp, pos, stream, PREC_SUFFIX);
11197       fputs_filtered ("..", stream);
11198       print_subexp (exp, pos, stream, PREC_SUFFIX);
11199       return;
11200
11201     case OP_OTHERS:
11202       fputs_filtered ("others => ", stream);
11203       print_subexp (exp, pos, stream, PREC_SUFFIX);
11204       return;
11205
11206     case OP_CHOICES:
11207       for (i = 0; i < nargs-1; i += 1)
11208         {
11209           if (i > 0)
11210             fputs_filtered ("|", stream);
11211           print_subexp (exp, pos, stream, PREC_SUFFIX);
11212         }
11213       fputs_filtered (" => ", stream);
11214       print_subexp (exp, pos, stream, PREC_SUFFIX);
11215       return;
11216       
11217     case OP_POSITIONAL:
11218       print_subexp (exp, pos, stream, PREC_SUFFIX);
11219       return;
11220
11221     case OP_AGGREGATE:
11222       fputs_filtered ("(", stream);
11223       for (i = 0; i < nargs; i += 1)
11224         {
11225           if (i > 0)
11226             fputs_filtered (", ", stream);
11227           print_subexp (exp, pos, stream, PREC_SUFFIX);
11228         }
11229       fputs_filtered (")", stream);
11230       return;
11231     }
11232 }
11233
11234 /* Table mapping opcodes into strings for printing operators
11235    and precedences of the operators.  */
11236
11237 static const struct op_print ada_op_print_tab[] = {
11238   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11239   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11240   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11241   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11242   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11243   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11244   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11245   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11246   {"<=", BINOP_LEQ, PREC_ORDER, 0},
11247   {">=", BINOP_GEQ, PREC_ORDER, 0},
11248   {">", BINOP_GTR, PREC_ORDER, 0},
11249   {"<", BINOP_LESS, PREC_ORDER, 0},
11250   {">>", BINOP_RSH, PREC_SHIFT, 0},
11251   {"<<", BINOP_LSH, PREC_SHIFT, 0},
11252   {"+", BINOP_ADD, PREC_ADD, 0},
11253   {"-", BINOP_SUB, PREC_ADD, 0},
11254   {"&", BINOP_CONCAT, PREC_ADD, 0},
11255   {"*", BINOP_MUL, PREC_MUL, 0},
11256   {"/", BINOP_DIV, PREC_MUL, 0},
11257   {"rem", BINOP_REM, PREC_MUL, 0},
11258   {"mod", BINOP_MOD, PREC_MUL, 0},
11259   {"**", BINOP_EXP, PREC_REPEAT, 0},
11260   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11261   {"-", UNOP_NEG, PREC_PREFIX, 0},
11262   {"+", UNOP_PLUS, PREC_PREFIX, 0},
11263   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11264   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11265   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
11266   {".all", UNOP_IND, PREC_SUFFIX, 1},
11267   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11268   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
11269   {NULL, 0, 0, 0}
11270 };
11271 \f
11272 enum ada_primitive_types {
11273   ada_primitive_type_int,
11274   ada_primitive_type_long,
11275   ada_primitive_type_short,
11276   ada_primitive_type_char,
11277   ada_primitive_type_float,
11278   ada_primitive_type_double,
11279   ada_primitive_type_void,
11280   ada_primitive_type_long_long,
11281   ada_primitive_type_long_double,
11282   ada_primitive_type_natural,
11283   ada_primitive_type_positive,
11284   ada_primitive_type_system_address,
11285   nr_ada_primitive_types
11286 };
11287
11288 static void
11289 ada_language_arch_info (struct gdbarch *gdbarch,
11290                         struct language_arch_info *lai)
11291 {
11292   const struct builtin_type *builtin = builtin_type (gdbarch);
11293   lai->primitive_type_vector
11294     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
11295                               struct type *);
11296
11297   lai->primitive_type_vector [ada_primitive_type_int]
11298     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11299                          0, "integer");
11300   lai->primitive_type_vector [ada_primitive_type_long]
11301     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
11302                          0, "long_integer");
11303   lai->primitive_type_vector [ada_primitive_type_short]
11304     = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
11305                          0, "short_integer");
11306   lai->string_char_type
11307     = lai->primitive_type_vector [ada_primitive_type_char]
11308     = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
11309   lai->primitive_type_vector [ada_primitive_type_float]
11310     = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
11311                        "float", NULL);
11312   lai->primitive_type_vector [ada_primitive_type_double]
11313     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11314                        "long_float", NULL);
11315   lai->primitive_type_vector [ada_primitive_type_long_long]
11316     = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
11317                          0, "long_long_integer");
11318   lai->primitive_type_vector [ada_primitive_type_long_double]
11319     = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11320                        "long_long_float", NULL);
11321   lai->primitive_type_vector [ada_primitive_type_natural]
11322     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11323                          0, "natural");
11324   lai->primitive_type_vector [ada_primitive_type_positive]
11325     = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11326                          0, "positive");
11327   lai->primitive_type_vector [ada_primitive_type_void]
11328     = builtin->builtin_void;
11329
11330   lai->primitive_type_vector [ada_primitive_type_system_address]
11331     = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
11332   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11333     = "system__address";
11334
11335   lai->bool_type_symbol = NULL;
11336   lai->bool_type_default = builtin->builtin_bool;
11337 }
11338 \f
11339                                 /* Language vector */
11340
11341 /* Not really used, but needed in the ada_language_defn.  */
11342
11343 static void
11344 emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
11345 {
11346   ada_emit_char (c, type, stream, quoter, 1);
11347 }
11348
11349 static int
11350 parse (void)
11351 {
11352   warnings_issued = 0;
11353   return ada_parse ();
11354 }
11355
11356 static const struct exp_descriptor ada_exp_descriptor = {
11357   ada_print_subexp,
11358   ada_operator_length,
11359   ada_op_name,
11360   ada_dump_subexp_body,
11361   ada_evaluate_subexp
11362 };
11363
11364 const struct language_defn ada_language_defn = {
11365   "ada",                        /* Language name */
11366   language_ada,
11367   range_check_off,
11368   type_check_off,
11369   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11370                                    that's not quite what this means.  */
11371   array_row_major,
11372   macro_expansion_no,
11373   &ada_exp_descriptor,
11374   parse,
11375   ada_error,
11376   resolve,
11377   ada_printchar,                /* Print a character constant */
11378   ada_printstr,                 /* Function to print string constant */
11379   emit_char,                    /* Function to print single char (not used) */
11380   ada_print_type,               /* Print a type using appropriate syntax */
11381   default_print_typedef,        /* Print a typedef using appropriate syntax */
11382   ada_val_print,                /* Print a value using appropriate syntax */
11383   ada_value_print,              /* Print a top-level value */
11384   NULL,                         /* Language specific skip_trampoline */
11385   NULL,                         /* name_of_this */
11386   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11387   basic_lookup_transparent_type,        /* lookup_transparent_type */
11388   ada_la_decode,                /* Language specific symbol demangler */
11389   NULL,                         /* Language specific class_name_from_physname */
11390   ada_op_print_tab,             /* expression operators for printing */
11391   0,                            /* c-style arrays */
11392   1,                            /* String lower bound */
11393   ada_get_gdb_completer_word_break_characters,
11394   ada_make_symbol_completion_list,
11395   ada_language_arch_info,
11396   ada_print_array_index,
11397   default_pass_by_reference,
11398   c_get_string,
11399   LANG_MAGIC
11400 };
11401
11402 /* Provide a prototype to silence -Wmissing-prototypes.  */
11403 extern initialize_file_ftype _initialize_ada_language;
11404
11405 void
11406 _initialize_ada_language (void)
11407 {
11408   add_language (&ada_language_defn);
11409
11410   varsize_limit = 65536;
11411
11412   obstack_init (&symbol_list_obstack);
11413
11414   decoded_names_store = htab_create_alloc
11415     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11416      NULL, xcalloc, xfree);
11417
11418   observer_attach_executable_changed (ada_executable_changed_observer);
11419 }