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