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