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