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