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