* symtab.c (multiple_symbols_ask, multiple_symbols_all)
[platform/upstream/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_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   const 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   printf_unfiltered (("%s "), prompt);
3436   gdb_flush (gdb_stdout);
3437
3438   args = command_line_input ((char *) NULL, 0, annotation_suffix);
3439
3440   if (args == NULL)
3441     error_no_arg (_("one or more choice numbers"));
3442
3443   n_chosen = 0;
3444
3445   /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3446      order, as given in args.  Choices are validated.  */
3447   while (1)
3448     {
3449       char *args2;
3450       int choice, j;
3451
3452       while (isspace (*args))
3453         args += 1;
3454       if (*args == '\0' && n_chosen == 0)
3455         error_no_arg (_("one or more choice numbers"));
3456       else if (*args == '\0')
3457         break;
3458
3459       choice = strtol (args, &args2, 10);
3460       if (args == args2 || choice < 0
3461           || choice > n_choices + first_choice - 1)
3462         error (_("Argument must be choice number"));
3463       args = args2;
3464
3465       if (choice == 0)
3466         error (_("cancelled"));
3467
3468       if (choice < first_choice)
3469         {
3470           n_chosen = n_choices;
3471           for (j = 0; j < n_choices; j += 1)
3472             choices[j] = j;
3473           break;
3474         }
3475       choice -= first_choice;
3476
3477       for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
3478         {
3479         }
3480
3481       if (j < 0 || choice != choices[j])
3482         {
3483           int k;
3484           for (k = n_chosen - 1; k > j; k -= 1)
3485             choices[k + 1] = choices[k];
3486           choices[j + 1] = choice;
3487           n_chosen += 1;
3488         }
3489     }
3490
3491   if (n_chosen > max_results)
3492     error (_("Select no more than %d of the above"), max_results);
3493
3494   return n_chosen;
3495 }
3496
3497 /* Replace the operator of length OPLEN at position PC in *EXPP with a call
3498    on the function identified by SYM and BLOCK, and taking NARGS
3499    arguments.  Update *EXPP as needed to hold more space.  */
3500
3501 static void
3502 replace_operator_with_call (struct expression **expp, int pc, int nargs,
3503                             int oplen, struct symbol *sym,
3504                             struct block *block)
3505 {
3506   /* A new expression, with 6 more elements (3 for funcall, 4 for function
3507      symbol, -oplen for operator being replaced).  */
3508   struct expression *newexp = (struct expression *)
3509     xmalloc (sizeof (struct expression)
3510              + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
3511   struct expression *exp = *expp;
3512
3513   newexp->nelts = exp->nelts + 7 - oplen;
3514   newexp->language_defn = exp->language_defn;
3515   memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
3516   memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
3517           EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
3518
3519   newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3520   newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3521
3522   newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3523   newexp->elts[pc + 4].block = block;
3524   newexp->elts[pc + 5].symbol = sym;
3525
3526   *expp = newexp;
3527   xfree (exp);
3528 }
3529
3530 /* Type-class predicates */
3531
3532 /* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3533    or FLOAT).  */
3534
3535 static int
3536 numeric_type_p (struct type *type)
3537 {
3538   if (type == NULL)
3539     return 0;
3540   else
3541     {
3542       switch (TYPE_CODE (type))
3543         {
3544         case TYPE_CODE_INT:
3545         case TYPE_CODE_FLT:
3546           return 1;
3547         case TYPE_CODE_RANGE:
3548           return (type == TYPE_TARGET_TYPE (type)
3549                   || numeric_type_p (TYPE_TARGET_TYPE (type)));
3550         default:
3551           return 0;
3552         }
3553     }
3554 }
3555
3556 /* True iff TYPE is integral (an INT or RANGE of INTs).  */
3557
3558 static int
3559 integer_type_p (struct type *type)
3560 {
3561   if (type == NULL)
3562     return 0;
3563   else
3564     {
3565       switch (TYPE_CODE (type))
3566         {
3567         case TYPE_CODE_INT:
3568           return 1;
3569         case TYPE_CODE_RANGE:
3570           return (type == TYPE_TARGET_TYPE (type)
3571                   || integer_type_p (TYPE_TARGET_TYPE (type)));
3572         default:
3573           return 0;
3574         }
3575     }
3576 }
3577
3578 /* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM).  */
3579
3580 static int
3581 scalar_type_p (struct type *type)
3582 {
3583   if (type == NULL)
3584     return 0;
3585   else
3586     {
3587       switch (TYPE_CODE (type))
3588         {
3589         case TYPE_CODE_INT:
3590         case TYPE_CODE_RANGE:
3591         case TYPE_CODE_ENUM:
3592         case TYPE_CODE_FLT:
3593           return 1;
3594         default:
3595           return 0;
3596         }
3597     }
3598 }
3599
3600 /* True iff TYPE is discrete (INT, RANGE, ENUM).  */
3601
3602 static int
3603 discrete_type_p (struct type *type)
3604 {
3605   if (type == NULL)
3606     return 0;
3607   else
3608     {
3609       switch (TYPE_CODE (type))
3610         {
3611         case TYPE_CODE_INT:
3612         case TYPE_CODE_RANGE:
3613         case TYPE_CODE_ENUM:
3614           return 1;
3615         default:
3616           return 0;
3617         }
3618     }
3619 }
3620
3621 /* Returns non-zero if OP with operands in the vector ARGS could be
3622    a user-defined function.  Errs on the side of pre-defined operators
3623    (i.e., result 0).  */
3624
3625 static int
3626 possible_user_operator_p (enum exp_opcode op, struct value *args[])
3627 {
3628   struct type *type0 =
3629     (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
3630   struct type *type1 =
3631     (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
3632
3633   if (type0 == NULL)
3634     return 0;
3635
3636   switch (op)
3637     {
3638     default:
3639       return 0;
3640
3641     case BINOP_ADD:
3642     case BINOP_SUB:
3643     case BINOP_MUL:
3644     case BINOP_DIV:
3645       return (!(numeric_type_p (type0) && numeric_type_p (type1)));
3646
3647     case BINOP_REM:
3648     case BINOP_MOD:
3649     case BINOP_BITWISE_AND:
3650     case BINOP_BITWISE_IOR:
3651     case BINOP_BITWISE_XOR:
3652       return (!(integer_type_p (type0) && integer_type_p (type1)));
3653
3654     case BINOP_EQUAL:
3655     case BINOP_NOTEQUAL:
3656     case BINOP_LESS:
3657     case BINOP_GTR:
3658     case BINOP_LEQ:
3659     case BINOP_GEQ:
3660       return (!(scalar_type_p (type0) && scalar_type_p (type1)));
3661
3662     case BINOP_CONCAT:
3663       return !ada_is_array_type (type0) || !ada_is_array_type (type1);
3664
3665     case BINOP_EXP:
3666       return (!(numeric_type_p (type0) && integer_type_p (type1)));
3667
3668     case UNOP_NEG:
3669     case UNOP_PLUS:
3670     case UNOP_LOGICAL_NOT:
3671     case UNOP_ABS:
3672       return (!numeric_type_p (type0));
3673
3674     }
3675 }
3676 \f
3677                                 /* Renaming */
3678
3679 /* NOTES: 
3680
3681    1. In the following, we assume that a renaming type's name may
3682       have an ___XD suffix.  It would be nice if this went away at some
3683       point.
3684    2. We handle both the (old) purely type-based representation of 
3685       renamings and the (new) variable-based encoding.  At some point,
3686       it is devoutly to be hoped that the former goes away 
3687       (FIXME: hilfinger-2007-07-09).
3688    3. Subprogram renamings are not implemented, although the XRS
3689       suffix is recognized (FIXME: hilfinger-2007-07-09).  */
3690
3691 /* If SYM encodes a renaming, 
3692
3693        <renaming> renames <renamed entity>,
3694
3695    sets *LEN to the length of the renamed entity's name,
3696    *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3697    the string describing the subcomponent selected from the renamed
3698    entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3699    (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3700    are undefined).  Otherwise, returns a value indicating the category
3701    of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3702    (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3703    subprogram (ADA_SUBPROGRAM_RENAMING).  Does no allocation; the
3704    strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3705    deallocated.  The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3706    may be NULL, in which case they are not assigned.
3707
3708    [Currently, however, GCC does not generate subprogram renamings.]  */
3709
3710 enum ada_renaming_category
3711 ada_parse_renaming (struct symbol *sym,
3712                     const char **renamed_entity, int *len, 
3713                     const char **renaming_expr)
3714 {
3715   enum ada_renaming_category kind;
3716   const char *info;
3717   const char *suffix;
3718
3719   if (sym == NULL)
3720     return ADA_NOT_RENAMING;
3721   switch (SYMBOL_CLASS (sym)) 
3722     {
3723     default:
3724       return ADA_NOT_RENAMING;
3725     case LOC_TYPEDEF:
3726       return parse_old_style_renaming (SYMBOL_TYPE (sym), 
3727                                        renamed_entity, len, renaming_expr);
3728     case LOC_LOCAL:
3729     case LOC_STATIC:
3730     case LOC_COMPUTED:
3731     case LOC_OPTIMIZED_OUT:
3732       info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3733       if (info == NULL)
3734         return ADA_NOT_RENAMING;
3735       switch (info[5])
3736         {
3737         case '_':
3738           kind = ADA_OBJECT_RENAMING;
3739           info += 6;
3740           break;
3741         case 'E':
3742           kind = ADA_EXCEPTION_RENAMING;
3743           info += 7;
3744           break;
3745         case 'P':
3746           kind = ADA_PACKAGE_RENAMING;
3747           info += 7;
3748           break;
3749         case 'S':
3750           kind = ADA_SUBPROGRAM_RENAMING;
3751           info += 7;
3752           break;
3753         default:
3754           return ADA_NOT_RENAMING;
3755         }
3756     }
3757
3758   if (renamed_entity != NULL)
3759     *renamed_entity = info;
3760   suffix = strstr (info, "___XE");
3761   if (suffix == NULL || suffix == info)
3762     return ADA_NOT_RENAMING;
3763   if (len != NULL)
3764     *len = strlen (info) - strlen (suffix);
3765   suffix += 5;
3766   if (renaming_expr != NULL)
3767     *renaming_expr = suffix;
3768   return kind;
3769 }
3770
3771 /* Assuming TYPE encodes a renaming according to the old encoding in
3772    exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3773    *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above.  Returns
3774    ADA_NOT_RENAMING otherwise.  */
3775 static enum ada_renaming_category
3776 parse_old_style_renaming (struct type *type,
3777                           const char **renamed_entity, int *len, 
3778                           const char **renaming_expr)
3779 {
3780   enum ada_renaming_category kind;
3781   const char *name;
3782   const char *info;
3783   const char *suffix;
3784
3785   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM 
3786       || TYPE_NFIELDS (type) != 1)
3787     return ADA_NOT_RENAMING;
3788
3789   name = type_name_no_tag (type);
3790   if (name == NULL)
3791     return ADA_NOT_RENAMING;
3792   
3793   name = strstr (name, "___XR");
3794   if (name == NULL)
3795     return ADA_NOT_RENAMING;
3796   switch (name[5])
3797     {
3798     case '\0':
3799     case '_':
3800       kind = ADA_OBJECT_RENAMING;
3801       break;
3802     case 'E':
3803       kind = ADA_EXCEPTION_RENAMING;
3804       break;
3805     case 'P':
3806       kind = ADA_PACKAGE_RENAMING;
3807       break;
3808     case 'S':
3809       kind = ADA_SUBPROGRAM_RENAMING;
3810       break;
3811     default:
3812       return ADA_NOT_RENAMING;
3813     }
3814
3815   info = TYPE_FIELD_NAME (type, 0);
3816   if (info == NULL)
3817     return ADA_NOT_RENAMING;
3818   if (renamed_entity != NULL)
3819     *renamed_entity = info;
3820   suffix = strstr (info, "___XE");
3821   if (renaming_expr != NULL)
3822     *renaming_expr = suffix + 5;
3823   if (suffix == NULL || suffix == info)
3824     return ADA_NOT_RENAMING;
3825   if (len != NULL)
3826     *len = suffix - info;
3827   return kind;
3828 }  
3829
3830 \f
3831
3832                                 /* Evaluation: Function Calls */
3833
3834 /* Return an lvalue containing the value VAL.  This is the identity on
3835    lvalues, and otherwise has the side-effect of pushing a copy of VAL 
3836    on the stack, using and updating *SP as the stack pointer, and 
3837    returning an lvalue whose VALUE_ADDRESS points to the copy.  */
3838
3839 static struct value *
3840 ensure_lval (struct value *val, CORE_ADDR *sp)
3841 {
3842   if (! VALUE_LVAL (val))
3843     {
3844       int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
3845
3846       /* The following is taken from the structure-return code in
3847          call_function_by_hand. FIXME: Therefore, some refactoring seems 
3848          indicated. */
3849       if (gdbarch_inner_than (current_gdbarch, 1, 2))
3850         {
3851           /* Stack grows downward.  Align SP and VALUE_ADDRESS (val) after
3852              reserving sufficient space. */
3853           *sp -= len;
3854           if (gdbarch_frame_align_p (current_gdbarch))
3855             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3856           VALUE_ADDRESS (val) = *sp;
3857         }
3858       else
3859         {
3860           /* Stack grows upward.  Align the frame, allocate space, and
3861              then again, re-align the frame. */
3862           if (gdbarch_frame_align_p (current_gdbarch))
3863             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3864           VALUE_ADDRESS (val) = *sp;
3865           *sp += len;
3866           if (gdbarch_frame_align_p (current_gdbarch))
3867             *sp = gdbarch_frame_align (current_gdbarch, *sp);
3868         }
3869       VALUE_LVAL (val) = lval_memory;
3870
3871       write_memory (VALUE_ADDRESS (val), value_contents_raw (val), len);
3872     }
3873
3874   return val;
3875 }
3876
3877 /* Return the value ACTUAL, converted to be an appropriate value for a
3878    formal of type FORMAL_TYPE.  Use *SP as a stack pointer for
3879    allocating any necessary descriptors (fat pointers), or copies of
3880    values not residing in memory, updating it as needed.  */
3881
3882 struct value *
3883 ada_convert_actual (struct value *actual, struct type *formal_type0,
3884                     CORE_ADDR *sp)
3885 {
3886   struct type *actual_type = ada_check_typedef (value_type (actual));
3887   struct type *formal_type = ada_check_typedef (formal_type0);
3888   struct type *formal_target =
3889     TYPE_CODE (formal_type) == TYPE_CODE_PTR
3890     ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3891   struct type *actual_target =
3892     TYPE_CODE (actual_type) == TYPE_CODE_PTR
3893     ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3894
3895   if (ada_is_array_descriptor_type (formal_target)
3896       && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3897     return make_array_descriptor (formal_type, actual, sp);
3898   else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3899            || TYPE_CODE (formal_type) == TYPE_CODE_REF)
3900     {
3901       struct value *result;
3902       if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3903           && ada_is_array_descriptor_type (actual_target))
3904         result = desc_data (actual);
3905       else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3906         {
3907           if (VALUE_LVAL (actual) != lval_memory)
3908             {
3909               struct value *val;
3910               actual_type = ada_check_typedef (value_type (actual));
3911               val = allocate_value (actual_type);
3912               memcpy ((char *) value_contents_raw (val),
3913                       (char *) value_contents (actual),
3914                       TYPE_LENGTH (actual_type));
3915               actual = ensure_lval (val, sp);
3916             }
3917           result = value_addr (actual);
3918         }
3919       else
3920         return actual;
3921       return value_cast_pointers (formal_type, result);
3922     }
3923   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3924     return ada_value_ind (actual);
3925
3926   return actual;
3927 }
3928
3929
3930 /* Push a descriptor of type TYPE for array value ARR on the stack at
3931    *SP, updating *SP to reflect the new descriptor.  Return either
3932    an lvalue representing the new descriptor, or (if TYPE is a pointer-
3933    to-descriptor type rather than a descriptor type), a struct value *
3934    representing a pointer to this descriptor.  */
3935
3936 static struct value *
3937 make_array_descriptor (struct type *type, struct value *arr, CORE_ADDR *sp)
3938 {
3939   struct type *bounds_type = desc_bounds_type (type);
3940   struct type *desc_type = desc_base_type (type);
3941   struct value *descriptor = allocate_value (desc_type);
3942   struct value *bounds = allocate_value (bounds_type);
3943   int i;
3944
3945   for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
3946     {
3947       modify_general_field (value_contents_writeable (bounds),
3948                             value_as_long (ada_array_bound (arr, i, 0)),
3949                             desc_bound_bitpos (bounds_type, i, 0),
3950                             desc_bound_bitsize (bounds_type, i, 0));
3951       modify_general_field (value_contents_writeable (bounds),
3952                             value_as_long (ada_array_bound (arr, i, 1)),
3953                             desc_bound_bitpos (bounds_type, i, 1),
3954                             desc_bound_bitsize (bounds_type, i, 1));
3955     }
3956
3957   bounds = ensure_lval (bounds, sp);
3958
3959   modify_general_field (value_contents_writeable (descriptor),
3960                         VALUE_ADDRESS (ensure_lval (arr, sp)),
3961                         fat_pntr_data_bitpos (desc_type),
3962                         fat_pntr_data_bitsize (desc_type));
3963
3964   modify_general_field (value_contents_writeable (descriptor),
3965                         VALUE_ADDRESS (bounds),
3966                         fat_pntr_bounds_bitpos (desc_type),
3967                         fat_pntr_bounds_bitsize (desc_type));
3968
3969   descriptor = ensure_lval (descriptor, sp);
3970
3971   if (TYPE_CODE (type) == TYPE_CODE_PTR)
3972     return value_addr (descriptor);
3973   else
3974     return descriptor;
3975 }
3976 \f
3977 /* Dummy definitions for an experimental caching module that is not
3978  * used in the public sources. */
3979
3980 static int
3981 lookup_cached_symbol (const char *name, domain_enum namespace,
3982                       struct symbol **sym, struct block **block,
3983                       struct symtab **symtab)
3984 {
3985   return 0;
3986 }
3987
3988 static void
3989 cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
3990               struct block *block, struct symtab *symtab)
3991 {
3992 }
3993 \f
3994                                 /* Symbol Lookup */
3995
3996 /* Return the result of a standard (literal, C-like) lookup of NAME in
3997    given DOMAIN, visible from lexical block BLOCK.  */
3998
3999 static struct symbol *
4000 standard_lookup (const char *name, const struct block *block,
4001                  domain_enum domain)
4002 {
4003   struct symbol *sym;
4004   struct symtab *symtab;
4005
4006   if (lookup_cached_symbol (name, domain, &sym, NULL, NULL))
4007     return sym;
4008   sym =
4009     lookup_symbol_in_language (name, block, domain, language_c, 0, &symtab);
4010   cache_symbol (name, domain, sym, block_found, symtab);
4011   return sym;
4012 }
4013
4014
4015 /* Non-zero iff there is at least one non-function/non-enumeral symbol
4016    in the symbol fields of SYMS[0..N-1].  We treat enumerals as functions, 
4017    since they contend in overloading in the same way.  */
4018 static int
4019 is_nonfunction (struct ada_symbol_info syms[], int n)
4020 {
4021   int i;
4022
4023   for (i = 0; i < n; i += 1)
4024     if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4025         && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4026             || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
4027       return 1;
4028
4029   return 0;
4030 }
4031
4032 /* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4033    struct types.  Otherwise, they may not.  */
4034
4035 static int
4036 equiv_types (struct type *type0, struct type *type1)
4037 {
4038   if (type0 == type1)
4039     return 1;
4040   if (type0 == NULL || type1 == NULL
4041       || TYPE_CODE (type0) != TYPE_CODE (type1))
4042     return 0;
4043   if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
4044        || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4045       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4046       && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
4047     return 1;
4048
4049   return 0;
4050 }
4051
4052 /* True iff SYM0 represents the same entity as SYM1, or one that is
4053    no more defined than that of SYM1.  */
4054
4055 static int
4056 lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
4057 {
4058   if (sym0 == sym1)
4059     return 1;
4060   if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
4061       || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4062     return 0;
4063
4064   switch (SYMBOL_CLASS (sym0))
4065     {
4066     case LOC_UNDEF:
4067       return 1;
4068     case LOC_TYPEDEF:
4069       {
4070         struct type *type0 = SYMBOL_TYPE (sym0);
4071         struct type *type1 = SYMBOL_TYPE (sym1);
4072         char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4073         char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4074         int len0 = strlen (name0);
4075         return
4076           TYPE_CODE (type0) == TYPE_CODE (type1)
4077           && (equiv_types (type0, type1)
4078               || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4079                   && strncmp (name1 + len0, "___XV", 5) == 0));
4080       }
4081     case LOC_CONST:
4082       return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4083         && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4084     default:
4085       return 0;
4086     }
4087 }
4088
4089 /* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4090    records in OBSTACKP.  Do nothing if SYM is a duplicate.  */
4091
4092 static void
4093 add_defn_to_vec (struct obstack *obstackp,
4094                  struct symbol *sym,
4095                  struct block *block, struct symtab *symtab)
4096 {
4097   int i;
4098   size_t tmp;
4099   struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
4100
4101   /* Do not try to complete stub types, as the debugger is probably
4102      already scanning all symbols matching a certain name at the
4103      time when this function is called.  Trying to replace the stub
4104      type by its associated full type will cause us to restart a scan
4105      which may lead to an infinite recursion.  Instead, the client
4106      collecting the matching symbols will end up collecting several
4107      matches, with at least one of them complete.  It can then filter
4108      out the stub ones if needed.  */
4109
4110   for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4111     {
4112       if (lesseq_defined_than (sym, prevDefns[i].sym))
4113         return;
4114       else if (lesseq_defined_than (prevDefns[i].sym, sym))
4115         {
4116           prevDefns[i].sym = sym;
4117           prevDefns[i].block = block;
4118           prevDefns[i].symtab = symtab;
4119           return;
4120         }
4121     }
4122
4123   {
4124     struct ada_symbol_info info;
4125
4126     info.sym = sym;
4127     info.block = block;
4128     info.symtab = symtab;
4129     obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4130   }
4131 }
4132
4133 /* Number of ada_symbol_info structures currently collected in 
4134    current vector in *OBSTACKP.  */
4135
4136 static int
4137 num_defns_collected (struct obstack *obstackp)
4138 {
4139   return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4140 }
4141
4142 /* Vector of ada_symbol_info structures currently collected in current 
4143    vector in *OBSTACKP.  If FINISH, close off the vector and return
4144    its final address.  */
4145
4146 static struct ada_symbol_info *
4147 defns_collected (struct obstack *obstackp, int finish)
4148 {
4149   if (finish)
4150     return obstack_finish (obstackp);
4151   else
4152     return (struct ada_symbol_info *) obstack_base (obstackp);
4153 }
4154
4155 /* Look, in partial_symtab PST, for symbol NAME in given namespace.
4156    Check the global symbols if GLOBAL, the static symbols if not.
4157    Do wild-card match if WILD.  */
4158
4159 static struct partial_symbol *
4160 ada_lookup_partial_symbol (struct partial_symtab *pst, const char *name,
4161                            int global, domain_enum namespace, int wild)
4162 {
4163   struct partial_symbol **start;
4164   int name_len = strlen (name);
4165   int length = (global ? pst->n_global_syms : pst->n_static_syms);
4166   int i;
4167
4168   if (length == 0)
4169     {
4170       return (NULL);
4171     }
4172
4173   start = (global ?
4174            pst->objfile->global_psymbols.list + pst->globals_offset :
4175            pst->objfile->static_psymbols.list + pst->statics_offset);
4176
4177   if (wild)
4178     {
4179       for (i = 0; i < length; i += 1)
4180         {
4181           struct partial_symbol *psym = start[i];
4182
4183           if (SYMBOL_DOMAIN (psym) == namespace
4184               && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (psym)))
4185             return psym;
4186         }
4187       return NULL;
4188     }
4189   else
4190     {
4191       if (global)
4192         {
4193           int U;
4194           i = 0;
4195           U = length - 1;
4196           while (U - i > 4)
4197             {
4198               int M = (U + i) >> 1;
4199               struct partial_symbol *psym = start[M];
4200               if (SYMBOL_LINKAGE_NAME (psym)[0] < name[0])
4201                 i = M + 1;
4202               else if (SYMBOL_LINKAGE_NAME (psym)[0] > name[0])
4203                 U = M - 1;
4204               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), name) < 0)
4205                 i = M + 1;
4206               else
4207                 U = M;
4208             }
4209         }
4210       else
4211         i = 0;
4212
4213       while (i < length)
4214         {
4215           struct partial_symbol *psym = start[i];
4216
4217           if (SYMBOL_DOMAIN (psym) == namespace)
4218             {
4219               int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym), name_len);
4220
4221               if (cmp < 0)
4222                 {
4223                   if (global)
4224                     break;
4225                 }
4226               else if (cmp == 0
4227                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4228                                           + name_len))
4229                 return psym;
4230             }
4231           i += 1;
4232         }
4233
4234       if (global)
4235         {
4236           int U;
4237           i = 0;
4238           U = length - 1;
4239           while (U - i > 4)
4240             {
4241               int M = (U + i) >> 1;
4242               struct partial_symbol *psym = start[M];
4243               if (SYMBOL_LINKAGE_NAME (psym)[0] < '_')
4244                 i = M + 1;
4245               else if (SYMBOL_LINKAGE_NAME (psym)[0] > '_')
4246                 U = M - 1;
4247               else if (strcmp (SYMBOL_LINKAGE_NAME (psym), "_ada_") < 0)
4248                 i = M + 1;
4249               else
4250                 U = M;
4251             }
4252         }
4253       else
4254         i = 0;
4255
4256       while (i < length)
4257         {
4258           struct partial_symbol *psym = start[i];
4259
4260           if (SYMBOL_DOMAIN (psym) == namespace)
4261             {
4262               int cmp;
4263
4264               cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (psym)[0];
4265               if (cmp == 0)
4266                 {
4267                   cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (psym), 5);
4268                   if (cmp == 0)
4269                     cmp = strncmp (name, SYMBOL_LINKAGE_NAME (psym) + 5,
4270                                    name_len);
4271                 }
4272
4273               if (cmp < 0)
4274                 {
4275                   if (global)
4276                     break;
4277                 }
4278               else if (cmp == 0
4279                        && is_name_suffix (SYMBOL_LINKAGE_NAME (psym)
4280                                           + name_len + 5))
4281                 return psym;
4282             }
4283           i += 1;
4284         }
4285     }
4286   return NULL;
4287 }
4288
4289 /* Find a symbol table containing symbol SYM or NULL if none.  */
4290
4291 static struct symtab *
4292 symtab_for_sym (struct symbol *sym)
4293 {
4294   struct symtab *s;
4295   struct objfile *objfile;
4296   struct block *b;
4297   struct symbol *tmp_sym;
4298   struct dict_iterator iter;
4299   int j;
4300
4301   ALL_PRIMARY_SYMTABS (objfile, s)
4302   {
4303     switch (SYMBOL_CLASS (sym))
4304       {
4305       case LOC_CONST:
4306       case LOC_STATIC:
4307       case LOC_TYPEDEF:
4308       case LOC_REGISTER:
4309       case LOC_LABEL:
4310       case LOC_BLOCK:
4311       case LOC_CONST_BYTES:
4312         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4313         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4314           return s;
4315         b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
4316         ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4317           return s;
4318         break;
4319       default:
4320         break;
4321       }
4322     switch (SYMBOL_CLASS (sym))
4323       {
4324       case LOC_REGISTER:
4325       case LOC_ARG:
4326       case LOC_REF_ARG:
4327       case LOC_REGPARM:
4328       case LOC_REGPARM_ADDR:
4329       case LOC_LOCAL:
4330       case LOC_TYPEDEF:
4331       case LOC_LOCAL_ARG:
4332       case LOC_BASEREG:
4333       case LOC_BASEREG_ARG:
4334       case LOC_COMPUTED:
4335       case LOC_COMPUTED_ARG:
4336         for (j = FIRST_LOCAL_BLOCK;
4337              j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
4338           {
4339             b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
4340             ALL_BLOCK_SYMBOLS (b, iter, tmp_sym) if (sym == tmp_sym)
4341               return s;
4342           }
4343         break;
4344       default:
4345         break;
4346       }
4347   }
4348   return NULL;
4349 }
4350
4351 /* Return a minimal symbol matching NAME according to Ada decoding
4352    rules.  Returns NULL if there is no such minimal symbol.  Names 
4353    prefixed with "standard__" are handled specially: "standard__" is 
4354    first stripped off, and only static and global symbols are searched.  */
4355
4356 struct minimal_symbol *
4357 ada_lookup_simple_minsym (const char *name)
4358 {
4359   struct objfile *objfile;
4360   struct minimal_symbol *msymbol;
4361   int wild_match;
4362
4363   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4364     {
4365       name += sizeof ("standard__") - 1;
4366       wild_match = 0;
4367     }
4368   else
4369     wild_match = (strstr (name, "__") == NULL);
4370
4371   ALL_MSYMBOLS (objfile, msymbol)
4372   {
4373     if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4374         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4375       return msymbol;
4376   }
4377
4378   return NULL;
4379 }
4380
4381 /* For all subprograms that statically enclose the subprogram of the
4382    selected frame, add symbols matching identifier NAME in DOMAIN
4383    and their blocks to the list of data in OBSTACKP, as for
4384    ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
4385    wildcard prefix.  */
4386
4387 static void
4388 add_symbols_from_enclosing_procs (struct obstack *obstackp,
4389                                   const char *name, domain_enum namespace,
4390                                   int wild_match)
4391 {
4392 }
4393
4394 /* True if TYPE is definitely an artificial type supplied to a symbol
4395    for which no debugging information was given in the symbol file.  */
4396
4397 static int
4398 is_nondebugging_type (struct type *type)
4399 {
4400   char *name = ada_type_name (type);
4401   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4402 }
4403
4404 /* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4405    duplicate other symbols in the list (The only case I know of where
4406    this happens is when object files containing stabs-in-ecoff are
4407    linked with files containing ordinary ecoff debugging symbols (or no
4408    debugging symbols)).  Modifies SYMS to squeeze out deleted entries.
4409    Returns the number of items in the modified list.  */
4410
4411 static int
4412 remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4413 {
4414   int i, j;
4415
4416   i = 0;
4417   while (i < nsyms)
4418     {
4419       if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
4420           && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4421           && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4422         {
4423           for (j = 0; j < nsyms; j += 1)
4424             {
4425               if (i != j
4426                   && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4427                   && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4428                              SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
4429                   && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4430                   && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4431                   == SYMBOL_VALUE_ADDRESS (syms[j].sym))
4432                 {
4433                   int k;
4434                   for (k = i + 1; k < nsyms; k += 1)
4435                     syms[k - 1] = syms[k];
4436                   nsyms -= 1;
4437                   goto NextSymbol;
4438                 }
4439             }
4440         }
4441       i += 1;
4442     NextSymbol:
4443       ;
4444     }
4445   return nsyms;
4446 }
4447
4448 /* Given a type that corresponds to a renaming entity, use the type name
4449    to extract the scope (package name or function name, fully qualified,
4450    and following the GNAT encoding convention) where this renaming has been
4451    defined.  The string returned needs to be deallocated after use.  */
4452
4453 static char *
4454 xget_renaming_scope (struct type *renaming_type)
4455 {
4456   /* The renaming types adhere to the following convention:
4457      <scope>__<rename>___<XR extension>. 
4458      So, to extract the scope, we search for the "___XR" extension,
4459      and then backtrack until we find the first "__".  */
4460
4461   const char *name = type_name_no_tag (renaming_type);
4462   char *suffix = strstr (name, "___XR");
4463   char *last;
4464   int scope_len;
4465   char *scope;
4466
4467   /* Now, backtrack a bit until we find the first "__".  Start looking
4468      at suffix - 3, as the <rename> part is at least one character long.  */
4469
4470   for (last = suffix - 3; last > name; last--)
4471     if (last[0] == '_' && last[1] == '_')
4472       break;
4473
4474   /* Make a copy of scope and return it.  */
4475
4476   scope_len = last - name;
4477   scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
4478
4479   strncpy (scope, name, scope_len);
4480   scope[scope_len] = '\0';
4481
4482   return scope;
4483 }
4484
4485 /* Return nonzero if NAME corresponds to a package name.  */
4486
4487 static int
4488 is_package_name (const char *name)
4489 {
4490   /* Here, We take advantage of the fact that no symbols are generated
4491      for packages, while symbols are generated for each function.
4492      So the condition for NAME represent a package becomes equivalent
4493      to NAME not existing in our list of symbols.  There is only one
4494      small complication with library-level functions (see below).  */
4495
4496   char *fun_name;
4497
4498   /* If it is a function that has not been defined at library level,
4499      then we should be able to look it up in the symbols.  */
4500   if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4501     return 0;
4502
4503   /* Library-level function names start with "_ada_".  See if function
4504      "_ada_" followed by NAME can be found.  */
4505
4506   /* Do a quick check that NAME does not contain "__", since library-level
4507      functions names cannot contain "__" in them.  */
4508   if (strstr (name, "__") != NULL)
4509     return 0;
4510
4511   fun_name = xstrprintf ("_ada_%s", name);
4512
4513   return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4514 }
4515
4516 /* Return nonzero if SYM corresponds to a renaming entity that is
4517    not visible from FUNCTION_NAME.  */
4518
4519 static int
4520 old_renaming_is_invisible (const struct symbol *sym, char *function_name)
4521 {
4522   char *scope;
4523
4524   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4525     return 0;
4526
4527   scope = xget_renaming_scope (SYMBOL_TYPE (sym));
4528
4529   make_cleanup (xfree, scope);
4530
4531   /* If the rename has been defined in a package, then it is visible.  */
4532   if (is_package_name (scope))
4533     return 0;
4534
4535   /* Check that the rename is in the current function scope by checking
4536      that its name starts with SCOPE.  */
4537
4538   /* If the function name starts with "_ada_", it means that it is
4539      a library-level function.  Strip this prefix before doing the
4540      comparison, as the encoding for the renaming does not contain
4541      this prefix.  */
4542   if (strncmp (function_name, "_ada_", 5) == 0)
4543     function_name += 5;
4544
4545   return (strncmp (function_name, scope, strlen (scope)) != 0);
4546 }
4547
4548 /* Remove entries from SYMS that corresponds to a renaming entity that
4549    is not visible from the function associated with CURRENT_BLOCK or
4550    that is superfluous due to the presence of more specific renaming
4551    information.  Places surviving symbols in the initial entries of
4552    SYMS and returns the number of surviving symbols.
4553    
4554    Rationale:
4555    First, in cases where an object renaming is implemented as a
4556    reference variable, GNAT may produce both the actual reference
4557    variable and the renaming encoding.  In this case, we discard the
4558    latter.
4559
4560    Second, GNAT emits a type following a specified encoding for each renaming
4561    entity.  Unfortunately, STABS currently does not support the definition
4562    of types that are local to a given lexical block, so all renamings types
4563    are emitted at library level.  As a consequence, if an application
4564    contains two renaming entities using the same name, and a user tries to
4565    print the value of one of these entities, the result of the ada symbol
4566    lookup will also contain the wrong renaming type.
4567
4568    This function partially covers for this limitation by attempting to
4569    remove from the SYMS list renaming symbols that should be visible
4570    from CURRENT_BLOCK.  However, there does not seem be a 100% reliable
4571    method with the current information available.  The implementation
4572    below has a couple of limitations (FIXME: brobecker-2003-05-12):  
4573    
4574       - When the user tries to print a rename in a function while there
4575         is another rename entity defined in a package:  Normally, the
4576         rename in the function has precedence over the rename in the
4577         package, so the latter should be removed from the list.  This is
4578         currently not the case.
4579         
4580       - This function will incorrectly remove valid renames if
4581         the CURRENT_BLOCK corresponds to a function which symbol name
4582         has been changed by an "Export" pragma.  As a consequence,
4583         the user will be unable to print such rename entities.  */
4584
4585 static int
4586 remove_irrelevant_renamings (struct ada_symbol_info *syms,
4587                              int nsyms, const struct block *current_block)
4588 {
4589   struct symbol *current_function;
4590   char *current_function_name;
4591   int i;
4592   int is_new_style_renaming;
4593
4594   /* If there is both a renaming foo___XR... encoded as a variable and
4595      a simple variable foo in the same block, discard the latter.
4596      First, zero out such symbols, then compress. */
4597   is_new_style_renaming = 0;
4598   for (i = 0; i < nsyms; i += 1)
4599     {
4600       struct symbol *sym = syms[i].sym;
4601       struct block *block = syms[i].block;
4602       const char *name;
4603       const char *suffix;
4604
4605       if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4606         continue;
4607       name = SYMBOL_LINKAGE_NAME (sym);
4608       suffix = strstr (name, "___XR");
4609
4610       if (suffix != NULL)
4611         {
4612           int name_len = suffix - name;
4613           int j;
4614           is_new_style_renaming = 1;
4615           for (j = 0; j < nsyms; j += 1)
4616             if (i != j && syms[j].sym != NULL
4617                 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4618                             name_len) == 0
4619                 && block == syms[j].block)
4620               syms[j].sym = NULL;
4621         }
4622     }
4623   if (is_new_style_renaming)
4624     {
4625       int j, k;
4626
4627       for (j = k = 0; j < nsyms; j += 1)
4628         if (syms[j].sym != NULL)
4629             {
4630               syms[k] = syms[j];
4631               k += 1;
4632             }
4633       return k;
4634     }
4635
4636   /* Extract the function name associated to CURRENT_BLOCK.
4637      Abort if unable to do so.  */
4638
4639   if (current_block == NULL)
4640     return nsyms;
4641
4642   current_function = block_function (current_block);
4643   if (current_function == NULL)
4644     return nsyms;
4645
4646   current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4647   if (current_function_name == NULL)
4648     return nsyms;
4649
4650   /* Check each of the symbols, and remove it from the list if it is
4651      a type corresponding to a renaming that is out of the scope of
4652      the current block.  */
4653
4654   i = 0;
4655   while (i < nsyms)
4656     {
4657       if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4658           == ADA_OBJECT_RENAMING
4659           && old_renaming_is_invisible (syms[i].sym, current_function_name))
4660         {
4661           int j;
4662           for (j = i + 1; j < nsyms; j += 1)
4663             syms[j - 1] = syms[j];
4664           nsyms -= 1;
4665         }
4666       else
4667         i += 1;
4668     }
4669
4670   return nsyms;
4671 }
4672
4673 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4674    scope and in global scopes, returning the number of matches.  Sets
4675    *RESULTS to point to a vector of (SYM,BLOCK,SYMTAB) triples,
4676    indicating the symbols found and the blocks and symbol tables (if
4677    any) in which they were found.  This vector are transient---good only to 
4678    the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
4679    symbol match within the nest of blocks whose innermost member is BLOCK0,
4680    is the one match returned (no other matches in that or
4681      enclosing blocks is returned).  If there are any matches in or
4682    surrounding BLOCK0, then these alone are returned.  Otherwise, the
4683    search extends to global and file-scope (static) symbol tables.
4684    Names prefixed with "standard__" are handled specially: "standard__" 
4685    is first stripped off, and only static and global symbols are searched.  */
4686
4687 int
4688 ada_lookup_symbol_list (const char *name0, const struct block *block0,
4689                         domain_enum namespace,
4690                         struct ada_symbol_info **results)
4691 {
4692   struct symbol *sym;
4693   struct symtab *s;
4694   struct partial_symtab *ps;
4695   struct blockvector *bv;
4696   struct objfile *objfile;
4697   struct block *block;
4698   const char *name;
4699   struct minimal_symbol *msymbol;
4700   int wild_match;
4701   int cacheIfUnique;
4702   int block_depth;
4703   int ndefns;
4704
4705   obstack_free (&symbol_list_obstack, NULL);
4706   obstack_init (&symbol_list_obstack);
4707
4708   cacheIfUnique = 0;
4709
4710   /* Search specified block and its superiors.  */
4711
4712   wild_match = (strstr (name0, "__") == NULL);
4713   name = name0;
4714   block = (struct block *) block0;      /* FIXME: No cast ought to be
4715                                            needed, but adding const will
4716                                            have a cascade effect.  */
4717   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4718     {
4719       wild_match = 0;
4720       block = NULL;
4721       name = name0 + sizeof ("standard__") - 1;
4722     }
4723
4724   block_depth = 0;
4725   while (block != NULL)
4726     {
4727       block_depth += 1;
4728       ada_add_block_symbols (&symbol_list_obstack, block, name,
4729                              namespace, NULL, NULL, wild_match);
4730
4731       /* If we found a non-function match, assume that's the one.  */
4732       if (is_nonfunction (defns_collected (&symbol_list_obstack, 0),
4733                           num_defns_collected (&symbol_list_obstack)))
4734         goto done;
4735
4736       block = BLOCK_SUPERBLOCK (block);
4737     }
4738
4739   /* If no luck so far, try to find NAME as a local symbol in some lexically
4740      enclosing subprogram.  */
4741   if (num_defns_collected (&symbol_list_obstack) == 0 && block_depth > 2)
4742     add_symbols_from_enclosing_procs (&symbol_list_obstack,
4743                                       name, namespace, wild_match);
4744
4745   /* If we found ANY matches among non-global symbols, we're done.  */
4746
4747   if (num_defns_collected (&symbol_list_obstack) > 0)
4748     goto done;
4749
4750   cacheIfUnique = 1;
4751   if (lookup_cached_symbol (name0, namespace, &sym, &block, &s))
4752     {
4753       if (sym != NULL)
4754         add_defn_to_vec (&symbol_list_obstack, sym, block, s);
4755       goto done;
4756     }
4757
4758   /* Now add symbols from all global blocks: symbol tables, minimal symbol
4759      tables, and psymtab's.  */
4760
4761   ALL_PRIMARY_SYMTABS (objfile, s)
4762   {
4763     QUIT;
4764     bv = BLOCKVECTOR (s);
4765     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4766     ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4767                            objfile, s, wild_match);
4768   }
4769
4770   if (namespace == VAR_DOMAIN)
4771     {
4772       ALL_MSYMBOLS (objfile, msymbol)
4773       {
4774         if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match))
4775           {
4776             switch (MSYMBOL_TYPE (msymbol))
4777               {
4778               case mst_solib_trampoline:
4779                 break;
4780               default:
4781                 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
4782                 if (s != NULL)
4783                   {
4784                     int ndefns0 = num_defns_collected (&symbol_list_obstack);
4785                     QUIT;
4786                     bv = BLOCKVECTOR (s);
4787                     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4788                     ada_add_block_symbols (&symbol_list_obstack, block,
4789                                            SYMBOL_LINKAGE_NAME (msymbol),
4790                                            namespace, objfile, s, wild_match);
4791
4792                     if (num_defns_collected (&symbol_list_obstack) == ndefns0)
4793                       {
4794                         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4795                         ada_add_block_symbols (&symbol_list_obstack, block,
4796                                                SYMBOL_LINKAGE_NAME (msymbol),
4797                                                namespace, objfile, s,
4798                                                wild_match);
4799                       }
4800                   }
4801               }
4802           }
4803       }
4804     }
4805
4806   ALL_PSYMTABS (objfile, ps)
4807   {
4808     QUIT;
4809     if (!ps->readin
4810         && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
4811       {
4812         s = PSYMTAB_TO_SYMTAB (ps);
4813         if (!s->primary)
4814           continue;
4815         bv = BLOCKVECTOR (s);
4816         block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4817         ada_add_block_symbols (&symbol_list_obstack, block, name,
4818                                namespace, objfile, s, wild_match);
4819       }
4820   }
4821
4822   /* Now add symbols from all per-file blocks if we've gotten no hits
4823      (Not strictly correct, but perhaps better than an error).
4824      Do the symtabs first, then check the psymtabs.  */
4825
4826   if (num_defns_collected (&symbol_list_obstack) == 0)
4827     {
4828
4829       ALL_PRIMARY_SYMTABS (objfile, s)
4830       {
4831         QUIT;
4832         bv = BLOCKVECTOR (s);
4833         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4834         ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
4835                                objfile, s, wild_match);
4836       }
4837
4838       ALL_PSYMTABS (objfile, ps)
4839       {
4840         QUIT;
4841         if (!ps->readin
4842             && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
4843           {
4844             s = PSYMTAB_TO_SYMTAB (ps);
4845             bv = BLOCKVECTOR (s);
4846             if (!s->primary)
4847               continue;
4848             block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
4849             ada_add_block_symbols (&symbol_list_obstack, block, name,
4850                                    namespace, objfile, s, wild_match);
4851           }
4852       }
4853     }
4854
4855 done:
4856   ndefns = num_defns_collected (&symbol_list_obstack);
4857   *results = defns_collected (&symbol_list_obstack, 1);
4858
4859   ndefns = remove_extra_symbols (*results, ndefns);
4860
4861   if (ndefns == 0)
4862     cache_symbol (name0, namespace, NULL, NULL, NULL);
4863
4864   if (ndefns == 1 && cacheIfUnique)
4865     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block,
4866                   (*results)[0].symtab);
4867
4868   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
4869
4870   return ndefns;
4871 }
4872
4873 struct symbol *
4874 ada_lookup_encoded_symbol (const char *name, const struct block *block0,
4875                            domain_enum namespace, 
4876                            struct block **block_found, struct symtab **symtab)
4877 {
4878   struct ada_symbol_info *candidates;
4879   int n_candidates;
4880
4881   n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
4882
4883   if (n_candidates == 0)
4884     return NULL;
4885
4886   if (block_found != NULL)
4887     *block_found = candidates[0].block;
4888
4889   if (symtab != NULL)
4890     {
4891       *symtab = candidates[0].symtab;
4892       if (*symtab == NULL && candidates[0].block != NULL)
4893         {
4894           struct objfile *objfile;
4895           struct symtab *s;
4896           struct block *b;
4897           struct blockvector *bv;
4898
4899           /* Search the list of symtabs for one which contains the
4900              address of the start of this block.  */
4901           ALL_PRIMARY_SYMTABS (objfile, s)
4902           {
4903             bv = BLOCKVECTOR (s);
4904             b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
4905             if (BLOCK_START (b) <= BLOCK_START (candidates[0].block)
4906                 && BLOCK_END (b) > BLOCK_START (candidates[0].block))
4907               {
4908                 *symtab = s;
4909                 return fixup_symbol_section (candidates[0].sym, objfile);
4910               }
4911           }
4912           /* FIXME: brobecker/2004-11-12: I think that we should never
4913              reach this point.  I don't see a reason why we would not
4914              find a symtab for a given block, so I suggest raising an
4915              internal_error exception here.  Otherwise, we end up
4916              returning a symbol but no symtab, which certain parts of
4917              the code that rely (indirectly) on this function do not
4918              expect, eventually causing a SEGV.  */
4919           return fixup_symbol_section (candidates[0].sym, NULL);
4920         }
4921     }
4922   return candidates[0].sym;
4923 }  
4924
4925 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4926    scope and in global scopes, or NULL if none.  NAME is folded and
4927    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
4928    choosing the first symbol if there are multiple choices.  
4929    *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4930    table in which the symbol was found (in both cases, these
4931    assignments occur only if the pointers are non-null).  */
4932 struct symbol *
4933 ada_lookup_symbol (const char *name, const struct block *block0,
4934                    domain_enum namespace, int *is_a_field_of_this,
4935                    struct symtab **symtab)
4936 {
4937   if (is_a_field_of_this != NULL)
4938     *is_a_field_of_this = 0;
4939
4940   return
4941     ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
4942                                block0, namespace, NULL, symtab);
4943 }
4944
4945 static struct symbol *
4946 ada_lookup_symbol_nonlocal (const char *name,
4947                             const char *linkage_name,
4948                             const struct block *block,
4949                             const domain_enum domain, struct symtab **symtab)
4950 {
4951   if (linkage_name == NULL)
4952     linkage_name = name;
4953   return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
4954                             NULL, symtab);
4955 }
4956
4957
4958 /* True iff STR is a possible encoded suffix of a normal Ada name
4959    that is to be ignored for matching purposes.  Suffixes of parallel
4960    names (e.g., XVE) are not included here.  Currently, the possible suffixes
4961    are given by either of the regular expression:
4962
4963    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
4964    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
4965    _E[0-9]+[bs]$    [protected object entry suffixes]
4966    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
4967
4968    Also, any leading "__[0-9]+" sequence is skipped before the suffix
4969    match is performed.  This sequence is used to differentiate homonyms,
4970    is an optional part of a valid name suffix.  */
4971
4972 static int
4973 is_name_suffix (const char *str)
4974 {
4975   int k;
4976   const char *matching;
4977   const int len = strlen (str);
4978
4979   /* Skip optional leading __[0-9]+.  */
4980
4981   if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4982     {
4983       str += 3;
4984       while (isdigit (str[0]))
4985         str += 1;
4986     }
4987   
4988   /* [.$][0-9]+ */
4989
4990   if (str[0] == '.' || str[0] == '$')
4991     {
4992       matching = str + 1;
4993       while (isdigit (matching[0]))
4994         matching += 1;
4995       if (matching[0] == '\0')
4996         return 1;
4997     }
4998
4999   /* ___[0-9]+ */
5000
5001   if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5002     {
5003       matching = str + 3;
5004       while (isdigit (matching[0]))
5005         matching += 1;
5006       if (matching[0] == '\0')
5007         return 1;
5008     }
5009
5010 #if 0
5011   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
5012      with a N at the end. Unfortunately, the compiler uses the same
5013      convention for other internal types it creates. So treating
5014      all entity names that end with an "N" as a name suffix causes
5015      some regressions. For instance, consider the case of an enumerated
5016      type. To support the 'Image attribute, it creates an array whose
5017      name ends with N.
5018      Having a single character like this as a suffix carrying some
5019      information is a bit risky. Perhaps we should change the encoding
5020      to be something like "_N" instead.  In the meantime, do not do
5021      the following check.  */
5022   /* Protected Object Subprograms */
5023   if (len == 1 && str [0] == 'N')
5024     return 1;
5025 #endif
5026
5027   /* _E[0-9]+[bs]$ */
5028   if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5029     {
5030       matching = str + 3;
5031       while (isdigit (matching[0]))
5032         matching += 1;
5033       if ((matching[0] == 'b' || matching[0] == 's')
5034           && matching [1] == '\0')
5035         return 1;
5036     }
5037
5038   /* ??? We should not modify STR directly, as we are doing below.  This
5039      is fine in this case, but may become problematic later if we find
5040      that this alternative did not work, and want to try matching
5041      another one from the begining of STR.  Since we modified it, we
5042      won't be able to find the begining of the string anymore!  */
5043   if (str[0] == 'X')
5044     {
5045       str += 1;
5046       while (str[0] != '_' && str[0] != '\0')
5047         {
5048           if (str[0] != 'n' && str[0] != 'b')
5049             return 0;
5050           str += 1;
5051         }
5052     }
5053
5054   if (str[0] == '\000')
5055     return 1;
5056
5057   if (str[0] == '_')
5058     {
5059       if (str[1] != '_' || str[2] == '\000')
5060         return 0;
5061       if (str[2] == '_')
5062         {
5063           if (strcmp (str + 3, "JM") == 0)
5064             return 1;
5065           /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5066              the LJM suffix in favor of the JM one.  But we will
5067              still accept LJM as a valid suffix for a reasonable
5068              amount of time, just to allow ourselves to debug programs
5069              compiled using an older version of GNAT.  */
5070           if (strcmp (str + 3, "LJM") == 0)
5071             return 1;
5072           if (str[3] != 'X')
5073             return 0;
5074           if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5075               || str[4] == 'U' || str[4] == 'P')
5076             return 1;
5077           if (str[4] == 'R' && str[5] != 'T')
5078             return 1;
5079           return 0;
5080         }
5081       if (!isdigit (str[2]))
5082         return 0;
5083       for (k = 3; str[k] != '\0'; k += 1)
5084         if (!isdigit (str[k]) && str[k] != '_')
5085           return 0;
5086       return 1;
5087     }
5088   if (str[0] == '$' && isdigit (str[1]))
5089     {
5090       for (k = 2; str[k] != '\0'; k += 1)
5091         if (!isdigit (str[k]) && str[k] != '_')
5092           return 0;
5093       return 1;
5094     }
5095   return 0;
5096 }
5097
5098 /* Return nonzero if the given string starts with a dot ('.')
5099    followed by zero or more digits.  
5100    
5101    Note: brobecker/2003-11-10: A forward declaration has not been
5102    added at the begining of this file yet, because this function
5103    is only used to work around a problem found during wild matching
5104    when trying to match minimal symbol names against symbol names
5105    obtained from dwarf-2 data.  This function is therefore currently
5106    only used in wild_match() and is likely to be deleted when the
5107    problem in dwarf-2 is fixed.  */
5108
5109 static int
5110 is_dot_digits_suffix (const char *str)
5111 {
5112   if (str[0] != '.')
5113     return 0;
5114
5115   str++;
5116   while (isdigit (str[0]))
5117     str++;
5118   return (str[0] == '\0');
5119 }
5120
5121 /* Return non-zero if the string starting at NAME and ending before
5122    NAME_END contains no capital letters.  */
5123
5124 static int
5125 is_valid_name_for_wild_match (const char *name0)
5126 {
5127   const char *decoded_name = ada_decode (name0);
5128   int i;
5129
5130   for (i=0; decoded_name[i] != '\0'; i++)
5131     if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5132       return 0;
5133
5134   return 1;
5135 }
5136
5137 /* True if NAME represents a name of the form A1.A2....An, n>=1 and
5138    PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1.  Ignores
5139    informational suffixes of NAME (i.e., for which is_name_suffix is
5140    true).  */
5141
5142 static int
5143 wild_match (const char *patn0, int patn_len, const char *name0)
5144 {
5145   int name_len;
5146   char *name;
5147   char *name_start;
5148   char *patn;
5149
5150   /* FIXME: brobecker/2003-11-10: For some reason, the symbol name
5151      stored in the symbol table for nested function names is sometimes
5152      different from the name of the associated entity stored in
5153      the dwarf-2 data: This is the case for nested subprograms, where
5154      the minimal symbol name contains a trailing ".[:digit:]+" suffix,
5155      while the symbol name from the dwarf-2 data does not.
5156
5157      Although the DWARF-2 standard documents that entity names stored
5158      in the dwarf-2 data should be identical to the name as seen in
5159      the source code, GNAT takes a different approach as we already use
5160      a special encoding mechanism to convey the information so that
5161      a C debugger can still use the information generated to debug
5162      Ada programs.  A corollary is that the symbol names in the dwarf-2
5163      data should match the names found in the symbol table.  I therefore
5164      consider this issue as a compiler defect.
5165
5166      Until the compiler is properly fixed, we work-around the problem
5167      by ignoring such suffixes during the match.  We do so by making
5168      a copy of PATN0 and NAME0, and then by stripping such a suffix
5169      if present.  We then perform the match on the resulting strings.  */
5170   {
5171     char *dot;
5172     name_len = strlen (name0);
5173
5174     name = name_start = (char *) alloca ((name_len + 1) * sizeof (char));
5175     strcpy (name, name0);
5176     dot = strrchr (name, '.');
5177     if (dot != NULL && is_dot_digits_suffix (dot))
5178       *dot = '\0';
5179
5180     patn = (char *) alloca ((patn_len + 1) * sizeof (char));
5181     strncpy (patn, patn0, patn_len);
5182     patn[patn_len] = '\0';
5183     dot = strrchr (patn, '.');
5184     if (dot != NULL && is_dot_digits_suffix (dot))
5185       {
5186         *dot = '\0';
5187         patn_len = dot - patn;
5188       }
5189   }
5190
5191   /* Now perform the wild match.  */
5192
5193   name_len = strlen (name);
5194   if (name_len >= patn_len + 5 && strncmp (name, "_ada_", 5) == 0
5195       && strncmp (patn, name + 5, patn_len) == 0
5196       && is_name_suffix (name + patn_len + 5))
5197     return 1;
5198
5199   while (name_len >= patn_len)
5200     {
5201       if (strncmp (patn, name, patn_len) == 0
5202           && is_name_suffix (name + patn_len))
5203         return (name == name_start || is_valid_name_for_wild_match (name0));
5204       do
5205         {
5206           name += 1;
5207           name_len -= 1;
5208         }
5209       while (name_len > 0
5210              && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
5211       if (name_len <= 0)
5212         return 0;
5213       if (name[0] == '_')
5214         {
5215           if (!islower (name[2]))
5216             return 0;
5217           name += 2;
5218           name_len -= 2;
5219         }
5220       else
5221         {
5222           if (!islower (name[1]))
5223             return 0;
5224           name += 1;
5225           name_len -= 1;
5226         }
5227     }
5228
5229   return 0;
5230 }
5231
5232
5233 /* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5234    vector *defn_symbols, updating the list of symbols in OBSTACKP 
5235    (if necessary).  If WILD, treat as NAME with a wildcard prefix. 
5236    OBJFILE is the section containing BLOCK.
5237    SYMTAB is recorded with each symbol added.  */
5238
5239 static void
5240 ada_add_block_symbols (struct obstack *obstackp,
5241                        struct block *block, const char *name,
5242                        domain_enum domain, struct objfile *objfile,
5243                        struct symtab *symtab, int wild)
5244 {
5245   struct dict_iterator iter;
5246   int name_len = strlen (name);
5247   /* A matching argument symbol, if any.  */
5248   struct symbol *arg_sym;
5249   /* Set true when we find a matching non-argument symbol.  */
5250   int found_sym;
5251   struct symbol *sym;
5252
5253   arg_sym = NULL;
5254   found_sym = 0;
5255   if (wild)
5256     {
5257       struct symbol *sym;
5258       ALL_BLOCK_SYMBOLS (block, iter, sym)
5259       {
5260         if (SYMBOL_DOMAIN (sym) == domain
5261             && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
5262           {
5263             switch (SYMBOL_CLASS (sym))
5264               {
5265               case LOC_ARG:
5266               case LOC_LOCAL_ARG:
5267               case LOC_REF_ARG:
5268               case LOC_REGPARM:
5269               case LOC_REGPARM_ADDR:
5270               case LOC_BASEREG_ARG:
5271               case LOC_COMPUTED_ARG:
5272                 arg_sym = sym;
5273                 break;
5274               case LOC_UNRESOLVED:
5275                 continue;
5276               default:
5277                 found_sym = 1;
5278                 add_defn_to_vec (obstackp,
5279                                  fixup_symbol_section (sym, objfile),
5280                                  block, symtab);
5281                 break;
5282               }
5283           }
5284       }
5285     }
5286   else
5287     {
5288       ALL_BLOCK_SYMBOLS (block, iter, sym)
5289       {
5290         if (SYMBOL_DOMAIN (sym) == domain)
5291           {
5292             int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5293             if (cmp == 0
5294                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5295               {
5296                 switch (SYMBOL_CLASS (sym))
5297                   {
5298                   case LOC_ARG:
5299                   case LOC_LOCAL_ARG:
5300                   case LOC_REF_ARG:
5301                   case LOC_REGPARM:
5302                   case LOC_REGPARM_ADDR:
5303                   case LOC_BASEREG_ARG:
5304                   case LOC_COMPUTED_ARG:
5305                     arg_sym = sym;
5306                     break;
5307                   case LOC_UNRESOLVED:
5308                     break;
5309                   default:
5310                     found_sym = 1;
5311                     add_defn_to_vec (obstackp,
5312                                      fixup_symbol_section (sym, objfile),
5313                                      block, symtab);
5314                     break;
5315                   }
5316               }
5317           }
5318       }
5319     }
5320
5321   if (!found_sym && arg_sym != NULL)
5322     {
5323       add_defn_to_vec (obstackp,
5324                        fixup_symbol_section (arg_sym, objfile),
5325                        block, symtab);
5326     }
5327
5328   if (!wild)
5329     {
5330       arg_sym = NULL;
5331       found_sym = 0;
5332
5333       ALL_BLOCK_SYMBOLS (block, iter, sym)
5334       {
5335         if (SYMBOL_DOMAIN (sym) == domain)
5336           {
5337             int cmp;
5338
5339             cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5340             if (cmp == 0)
5341               {
5342                 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5343                 if (cmp == 0)
5344                   cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5345                                  name_len);
5346               }
5347
5348             if (cmp == 0
5349                 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5350               {
5351                 switch (SYMBOL_CLASS (sym))
5352                   {
5353                   case LOC_ARG:
5354                   case LOC_LOCAL_ARG:
5355                   case LOC_REF_ARG:
5356                   case LOC_REGPARM:
5357                   case LOC_REGPARM_ADDR:
5358                   case LOC_BASEREG_ARG:
5359                   case LOC_COMPUTED_ARG:
5360                     arg_sym = sym;
5361                     break;
5362                   case LOC_UNRESOLVED:
5363                     break;
5364                   default:
5365                     found_sym = 1;
5366                     add_defn_to_vec (obstackp,
5367                                      fixup_symbol_section (sym, objfile),
5368                                      block, symtab);
5369                     break;
5370                   }
5371               }
5372           }
5373       }
5374
5375       /* NOTE: This really shouldn't be needed for _ada_ symbols.
5376          They aren't parameters, right?  */
5377       if (!found_sym && arg_sym != NULL)
5378         {
5379           add_defn_to_vec (obstackp,
5380                            fixup_symbol_section (arg_sym, objfile),
5381                            block, symtab);
5382         }
5383     }
5384 }
5385 \f
5386
5387                                 /* Symbol Completion */
5388
5389 /* If SYM_NAME is a completion candidate for TEXT, return this symbol
5390    name in a form that's appropriate for the completion.  The result
5391    does not need to be deallocated, but is only good until the next call.
5392
5393    TEXT_LEN is equal to the length of TEXT.
5394    Perform a wild match if WILD_MATCH is set.
5395    ENCODED should be set if TEXT represents the start of a symbol name
5396    in its encoded form.  */
5397
5398 static const char *
5399 symbol_completion_match (const char *sym_name,
5400                          const char *text, int text_len,
5401                          int wild_match, int encoded)
5402 {
5403   char *result;
5404   const int verbatim_match = (text[0] == '<');
5405   int match = 0;
5406
5407   if (verbatim_match)
5408     {
5409       /* Strip the leading angle bracket.  */
5410       text = text + 1;
5411       text_len--;
5412     }
5413
5414   /* First, test against the fully qualified name of the symbol.  */
5415
5416   if (strncmp (sym_name, text, text_len) == 0)
5417     match = 1;
5418
5419   if (match && !encoded)
5420     {
5421       /* One needed check before declaring a positive match is to verify
5422          that iff we are doing a verbatim match, the decoded version
5423          of the symbol name starts with '<'.  Otherwise, this symbol name
5424          is not a suitable completion.  */
5425       const char *sym_name_copy = sym_name;
5426       int has_angle_bracket;
5427
5428       sym_name = ada_decode (sym_name);
5429       has_angle_bracket = (sym_name[0] == '<');
5430       match = (has_angle_bracket == verbatim_match);
5431       sym_name = sym_name_copy;
5432     }
5433
5434   if (match && !verbatim_match)
5435     {
5436       /* When doing non-verbatim match, another check that needs to
5437          be done is to verify that the potentially matching symbol name
5438          does not include capital letters, because the ada-mode would
5439          not be able to understand these symbol names without the
5440          angle bracket notation.  */
5441       const char *tmp;
5442
5443       for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5444       if (*tmp != '\0')
5445         match = 0;
5446     }
5447
5448   /* Second: Try wild matching...  */
5449
5450   if (!match && wild_match)
5451     {
5452       /* Since we are doing wild matching, this means that TEXT
5453          may represent an unqualified symbol name.  We therefore must
5454          also compare TEXT against the unqualified name of the symbol.  */
5455       sym_name = ada_unqualified_name (ada_decode (sym_name));
5456
5457       if (strncmp (sym_name, text, text_len) == 0)
5458         match = 1;
5459     }
5460
5461   /* Finally: If we found a mach, prepare the result to return.  */
5462
5463   if (!match)
5464     return NULL;
5465
5466   if (verbatim_match)
5467     sym_name = add_angle_brackets (sym_name);
5468
5469   if (!encoded)
5470     sym_name = ada_decode (sym_name);
5471
5472   return sym_name;
5473 }
5474
5475 typedef char *char_ptr;
5476 DEF_VEC_P (char_ptr);
5477
5478 /* A companion function to ada_make_symbol_completion_list().
5479    Check if SYM_NAME represents a symbol which name would be suitable
5480    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5481    it is appended at the end of the given string vector SV.
5482
5483    ORIG_TEXT is the string original string from the user command
5484    that needs to be completed.  WORD is the entire command on which
5485    completion should be performed.  These two parameters are used to
5486    determine which part of the symbol name should be added to the
5487    completion vector.
5488    if WILD_MATCH is set, then wild matching is performed.
5489    ENCODED should be set if TEXT represents a symbol name in its
5490    encoded formed (in which case the completion should also be
5491    encoded).  */
5492
5493 static void
5494 symbol_completion_add (VEC(char_ptr) **sv,
5495                        const char *sym_name,
5496                        const char *text, int text_len,
5497                        const char *orig_text, const char *word,
5498                        int wild_match, int encoded)
5499 {
5500   const char *match = symbol_completion_match (sym_name, text, text_len,
5501                                                wild_match, encoded);
5502   char *completion;
5503
5504   if (match == NULL)
5505     return;
5506
5507   /* We found a match, so add the appropriate completion to the given
5508      string vector.  */
5509
5510   if (word == orig_text)
5511     {
5512       completion = xmalloc (strlen (match) + 5);
5513       strcpy (completion, match);
5514     }
5515   else if (word > orig_text)
5516     {
5517       /* Return some portion of sym_name.  */
5518       completion = xmalloc (strlen (match) + 5);
5519       strcpy (completion, match + (word - orig_text));
5520     }
5521   else
5522     {
5523       /* Return some of ORIG_TEXT plus sym_name.  */
5524       completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5525       strncpy (completion, word, orig_text - word);
5526       completion[orig_text - word] = '\0';
5527       strcat (completion, match);
5528     }
5529
5530   VEC_safe_push (char_ptr, *sv, completion);
5531 }
5532
5533 /* Return a list of possible symbol names completing TEXT0.  The list
5534    is NULL terminated.  WORD is the entire command on which completion
5535    is made.  */
5536
5537 static char **
5538 ada_make_symbol_completion_list (char *text0, char *word)
5539 {
5540   char *text;
5541   int text_len;
5542   int wild_match;
5543   int encoded;
5544   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
5545   struct symbol *sym;
5546   struct symtab *s;
5547   struct partial_symtab *ps;
5548   struct minimal_symbol *msymbol;
5549   struct objfile *objfile;
5550   struct block *b, *surrounding_static_block = 0;
5551   int i;
5552   struct dict_iterator iter;
5553
5554   if (text0[0] == '<')
5555     {
5556       text = xstrdup (text0);
5557       make_cleanup (xfree, text);
5558       text_len = strlen (text);
5559       wild_match = 0;
5560       encoded = 1;
5561     }
5562   else
5563     {
5564       text = xstrdup (ada_encode (text0));
5565       make_cleanup (xfree, text);
5566       text_len = strlen (text);
5567       for (i = 0; i < text_len; i++)
5568         text[i] = tolower (text[i]);
5569
5570       encoded = (strstr (text0, "__") != NULL);
5571       /* If the name contains a ".", then the user is entering a fully
5572          qualified entity name, and the match must not be done in wild
5573          mode.  Similarly, if the user wants to complete what looks like
5574          an encoded name, the match must not be done in wild mode.  */
5575       wild_match = (strchr (text0, '.') == NULL && !encoded);
5576     }
5577
5578   /* First, look at the partial symtab symbols.  */
5579   ALL_PSYMTABS (objfile, ps)
5580   {
5581     struct partial_symbol **psym;
5582
5583     /* If the psymtab's been read in we'll get it when we search
5584        through the blockvector.  */
5585     if (ps->readin)
5586       continue;
5587
5588     for (psym = objfile->global_psymbols.list + ps->globals_offset;
5589          psym < (objfile->global_psymbols.list + ps->globals_offset
5590                  + ps->n_global_syms); psym++)
5591       {
5592         QUIT;
5593         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5594                                text, text_len, text0, word,
5595                                wild_match, encoded);
5596       }
5597
5598     for (psym = objfile->static_psymbols.list + ps->statics_offset;
5599          psym < (objfile->static_psymbols.list + ps->statics_offset
5600                  + ps->n_static_syms); psym++)
5601       {
5602         QUIT;
5603         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (*psym),
5604                                text, text_len, text0, word,
5605                                wild_match, encoded);
5606       }
5607   }
5608
5609   /* At this point scan through the misc symbol vectors and add each
5610      symbol you find to the list.  Eventually we want to ignore
5611      anything that isn't a text symbol (everything else will be
5612      handled by the psymtab code above).  */
5613
5614   ALL_MSYMBOLS (objfile, msymbol)
5615   {
5616     QUIT;
5617     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
5618                            text, text_len, text0, word, wild_match, encoded);
5619   }
5620
5621   /* Search upwards from currently selected frame (so that we can
5622      complete on local vars.  */
5623
5624   for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5625     {
5626       if (!BLOCK_SUPERBLOCK (b))
5627         surrounding_static_block = b;   /* For elmin of dups */
5628
5629       ALL_BLOCK_SYMBOLS (b, iter, sym)
5630       {
5631         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5632                                text, text_len, text0, word,
5633                                wild_match, encoded);
5634       }
5635     }
5636
5637   /* Go through the symtabs and check the externs and statics for
5638      symbols which match.  */
5639
5640   ALL_SYMTABS (objfile, s)
5641   {
5642     QUIT;
5643     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5644     ALL_BLOCK_SYMBOLS (b, iter, sym)
5645     {
5646       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5647                              text, text_len, text0, word,
5648                              wild_match, encoded);
5649     }
5650   }
5651
5652   ALL_SYMTABS (objfile, s)
5653   {
5654     QUIT;
5655     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5656     /* Don't do this block twice.  */
5657     if (b == surrounding_static_block)
5658       continue;
5659     ALL_BLOCK_SYMBOLS (b, iter, sym)
5660     {
5661       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
5662                              text, text_len, text0, word,
5663                              wild_match, encoded);
5664     }
5665   }
5666
5667   /* Append the closing NULL entry.  */
5668   VEC_safe_push (char_ptr, completions, NULL);
5669
5670   /* Make a copy of the COMPLETIONS VEC before we free it, and then
5671      return the copy.  It's unfortunate that we have to make a copy
5672      of an array that we're about to destroy, but there is nothing much
5673      we can do about it.  Fortunately, it's typically not a very large
5674      array.  */
5675   {
5676     const size_t completions_size = 
5677       VEC_length (char_ptr, completions) * sizeof (char *);
5678     char **result = malloc (completions_size);
5679     
5680     memcpy (result, VEC_address (char_ptr, completions), completions_size);
5681
5682     VEC_free (char_ptr, completions);
5683     return result;
5684   }
5685 }
5686
5687                                 /* Field Access */
5688
5689 /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5690    for tagged types.  */
5691
5692 static int
5693 ada_is_dispatch_table_ptr_type (struct type *type)
5694 {
5695   char *name;
5696
5697   if (TYPE_CODE (type) != TYPE_CODE_PTR)
5698     return 0;
5699
5700   name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5701   if (name == NULL)
5702     return 0;
5703
5704   return (strcmp (name, "ada__tags__dispatch_table") == 0);
5705 }
5706
5707 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
5708    to be invisible to users.  */
5709
5710 int
5711 ada_is_ignored_field (struct type *type, int field_num)
5712 {
5713   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5714     return 1;
5715    
5716   /* Check the name of that field.  */
5717   {
5718     const char *name = TYPE_FIELD_NAME (type, field_num);
5719
5720     /* Anonymous field names should not be printed.
5721        brobecker/2007-02-20: I don't think this can actually happen
5722        but we don't want to print the value of annonymous fields anyway.  */
5723     if (name == NULL)
5724       return 1;
5725
5726     /* A field named "_parent" is internally generated by GNAT for
5727        tagged types, and should not be printed either.  */
5728     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5729       return 1;
5730   }
5731
5732   /* If this is the dispatch table of a tagged type, then ignore.  */
5733   if (ada_is_tagged_type (type, 1)
5734       && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5735     return 1;
5736
5737   /* Not a special field, so it should not be ignored.  */
5738   return 0;
5739 }
5740
5741 /* True iff TYPE has a tag field.  If REFOK, then TYPE may also be a
5742    pointer or reference type whose ultimate target has a tag field. */
5743
5744 int
5745 ada_is_tagged_type (struct type *type, int refok)
5746 {
5747   return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5748 }
5749
5750 /* True iff TYPE represents the type of X'Tag */
5751
5752 int
5753 ada_is_tag_type (struct type *type)
5754 {
5755   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5756     return 0;
5757   else
5758     {
5759       const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5760       return (name != NULL
5761               && strcmp (name, "ada__tags__dispatch_table") == 0);
5762     }
5763 }
5764
5765 /* The type of the tag on VAL.  */
5766
5767 struct type *
5768 ada_tag_type (struct value *val)
5769 {
5770   return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
5771 }
5772
5773 /* The value of the tag on VAL.  */
5774
5775 struct value *
5776 ada_value_tag (struct value *val)
5777 {
5778   return ada_value_struct_elt (val, "_tag", 0);
5779 }
5780
5781 /* The value of the tag on the object of type TYPE whose contents are
5782    saved at VALADDR, if it is non-null, or is at memory address
5783    ADDRESS. */
5784
5785 static struct value *
5786 value_tag_from_contents_and_address (struct type *type,
5787                                      const gdb_byte *valaddr,
5788                                      CORE_ADDR address)
5789 {
5790   int tag_byte_offset, dummy1, dummy2;
5791   struct type *tag_type;
5792   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
5793                          NULL, NULL, NULL))
5794     {
5795       const gdb_byte *valaddr1 = ((valaddr == NULL)
5796                                   ? NULL
5797                                   : valaddr + tag_byte_offset);
5798       CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
5799
5800       return value_from_contents_and_address (tag_type, valaddr1, address1);
5801     }
5802   return NULL;
5803 }
5804
5805 static struct type *
5806 type_from_tag (struct value *tag)
5807 {
5808   const char *type_name = ada_tag_name (tag);
5809   if (type_name != NULL)
5810     return ada_find_any_type (ada_encode (type_name));
5811   return NULL;
5812 }
5813
5814 struct tag_args
5815 {
5816   struct value *tag;
5817   char *name;
5818 };
5819
5820
5821 static int ada_tag_name_1 (void *);
5822 static int ada_tag_name_2 (struct tag_args *);
5823
5824 /* Wrapper function used by ada_tag_name.  Given a struct tag_args*
5825    value ARGS, sets ARGS->name to the tag name of ARGS->tag.  
5826    The value stored in ARGS->name is valid until the next call to 
5827    ada_tag_name_1.  */
5828
5829 static int
5830 ada_tag_name_1 (void *args0)
5831 {
5832   struct tag_args *args = (struct tag_args *) args0;
5833   static char name[1024];
5834   char *p;
5835   struct value *val;
5836   args->name = NULL;
5837   val = ada_value_struct_elt (args->tag, "tsd", 1);
5838   if (val == NULL)
5839     return ada_tag_name_2 (args);
5840   val = ada_value_struct_elt (val, "expanded_name", 1);
5841   if (val == NULL)
5842     return 0;
5843   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5844   for (p = name; *p != '\0'; p += 1)
5845     if (isalpha (*p))
5846       *p = tolower (*p);
5847   args->name = name;
5848   return 0;
5849 }
5850
5851 /* Utility function for ada_tag_name_1 that tries the second
5852    representation for the dispatch table (in which there is no
5853    explicit 'tsd' field in the referent of the tag pointer, and instead
5854    the tsd pointer is stored just before the dispatch table. */
5855    
5856 static int
5857 ada_tag_name_2 (struct tag_args *args)
5858 {
5859   struct type *info_type;
5860   static char name[1024];
5861   char *p;
5862   struct value *val, *valp;
5863
5864   args->name = NULL;
5865   info_type = ada_find_any_type ("ada__tags__type_specific_data");
5866   if (info_type == NULL)
5867     return 0;
5868   info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5869   valp = value_cast (info_type, args->tag);
5870   if (valp == NULL)
5871     return 0;
5872   val = value_ind (value_add (valp, value_from_longest (builtin_type_int, -1)));
5873   if (val == NULL)
5874     return 0;
5875   val = ada_value_struct_elt (val, "expanded_name", 1);
5876   if (val == NULL)
5877     return 0;
5878   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5879   for (p = name; *p != '\0'; p += 1)
5880     if (isalpha (*p))
5881       *p = tolower (*p);
5882   args->name = name;
5883   return 0;
5884 }
5885
5886 /* The type name of the dynamic type denoted by the 'tag value TAG, as
5887  * a C string.  */
5888
5889 const char *
5890 ada_tag_name (struct value *tag)
5891 {
5892   struct tag_args args;
5893   if (!ada_is_tag_type (value_type (tag)))
5894     return NULL;
5895   args.tag = tag;
5896   args.name = NULL;
5897   catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5898   return args.name;
5899 }
5900
5901 /* The parent type of TYPE, or NULL if none.  */
5902
5903 struct type *
5904 ada_parent_type (struct type *type)
5905 {
5906   int i;
5907
5908   type = ada_check_typedef (type);
5909
5910   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5911     return NULL;
5912
5913   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5914     if (ada_is_parent_field (type, i))
5915       return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
5916
5917   return NULL;
5918 }
5919
5920 /* True iff field number FIELD_NUM of structure type TYPE contains the
5921    parent-type (inherited) fields of a derived type.  Assumes TYPE is
5922    a structure type with at least FIELD_NUM+1 fields.  */
5923
5924 int
5925 ada_is_parent_field (struct type *type, int field_num)
5926 {
5927   const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5928   return (name != NULL
5929           && (strncmp (name, "PARENT", 6) == 0
5930               || strncmp (name, "_parent", 7) == 0));
5931 }
5932
5933 /* True iff field number FIELD_NUM of structure type TYPE is a
5934    transparent wrapper field (which should be silently traversed when doing
5935    field selection and flattened when printing).  Assumes TYPE is a
5936    structure type with at least FIELD_NUM+1 fields.  Such fields are always
5937    structures.  */
5938
5939 int
5940 ada_is_wrapper_field (struct type *type, int field_num)
5941 {
5942   const char *name = TYPE_FIELD_NAME (type, field_num);
5943   return (name != NULL
5944           && (strncmp (name, "PARENT", 6) == 0
5945               || strcmp (name, "REP") == 0
5946               || strncmp (name, "_parent", 7) == 0
5947               || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5948 }
5949
5950 /* True iff field number FIELD_NUM of structure or union type TYPE
5951    is a variant wrapper.  Assumes TYPE is a structure type with at least
5952    FIELD_NUM+1 fields.  */
5953
5954 int
5955 ada_is_variant_part (struct type *type, int field_num)
5956 {
5957   struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5958   return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5959           || (is_dynamic_field (type, field_num)
5960               && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) 
5961                   == TYPE_CODE_UNION)));
5962 }
5963
5964 /* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5965    whose discriminants are contained in the record type OUTER_TYPE,
5966    returns the type of the controlling discriminant for the variant.  */
5967
5968 struct type *
5969 ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
5970 {
5971   char *name = ada_variant_discrim_name (var_type);
5972   struct type *type =
5973     ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
5974   if (type == NULL)
5975     return builtin_type_int;
5976   else
5977     return type;
5978 }
5979
5980 /* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5981    valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5982    represents a 'when others' clause; otherwise 0.  */
5983
5984 int
5985 ada_is_others_clause (struct type *type, int field_num)
5986 {
5987   const char *name = TYPE_FIELD_NAME (type, field_num);
5988   return (name != NULL && name[0] == 'O');
5989 }
5990
5991 /* Assuming that TYPE0 is the type of the variant part of a record,
5992    returns the name of the discriminant controlling the variant.
5993    The value is valid until the next call to ada_variant_discrim_name.  */
5994
5995 char *
5996 ada_variant_discrim_name (struct type *type0)
5997 {
5998   static char *result = NULL;
5999   static size_t result_len = 0;
6000   struct type *type;
6001   const char *name;
6002   const char *discrim_end;
6003   const char *discrim_start;
6004
6005   if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6006     type = TYPE_TARGET_TYPE (type0);
6007   else
6008     type = type0;
6009
6010   name = ada_type_name (type);
6011
6012   if (name == NULL || name[0] == '\000')
6013     return "";
6014
6015   for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6016        discrim_end -= 1)
6017     {
6018       if (strncmp (discrim_end, "___XVN", 6) == 0)
6019         break;
6020     }
6021   if (discrim_end == name)
6022     return "";
6023
6024   for (discrim_start = discrim_end; discrim_start != name + 3;
6025        discrim_start -= 1)
6026     {
6027       if (discrim_start == name + 1)
6028         return "";
6029       if ((discrim_start > name + 3
6030            && strncmp (discrim_start - 3, "___", 3) == 0)
6031           || discrim_start[-1] == '.')
6032         break;
6033     }
6034
6035   GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6036   strncpy (result, discrim_start, discrim_end - discrim_start);
6037   result[discrim_end - discrim_start] = '\0';
6038   return result;
6039 }
6040
6041 /* Scan STR for a subtype-encoded number, beginning at position K.
6042    Put the position of the character just past the number scanned in
6043    *NEW_K, if NEW_K!=NULL.  Put the scanned number in *R, if R!=NULL.
6044    Return 1 if there was a valid number at the given position, and 0
6045    otherwise.  A "subtype-encoded" number consists of the absolute value
6046    in decimal, followed by the letter 'm' to indicate a negative number.
6047    Assumes 0m does not occur.  */
6048
6049 int
6050 ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
6051 {
6052   ULONGEST RU;
6053
6054   if (!isdigit (str[k]))
6055     return 0;
6056
6057   /* Do it the hard way so as not to make any assumption about
6058      the relationship of unsigned long (%lu scan format code) and
6059      LONGEST.  */
6060   RU = 0;
6061   while (isdigit (str[k]))
6062     {
6063       RU = RU * 10 + (str[k] - '0');
6064       k += 1;
6065     }
6066
6067   if (str[k] == 'm')
6068     {
6069       if (R != NULL)
6070         *R = (-(LONGEST) (RU - 1)) - 1;
6071       k += 1;
6072     }
6073   else if (R != NULL)
6074     *R = (LONGEST) RU;
6075
6076   /* NOTE on the above: Technically, C does not say what the results of
6077      - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6078      number representable as a LONGEST (although either would probably work
6079      in most implementations).  When RU>0, the locution in the then branch
6080      above is always equivalent to the negative of RU.  */
6081
6082   if (new_k != NULL)
6083     *new_k = k;
6084   return 1;
6085 }
6086
6087 /* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6088    and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6089    in the range encoded by field FIELD_NUM of TYPE; otherwise 0.  */
6090
6091 int
6092 ada_in_variant (LONGEST val, struct type *type, int field_num)
6093 {
6094   const char *name = TYPE_FIELD_NAME (type, field_num);
6095   int p;
6096
6097   p = 0;
6098   while (1)
6099     {
6100       switch (name[p])
6101         {
6102         case '\0':
6103           return 0;
6104         case 'S':
6105           {
6106             LONGEST W;
6107             if (!ada_scan_number (name, p + 1, &W, &p))
6108               return 0;
6109             if (val == W)
6110               return 1;
6111             break;
6112           }
6113         case 'R':
6114           {
6115             LONGEST L, U;
6116             if (!ada_scan_number (name, p + 1, &L, &p)
6117                 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6118               return 0;
6119             if (val >= L && val <= U)
6120               return 1;
6121             break;
6122           }
6123         case 'O':
6124           return 1;
6125         default:
6126           return 0;
6127         }
6128     }
6129 }
6130
6131 /* FIXME: Lots of redundancy below.  Try to consolidate. */
6132
6133 /* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6134    ARG_TYPE, extract and return the value of one of its (non-static)
6135    fields.  FIELDNO says which field.   Differs from value_primitive_field
6136    only in that it can handle packed values of arbitrary type.  */
6137
6138 static struct value *
6139 ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
6140                            struct type *arg_type)
6141 {
6142   struct type *type;
6143
6144   arg_type = ada_check_typedef (arg_type);
6145   type = TYPE_FIELD_TYPE (arg_type, fieldno);
6146
6147   /* Handle packed fields.  */
6148
6149   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6150     {
6151       int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6152       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
6153
6154       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
6155                                              offset + bit_pos / 8,
6156                                              bit_pos % 8, bit_size, type);
6157     }
6158   else
6159     return value_primitive_field (arg1, offset, fieldno, arg_type);
6160 }
6161
6162 /* Find field with name NAME in object of type TYPE.  If found, 
6163    set the following for each argument that is non-null:
6164     - *FIELD_TYPE_P to the field's type; 
6165     - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within 
6166       an object of that type;
6167     - *BIT_OFFSET_P to the bit offset modulo byte size of the field; 
6168     - *BIT_SIZE_P to its size in bits if the field is packed, and 
6169       0 otherwise;
6170    If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6171    fields up to but not including the desired field, or by the total
6172    number of fields if not found.   A NULL value of NAME never
6173    matches; the function just counts visible fields in this case.
6174    
6175    Returns 1 if found, 0 otherwise. */
6176
6177 static int
6178 find_struct_field (char *name, struct type *type, int offset,
6179                    struct type **field_type_p,
6180                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6181                    int *index_p)
6182 {
6183   int i;
6184
6185   type = ada_check_typedef (type);
6186
6187   if (field_type_p != NULL)
6188     *field_type_p = NULL;
6189   if (byte_offset_p != NULL)
6190     *byte_offset_p = 0;
6191   if (bit_offset_p != NULL)
6192     *bit_offset_p = 0;
6193   if (bit_size_p != NULL)
6194     *bit_size_p = 0;
6195
6196   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6197     {
6198       int bit_pos = TYPE_FIELD_BITPOS (type, i);
6199       int fld_offset = offset + bit_pos / 8;
6200       char *t_field_name = TYPE_FIELD_NAME (type, i);
6201
6202       if (t_field_name == NULL)
6203         continue;
6204
6205       else if (name != NULL && field_name_match (t_field_name, name))
6206         {
6207           int bit_size = TYPE_FIELD_BITSIZE (type, i);
6208           if (field_type_p != NULL)
6209             *field_type_p = TYPE_FIELD_TYPE (type, i);
6210           if (byte_offset_p != NULL)
6211             *byte_offset_p = fld_offset;
6212           if (bit_offset_p != NULL)
6213             *bit_offset_p = bit_pos % 8;
6214           if (bit_size_p != NULL)
6215             *bit_size_p = bit_size;
6216           return 1;
6217         }
6218       else if (ada_is_wrapper_field (type, i))
6219         {
6220           if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6221                                  field_type_p, byte_offset_p, bit_offset_p,
6222                                  bit_size_p, index_p))
6223             return 1;
6224         }
6225       else if (ada_is_variant_part (type, i))
6226         {
6227           /* PNH: Wait.  Do we ever execute this section, or is ARG always of 
6228              fixed type?? */
6229           int j;
6230           struct type *field_type
6231             = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6232
6233           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6234             {
6235               if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6236                                      fld_offset
6237                                      + TYPE_FIELD_BITPOS (field_type, j) / 8,
6238                                      field_type_p, byte_offset_p,
6239                                      bit_offset_p, bit_size_p, index_p))
6240                 return 1;
6241             }
6242         }
6243       else if (index_p != NULL)
6244         *index_p += 1;
6245     }
6246   return 0;
6247 }
6248
6249 /* Number of user-visible fields in record type TYPE. */
6250
6251 static int
6252 num_visible_fields (struct type *type)
6253 {
6254   int n;
6255   n = 0;
6256   find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6257   return n;
6258 }
6259
6260 /* Look for a field NAME in ARG.  Adjust the address of ARG by OFFSET bytes,
6261    and search in it assuming it has (class) type TYPE.
6262    If found, return value, else return NULL.
6263
6264    Searches recursively through wrapper fields (e.g., '_parent').  */
6265
6266 static struct value *
6267 ada_search_struct_field (char *name, struct value *arg, int offset,
6268                          struct type *type)
6269 {
6270   int i;
6271   type = ada_check_typedef (type);
6272
6273   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6274     {
6275       char *t_field_name = TYPE_FIELD_NAME (type, i);
6276
6277       if (t_field_name == NULL)
6278         continue;
6279
6280       else if (field_name_match (t_field_name, name))
6281         return ada_value_primitive_field (arg, offset, i, type);
6282
6283       else if (ada_is_wrapper_field (type, i))
6284         {
6285           struct value *v =     /* Do not let indent join lines here. */
6286             ada_search_struct_field (name, arg,
6287                                      offset + TYPE_FIELD_BITPOS (type, i) / 8,
6288                                      TYPE_FIELD_TYPE (type, i));
6289           if (v != NULL)
6290             return v;
6291         }
6292
6293       else if (ada_is_variant_part (type, i))
6294         {
6295           /* PNH: Do we ever get here?  See find_struct_field. */
6296           int j;
6297           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6298           int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6299
6300           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
6301             {
6302               struct value *v = ada_search_struct_field /* Force line break.  */
6303                 (name, arg,
6304                  var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6305                  TYPE_FIELD_TYPE (field_type, j));
6306               if (v != NULL)
6307                 return v;
6308             }
6309         }
6310     }
6311   return NULL;
6312 }
6313
6314 static struct value *ada_index_struct_field_1 (int *, struct value *,
6315                                                int, struct type *);
6316
6317
6318 /* Return field #INDEX in ARG, where the index is that returned by
6319  * find_struct_field through its INDEX_P argument.  Adjust the address
6320  * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6321  * If found, return value, else return NULL. */
6322
6323 static struct value *
6324 ada_index_struct_field (int index, struct value *arg, int offset,
6325                         struct type *type)
6326 {
6327   return ada_index_struct_field_1 (&index, arg, offset, type);
6328 }
6329
6330
6331 /* Auxiliary function for ada_index_struct_field.  Like
6332  * ada_index_struct_field, but takes index from *INDEX_P and modifies
6333  * *INDEX_P. */
6334
6335 static struct value *
6336 ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6337                           struct type *type)
6338 {
6339   int i;
6340   type = ada_check_typedef (type);
6341
6342   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6343     {
6344       if (TYPE_FIELD_NAME (type, i) == NULL)
6345         continue;
6346       else if (ada_is_wrapper_field (type, i))
6347         {
6348           struct value *v =     /* Do not let indent join lines here. */
6349             ada_index_struct_field_1 (index_p, arg,
6350                                       offset + TYPE_FIELD_BITPOS (type, i) / 8,
6351                                       TYPE_FIELD_TYPE (type, i));
6352           if (v != NULL)
6353             return v;
6354         }
6355
6356       else if (ada_is_variant_part (type, i))
6357         {
6358           /* PNH: Do we ever get here?  See ada_search_struct_field,
6359              find_struct_field. */
6360           error (_("Cannot assign this kind of variant record"));
6361         }
6362       else if (*index_p == 0)
6363         return ada_value_primitive_field (arg, offset, i, type);
6364       else
6365         *index_p -= 1;
6366     }
6367   return NULL;
6368 }
6369
6370 /* Given ARG, a value of type (pointer or reference to a)*
6371    structure/union, extract the component named NAME from the ultimate
6372    target structure/union and return it as a value with its
6373    appropriate type.  If ARG is a pointer or reference and the field
6374    is not packed, returns a reference to the field, otherwise the
6375    value of the field (an lvalue if ARG is an lvalue).     
6376
6377    The routine searches for NAME among all members of the structure itself
6378    and (recursively) among all members of any wrapper members
6379    (e.g., '_parent').
6380
6381    If NO_ERR, then simply return NULL in case of error, rather than 
6382    calling error.  */
6383
6384 struct value *
6385 ada_value_struct_elt (struct value *arg, char *name, int no_err)
6386 {
6387   struct type *t, *t1;
6388   struct value *v;
6389
6390   v = NULL;
6391   t1 = t = ada_check_typedef (value_type (arg));
6392   if (TYPE_CODE (t) == TYPE_CODE_REF)
6393     {
6394       t1 = TYPE_TARGET_TYPE (t);
6395       if (t1 == NULL)
6396         goto BadValue;
6397       t1 = ada_check_typedef (t1);
6398       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6399         {
6400           arg = coerce_ref (arg);
6401           t = t1;
6402         }
6403     }
6404
6405   while (TYPE_CODE (t) == TYPE_CODE_PTR)
6406     {
6407       t1 = TYPE_TARGET_TYPE (t);
6408       if (t1 == NULL)
6409         goto BadValue;
6410       t1 = ada_check_typedef (t1);
6411       if (TYPE_CODE (t1) == TYPE_CODE_PTR)
6412         {
6413           arg = value_ind (arg);
6414           t = t1;
6415         }
6416       else
6417         break;
6418     }
6419
6420   if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
6421     goto BadValue;
6422
6423   if (t1 == t)
6424     v = ada_search_struct_field (name, arg, 0, t);
6425   else
6426     {
6427       int bit_offset, bit_size, byte_offset;
6428       struct type *field_type;
6429       CORE_ADDR address;
6430
6431       if (TYPE_CODE (t) == TYPE_CODE_PTR)
6432         address = value_as_address (arg);
6433       else
6434         address = unpack_pointer (t, value_contents (arg));
6435
6436       t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
6437       if (find_struct_field (name, t1, 0,
6438                              &field_type, &byte_offset, &bit_offset,
6439                              &bit_size, NULL))
6440         {
6441           if (bit_size != 0)
6442             {
6443               if (TYPE_CODE (t) == TYPE_CODE_REF)
6444                 arg = ada_coerce_ref (arg);
6445               else
6446                 arg = ada_value_ind (arg);
6447               v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6448                                                   bit_offset, bit_size,
6449                                                   field_type);
6450             }
6451           else
6452             v = value_from_pointer (lookup_reference_type (field_type),
6453                                     address + byte_offset);
6454         }
6455     }
6456
6457   if (v != NULL || no_err)
6458     return v;
6459   else
6460     error (_("There is no member named %s."), name);
6461
6462  BadValue:
6463   if (no_err)
6464     return NULL;
6465   else
6466     error (_("Attempt to extract a component of a value that is not a record."));
6467 }
6468
6469 /* Given a type TYPE, look up the type of the component of type named NAME.
6470    If DISPP is non-null, add its byte displacement from the beginning of a
6471    structure (pointed to by a value) of type TYPE to *DISPP (does not
6472    work for packed fields).
6473
6474    Matches any field whose name has NAME as a prefix, possibly
6475    followed by "___".
6476
6477    TYPE can be either a struct or union. If REFOK, TYPE may also 
6478    be a (pointer or reference)+ to a struct or union, and the
6479    ultimate target type will be searched.
6480
6481    Looks recursively into variant clauses and parent types.
6482
6483    If NOERR is nonzero, return NULL if NAME is not suitably defined or
6484    TYPE is not a type of the right kind.  */
6485
6486 static struct type *
6487 ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6488                             int noerr, int *dispp)
6489 {
6490   int i;
6491
6492   if (name == NULL)
6493     goto BadName;
6494
6495   if (refok && type != NULL)
6496     while (1)
6497       {
6498         type = ada_check_typedef (type);
6499         if (TYPE_CODE (type) != TYPE_CODE_PTR
6500             && TYPE_CODE (type) != TYPE_CODE_REF)
6501           break;
6502         type = TYPE_TARGET_TYPE (type);
6503       }
6504
6505   if (type == NULL
6506       || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6507           && TYPE_CODE (type) != TYPE_CODE_UNION))
6508     {
6509       if (noerr)
6510         return NULL;
6511       else
6512         {
6513           target_terminal_ours ();
6514           gdb_flush (gdb_stdout);
6515           if (type == NULL)
6516             error (_("Type (null) is not a structure or union type"));
6517           else
6518             {
6519               /* XXX: type_sprint */
6520               fprintf_unfiltered (gdb_stderr, _("Type "));
6521               type_print (type, "", gdb_stderr, -1);
6522               error (_(" is not a structure or union type"));
6523             }
6524         }
6525     }
6526
6527   type = to_static_fixed_type (type);
6528
6529   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6530     {
6531       char *t_field_name = TYPE_FIELD_NAME (type, i);
6532       struct type *t;
6533       int disp;
6534
6535       if (t_field_name == NULL)
6536         continue;
6537
6538       else if (field_name_match (t_field_name, name))
6539         {
6540           if (dispp != NULL)
6541             *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
6542           return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6543         }
6544
6545       else if (ada_is_wrapper_field (type, i))
6546         {
6547           disp = 0;
6548           t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6549                                           0, 1, &disp);
6550           if (t != NULL)
6551             {
6552               if (dispp != NULL)
6553                 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6554               return t;
6555             }
6556         }
6557
6558       else if (ada_is_variant_part (type, i))
6559         {
6560           int j;
6561           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
6562
6563           for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6564             {
6565               disp = 0;
6566               t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6567                                               name, 0, 1, &disp);
6568               if (t != NULL)
6569                 {
6570                   if (dispp != NULL)
6571                     *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6572                   return t;
6573                 }
6574             }
6575         }
6576
6577     }
6578
6579 BadName:
6580   if (!noerr)
6581     {
6582       target_terminal_ours ();
6583       gdb_flush (gdb_stdout);
6584       if (name == NULL)
6585         {
6586           /* XXX: type_sprint */
6587           fprintf_unfiltered (gdb_stderr, _("Type "));
6588           type_print (type, "", gdb_stderr, -1);
6589           error (_(" has no component named <null>"));
6590         }
6591       else
6592         {
6593           /* XXX: type_sprint */
6594           fprintf_unfiltered (gdb_stderr, _("Type "));
6595           type_print (type, "", gdb_stderr, -1);
6596           error (_(" has no component named %s"), name);
6597         }
6598     }
6599
6600   return NULL;
6601 }
6602
6603 /* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6604    within a value of type OUTER_TYPE that is stored in GDB at
6605    OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6606    numbering from 0) is applicable.  Returns -1 if none are.  */
6607
6608 int
6609 ada_which_variant_applies (struct type *var_type, struct type *outer_type,
6610                            const gdb_byte *outer_valaddr)
6611 {
6612   int others_clause;
6613   int i;
6614   char *discrim_name = ada_variant_discrim_name (var_type);
6615   struct value *outer;
6616   struct value *discrim;
6617   LONGEST discrim_val;
6618
6619   outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6620   discrim = ada_value_struct_elt (outer, discrim_name, 1);
6621   if (discrim == NULL)
6622     return -1;
6623   discrim_val = value_as_long (discrim);
6624
6625   others_clause = -1;
6626   for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6627     {
6628       if (ada_is_others_clause (var_type, i))
6629         others_clause = i;
6630       else if (ada_in_variant (discrim_val, var_type, i))
6631         return i;
6632     }
6633
6634   return others_clause;
6635 }
6636 \f
6637
6638
6639                                 /* Dynamic-Sized Records */
6640
6641 /* Strategy: The type ostensibly attached to a value with dynamic size
6642    (i.e., a size that is not statically recorded in the debugging
6643    data) does not accurately reflect the size or layout of the value.
6644    Our strategy is to convert these values to values with accurate,
6645    conventional types that are constructed on the fly.  */
6646
6647 /* There is a subtle and tricky problem here.  In general, we cannot
6648    determine the size of dynamic records without its data.  However,
6649    the 'struct value' data structure, which GDB uses to represent
6650    quantities in the inferior process (the target), requires the size
6651    of the type at the time of its allocation in order to reserve space
6652    for GDB's internal copy of the data.  That's why the
6653    'to_fixed_xxx_type' routines take (target) addresses as parameters,
6654    rather than struct value*s.
6655
6656    However, GDB's internal history variables ($1, $2, etc.) are
6657    struct value*s containing internal copies of the data that are not, in
6658    general, the same as the data at their corresponding addresses in
6659    the target.  Fortunately, the types we give to these values are all
6660    conventional, fixed-size types (as per the strategy described
6661    above), so that we don't usually have to perform the
6662    'to_fixed_xxx_type' conversions to look at their values.
6663    Unfortunately, there is one exception: if one of the internal
6664    history variables is an array whose elements are unconstrained
6665    records, then we will need to create distinct fixed types for each
6666    element selected.  */
6667
6668 /* The upshot of all of this is that many routines take a (type, host
6669    address, target address) triple as arguments to represent a value.
6670    The host address, if non-null, is supposed to contain an internal
6671    copy of the relevant data; otherwise, the program is to consult the
6672    target at the target address.  */
6673
6674 /* Assuming that VAL0 represents a pointer value, the result of
6675    dereferencing it.  Differs from value_ind in its treatment of
6676    dynamic-sized types.  */
6677
6678 struct value *
6679 ada_value_ind (struct value *val0)
6680 {
6681   struct value *val = unwrap_value (value_ind (val0));
6682   return ada_to_fixed_value (val);
6683 }
6684
6685 /* The value resulting from dereferencing any "reference to"
6686    qualifiers on VAL0.  */
6687
6688 static struct value *
6689 ada_coerce_ref (struct value *val0)
6690 {
6691   if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
6692     {
6693       struct value *val = val0;
6694       val = coerce_ref (val);
6695       val = unwrap_value (val);
6696       return ada_to_fixed_value (val);
6697     }
6698   else
6699     return val0;
6700 }
6701
6702 /* Return OFF rounded upward if necessary to a multiple of
6703    ALIGNMENT (a power of 2).  */
6704
6705 static unsigned int
6706 align_value (unsigned int off, unsigned int alignment)
6707 {
6708   return (off + alignment - 1) & ~(alignment - 1);
6709 }
6710
6711 /* Return the bit alignment required for field #F of template type TYPE.  */
6712
6713 static unsigned int
6714 field_alignment (struct type *type, int f)
6715 {
6716   const char *name = TYPE_FIELD_NAME (type, f);
6717   int len;
6718   int align_offset;
6719
6720   /* The field name should never be null, unless the debugging information
6721      is somehow malformed.  In this case, we assume the field does not
6722      require any alignment.  */
6723   if (name == NULL)
6724     return 1;
6725
6726   len = strlen (name);
6727
6728   if (!isdigit (name[len - 1]))
6729     return 1;
6730
6731   if (isdigit (name[len - 2]))
6732     align_offset = len - 2;
6733   else
6734     align_offset = len - 1;
6735
6736   if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
6737     return TARGET_CHAR_BIT;
6738
6739   return atoi (name + align_offset) * TARGET_CHAR_BIT;
6740 }
6741
6742 /* Find a symbol named NAME.  Ignores ambiguity.  */
6743
6744 struct symbol *
6745 ada_find_any_symbol (const char *name)
6746 {
6747   struct symbol *sym;
6748
6749   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6750   if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6751     return sym;
6752
6753   sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6754   return sym;
6755 }
6756
6757 /* Find a type named NAME.  Ignores ambiguity.  */
6758
6759 struct type *
6760 ada_find_any_type (const char *name)
6761 {
6762   struct symbol *sym = ada_find_any_symbol (name);
6763
6764   if (sym != NULL)
6765     return SYMBOL_TYPE (sym);
6766
6767   return NULL;
6768 }
6769
6770 /* Given NAME and an associated BLOCK, search all symbols for
6771    NAME suffixed with  "___XR", which is the ``renaming'' symbol
6772    associated to NAME.  Return this symbol if found, return
6773    NULL otherwise.  */
6774
6775 struct symbol *
6776 ada_find_renaming_symbol (const char *name, struct block *block)
6777 {
6778   struct symbol *sym;
6779
6780   sym = find_old_style_renaming_symbol (name, block);
6781
6782   if (sym != NULL)
6783     return sym;
6784
6785   /* Not right yet.  FIXME pnh 7/20/2007. */
6786   sym = ada_find_any_symbol (name);
6787   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6788     return sym;
6789   else
6790     return NULL;
6791 }
6792
6793 static struct symbol *
6794 find_old_style_renaming_symbol (const char *name, struct block *block)
6795 {
6796   const struct symbol *function_sym = block_function (block);
6797   char *rename;
6798
6799   if (function_sym != NULL)
6800     {
6801       /* If the symbol is defined inside a function, NAME is not fully
6802          qualified.  This means we need to prepend the function name
6803          as well as adding the ``___XR'' suffix to build the name of
6804          the associated renaming symbol.  */
6805       char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
6806       /* Function names sometimes contain suffixes used
6807          for instance to qualify nested subprograms.  When building
6808          the XR type name, we need to make sure that this suffix is
6809          not included.  So do not include any suffix in the function
6810          name length below.  */
6811       const int function_name_len = ada_name_prefix_len (function_name);
6812       const int rename_len = function_name_len + 2      /*  "__" */
6813         + strlen (name) + 6 /* "___XR\0" */ ;
6814
6815       /* Strip the suffix if necessary.  */
6816       function_name[function_name_len] = '\0';
6817
6818       /* Library-level functions are a special case, as GNAT adds
6819          a ``_ada_'' prefix to the function name to avoid namespace
6820          pollution.  However, the renaming symbols themselves do not
6821          have this prefix, so we need to skip this prefix if present.  */
6822       if (function_name_len > 5 /* "_ada_" */
6823           && strstr (function_name, "_ada_") == function_name)
6824         function_name = function_name + 5;
6825
6826       rename = (char *) alloca (rename_len * sizeof (char));
6827       sprintf (rename, "%s__%s___XR", function_name, name);
6828     }
6829   else
6830     {
6831       const int rename_len = strlen (name) + 6;
6832       rename = (char *) alloca (rename_len * sizeof (char));
6833       sprintf (rename, "%s___XR", name);
6834     }
6835
6836   return ada_find_any_symbol (rename);
6837 }
6838
6839 /* Because of GNAT encoding conventions, several GDB symbols may match a
6840    given type name.  If the type denoted by TYPE0 is to be preferred to
6841    that of TYPE1 for purposes of type printing, return non-zero;
6842    otherwise return 0.  */
6843
6844 int
6845 ada_prefer_type (struct type *type0, struct type *type1)
6846 {
6847   if (type1 == NULL)
6848     return 1;
6849   else if (type0 == NULL)
6850     return 0;
6851   else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6852     return 1;
6853   else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6854     return 0;
6855   else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6856     return 1;
6857   else if (ada_is_packed_array_type (type0))
6858     return 1;
6859   else if (ada_is_array_descriptor_type (type0)
6860            && !ada_is_array_descriptor_type (type1))
6861     return 1;
6862   else
6863     {
6864       const char *type0_name = type_name_no_tag (type0);
6865       const char *type1_name = type_name_no_tag (type1);
6866
6867       if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6868           && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6869         return 1;
6870     }
6871   return 0;
6872 }
6873
6874 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
6875    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
6876
6877 char *
6878 ada_type_name (struct type *type)
6879 {
6880   if (type == NULL)
6881     return NULL;
6882   else if (TYPE_NAME (type) != NULL)
6883     return TYPE_NAME (type);
6884   else
6885     return TYPE_TAG_NAME (type);
6886 }
6887
6888 /* Find a parallel type to TYPE whose name is formed by appending
6889    SUFFIX to the name of TYPE.  */
6890
6891 struct type *
6892 ada_find_parallel_type (struct type *type, const char *suffix)
6893 {
6894   static char *name;
6895   static size_t name_len = 0;
6896   int len;
6897   char *typename = ada_type_name (type);
6898
6899   if (typename == NULL)
6900     return NULL;
6901
6902   len = strlen (typename);
6903
6904   GROW_VECT (name, name_len, len + strlen (suffix) + 1);
6905
6906   strcpy (name, typename);
6907   strcpy (name + len, suffix);
6908
6909   return ada_find_any_type (name);
6910 }
6911
6912
6913 /* If TYPE is a variable-size record type, return the corresponding template
6914    type describing its fields.  Otherwise, return NULL.  */
6915
6916 static struct type *
6917 dynamic_template_type (struct type *type)
6918 {
6919   type = ada_check_typedef (type);
6920
6921   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6922       || ada_type_name (type) == NULL)
6923     return NULL;
6924   else
6925     {
6926       int len = strlen (ada_type_name (type));
6927       if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6928         return type;
6929       else
6930         return ada_find_parallel_type (type, "___XVE");
6931     }
6932 }
6933
6934 /* Assuming that TEMPL_TYPE is a union or struct type, returns
6935    non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size.  */
6936
6937 static int
6938 is_dynamic_field (struct type *templ_type, int field_num)
6939 {
6940   const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6941   return name != NULL
6942     && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6943     && strstr (name, "___XVL") != NULL;
6944 }
6945
6946 /* The index of the variant field of TYPE, or -1 if TYPE does not
6947    represent a variant record type.  */
6948
6949 static int
6950 variant_field_index (struct type *type)
6951 {
6952   int f;
6953
6954   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6955     return -1;
6956
6957   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6958     {
6959       if (ada_is_variant_part (type, f))
6960         return f;
6961     }
6962   return -1;
6963 }
6964
6965 /* A record type with no fields.  */
6966
6967 static struct type *
6968 empty_record (struct objfile *objfile)
6969 {
6970   struct type *type = alloc_type (objfile);
6971   TYPE_CODE (type) = TYPE_CODE_STRUCT;
6972   TYPE_NFIELDS (type) = 0;
6973   TYPE_FIELDS (type) = NULL;
6974   TYPE_NAME (type) = "<empty>";
6975   TYPE_TAG_NAME (type) = NULL;
6976   TYPE_FLAGS (type) = 0;
6977   TYPE_LENGTH (type) = 0;
6978   return type;
6979 }
6980
6981 /* An ordinary record type (with fixed-length fields) that describes
6982    the value of type TYPE at VALADDR or ADDRESS (see comments at
6983    the beginning of this section) VAL according to GNAT conventions.
6984    DVAL0 should describe the (portion of a) record that contains any
6985    necessary discriminants.  It should be NULL if value_type (VAL) is
6986    an outer-level type (i.e., as opposed to a branch of a variant.)  A
6987    variant field (unless unchecked) is replaced by a particular branch
6988    of the variant.
6989
6990    If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6991    length are not statically known are discarded.  As a consequence,
6992    VALADDR, ADDRESS and DVAL0 are ignored.
6993
6994    NOTE: Limitations: For now, we assume that dynamic fields and
6995    variants occupy whole numbers of bytes.  However, they need not be
6996    byte-aligned.  */
6997
6998 struct type *
6999 ada_template_to_fixed_record_type_1 (struct type *type,
7000                                      const gdb_byte *valaddr,
7001                                      CORE_ADDR address, struct value *dval0,
7002                                      int keep_dynamic_fields)
7003 {
7004   struct value *mark = value_mark ();
7005   struct value *dval;
7006   struct type *rtype;
7007   int nfields, bit_len;
7008   int variant_field;
7009   long off;
7010   int fld_bit_len, bit_incr;
7011   int f;
7012
7013   /* Compute the number of fields in this record type that are going
7014      to be processed: unless keep_dynamic_fields, this includes only
7015      fields whose position and length are static will be processed.  */
7016   if (keep_dynamic_fields)
7017     nfields = TYPE_NFIELDS (type);
7018   else
7019     {
7020       nfields = 0;
7021       while (nfields < TYPE_NFIELDS (type)
7022              && !ada_is_variant_part (type, nfields)
7023              && !is_dynamic_field (type, nfields))
7024         nfields++;
7025     }
7026
7027   rtype = alloc_type (TYPE_OBJFILE (type));
7028   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7029   INIT_CPLUS_SPECIFIC (rtype);
7030   TYPE_NFIELDS (rtype) = nfields;
7031   TYPE_FIELDS (rtype) = (struct field *)
7032     TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7033   memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7034   TYPE_NAME (rtype) = ada_type_name (type);
7035   TYPE_TAG_NAME (rtype) = NULL;
7036   TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
7037
7038   off = 0;
7039   bit_len = 0;
7040   variant_field = -1;
7041
7042   for (f = 0; f < nfields; f += 1)
7043     {
7044       off = align_value (off, field_alignment (type, f))
7045         + TYPE_FIELD_BITPOS (type, f);
7046       TYPE_FIELD_BITPOS (rtype, f) = off;
7047       TYPE_FIELD_BITSIZE (rtype, f) = 0;
7048
7049       if (ada_is_variant_part (type, f))
7050         {
7051           variant_field = f;
7052           fld_bit_len = bit_incr = 0;
7053         }
7054       else if (is_dynamic_field (type, f))
7055         {
7056           if (dval0 == NULL)
7057             dval = value_from_contents_and_address (rtype, valaddr, address);
7058           else
7059             dval = dval0;
7060
7061           /* Get the fixed type of the field. Note that, in this case, we
7062              do not want to get the real type out of the tag: if the current
7063              field is the parent part of a tagged record, we will get the
7064              tag of the object. Clearly wrong: the real type of the parent
7065              is not the real type of the child. We would end up in an infinite
7066              loop.  */
7067           TYPE_FIELD_TYPE (rtype, f) =
7068             ada_to_fixed_type
7069             (ada_get_base_type
7070              (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
7071              cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7072              cond_offset_target (address, off / TARGET_CHAR_BIT), dval, 0);
7073           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7074           bit_incr = fld_bit_len =
7075             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7076         }
7077       else
7078         {
7079           TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
7080           TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7081           if (TYPE_FIELD_BITSIZE (type, f) > 0)
7082             bit_incr = fld_bit_len =
7083               TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7084           else
7085             bit_incr = fld_bit_len =
7086               TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
7087         }
7088       if (off + fld_bit_len > bit_len)
7089         bit_len = off + fld_bit_len;
7090       off += bit_incr;
7091       TYPE_LENGTH (rtype) =
7092         align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7093     }
7094
7095   /* We handle the variant part, if any, at the end because of certain
7096      odd cases in which it is re-ordered so as NOT the last field of
7097      the record.  This can happen in the presence of representation
7098      clauses.  */
7099   if (variant_field >= 0)
7100     {
7101       struct type *branch_type;
7102
7103       off = TYPE_FIELD_BITPOS (rtype, variant_field);
7104
7105       if (dval0 == NULL)
7106         dval = value_from_contents_and_address (rtype, valaddr, address);
7107       else
7108         dval = dval0;
7109
7110       branch_type =
7111         to_fixed_variant_branch_type
7112         (TYPE_FIELD_TYPE (type, variant_field),
7113          cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7114          cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7115       if (branch_type == NULL)
7116         {
7117           for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7118             TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7119           TYPE_NFIELDS (rtype) -= 1;
7120         }
7121       else
7122         {
7123           TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7124           TYPE_FIELD_NAME (rtype, variant_field) = "S";
7125           fld_bit_len =
7126             TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7127             TARGET_CHAR_BIT;
7128           if (off + fld_bit_len > bit_len)
7129             bit_len = off + fld_bit_len;
7130           TYPE_LENGTH (rtype) =
7131             align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7132         }
7133     }
7134
7135   /* According to exp_dbug.ads, the size of TYPE for variable-size records
7136      should contain the alignment of that record, which should be a strictly
7137      positive value.  If null or negative, then something is wrong, most
7138      probably in the debug info.  In that case, we don't round up the size
7139      of the resulting type. If this record is not part of another structure,
7140      the current RTYPE length might be good enough for our purposes.  */
7141   if (TYPE_LENGTH (type) <= 0)
7142     {
7143       if (TYPE_NAME (rtype))
7144         warning (_("Invalid type size for `%s' detected: %d."),
7145                  TYPE_NAME (rtype), TYPE_LENGTH (type));
7146       else
7147         warning (_("Invalid type size for <unnamed> detected: %d."),
7148                  TYPE_LENGTH (type));
7149     }
7150   else
7151     {
7152       TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7153                                          TYPE_LENGTH (type));
7154     }
7155
7156   value_free_to_mark (mark);
7157   if (TYPE_LENGTH (rtype) > varsize_limit)
7158     error (_("record type with dynamic size is larger than varsize-limit"));
7159   return rtype;
7160 }
7161
7162 /* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7163    of 1.  */
7164
7165 static struct type *
7166 template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
7167                                CORE_ADDR address, struct value *dval0)
7168 {
7169   return ada_template_to_fixed_record_type_1 (type, valaddr,
7170                                               address, dval0, 1);
7171 }
7172
7173 /* An ordinary record type in which ___XVL-convention fields and
7174    ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7175    static approximations, containing all possible fields.  Uses
7176    no runtime values.  Useless for use in values, but that's OK,
7177    since the results are used only for type determinations.   Works on both
7178    structs and unions.  Representation note: to save space, we memorize
7179    the result of this function in the TYPE_TARGET_TYPE of the
7180    template type.  */
7181
7182 static struct type *
7183 template_to_static_fixed_type (struct type *type0)
7184 {
7185   struct type *type;
7186   int nfields;
7187   int f;
7188
7189   if (TYPE_TARGET_TYPE (type0) != NULL)
7190     return TYPE_TARGET_TYPE (type0);
7191
7192   nfields = TYPE_NFIELDS (type0);
7193   type = type0;
7194
7195   for (f = 0; f < nfields; f += 1)
7196     {
7197       struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
7198       struct type *new_type;
7199
7200       if (is_dynamic_field (type0, f))
7201         new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
7202       else
7203         new_type = static_unwrap_type (field_type);
7204       if (type == type0 && new_type != field_type)
7205         {
7206           TYPE_TARGET_TYPE (type0) = type = alloc_type (TYPE_OBJFILE (type0));
7207           TYPE_CODE (type) = TYPE_CODE (type0);
7208           INIT_CPLUS_SPECIFIC (type);
7209           TYPE_NFIELDS (type) = nfields;
7210           TYPE_FIELDS (type) = (struct field *)
7211             TYPE_ALLOC (type, nfields * sizeof (struct field));
7212           memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7213                   sizeof (struct field) * nfields);
7214           TYPE_NAME (type) = ada_type_name (type0);
7215           TYPE_TAG_NAME (type) = NULL;
7216           TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE;
7217           TYPE_LENGTH (type) = 0;
7218         }
7219       TYPE_FIELD_TYPE (type, f) = new_type;
7220       TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
7221     }
7222   return type;
7223 }
7224
7225 /* Given an object of type TYPE whose contents are at VALADDR and
7226    whose address in memory is ADDRESS, returns a revision of TYPE --
7227    a non-dynamic-sized record with a variant part -- in which
7228    the variant part is replaced with the appropriate branch.  Looks
7229    for discriminant values in DVAL0, which can be NULL if the record
7230    contains the necessary discriminant values.  */
7231
7232 static struct type *
7233 to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
7234                                    CORE_ADDR address, struct value *dval0)
7235 {
7236   struct value *mark = value_mark ();
7237   struct value *dval;
7238   struct type *rtype;
7239   struct type *branch_type;
7240   int nfields = TYPE_NFIELDS (type);
7241   int variant_field = variant_field_index (type);
7242
7243   if (variant_field == -1)
7244     return type;
7245
7246   if (dval0 == NULL)
7247     dval = value_from_contents_and_address (type, valaddr, address);
7248   else
7249     dval = dval0;
7250
7251   rtype = alloc_type (TYPE_OBJFILE (type));
7252   TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7253   INIT_CPLUS_SPECIFIC (rtype);
7254   TYPE_NFIELDS (rtype) = nfields;
7255   TYPE_FIELDS (rtype) =
7256     (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7257   memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
7258           sizeof (struct field) * nfields);
7259   TYPE_NAME (rtype) = ada_type_name (type);
7260   TYPE_TAG_NAME (rtype) = NULL;
7261   TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;
7262   TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7263
7264   branch_type = to_fixed_variant_branch_type
7265     (TYPE_FIELD_TYPE (type, variant_field),
7266      cond_offset_host (valaddr,
7267                        TYPE_FIELD_BITPOS (type, variant_field)
7268                        / TARGET_CHAR_BIT),
7269      cond_offset_target (address,
7270                          TYPE_FIELD_BITPOS (type, variant_field)
7271                          / TARGET_CHAR_BIT), dval);
7272   if (branch_type == NULL)
7273     {
7274       int f;
7275       for (f = variant_field + 1; f < nfields; f += 1)
7276         TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7277       TYPE_NFIELDS (rtype) -= 1;
7278     }
7279   else
7280     {
7281       TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7282       TYPE_FIELD_NAME (rtype, variant_field) = "S";
7283       TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
7284       TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
7285     }
7286   TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
7287
7288   value_free_to_mark (mark);
7289   return rtype;
7290 }
7291
7292 /* An ordinary record type (with fixed-length fields) that describes
7293    the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7294    beginning of this section].   Any necessary discriminants' values
7295    should be in DVAL, a record value; it may be NULL if the object
7296    at ADDR itself contains any necessary discriminant values.
7297    Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7298    values from the record are needed.  Except in the case that DVAL,
7299    VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7300    unchecked) is replaced by a particular branch of the variant.
7301
7302    NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7303    is questionable and may be removed.  It can arise during the
7304    processing of an unconstrained-array-of-record type where all the
7305    variant branches have exactly the same size.  This is because in
7306    such cases, the compiler does not bother to use the XVS convention
7307    when encoding the record.  I am currently dubious of this
7308    shortcut and suspect the compiler should be altered.  FIXME.  */
7309
7310 static struct type *
7311 to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
7312                       CORE_ADDR address, struct value *dval)
7313 {
7314   struct type *templ_type;
7315
7316   if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
7317     return type0;
7318
7319   templ_type = dynamic_template_type (type0);
7320
7321   if (templ_type != NULL)
7322     return template_to_fixed_record_type (templ_type, valaddr, address, dval);
7323   else if (variant_field_index (type0) >= 0)
7324     {
7325       if (dval == NULL && valaddr == NULL && address == 0)
7326         return type0;
7327       return to_record_with_fixed_variant_part (type0, valaddr, address,
7328                                                 dval);
7329     }
7330   else
7331     {
7332       TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE;
7333       return type0;
7334     }
7335
7336 }
7337
7338 /* An ordinary record type (with fixed-length fields) that describes
7339    the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7340    union type.  Any necessary discriminants' values should be in DVAL,
7341    a record value.  That is, this routine selects the appropriate
7342    branch of the union at ADDR according to the discriminant value
7343    indicated in the union's type name.  */
7344
7345 static struct type *
7346 to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
7347                               CORE_ADDR address, struct value *dval)
7348 {
7349   int which;
7350   struct type *templ_type;
7351   struct type *var_type;
7352
7353   if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7354     var_type = TYPE_TARGET_TYPE (var_type0);
7355   else
7356     var_type = var_type0;
7357
7358   templ_type = ada_find_parallel_type (var_type, "___XVU");
7359
7360   if (templ_type != NULL)
7361     var_type = templ_type;
7362
7363   which =
7364     ada_which_variant_applies (var_type,
7365                                value_type (dval), value_contents (dval));
7366
7367   if (which < 0)
7368     return empty_record (TYPE_OBJFILE (var_type));
7369   else if (is_dynamic_field (var_type, which))
7370     return to_fixed_record_type
7371       (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7372        valaddr, address, dval);
7373   else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
7374     return
7375       to_fixed_record_type
7376       (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
7377   else
7378     return TYPE_FIELD_TYPE (var_type, which);
7379 }
7380
7381 /* Assuming that TYPE0 is an array type describing the type of a value
7382    at ADDR, and that DVAL describes a record containing any
7383    discriminants used in TYPE0, returns a type for the value that
7384    contains no dynamic components (that is, no components whose sizes
7385    are determined by run-time quantities).  Unless IGNORE_TOO_BIG is
7386    true, gives an error message if the resulting type's size is over
7387    varsize_limit.  */
7388
7389 static struct type *
7390 to_fixed_array_type (struct type *type0, struct value *dval,
7391                      int ignore_too_big)
7392 {
7393   struct type *index_type_desc;
7394   struct type *result;
7395
7396   if (ada_is_packed_array_type (type0)  /* revisit? */
7397       || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
7398     return type0;
7399
7400   index_type_desc = ada_find_parallel_type (type0, "___XA");
7401   if (index_type_desc == NULL)
7402     {
7403       struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
7404       /* NOTE: elt_type---the fixed version of elt_type0---should never
7405          depend on the contents of the array in properly constructed
7406          debugging data.  */
7407       /* Create a fixed version of the array element type.
7408          We're not providing the address of an element here,
7409          and thus the actual object value cannot be inspected to do
7410          the conversion.  This should not be a problem, since arrays of
7411          unconstrained objects are not allowed.  In particular, all
7412          the elements of an array of a tagged type should all be of
7413          the same type specified in the debugging info.  No need to
7414          consult the object tag.  */
7415       struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
7416
7417       if (elt_type0 == elt_type)
7418         result = type0;
7419       else
7420         result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7421                                     elt_type, TYPE_INDEX_TYPE (type0));
7422     }
7423   else
7424     {
7425       int i;
7426       struct type *elt_type0;
7427
7428       elt_type0 = type0;
7429       for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
7430         elt_type0 = TYPE_TARGET_TYPE (elt_type0);
7431
7432       /* NOTE: result---the fixed version of elt_type0---should never
7433          depend on the contents of the array in properly constructed
7434          debugging data.  */
7435       /* Create a fixed version of the array element type.
7436          We're not providing the address of an element here,
7437          and thus the actual object value cannot be inspected to do
7438          the conversion.  This should not be a problem, since arrays of
7439          unconstrained objects are not allowed.  In particular, all
7440          the elements of an array of a tagged type should all be of
7441          the same type specified in the debugging info.  No need to
7442          consult the object tag.  */
7443       result =
7444         ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
7445       for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
7446         {
7447           struct type *range_type =
7448             to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
7449                                  dval, TYPE_OBJFILE (type0));
7450           result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
7451                                       result, range_type);
7452         }
7453       if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
7454         error (_("array type with dynamic size is larger than varsize-limit"));
7455     }
7456
7457   TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE;
7458   return result;
7459 }
7460
7461
7462 /* A standard type (containing no dynamically sized components)
7463    corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7464    DVAL describes a record containing any discriminants used in TYPE0,
7465    and may be NULL if there are none, or if the object of type TYPE at
7466    ADDRESS or in VALADDR contains these discriminants.
7467    
7468    If CHECK_TAG is not null, in the case of tagged types, this function
7469    attempts to locate the object's tag and use it to compute the actual
7470    type.  However, when ADDRESS is null, we cannot use it to determine the
7471    location of the tag, and therefore compute the tagged type's actual type.
7472    So we return the tagged type without consulting the tag.  */
7473    
7474 static struct type *
7475 ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
7476                    CORE_ADDR address, struct value *dval, int check_tag)
7477 {
7478   type = ada_check_typedef (type);
7479   switch (TYPE_CODE (type))
7480     {
7481     default:
7482       return type;
7483     case TYPE_CODE_STRUCT:
7484       {
7485         struct type *static_type = to_static_fixed_type (type);
7486         struct type *fixed_record_type =
7487           to_fixed_record_type (type, valaddr, address, NULL);
7488         /* If STATIC_TYPE is a tagged type and we know the object's address,
7489            then we can determine its tag, and compute the object's actual
7490            type from there. Note that we have to use the fixed record
7491            type (the parent part of the record may have dynamic fields
7492            and the way the location of _tag is expressed may depend on
7493            them).  */
7494
7495         if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
7496           {
7497             struct type *real_type =
7498               type_from_tag (value_tag_from_contents_and_address
7499                              (fixed_record_type,
7500                               valaddr,
7501                               address));
7502             if (real_type != NULL)
7503               return to_fixed_record_type (real_type, valaddr, address, NULL);
7504           }
7505         return fixed_record_type;
7506       }
7507     case TYPE_CODE_ARRAY:
7508       return to_fixed_array_type (type, dval, 1);
7509     case TYPE_CODE_UNION:
7510       if (dval == NULL)
7511         return type;
7512       else
7513         return to_fixed_variant_branch_type (type, valaddr, address, dval);
7514     }
7515 }
7516
7517 /* The same as ada_to_fixed_type_1, except that it preserves the type
7518    if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7519    ada_to_fixed_type_1 would return the type referenced by TYPE.  */
7520
7521 struct type *
7522 ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7523                    CORE_ADDR address, struct value *dval, int check_tag)
7524
7525 {
7526   struct type *fixed_type =
7527     ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7528
7529   if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7530       && TYPE_TARGET_TYPE (type) == fixed_type)
7531     return type;
7532
7533   return fixed_type;
7534 }
7535
7536 /* A standard (static-sized) type corresponding as well as possible to
7537    TYPE0, but based on no runtime data.  */
7538
7539 static struct type *
7540 to_static_fixed_type (struct type *type0)
7541 {
7542   struct type *type;
7543
7544   if (type0 == NULL)
7545     return NULL;
7546
7547   if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
7548     return type0;
7549
7550   type0 = ada_check_typedef (type0);
7551
7552   switch (TYPE_CODE (type0))
7553     {
7554     default:
7555       return type0;
7556     case TYPE_CODE_STRUCT:
7557       type = dynamic_template_type (type0);
7558       if (type != NULL)
7559         return template_to_static_fixed_type (type);
7560       else
7561         return template_to_static_fixed_type (type0);
7562     case TYPE_CODE_UNION:
7563       type = ada_find_parallel_type (type0, "___XVU");
7564       if (type != NULL)
7565         return template_to_static_fixed_type (type);
7566       else
7567         return template_to_static_fixed_type (type0);
7568     }
7569 }
7570
7571 /* A static approximation of TYPE with all type wrappers removed.  */
7572
7573 static struct type *
7574 static_unwrap_type (struct type *type)
7575 {
7576   if (ada_is_aligner_type (type))
7577     {
7578       struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
7579       if (ada_type_name (type1) == NULL)
7580         TYPE_NAME (type1) = ada_type_name (type);
7581
7582       return static_unwrap_type (type1);
7583     }
7584   else
7585     {
7586       struct type *raw_real_type = ada_get_base_type (type);
7587       if (raw_real_type == type)
7588         return type;
7589       else
7590         return to_static_fixed_type (raw_real_type);
7591     }
7592 }
7593
7594 /* In some cases, incomplete and private types require
7595    cross-references that are not resolved as records (for example,
7596       type Foo;
7597       type FooP is access Foo;
7598       V: FooP;
7599       type Foo is array ...;
7600    ).  In these cases, since there is no mechanism for producing
7601    cross-references to such types, we instead substitute for FooP a
7602    stub enumeration type that is nowhere resolved, and whose tag is
7603    the name of the actual type.  Call these types "non-record stubs".  */
7604
7605 /* A type equivalent to TYPE that is not a non-record stub, if one
7606    exists, otherwise TYPE.  */
7607
7608 struct type *
7609 ada_check_typedef (struct type *type)
7610 {
7611   if (type == NULL)
7612     return NULL;
7613
7614   CHECK_TYPEDEF (type);
7615   if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
7616       || !TYPE_STUB (type)
7617       || TYPE_TAG_NAME (type) == NULL)
7618     return type;
7619   else
7620     {
7621       char *name = TYPE_TAG_NAME (type);
7622       struct type *type1 = ada_find_any_type (name);
7623       return (type1 == NULL) ? type : type1;
7624     }
7625 }
7626
7627 /* A value representing the data at VALADDR/ADDRESS as described by
7628    type TYPE0, but with a standard (static-sized) type that correctly
7629    describes it.  If VAL0 is not NULL and TYPE0 already is a standard
7630    type, then return VAL0 [this feature is simply to avoid redundant
7631    creation of struct values].  */
7632
7633 static struct value *
7634 ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7635                            struct value *val0)
7636 {
7637   struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
7638   if (type == type0 && val0 != NULL)
7639     return val0;
7640   else
7641     return value_from_contents_and_address (type, 0, address);
7642 }
7643
7644 /* A value representing VAL, but with a standard (static-sized) type
7645    that correctly describes it.  Does not necessarily create a new
7646    value.  */
7647
7648 static struct value *
7649 ada_to_fixed_value (struct value *val)
7650 {
7651   return ada_to_fixed_value_create (value_type (val),
7652                                     VALUE_ADDRESS (val) + value_offset (val),
7653                                     val);
7654 }
7655
7656 /* A value representing VAL, but with a standard (static-sized) type
7657    chosen to approximate the real type of VAL as well as possible, but
7658    without consulting any runtime values.  For Ada dynamic-sized
7659    types, therefore, the type of the result is likely to be inaccurate.  */
7660
7661 struct value *
7662 ada_to_static_fixed_value (struct value *val)
7663 {
7664   struct type *type =
7665     to_static_fixed_type (static_unwrap_type (value_type (val)));
7666   if (type == value_type (val))
7667     return val;
7668   else
7669     return coerce_unspec_val_to_type (val, type);
7670 }
7671 \f
7672
7673 /* Attributes */
7674
7675 /* Table mapping attribute numbers to names.
7676    NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h.  */
7677
7678 static const char *attribute_names[] = {
7679   "<?>",
7680
7681   "first",
7682   "last",
7683   "length",
7684   "image",
7685   "max",
7686   "min",
7687   "modulus",
7688   "pos",
7689   "size",
7690   "tag",
7691   "val",
7692   0
7693 };
7694
7695 const char *
7696 ada_attribute_name (enum exp_opcode n)
7697 {
7698   if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7699     return attribute_names[n - OP_ATR_FIRST + 1];
7700   else
7701     return attribute_names[0];
7702 }
7703
7704 /* Evaluate the 'POS attribute applied to ARG.  */
7705
7706 static LONGEST
7707 pos_atr (struct value *arg)
7708 {
7709   struct type *type = value_type (arg);
7710
7711   if (!discrete_type_p (type))
7712     error (_("'POS only defined on discrete types"));
7713
7714   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7715     {
7716       int i;
7717       LONGEST v = value_as_long (arg);
7718
7719       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7720         {
7721           if (v == TYPE_FIELD_BITPOS (type, i))
7722             return i;
7723         }
7724       error (_("enumeration value is invalid: can't find 'POS"));
7725     }
7726   else
7727     return value_as_long (arg);
7728 }
7729
7730 static struct value *
7731 value_pos_atr (struct value *arg)
7732 {
7733   return value_from_longest (builtin_type_int, pos_atr (arg));
7734 }
7735
7736 /* Evaluate the TYPE'VAL attribute applied to ARG.  */
7737
7738 static struct value *
7739 value_val_atr (struct type *type, struct value *arg)
7740 {
7741   if (!discrete_type_p (type))
7742     error (_("'VAL only defined on discrete types"));
7743   if (!integer_type_p (value_type (arg)))
7744     error (_("'VAL requires integral argument"));
7745
7746   if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7747     {
7748       long pos = value_as_long (arg);
7749       if (pos < 0 || pos >= TYPE_NFIELDS (type))
7750         error (_("argument to 'VAL out of range"));
7751       return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
7752     }
7753   else
7754     return value_from_longest (type, value_as_long (arg));
7755 }
7756 \f
7757
7758                                 /* Evaluation */
7759
7760 /* True if TYPE appears to be an Ada character type.
7761    [At the moment, this is true only for Character and Wide_Character;
7762    It is a heuristic test that could stand improvement].  */
7763
7764 int
7765 ada_is_character_type (struct type *type)
7766 {
7767   const char *name;
7768
7769   /* If the type code says it's a character, then assume it really is,
7770      and don't check any further.  */
7771   if (TYPE_CODE (type) == TYPE_CODE_CHAR)
7772     return 1;
7773   
7774   /* Otherwise, assume it's a character type iff it is a discrete type
7775      with a known character type name.  */
7776   name = ada_type_name (type);
7777   return (name != NULL
7778           && (TYPE_CODE (type) == TYPE_CODE_INT
7779               || TYPE_CODE (type) == TYPE_CODE_RANGE)
7780           && (strcmp (name, "character") == 0
7781               || strcmp (name, "wide_character") == 0
7782               || strcmp (name, "wide_wide_character") == 0
7783               || strcmp (name, "unsigned char") == 0));
7784 }
7785
7786 /* True if TYPE appears to be an Ada string type.  */
7787
7788 int
7789 ada_is_string_type (struct type *type)
7790 {
7791   type = ada_check_typedef (type);
7792   if (type != NULL
7793       && TYPE_CODE (type) != TYPE_CODE_PTR
7794       && (ada_is_simple_array_type (type)
7795           || ada_is_array_descriptor_type (type))
7796       && ada_array_arity (type) == 1)
7797     {
7798       struct type *elttype = ada_array_element_type (type, 1);
7799
7800       return ada_is_character_type (elttype);
7801     }
7802   else
7803     return 0;
7804 }
7805
7806
7807 /* True if TYPE is a struct type introduced by the compiler to force the
7808    alignment of a value.  Such types have a single field with a
7809    distinctive name.  */
7810
7811 int
7812 ada_is_aligner_type (struct type *type)
7813 {
7814   type = ada_check_typedef (type);
7815
7816   /* If we can find a parallel XVS type, then the XVS type should
7817      be used instead of this type.  And hence, this is not an aligner
7818      type.  */
7819   if (ada_find_parallel_type (type, "___XVS") != NULL)
7820     return 0;
7821
7822   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
7823           && TYPE_NFIELDS (type) == 1
7824           && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
7825 }
7826
7827 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
7828    the parallel type.  */
7829
7830 struct type *
7831 ada_get_base_type (struct type *raw_type)
7832 {
7833   struct type *real_type_namer;
7834   struct type *raw_real_type;
7835
7836   if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7837     return raw_type;
7838
7839   real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
7840   if (real_type_namer == NULL
7841       || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7842       || TYPE_NFIELDS (real_type_namer) != 1)
7843     return raw_type;
7844
7845   raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7846   if (raw_real_type == NULL)
7847     return raw_type;
7848   else
7849     return raw_real_type;
7850 }
7851
7852 /* The type of value designated by TYPE, with all aligners removed.  */
7853
7854 struct type *
7855 ada_aligned_type (struct type *type)
7856 {
7857   if (ada_is_aligner_type (type))
7858     return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7859   else
7860     return ada_get_base_type (type);
7861 }
7862
7863
7864 /* The address of the aligned value in an object at address VALADDR
7865    having type TYPE.  Assumes ada_is_aligner_type (TYPE).  */
7866
7867 const gdb_byte *
7868 ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
7869 {
7870   if (ada_is_aligner_type (type))
7871     return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
7872                                    valaddr +
7873                                    TYPE_FIELD_BITPOS (type,
7874                                                       0) / TARGET_CHAR_BIT);
7875   else
7876     return valaddr;
7877 }
7878
7879
7880
7881 /* The printed representation of an enumeration literal with encoded
7882    name NAME.  The value is good to the next call of ada_enum_name.  */
7883 const char *
7884 ada_enum_name (const char *name)
7885 {
7886   static char *result;
7887   static size_t result_len = 0;
7888   char *tmp;
7889
7890   /* First, unqualify the enumeration name:
7891      1. Search for the last '.' character.  If we find one, then skip
7892      all the preceeding characters, the unqualified name starts
7893      right after that dot.
7894      2. Otherwise, we may be debugging on a target where the compiler
7895      translates dots into "__".  Search forward for double underscores,
7896      but stop searching when we hit an overloading suffix, which is
7897      of the form "__" followed by digits.  */
7898
7899   tmp = strrchr (name, '.');
7900   if (tmp != NULL)
7901     name = tmp + 1;
7902   else
7903     {
7904       while ((tmp = strstr (name, "__")) != NULL)
7905         {
7906           if (isdigit (tmp[2]))
7907             break;
7908           else
7909             name = tmp + 2;
7910         }
7911     }
7912
7913   if (name[0] == 'Q')
7914     {
7915       int v;
7916       if (name[1] == 'U' || name[1] == 'W')
7917         {
7918           if (sscanf (name + 2, "%x", &v) != 1)
7919             return name;
7920         }
7921       else
7922         return name;
7923
7924       GROW_VECT (result, result_len, 16);
7925       if (isascii (v) && isprint (v))
7926         sprintf (result, "'%c'", v);
7927       else if (name[1] == 'U')
7928         sprintf (result, "[\"%02x\"]", v);
7929       else
7930         sprintf (result, "[\"%04x\"]", v);
7931
7932       return result;
7933     }
7934   else
7935     {
7936       tmp = strstr (name, "__");
7937       if (tmp == NULL)
7938         tmp = strstr (name, "$");
7939       if (tmp != NULL)
7940         {
7941           GROW_VECT (result, result_len, tmp - name + 1);
7942           strncpy (result, name, tmp - name);
7943           result[tmp - name] = '\0';
7944           return result;
7945         }
7946
7947       return name;
7948     }
7949 }
7950
7951 static struct value *
7952 evaluate_subexp (struct type *expect_type, struct expression *exp, int *pos,
7953                  enum noside noside)
7954 {
7955   return (*exp->language_defn->la_exp_desc->evaluate_exp)
7956     (expect_type, exp, pos, noside);
7957 }
7958
7959 /* Evaluate the subexpression of EXP starting at *POS as for
7960    evaluate_type, updating *POS to point just past the evaluated
7961    expression.  */
7962
7963 static struct value *
7964 evaluate_subexp_type (struct expression *exp, int *pos)
7965 {
7966   return (*exp->language_defn->la_exp_desc->evaluate_exp)
7967     (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7968 }
7969
7970 /* If VAL is wrapped in an aligner or subtype wrapper, return the
7971    value it wraps.  */
7972
7973 static struct value *
7974 unwrap_value (struct value *val)
7975 {
7976   struct type *type = ada_check_typedef (value_type (val));
7977   if (ada_is_aligner_type (type))
7978     {
7979       struct value *v = value_struct_elt (&val, NULL, "F",
7980                                           NULL, "internal structure");
7981       struct type *val_type = ada_check_typedef (value_type (v));
7982       if (ada_type_name (val_type) == NULL)
7983         TYPE_NAME (val_type) = ada_type_name (type);
7984
7985       return unwrap_value (v);
7986     }
7987   else
7988     {
7989       struct type *raw_real_type =
7990         ada_check_typedef (ada_get_base_type (type));
7991
7992       if (type == raw_real_type)
7993         return val;
7994
7995       return
7996         coerce_unspec_val_to_type
7997         (val, ada_to_fixed_type (raw_real_type, 0,
7998                                  VALUE_ADDRESS (val) + value_offset (val),
7999                                  NULL, 1));
8000     }
8001 }
8002
8003 static struct value *
8004 cast_to_fixed (struct type *type, struct value *arg)
8005 {
8006   LONGEST val;
8007
8008   if (type == value_type (arg))
8009     return arg;
8010   else if (ada_is_fixed_point_type (value_type (arg)))
8011     val = ada_float_to_fixed (type,
8012                               ada_fixed_to_float (value_type (arg),
8013                                                   value_as_long (arg)));
8014   else
8015     {
8016       DOUBLEST argd =
8017         value_as_double (value_cast (builtin_type_double, value_copy (arg)));
8018       val = ada_float_to_fixed (type, argd);
8019     }
8020
8021   return value_from_longest (type, val);
8022 }
8023
8024 static struct value *
8025 cast_from_fixed_to_double (struct value *arg)
8026 {
8027   DOUBLEST val = ada_fixed_to_float (value_type (arg),
8028                                      value_as_long (arg));
8029   return value_from_double (builtin_type_double, val);
8030 }
8031
8032 /* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8033    return the converted value.  */
8034
8035 static struct value *
8036 coerce_for_assign (struct type *type, struct value *val)
8037 {
8038   struct type *type2 = value_type (val);
8039   if (type == type2)
8040     return val;
8041
8042   type2 = ada_check_typedef (type2);
8043   type = ada_check_typedef (type);
8044
8045   if (TYPE_CODE (type2) == TYPE_CODE_PTR
8046       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8047     {
8048       val = ada_value_ind (val);
8049       type2 = value_type (val);
8050     }
8051
8052   if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
8053       && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8054     {
8055       if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
8056           || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8057           != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
8058         error (_("Incompatible types in assignment"));
8059       deprecated_set_value_type (val, type);
8060     }
8061   return val;
8062 }
8063
8064 static struct value *
8065 ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8066 {
8067   struct value *val;
8068   struct type *type1, *type2;
8069   LONGEST v, v1, v2;
8070
8071   arg1 = coerce_ref (arg1);
8072   arg2 = coerce_ref (arg2);
8073   type1 = base_type (ada_check_typedef (value_type (arg1)));
8074   type2 = base_type (ada_check_typedef (value_type (arg2)));
8075
8076   if (TYPE_CODE (type1) != TYPE_CODE_INT
8077       || TYPE_CODE (type2) != TYPE_CODE_INT)
8078     return value_binop (arg1, arg2, op);
8079
8080   switch (op)
8081     {
8082     case BINOP_MOD:
8083     case BINOP_DIV:
8084     case BINOP_REM:
8085       break;
8086     default:
8087       return value_binop (arg1, arg2, op);
8088     }
8089
8090   v2 = value_as_long (arg2);
8091   if (v2 == 0)
8092     error (_("second operand of %s must not be zero."), op_string (op));
8093
8094   if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8095     return value_binop (arg1, arg2, op);
8096
8097   v1 = value_as_long (arg1);
8098   switch (op)
8099     {
8100     case BINOP_DIV:
8101       v = v1 / v2;
8102       if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8103         v += v > 0 ? -1 : 1;
8104       break;
8105     case BINOP_REM:
8106       v = v1 % v2;
8107       if (v * v1 < 0)
8108         v -= v2;
8109       break;
8110     default:
8111       /* Should not reach this point.  */
8112       v = 0;
8113     }
8114
8115   val = allocate_value (type1);
8116   store_unsigned_integer (value_contents_raw (val),
8117                           TYPE_LENGTH (value_type (val)), v);
8118   return val;
8119 }
8120
8121 static int
8122 ada_value_equal (struct value *arg1, struct value *arg2)
8123 {
8124   if (ada_is_direct_array_type (value_type (arg1))
8125       || ada_is_direct_array_type (value_type (arg2)))
8126     {
8127       /* Automatically dereference any array reference before
8128          we attempt to perform the comparison.  */
8129       arg1 = ada_coerce_ref (arg1);
8130       arg2 = ada_coerce_ref (arg2);
8131       
8132       arg1 = ada_coerce_to_simple_array (arg1);
8133       arg2 = ada_coerce_to_simple_array (arg2);
8134       if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
8135           || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
8136         error (_("Attempt to compare array with non-array"));
8137       /* FIXME: The following works only for types whose
8138          representations use all bits (no padding or undefined bits)
8139          and do not have user-defined equality.  */
8140       return
8141         TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
8142         && memcmp (value_contents (arg1), value_contents (arg2),
8143                    TYPE_LENGTH (value_type (arg1))) == 0;
8144     }
8145   return value_equal (arg1, arg2);
8146 }
8147
8148 /* Total number of component associations in the aggregate starting at
8149    index PC in EXP.  Assumes that index PC is the start of an
8150    OP_AGGREGATE. */
8151
8152 static int
8153 num_component_specs (struct expression *exp, int pc)
8154 {
8155   int n, m, i;
8156   m = exp->elts[pc + 1].longconst;
8157   pc += 3;
8158   n = 0;
8159   for (i = 0; i < m; i += 1)
8160     {
8161       switch (exp->elts[pc].opcode) 
8162         {
8163         default:
8164           n += 1;
8165           break;
8166         case OP_CHOICES:
8167           n += exp->elts[pc + 1].longconst;
8168           break;
8169         }
8170       ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8171     }
8172   return n;
8173 }
8174
8175 /* Assign the result of evaluating EXP starting at *POS to the INDEXth 
8176    component of LHS (a simple array or a record), updating *POS past
8177    the expression, assuming that LHS is contained in CONTAINER.  Does
8178    not modify the inferior's memory, nor does it modify LHS (unless
8179    LHS == CONTAINER).  */
8180
8181 static void
8182 assign_component (struct value *container, struct value *lhs, LONGEST index,
8183                   struct expression *exp, int *pos)
8184 {
8185   struct value *mark = value_mark ();
8186   struct value *elt;
8187   if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8188     {
8189       struct value *index_val = value_from_longest (builtin_type_int, index);
8190       elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8191     }
8192   else
8193     {
8194       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8195       elt = ada_to_fixed_value (unwrap_value (elt));
8196     }
8197
8198   if (exp->elts[*pos].opcode == OP_AGGREGATE)
8199     assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8200   else
8201     value_assign_to_component (container, elt, 
8202                                ada_evaluate_subexp (NULL, exp, pos, 
8203                                                     EVAL_NORMAL));
8204
8205   value_free_to_mark (mark);
8206 }
8207
8208 /* Assuming that LHS represents an lvalue having a record or array
8209    type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8210    of that aggregate's value to LHS, advancing *POS past the
8211    aggregate.  NOSIDE is as for evaluate_subexp.  CONTAINER is an
8212    lvalue containing LHS (possibly LHS itself).  Does not modify
8213    the inferior's memory, nor does it modify the contents of 
8214    LHS (unless == CONTAINER).  Returns the modified CONTAINER. */
8215
8216 static struct value *
8217 assign_aggregate (struct value *container, 
8218                   struct value *lhs, struct expression *exp, 
8219                   int *pos, enum noside noside)
8220 {
8221   struct type *lhs_type;
8222   int n = exp->elts[*pos+1].longconst;
8223   LONGEST low_index, high_index;
8224   int num_specs;
8225   LONGEST *indices;
8226   int max_indices, num_indices;
8227   int is_array_aggregate;
8228   int i;
8229   struct value *mark = value_mark ();
8230
8231   *pos += 3;
8232   if (noside != EVAL_NORMAL)
8233     {
8234       int i;
8235       for (i = 0; i < n; i += 1)
8236         ada_evaluate_subexp (NULL, exp, pos, noside);
8237       return container;
8238     }
8239
8240   container = ada_coerce_ref (container);
8241   if (ada_is_direct_array_type (value_type (container)))
8242     container = ada_coerce_to_simple_array (container);
8243   lhs = ada_coerce_ref (lhs);
8244   if (!deprecated_value_modifiable (lhs))
8245     error (_("Left operand of assignment is not a modifiable lvalue."));
8246
8247   lhs_type = value_type (lhs);
8248   if (ada_is_direct_array_type (lhs_type))
8249     {
8250       lhs = ada_coerce_to_simple_array (lhs);
8251       lhs_type = value_type (lhs);
8252       low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8253       high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8254       is_array_aggregate = 1;
8255     }
8256   else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8257     {
8258       low_index = 0;
8259       high_index = num_visible_fields (lhs_type) - 1;
8260       is_array_aggregate = 0;
8261     }
8262   else
8263     error (_("Left-hand side must be array or record."));
8264
8265   num_specs = num_component_specs (exp, *pos - 3);
8266   max_indices = 4 * num_specs + 4;
8267   indices = alloca (max_indices * sizeof (indices[0]));
8268   indices[0] = indices[1] = low_index - 1;
8269   indices[2] = indices[3] = high_index + 1;
8270   num_indices = 4;
8271
8272   for (i = 0; i < n; i += 1)
8273     {
8274       switch (exp->elts[*pos].opcode)
8275         {
8276         case OP_CHOICES:
8277           aggregate_assign_from_choices (container, lhs, exp, pos, indices, 
8278                                          &num_indices, max_indices,
8279                                          low_index, high_index);
8280           break;
8281         case OP_POSITIONAL:
8282           aggregate_assign_positional (container, lhs, exp, pos, indices,
8283                                        &num_indices, max_indices,
8284                                        low_index, high_index);
8285           break;
8286         case OP_OTHERS:
8287           if (i != n-1)
8288             error (_("Misplaced 'others' clause"));
8289           aggregate_assign_others (container, lhs, exp, pos, indices, 
8290                                    num_indices, low_index, high_index);
8291           break;
8292         default:
8293           error (_("Internal error: bad aggregate clause"));
8294         }
8295     }
8296
8297   return container;
8298 }
8299               
8300 /* Assign into the component of LHS indexed by the OP_POSITIONAL
8301    construct at *POS, updating *POS past the construct, given that
8302    the positions are relative to lower bound LOW, where HIGH is the 
8303    upper bound.  Record the position in INDICES[0 .. MAX_INDICES-1]
8304    updating *NUM_INDICES as needed.  CONTAINER is as for
8305    assign_aggregate. */
8306 static void
8307 aggregate_assign_positional (struct value *container,
8308                              struct value *lhs, struct expression *exp,
8309                              int *pos, LONGEST *indices, int *num_indices,
8310                              int max_indices, LONGEST low, LONGEST high) 
8311 {
8312   LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8313   
8314   if (ind - 1 == high)
8315     warning (_("Extra components in aggregate ignored."));
8316   if (ind <= high)
8317     {
8318       add_component_interval (ind, ind, indices, num_indices, max_indices);
8319       *pos += 3;
8320       assign_component (container, lhs, ind, exp, pos);
8321     }
8322   else
8323     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8324 }
8325
8326 /* Assign into the components of LHS indexed by the OP_CHOICES
8327    construct at *POS, updating *POS past the construct, given that
8328    the allowable indices are LOW..HIGH.  Record the indices assigned
8329    to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8330    needed.  CONTAINER is as for assign_aggregate. */
8331 static void
8332 aggregate_assign_from_choices (struct value *container,
8333                                struct value *lhs, struct expression *exp,
8334                                int *pos, LONGEST *indices, int *num_indices,
8335                                int max_indices, LONGEST low, LONGEST high) 
8336 {
8337   int j;
8338   int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8339   int choice_pos, expr_pc;
8340   int is_array = ada_is_direct_array_type (value_type (lhs));
8341
8342   choice_pos = *pos += 3;
8343
8344   for (j = 0; j < n_choices; j += 1)
8345     ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8346   expr_pc = *pos;
8347   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8348   
8349   for (j = 0; j < n_choices; j += 1)
8350     {
8351       LONGEST lower, upper;
8352       enum exp_opcode op = exp->elts[choice_pos].opcode;
8353       if (op == OP_DISCRETE_RANGE)
8354         {
8355           choice_pos += 1;
8356           lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8357                                                       EVAL_NORMAL));
8358           upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, 
8359                                                       EVAL_NORMAL));
8360         }
8361       else if (is_array)
8362         {
8363           lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos, 
8364                                                       EVAL_NORMAL));
8365           upper = lower;
8366         }
8367       else
8368         {
8369           int ind;
8370           char *name;
8371           switch (op)
8372             {
8373             case OP_NAME:
8374               name = &exp->elts[choice_pos + 2].string;
8375               break;
8376             case OP_VAR_VALUE:
8377               name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8378               break;
8379             default:
8380               error (_("Invalid record component association."));
8381             }
8382           ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8383           ind = 0;
8384           if (! find_struct_field (name, value_type (lhs), 0, 
8385                                    NULL, NULL, NULL, NULL, &ind))
8386             error (_("Unknown component name: %s."), name);
8387           lower = upper = ind;
8388         }
8389
8390       if (lower <= upper && (lower < low || upper > high))
8391         error (_("Index in component association out of bounds."));
8392
8393       add_component_interval (lower, upper, indices, num_indices,
8394                               max_indices);
8395       while (lower <= upper)
8396         {
8397           int pos1;
8398           pos1 = expr_pc;
8399           assign_component (container, lhs, lower, exp, &pos1);
8400           lower += 1;
8401         }
8402     }
8403 }
8404
8405 /* Assign the value of the expression in the OP_OTHERS construct in
8406    EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8407    have not been previously assigned.  The index intervals already assigned
8408    are in INDICES[0 .. NUM_INDICES-1].  Updates *POS to after the 
8409    OP_OTHERS clause.  CONTAINER is as for assign_aggregate*/
8410 static void
8411 aggregate_assign_others (struct value *container,
8412                          struct value *lhs, struct expression *exp,
8413                          int *pos, LONGEST *indices, int num_indices,
8414                          LONGEST low, LONGEST high) 
8415 {
8416   int i;
8417   int expr_pc = *pos+1;
8418   
8419   for (i = 0; i < num_indices - 2; i += 2)
8420     {
8421       LONGEST ind;
8422       for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8423         {
8424           int pos;
8425           pos = expr_pc;
8426           assign_component (container, lhs, ind, exp, &pos);
8427         }
8428     }
8429   ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8430 }
8431
8432 /* Add the interval [LOW .. HIGH] to the sorted set of intervals 
8433    [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8434    modifying *SIZE as needed.  It is an error if *SIZE exceeds
8435    MAX_SIZE.  The resulting intervals do not overlap.  */
8436 static void
8437 add_component_interval (LONGEST low, LONGEST high, 
8438                         LONGEST* indices, int *size, int max_size)
8439 {
8440   int i, j;
8441   for (i = 0; i < *size; i += 2) {
8442     if (high >= indices[i] && low <= indices[i + 1])
8443       {
8444         int kh;
8445         for (kh = i + 2; kh < *size; kh += 2)
8446           if (high < indices[kh])
8447             break;
8448         if (low < indices[i])
8449           indices[i] = low;
8450         indices[i + 1] = indices[kh - 1];
8451         if (high > indices[i + 1])
8452           indices[i + 1] = high;
8453         memcpy (indices + i + 2, indices + kh, *size - kh);
8454         *size -= kh - i - 2;
8455         return;
8456       }
8457     else if (high < indices[i])
8458       break;
8459   }
8460         
8461   if (*size == max_size)
8462     error (_("Internal error: miscounted aggregate components."));
8463   *size += 2;
8464   for (j = *size-1; j >= i+2; j -= 1)
8465     indices[j] = indices[j - 2];
8466   indices[i] = low;
8467   indices[i + 1] = high;
8468 }
8469
8470 /* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8471    is different.  */
8472
8473 static struct value *
8474 ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8475 {
8476   if (type == ada_check_typedef (value_type (arg2)))
8477     return arg2;
8478
8479   if (ada_is_fixed_point_type (type))
8480     return (cast_to_fixed (type, arg2));
8481
8482   if (ada_is_fixed_point_type (value_type (arg2)))
8483     return value_cast (type, cast_from_fixed_to_double (arg2));
8484
8485   return value_cast (type, arg2);
8486 }
8487
8488 static struct value *
8489 ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
8490                      int *pos, enum noside noside)
8491 {
8492   enum exp_opcode op;
8493   int tem, tem2, tem3;
8494   int pc;
8495   struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8496   struct type *type;
8497   int nargs, oplen;
8498   struct value **argvec;
8499
8500   pc = *pos;
8501   *pos += 1;
8502   op = exp->elts[pc].opcode;
8503
8504   switch (op)
8505     {
8506     default:
8507       *pos -= 1;
8508       arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8509       arg1 = unwrap_value (arg1);
8510
8511       /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8512          then we need to perform the conversion manually, because
8513          evaluate_subexp_standard doesn't do it.  This conversion is
8514          necessary in Ada because the different kinds of float/fixed
8515          types in Ada have different representations.
8516
8517          Similarly, we need to perform the conversion from OP_LONG
8518          ourselves.  */
8519       if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8520         arg1 = ada_value_cast (expect_type, arg1, noside);
8521
8522       return arg1;
8523
8524     case OP_STRING:
8525       {
8526         struct value *result;
8527         *pos -= 1;
8528         result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8529         /* The result type will have code OP_STRING, bashed there from 
8530            OP_ARRAY.  Bash it back.  */
8531         if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8532           TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
8533         return result;
8534       }
8535
8536     case UNOP_CAST:
8537       (*pos) += 2;
8538       type = exp->elts[pc + 1].type;
8539       arg1 = evaluate_subexp (type, exp, pos, noside);
8540       if (noside == EVAL_SKIP)
8541         goto nosideret;
8542       arg1 = ada_value_cast (type, arg1, noside);
8543       return arg1;
8544
8545     case UNOP_QUAL:
8546       (*pos) += 2;
8547       type = exp->elts[pc + 1].type;
8548       return ada_evaluate_subexp (type, exp, pos, noside);
8549
8550     case BINOP_ASSIGN:
8551       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8552       if (exp->elts[*pos].opcode == OP_AGGREGATE)
8553         {
8554           arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8555           if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8556             return arg1;
8557           return ada_value_assign (arg1, arg1);
8558         }
8559       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8560       if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8561         return arg1;
8562       if (ada_is_fixed_point_type (value_type (arg1)))
8563         arg2 = cast_to_fixed (value_type (arg1), arg2);
8564       else if (ada_is_fixed_point_type (value_type (arg2)))
8565         error
8566           (_("Fixed-point values must be assigned to fixed-point variables"));
8567       else
8568         arg2 = coerce_for_assign (value_type (arg1), arg2);
8569       return ada_value_assign (arg1, arg2);
8570
8571     case BINOP_ADD:
8572       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8573       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8574       if (noside == EVAL_SKIP)
8575         goto nosideret;
8576       if ((ada_is_fixed_point_type (value_type (arg1))
8577            || ada_is_fixed_point_type (value_type (arg2)))
8578           && value_type (arg1) != value_type (arg2))
8579         error (_("Operands of fixed-point addition must have the same type"));
8580       /* Do the addition, and cast the result to the type of the first
8581          argument.  We cannot cast the result to a reference type, so if
8582          ARG1 is a reference type, find its underlying type.  */
8583       type = value_type (arg1);
8584       while (TYPE_CODE (type) == TYPE_CODE_REF)
8585         type = TYPE_TARGET_TYPE (type);
8586       return value_cast (type, value_add (arg1, arg2));
8587
8588     case BINOP_SUB:
8589       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8590       arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8591       if (noside == EVAL_SKIP)
8592         goto nosideret;
8593       if ((ada_is_fixed_point_type (value_type (arg1))
8594            || ada_is_fixed_point_type (value_type (arg2)))
8595           && value_type (arg1) != value_type (arg2))
8596         error (_("Operands of fixed-point subtraction must have the same type"));
8597       /* Do the substraction, and cast the result to the type of the first
8598          argument.  We cannot cast the result to a reference type, so if
8599          ARG1 is a reference type, find its underlying type.  */
8600       type = value_type (arg1);
8601       while (TYPE_CODE (type) == TYPE_CODE_REF)
8602         type = TYPE_TARGET_TYPE (type);
8603       return value_cast (type, value_sub (arg1, arg2));
8604
8605     case BINOP_MUL:
8606     case BINOP_DIV:
8607       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8608       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8609       if (noside == EVAL_SKIP)
8610         goto nosideret;
8611       else if (noside == EVAL_AVOID_SIDE_EFFECTS
8612                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8613         return value_zero (value_type (arg1), not_lval);
8614       else
8615         {
8616           if (ada_is_fixed_point_type (value_type (arg1)))
8617             arg1 = cast_from_fixed_to_double (arg1);
8618           if (ada_is_fixed_point_type (value_type (arg2)))
8619             arg2 = cast_from_fixed_to_double (arg2);
8620           return ada_value_binop (arg1, arg2, op);
8621         }
8622
8623     case BINOP_REM:
8624     case BINOP_MOD:
8625       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8626       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8627       if (noside == EVAL_SKIP)
8628         goto nosideret;
8629       else if (noside == EVAL_AVOID_SIDE_EFFECTS
8630                && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
8631         return value_zero (value_type (arg1), not_lval);
8632       else
8633         return ada_value_binop (arg1, arg2, op);
8634
8635     case BINOP_EQUAL:
8636     case BINOP_NOTEQUAL:
8637       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8638       arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
8639       if (noside == EVAL_SKIP)
8640         goto nosideret;
8641       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8642         tem = 0;
8643       else
8644         tem = ada_value_equal (arg1, arg2);
8645       if (op == BINOP_NOTEQUAL)
8646         tem = !tem;
8647       return value_from_longest (LA_BOOL_TYPE, (LONGEST) tem);
8648
8649     case UNOP_NEG:
8650       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8651       if (noside == EVAL_SKIP)
8652         goto nosideret;
8653       else if (ada_is_fixed_point_type (value_type (arg1)))
8654         return value_cast (value_type (arg1), value_neg (arg1));
8655       else
8656         return value_neg (arg1);
8657
8658     case BINOP_LOGICAL_AND:
8659     case BINOP_LOGICAL_OR:
8660     case UNOP_LOGICAL_NOT:
8661       {
8662         struct value *val;
8663
8664         *pos -= 1;
8665         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8666         return value_cast (LA_BOOL_TYPE, val);
8667       }
8668
8669     case BINOP_BITWISE_AND:
8670     case BINOP_BITWISE_IOR:
8671     case BINOP_BITWISE_XOR:
8672       {
8673         struct value *val;
8674
8675         arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
8676         *pos = pc;
8677         val = evaluate_subexp_standard (expect_type, exp, pos, noside);
8678
8679         return value_cast (value_type (arg1), val);
8680       }
8681
8682     case OP_VAR_VALUE:
8683       *pos -= 1;
8684
8685       /* Tagged types are a little special in the fact that the real type
8686          is dynamic and can only be determined by inspecting the object
8687          value.  So even if we're support to do an EVAL_AVOID_SIDE_EFFECTS
8688          evaluation, we force an EVAL_NORMAL evaluation for tagged types.  */
8689       if (noside == EVAL_AVOID_SIDE_EFFECTS
8690           && ada_is_tagged_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol), 1))
8691         noside = EVAL_NORMAL;
8692
8693       if (noside == EVAL_SKIP)
8694         {
8695           *pos += 4;
8696           goto nosideret;
8697         }
8698       else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
8699         /* Only encountered when an unresolved symbol occurs in a
8700            context other than a function call, in which case, it is
8701            invalid.  */
8702         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8703                SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
8704       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8705         {
8706           *pos += 4;
8707           return value_zero
8708             (to_static_fixed_type
8709              (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
8710              not_lval);
8711         }
8712       else
8713         {
8714           arg1 =
8715             unwrap_value (evaluate_subexp_standard
8716                           (expect_type, exp, pos, noside));
8717           return ada_to_fixed_value (arg1);
8718         }
8719
8720     case OP_FUNCALL:
8721       (*pos) += 2;
8722
8723       /* Allocate arg vector, including space for the function to be
8724          called in argvec[0] and a terminating NULL.  */
8725       nargs = longest_to_int (exp->elts[pc + 1].longconst);
8726       argvec =
8727         (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
8728
8729       if (exp->elts[*pos].opcode == OP_VAR_VALUE
8730           && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
8731         error (_("Unexpected unresolved symbol, %s, during evaluation"),
8732                SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
8733       else
8734         {
8735           for (tem = 0; tem <= nargs; tem += 1)
8736             argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8737           argvec[tem] = 0;
8738
8739           if (noside == EVAL_SKIP)
8740             goto nosideret;
8741         }
8742
8743       if (ada_is_packed_array_type (desc_base_type (value_type (argvec[0]))))
8744         argvec[0] = ada_coerce_to_simple_array (argvec[0]);
8745       else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
8746                || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
8747                    && VALUE_LVAL (argvec[0]) == lval_memory))
8748         argvec[0] = value_addr (argvec[0]);
8749
8750       type = ada_check_typedef (value_type (argvec[0]));
8751       if (TYPE_CODE (type) == TYPE_CODE_PTR)
8752         {
8753           switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
8754             {
8755             case TYPE_CODE_FUNC:
8756               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8757               break;
8758             case TYPE_CODE_ARRAY:
8759               break;
8760             case TYPE_CODE_STRUCT:
8761               if (noside != EVAL_AVOID_SIDE_EFFECTS)
8762                 argvec[0] = ada_value_ind (argvec[0]);
8763               type = ada_check_typedef (TYPE_TARGET_TYPE (type));
8764               break;
8765             default:
8766               error (_("cannot subscript or call something of type `%s'"),
8767                      ada_type_name (value_type (argvec[0])));
8768               break;
8769             }
8770         }
8771
8772       switch (TYPE_CODE (type))
8773         {
8774         case TYPE_CODE_FUNC:
8775           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8776             return allocate_value (TYPE_TARGET_TYPE (type));
8777           return call_function_by_hand (argvec[0], nargs, argvec + 1);
8778         case TYPE_CODE_STRUCT:
8779           {
8780             int arity;
8781
8782             arity = ada_array_arity (type);
8783             type = ada_array_element_type (type, nargs);
8784             if (type == NULL)
8785               error (_("cannot subscript or call a record"));
8786             if (arity != nargs)
8787               error (_("wrong number of subscripts; expecting %d"), arity);
8788             if (noside == EVAL_AVOID_SIDE_EFFECTS)
8789               return value_zero (ada_aligned_type (type), lval_memory);
8790             return
8791               unwrap_value (ada_value_subscript
8792                             (argvec[0], nargs, argvec + 1));
8793           }
8794         case TYPE_CODE_ARRAY:
8795           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8796             {
8797               type = ada_array_element_type (type, nargs);
8798               if (type == NULL)
8799                 error (_("element type of array unknown"));
8800               else
8801                 return value_zero (ada_aligned_type (type), lval_memory);
8802             }
8803           return
8804             unwrap_value (ada_value_subscript
8805                           (ada_coerce_to_simple_array (argvec[0]),
8806                            nargs, argvec + 1));
8807         case TYPE_CODE_PTR:     /* Pointer to array */
8808           type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
8809           if (noside == EVAL_AVOID_SIDE_EFFECTS)
8810             {
8811               type = ada_array_element_type (type, nargs);
8812               if (type == NULL)
8813                 error (_("element type of array unknown"));
8814               else
8815                 return value_zero (ada_aligned_type (type), lval_memory);
8816             }
8817           return
8818             unwrap_value (ada_value_ptr_subscript (argvec[0], type,
8819                                                    nargs, argvec + 1));
8820
8821         default:
8822           error (_("Attempt to index or call something other than an "
8823                    "array or function"));
8824         }
8825
8826     case TERNOP_SLICE:
8827       {
8828         struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8829         struct value *low_bound_val =
8830           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8831         struct value *high_bound_val =
8832           evaluate_subexp (NULL_TYPE, exp, pos, noside);
8833         LONGEST low_bound;
8834         LONGEST high_bound;
8835         low_bound_val = coerce_ref (low_bound_val);
8836         high_bound_val = coerce_ref (high_bound_val);
8837         low_bound = pos_atr (low_bound_val);
8838         high_bound = pos_atr (high_bound_val);
8839
8840         if (noside == EVAL_SKIP)
8841           goto nosideret;
8842
8843         /* If this is a reference to an aligner type, then remove all
8844            the aligners.  */
8845         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8846             && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
8847           TYPE_TARGET_TYPE (value_type (array)) =
8848             ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
8849
8850         if (ada_is_packed_array_type (value_type (array)))
8851           error (_("cannot slice a packed array"));
8852
8853         /* If this is a reference to an array or an array lvalue,
8854            convert to a pointer.  */
8855         if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
8856             || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
8857                 && VALUE_LVAL (array) == lval_memory))
8858           array = value_addr (array);
8859
8860         if (noside == EVAL_AVOID_SIDE_EFFECTS
8861             && ada_is_array_descriptor_type (ada_check_typedef
8862                                              (value_type (array))))
8863           return empty_array (ada_type_of_array (array, 0), low_bound);
8864
8865         array = ada_coerce_to_simple_array_ptr (array);
8866
8867         /* If we have more than one level of pointer indirection,
8868            dereference the value until we get only one level.  */
8869         while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
8870                && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
8871                      == TYPE_CODE_PTR))
8872           array = value_ind (array);
8873
8874         /* Make sure we really do have an array type before going further,
8875            to avoid a SEGV when trying to get the index type or the target
8876            type later down the road if the debug info generated by
8877            the compiler is incorrect or incomplete.  */
8878         if (!ada_is_simple_array_type (value_type (array)))
8879           error (_("cannot take slice of non-array"));
8880
8881         if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
8882           {
8883             if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
8884               return empty_array (TYPE_TARGET_TYPE (value_type (array)),
8885                                   low_bound);
8886             else
8887               {
8888                 struct type *arr_type0 =
8889                   to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
8890                                        NULL, 1);
8891                 return ada_value_slice_ptr (array, arr_type0,
8892                                             longest_to_int (low_bound),
8893                                             longest_to_int (high_bound));
8894               }
8895           }
8896         else if (noside == EVAL_AVOID_SIDE_EFFECTS)
8897           return array;
8898         else if (high_bound < low_bound)
8899           return empty_array (value_type (array), low_bound);
8900         else
8901           return ada_value_slice (array, longest_to_int (low_bound),
8902                                   longest_to_int (high_bound));
8903       }
8904
8905     case UNOP_IN_RANGE:
8906       (*pos) += 2;
8907       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8908       type = exp->elts[pc + 1].type;
8909
8910       if (noside == EVAL_SKIP)
8911         goto nosideret;
8912
8913       switch (TYPE_CODE (type))
8914         {
8915         default:
8916           lim_warning (_("Membership test incompletely implemented; "
8917                          "always returns true"));
8918           return value_from_longest (builtin_type_int, (LONGEST) 1);
8919
8920         case TYPE_CODE_RANGE:
8921           arg2 = value_from_longest (builtin_type_int, TYPE_LOW_BOUND (type));
8922           arg3 = value_from_longest (builtin_type_int,
8923                                      TYPE_HIGH_BOUND (type));
8924           return
8925             value_from_longest (builtin_type_int,
8926                                 (value_less (arg1, arg3)
8927                                  || value_equal (arg1, arg3))
8928                                 && (value_less (arg2, arg1)
8929                                     || value_equal (arg2, arg1)));
8930         }
8931
8932     case BINOP_IN_BOUNDS:
8933       (*pos) += 2;
8934       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8935       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8936
8937       if (noside == EVAL_SKIP)
8938         goto nosideret;
8939
8940       if (noside == EVAL_AVOID_SIDE_EFFECTS)
8941         return value_zero (builtin_type_int, not_lval);
8942
8943       tem = longest_to_int (exp->elts[pc + 1].longconst);
8944
8945       if (tem < 1 || tem > ada_array_arity (value_type (arg2)))
8946         error (_("invalid dimension number to 'range"));
8947
8948       arg3 = ada_array_bound (arg2, tem, 1);
8949       arg2 = ada_array_bound (arg2, tem, 0);
8950
8951       return
8952         value_from_longest (builtin_type_int,
8953                             (value_less (arg1, arg3)
8954                              || value_equal (arg1, arg3))
8955                             && (value_less (arg2, arg1)
8956                                 || value_equal (arg2, arg1)));
8957
8958     case TERNOP_IN_RANGE:
8959       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8960       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8961       arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8962
8963       if (noside == EVAL_SKIP)
8964         goto nosideret;
8965
8966       return
8967         value_from_longest (builtin_type_int,
8968                             (value_less (arg1, arg3)
8969                              || value_equal (arg1, arg3))
8970                             && (value_less (arg2, arg1)
8971                                 || value_equal (arg2, arg1)));
8972
8973     case OP_ATR_FIRST:
8974     case OP_ATR_LAST:
8975     case OP_ATR_LENGTH:
8976       {
8977         struct type *type_arg;
8978         if (exp->elts[*pos].opcode == OP_TYPE)
8979           {
8980             evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
8981             arg1 = NULL;
8982             type_arg = exp->elts[pc + 2].type;
8983           }
8984         else
8985           {
8986             arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8987             type_arg = NULL;
8988           }
8989
8990         if (exp->elts[*pos].opcode != OP_LONG)
8991           error (_("Invalid operand to '%s"), ada_attribute_name (op));
8992         tem = longest_to_int (exp->elts[*pos + 2].longconst);
8993         *pos += 4;
8994
8995         if (noside == EVAL_SKIP)
8996           goto nosideret;
8997
8998         if (type_arg == NULL)
8999           {
9000             arg1 = ada_coerce_ref (arg1);
9001
9002             if (ada_is_packed_array_type (value_type (arg1)))
9003               arg1 = ada_coerce_to_simple_array (arg1);
9004
9005             if (tem < 1 || tem > ada_array_arity (value_type (arg1)))
9006               error (_("invalid dimension number to '%s"),
9007                      ada_attribute_name (op));
9008
9009             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9010               {
9011                 type = ada_index_type (value_type (arg1), tem);
9012                 if (type == NULL)
9013                   error
9014                     (_("attempt to take bound of something that is not an array"));
9015                 return allocate_value (type);
9016               }
9017
9018             switch (op)
9019               {
9020               default:          /* Should never happen.  */
9021                 error (_("unexpected attribute encountered"));
9022               case OP_ATR_FIRST:
9023                 return ada_array_bound (arg1, tem, 0);
9024               case OP_ATR_LAST:
9025                 return ada_array_bound (arg1, tem, 1);
9026               case OP_ATR_LENGTH:
9027                 return ada_array_length (arg1, tem);
9028               }
9029           }
9030         else if (discrete_type_p (type_arg))
9031           {
9032             struct type *range_type;
9033             char *name = ada_type_name (type_arg);
9034             range_type = NULL;
9035             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
9036               range_type =
9037                 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
9038             if (range_type == NULL)
9039               range_type = type_arg;
9040             switch (op)
9041               {
9042               default:
9043                 error (_("unexpected attribute encountered"));
9044               case OP_ATR_FIRST:
9045                 return discrete_type_low_bound (range_type);
9046               case OP_ATR_LAST:
9047                 return discrete_type_high_bound (range_type);
9048               case OP_ATR_LENGTH:
9049                 error (_("the 'length attribute applies only to array types"));
9050               }
9051           }
9052         else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
9053           error (_("unimplemented type attribute"));
9054         else
9055           {
9056             LONGEST low, high;
9057
9058             if (ada_is_packed_array_type (type_arg))
9059               type_arg = decode_packed_array_type (type_arg);
9060
9061             if (tem < 1 || tem > ada_array_arity (type_arg))
9062               error (_("invalid dimension number to '%s"),
9063                      ada_attribute_name (op));
9064
9065             type = ada_index_type (type_arg, tem);
9066             if (type == NULL)
9067               error
9068                 (_("attempt to take bound of something that is not an array"));
9069             if (noside == EVAL_AVOID_SIDE_EFFECTS)
9070               return allocate_value (type);
9071
9072             switch (op)
9073               {
9074               default:
9075                 error (_("unexpected attribute encountered"));
9076               case OP_ATR_FIRST:
9077                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9078                 return value_from_longest (type, low);
9079               case OP_ATR_LAST:
9080                 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
9081                 return value_from_longest (type, high);
9082               case OP_ATR_LENGTH:
9083                 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
9084                 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
9085                 return value_from_longest (type, high - low + 1);
9086               }
9087           }
9088       }
9089
9090     case OP_ATR_TAG:
9091       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9092       if (noside == EVAL_SKIP)
9093         goto nosideret;
9094
9095       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9096         return value_zero (ada_tag_type (arg1), not_lval);
9097
9098       return ada_value_tag (arg1);
9099
9100     case OP_ATR_MIN:
9101     case OP_ATR_MAX:
9102       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9103       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9104       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9105       if (noside == EVAL_SKIP)
9106         goto nosideret;
9107       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9108         return value_zero (value_type (arg1), not_lval);
9109       else
9110         return value_binop (arg1, arg2,
9111                             op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9112
9113     case OP_ATR_MODULUS:
9114       {
9115         struct type *type_arg = exp->elts[pc + 2].type;
9116         evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9117
9118         if (noside == EVAL_SKIP)
9119           goto nosideret;
9120
9121         if (!ada_is_modular_type (type_arg))
9122           error (_("'modulus must be applied to modular type"));
9123
9124         return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9125                                    ada_modulus (type_arg));
9126       }
9127
9128
9129     case OP_ATR_POS:
9130       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9131       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9132       if (noside == EVAL_SKIP)
9133         goto nosideret;
9134       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9135         return value_zero (builtin_type_int, not_lval);
9136       else
9137         return value_pos_atr (arg1);
9138
9139     case OP_ATR_SIZE:
9140       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9141       if (noside == EVAL_SKIP)
9142         goto nosideret;
9143       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9144         return value_zero (builtin_type_int, not_lval);
9145       else
9146         return value_from_longest (builtin_type_int,
9147                                    TARGET_CHAR_BIT
9148                                    * TYPE_LENGTH (value_type (arg1)));
9149
9150     case OP_ATR_VAL:
9151       evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9152       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9153       type = exp->elts[pc + 2].type;
9154       if (noside == EVAL_SKIP)
9155         goto nosideret;
9156       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9157         return value_zero (type, not_lval);
9158       else
9159         return value_val_atr (type, arg1);
9160
9161     case BINOP_EXP:
9162       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9163       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9164       if (noside == EVAL_SKIP)
9165         goto nosideret;
9166       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9167         return value_zero (value_type (arg1), not_lval);
9168       else
9169         return value_binop (arg1, arg2, op);
9170
9171     case UNOP_PLUS:
9172       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9173       if (noside == EVAL_SKIP)
9174         goto nosideret;
9175       else
9176         return arg1;
9177
9178     case UNOP_ABS:
9179       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9180       if (noside == EVAL_SKIP)
9181         goto nosideret;
9182       if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
9183         return value_neg (arg1);
9184       else
9185         return arg1;
9186
9187     case UNOP_IND:
9188       if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
9189         expect_type = TYPE_TARGET_TYPE (ada_check_typedef (expect_type));
9190       arg1 = evaluate_subexp (expect_type, exp, pos, noside);
9191       if (noside == EVAL_SKIP)
9192         goto nosideret;
9193       type = ada_check_typedef (value_type (arg1));
9194       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9195         {
9196           if (ada_is_array_descriptor_type (type))
9197             /* GDB allows dereferencing GNAT array descriptors.  */
9198             {
9199               struct type *arrType = ada_type_of_array (arg1, 0);
9200               if (arrType == NULL)
9201                 error (_("Attempt to dereference null array pointer."));
9202               return value_at_lazy (arrType, 0);
9203             }
9204           else if (TYPE_CODE (type) == TYPE_CODE_PTR
9205                    || TYPE_CODE (type) == TYPE_CODE_REF
9206                    /* In C you can dereference an array to get the 1st elt.  */
9207                    || TYPE_CODE (type) == TYPE_CODE_ARRAY)
9208             {
9209               type = to_static_fixed_type
9210                 (ada_aligned_type
9211                  (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9212               check_size (type);
9213               return value_zero (type, lval_memory);
9214             }
9215           else if (TYPE_CODE (type) == TYPE_CODE_INT)
9216             /* GDB allows dereferencing an int.  */
9217             return value_zero (builtin_type_int, lval_memory);
9218           else
9219             error (_("Attempt to take contents of a non-pointer value."));
9220         }
9221       arg1 = ada_coerce_ref (arg1);     /* FIXME: What is this for?? */
9222       type = ada_check_typedef (value_type (arg1));
9223
9224       if (ada_is_array_descriptor_type (type))
9225         /* GDB allows dereferencing GNAT array descriptors.  */
9226         return ada_coerce_to_simple_array (arg1);
9227       else
9228         return ada_value_ind (arg1);
9229
9230     case STRUCTOP_STRUCT:
9231       tem = longest_to_int (exp->elts[pc + 1].longconst);
9232       (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9233       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9234       if (noside == EVAL_SKIP)
9235         goto nosideret;
9236       if (noside == EVAL_AVOID_SIDE_EFFECTS)
9237         {
9238           struct type *type1 = value_type (arg1);
9239           if (ada_is_tagged_type (type1, 1))
9240             {
9241               type = ada_lookup_struct_elt_type (type1,
9242                                                  &exp->elts[pc + 2].string,
9243                                                  1, 1, NULL);
9244               if (type == NULL)
9245                 /* In this case, we assume that the field COULD exist
9246                    in some extension of the type.  Return an object of 
9247                    "type" void, which will match any formal 
9248                    (see ada_type_match). */
9249                 return value_zero (builtin_type_void, lval_memory);
9250             }
9251           else
9252             type =
9253               ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9254                                           0, NULL);
9255
9256           return value_zero (ada_aligned_type (type), lval_memory);
9257         }
9258       else
9259         return
9260           ada_to_fixed_value (unwrap_value
9261                               (ada_value_struct_elt
9262                                (arg1, &exp->elts[pc + 2].string, 0)));
9263     case OP_TYPE:
9264       /* The value is not supposed to be used.  This is here to make it
9265          easier to accommodate expressions that contain types.  */
9266       (*pos) += 2;
9267       if (noside == EVAL_SKIP)
9268         goto nosideret;
9269       else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9270         return allocate_value (exp->elts[pc + 1].type);
9271       else
9272         error (_("Attempt to use a type name as an expression"));
9273
9274     case OP_AGGREGATE:
9275     case OP_CHOICES:
9276     case OP_OTHERS:
9277     case OP_DISCRETE_RANGE:
9278     case OP_POSITIONAL:
9279     case OP_NAME:
9280       if (noside == EVAL_NORMAL)
9281         switch (op) 
9282           {
9283           case OP_NAME:
9284             error (_("Undefined name, ambiguous name, or renaming used in "
9285                      "component association: %s."), &exp->elts[pc+2].string);
9286           case OP_AGGREGATE:
9287             error (_("Aggregates only allowed on the right of an assignment"));
9288           default:
9289             internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
9290           }
9291
9292       ada_forward_operator_length (exp, pc, &oplen, &nargs);
9293       *pos += oplen - 1;
9294       for (tem = 0; tem < nargs; tem += 1) 
9295         ada_evaluate_subexp (NULL, exp, pos, noside);
9296       goto nosideret;
9297     }
9298
9299 nosideret:
9300   return value_from_longest (builtin_type_long, (LONGEST) 1);
9301 }
9302 \f
9303
9304                                 /* Fixed point */
9305
9306 /* If TYPE encodes an Ada fixed-point type, return the suffix of the
9307    type name that encodes the 'small and 'delta information.
9308    Otherwise, return NULL.  */
9309
9310 static const char *
9311 fixed_type_info (struct type *type)
9312 {
9313   const char *name = ada_type_name (type);
9314   enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9315
9316   if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9317     {
9318       const char *tail = strstr (name, "___XF_");
9319       if (tail == NULL)
9320         return NULL;
9321       else
9322         return tail + 5;
9323     }
9324   else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9325     return fixed_type_info (TYPE_TARGET_TYPE (type));
9326   else
9327     return NULL;
9328 }
9329
9330 /* Returns non-zero iff TYPE represents an Ada fixed-point type.  */
9331
9332 int
9333 ada_is_fixed_point_type (struct type *type)
9334 {
9335   return fixed_type_info (type) != NULL;
9336 }
9337
9338 /* Return non-zero iff TYPE represents a System.Address type.  */
9339
9340 int
9341 ada_is_system_address_type (struct type *type)
9342 {
9343   return (TYPE_NAME (type)
9344           && strcmp (TYPE_NAME (type), "system__address") == 0);
9345 }
9346
9347 /* Assuming that TYPE is the representation of an Ada fixed-point
9348    type, return its delta, or -1 if the type is malformed and the
9349    delta cannot be determined.  */
9350
9351 DOUBLEST
9352 ada_delta (struct type *type)
9353 {
9354   const char *encoding = fixed_type_info (type);
9355   long num, den;
9356
9357   if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
9358     return -1.0;
9359   else
9360     return (DOUBLEST) num / (DOUBLEST) den;
9361 }
9362
9363 /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
9364    factor ('SMALL value) associated with the type.  */
9365
9366 static DOUBLEST
9367 scaling_factor (struct type *type)
9368 {
9369   const char *encoding = fixed_type_info (type);
9370   unsigned long num0, den0, num1, den1;
9371   int n;
9372
9373   n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
9374
9375   if (n < 2)
9376     return 1.0;
9377   else if (n == 4)
9378     return (DOUBLEST) num1 / (DOUBLEST) den1;
9379   else
9380     return (DOUBLEST) num0 / (DOUBLEST) den0;
9381 }
9382
9383
9384 /* Assuming that X is the representation of a value of fixed-point
9385    type TYPE, return its floating-point equivalent.  */
9386
9387 DOUBLEST
9388 ada_fixed_to_float (struct type *type, LONGEST x)
9389 {
9390   return (DOUBLEST) x *scaling_factor (type);
9391 }
9392
9393 /* The representation of a fixed-point value of type TYPE
9394    corresponding to the value X.  */
9395
9396 LONGEST
9397 ada_float_to_fixed (struct type *type, DOUBLEST x)
9398 {
9399   return (LONGEST) (x / scaling_factor (type) + 0.5);
9400 }
9401
9402
9403                                 /* VAX floating formats */
9404
9405 /* Non-zero iff TYPE represents one of the special VAX floating-point
9406    types.  */
9407
9408 int
9409 ada_is_vax_floating_type (struct type *type)
9410 {
9411   int name_len =
9412     (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
9413   return
9414     name_len > 6
9415     && (TYPE_CODE (type) == TYPE_CODE_INT
9416         || TYPE_CODE (type) == TYPE_CODE_RANGE)
9417     && strncmp (ada_type_name (type) + name_len - 6, "___XF", 5) == 0;
9418 }
9419
9420 /* The type of special VAX floating-point type this is, assuming
9421    ada_is_vax_floating_point.  */
9422
9423 int
9424 ada_vax_float_type_suffix (struct type *type)
9425 {
9426   return ada_type_name (type)[strlen (ada_type_name (type)) - 1];
9427 }
9428
9429 /* A value representing the special debugging function that outputs
9430    VAX floating-point values of the type represented by TYPE.  Assumes
9431    ada_is_vax_floating_type (TYPE).  */
9432
9433 struct value *
9434 ada_vax_float_print_function (struct type *type)
9435 {
9436   switch (ada_vax_float_type_suffix (type))
9437     {
9438     case 'F':
9439       return get_var_value ("DEBUG_STRING_F", 0);
9440     case 'D':
9441       return get_var_value ("DEBUG_STRING_D", 0);
9442     case 'G':
9443       return get_var_value ("DEBUG_STRING_G", 0);
9444     default:
9445       error (_("invalid VAX floating-point type"));
9446     }
9447 }
9448 \f
9449
9450                                 /* Range types */
9451
9452 /* Scan STR beginning at position K for a discriminant name, and
9453    return the value of that discriminant field of DVAL in *PX.  If
9454    PNEW_K is not null, put the position of the character beyond the
9455    name scanned in *PNEW_K.  Return 1 if successful; return 0 and do
9456    not alter *PX and *PNEW_K if unsuccessful.  */
9457
9458 static int
9459 scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
9460                     int *pnew_k)
9461 {
9462   static char *bound_buffer = NULL;
9463   static size_t bound_buffer_len = 0;
9464   char *bound;
9465   char *pend;
9466   struct value *bound_val;
9467
9468   if (dval == NULL || str == NULL || str[k] == '\0')
9469     return 0;
9470
9471   pend = strstr (str + k, "__");
9472   if (pend == NULL)
9473     {
9474       bound = str + k;
9475       k += strlen (bound);
9476     }
9477   else
9478     {
9479       GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
9480       bound = bound_buffer;
9481       strncpy (bound_buffer, str + k, pend - (str + k));
9482       bound[pend - (str + k)] = '\0';
9483       k = pend - str;
9484     }
9485
9486   bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
9487   if (bound_val == NULL)
9488     return 0;
9489
9490   *px = value_as_long (bound_val);
9491   if (pnew_k != NULL)
9492     *pnew_k = k;
9493   return 1;
9494 }
9495
9496 /* Value of variable named NAME in the current environment.  If
9497    no such variable found, then if ERR_MSG is null, returns 0, and
9498    otherwise causes an error with message ERR_MSG.  */
9499
9500 static struct value *
9501 get_var_value (char *name, char *err_msg)
9502 {
9503   struct ada_symbol_info *syms;
9504   int nsyms;
9505
9506   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9507                                   &syms);
9508
9509   if (nsyms != 1)
9510     {
9511       if (err_msg == NULL)
9512         return 0;
9513       else
9514         error (("%s"), err_msg);
9515     }
9516
9517   return value_of_variable (syms[0].sym, syms[0].block);
9518 }
9519
9520 /* Value of integer variable named NAME in the current environment.  If
9521    no such variable found, returns 0, and sets *FLAG to 0.  If
9522    successful, sets *FLAG to 1.  */
9523
9524 LONGEST
9525 get_int_var_value (char *name, int *flag)
9526 {
9527   struct value *var_val = get_var_value (name, 0);
9528
9529   if (var_val == 0)
9530     {
9531       if (flag != NULL)
9532         *flag = 0;
9533       return 0;
9534     }
9535   else
9536     {
9537       if (flag != NULL)
9538         *flag = 1;
9539       return value_as_long (var_val);
9540     }
9541 }
9542
9543
9544 /* Return a range type whose base type is that of the range type named
9545    NAME in the current environment, and whose bounds are calculated
9546    from NAME according to the GNAT range encoding conventions.
9547    Extract discriminant values, if needed, from DVAL.  If a new type
9548    must be created, allocate in OBJFILE's space.  The bounds
9549    information, in general, is encoded in NAME, the base type given in
9550    the named range type.  */
9551
9552 static struct type *
9553 to_fixed_range_type (char *name, struct value *dval, struct objfile *objfile)
9554 {
9555   struct type *raw_type = ada_find_any_type (name);
9556   struct type *base_type;
9557   char *subtype_info;
9558
9559   if (raw_type == NULL)
9560     base_type = builtin_type_int;
9561   else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
9562     base_type = TYPE_TARGET_TYPE (raw_type);
9563   else
9564     base_type = raw_type;
9565
9566   subtype_info = strstr (name, "___XD");
9567   if (subtype_info == NULL)
9568     return raw_type;
9569   else
9570     {
9571       static char *name_buf = NULL;
9572       static size_t name_len = 0;
9573       int prefix_len = subtype_info - name;
9574       LONGEST L, U;
9575       struct type *type;
9576       char *bounds_str;
9577       int n;
9578
9579       GROW_VECT (name_buf, name_len, prefix_len + 5);
9580       strncpy (name_buf, name, prefix_len);
9581       name_buf[prefix_len] = '\0';
9582
9583       subtype_info += 5;
9584       bounds_str = strchr (subtype_info, '_');
9585       n = 1;
9586
9587       if (*subtype_info == 'L')
9588         {
9589           if (!ada_scan_number (bounds_str, n, &L, &n)
9590               && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
9591             return raw_type;
9592           if (bounds_str[n] == '_')
9593             n += 2;
9594           else if (bounds_str[n] == '.')        /* FIXME? SGI Workshop kludge.  */
9595             n += 1;
9596           subtype_info += 1;
9597         }
9598       else
9599         {
9600           int ok;
9601           strcpy (name_buf + prefix_len, "___L");
9602           L = get_int_var_value (name_buf, &ok);
9603           if (!ok)
9604             {
9605               lim_warning (_("Unknown lower bound, using 1."));
9606               L = 1;
9607             }
9608         }
9609
9610       if (*subtype_info == 'U')
9611         {
9612           if (!ada_scan_number (bounds_str, n, &U, &n)
9613               && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
9614             return raw_type;
9615         }
9616       else
9617         {
9618           int ok;
9619           strcpy (name_buf + prefix_len, "___U");
9620           U = get_int_var_value (name_buf, &ok);
9621           if (!ok)
9622             {
9623               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
9624               U = L;
9625             }
9626         }
9627
9628       if (objfile == NULL)
9629         objfile = TYPE_OBJFILE (base_type);
9630       type = create_range_type (alloc_type (objfile), base_type, L, U);
9631       TYPE_NAME (type) = name;
9632       return type;
9633     }
9634 }
9635
9636 /* True iff NAME is the name of a range type.  */
9637
9638 int
9639 ada_is_range_type_name (const char *name)
9640 {
9641   return (name != NULL && strstr (name, "___XD"));
9642 }
9643 \f
9644
9645                                 /* Modular types */
9646
9647 /* True iff TYPE is an Ada modular type.  */
9648
9649 int
9650 ada_is_modular_type (struct type *type)
9651 {
9652   struct type *subranged_type = base_type (type);
9653
9654   return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
9655           && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
9656           && TYPE_UNSIGNED (subranged_type));
9657 }
9658
9659 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
9660
9661 ULONGEST
9662 ada_modulus (struct type * type)
9663 {
9664   return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
9665 }
9666 \f
9667
9668 /* Ada exception catchpoint support:
9669    ---------------------------------
9670
9671    We support 3 kinds of exception catchpoints:
9672      . catchpoints on Ada exceptions
9673      . catchpoints on unhandled Ada exceptions
9674      . catchpoints on failed assertions
9675
9676    Exceptions raised during failed assertions, or unhandled exceptions
9677    could perfectly be caught with the general catchpoint on Ada exceptions.
9678    However, we can easily differentiate these two special cases, and having
9679    the option to distinguish these two cases from the rest can be useful
9680    to zero-in on certain situations.
9681
9682    Exception catchpoints are a specialized form of breakpoint,
9683    since they rely on inserting breakpoints inside known routines
9684    of the GNAT runtime.  The implementation therefore uses a standard
9685    breakpoint structure of the BP_BREAKPOINT type, but with its own set
9686    of breakpoint_ops.
9687
9688    Support in the runtime for exception catchpoints have been changed
9689    a few times already, and these changes affect the implementation
9690    of these catchpoints.  In order to be able to support several
9691    variants of the runtime, we use a sniffer that will determine
9692    the runtime variant used by the program being debugged.
9693
9694    At this time, we do not support the use of conditions on Ada exception
9695    catchpoints.  The COND and COND_STRING fields are therefore set
9696    to NULL (most of the time, see below).
9697    
9698    Conditions where EXP_STRING, COND, and COND_STRING are used:
9699
9700      When a user specifies the name of a specific exception in the case
9701      of catchpoints on Ada exceptions, we store the name of that exception
9702      in the EXP_STRING.  We then translate this request into an actual
9703      condition stored in COND_STRING, and then parse it into an expression
9704      stored in COND.  */
9705
9706 /* The different types of catchpoints that we introduced for catching
9707    Ada exceptions.  */
9708
9709 enum exception_catchpoint_kind
9710 {
9711   ex_catch_exception,
9712   ex_catch_exception_unhandled,
9713   ex_catch_assert
9714 };
9715
9716 typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
9717
9718 /* A structure that describes how to support exception catchpoints
9719    for a given executable.  */
9720
9721 struct exception_support_info
9722 {
9723    /* The name of the symbol to break on in order to insert
9724       a catchpoint on exceptions.  */
9725    const char *catch_exception_sym;
9726
9727    /* The name of the symbol to break on in order to insert
9728       a catchpoint on unhandled exceptions.  */
9729    const char *catch_exception_unhandled_sym;
9730
9731    /* The name of the symbol to break on in order to insert
9732       a catchpoint on failed assertions.  */
9733    const char *catch_assert_sym;
9734
9735    /* Assuming that the inferior just triggered an unhandled exception
9736       catchpoint, this function is responsible for returning the address
9737       in inferior memory where the name of that exception is stored.
9738       Return zero if the address could not be computed.  */
9739    ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
9740 };
9741
9742 static CORE_ADDR ada_unhandled_exception_name_addr (void);
9743 static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
9744
9745 /* The following exception support info structure describes how to
9746    implement exception catchpoints with the latest version of the
9747    Ada runtime (as of 2007-03-06).  */
9748
9749 static const struct exception_support_info default_exception_support_info =
9750 {
9751   "__gnat_debug_raise_exception", /* catch_exception_sym */
9752   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9753   "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9754   ada_unhandled_exception_name_addr
9755 };
9756
9757 /* The following exception support info structure describes how to
9758    implement exception catchpoints with a slightly older version
9759    of the Ada runtime.  */
9760
9761 static const struct exception_support_info exception_support_info_fallback =
9762 {
9763   "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
9764   "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
9765   "system__assertions__raise_assert_failure",  /* catch_assert_sym */
9766   ada_unhandled_exception_name_addr_from_raise
9767 };
9768
9769 /* For each executable, we sniff which exception info structure to use
9770    and cache it in the following global variable.  */
9771
9772 static const struct exception_support_info *exception_info = NULL;
9773
9774 /* Inspect the Ada runtime and determine which exception info structure
9775    should be used to provide support for exception catchpoints.
9776
9777    This function will always set exception_info, or raise an error.  */
9778
9779 static void
9780 ada_exception_support_info_sniffer (void)
9781 {
9782   struct symbol *sym;
9783
9784   /* If the exception info is already known, then no need to recompute it.  */
9785   if (exception_info != NULL)
9786     return;
9787
9788   /* Check the latest (default) exception support info.  */
9789   sym = standard_lookup (default_exception_support_info.catch_exception_sym,
9790                          NULL, VAR_DOMAIN);
9791   if (sym != NULL)
9792     {
9793       exception_info = &default_exception_support_info;
9794       return;
9795     }
9796
9797   /* Try our fallback exception suport info.  */
9798   sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
9799                          NULL, VAR_DOMAIN);
9800   if (sym != NULL)
9801     {
9802       exception_info = &exception_support_info_fallback;
9803       return;
9804     }
9805
9806   /* Sometimes, it is normal for us to not be able to find the routine
9807      we are looking for.  This happens when the program is linked with
9808      the shared version of the GNAT runtime, and the program has not been
9809      started yet.  Inform the user of these two possible causes if
9810      applicable.  */
9811
9812   if (ada_update_initial_language (language_unknown, NULL) != language_ada)
9813     error (_("Unable to insert catchpoint.  Is this an Ada main program?"));
9814
9815   /* If the symbol does not exist, then check that the program is
9816      already started, to make sure that shared libraries have been
9817      loaded.  If it is not started, this may mean that the symbol is
9818      in a shared library.  */
9819
9820   if (ptid_get_pid (inferior_ptid) == 0)
9821     error (_("Unable to insert catchpoint. Try to start the program first."));
9822
9823   /* At this point, we know that we are debugging an Ada program and
9824      that the inferior has been started, but we still are not able to
9825      find the run-time symbols. That can mean that we are in
9826      configurable run time mode, or that a-except as been optimized
9827      out by the linker...  In any case, at this point it is not worth
9828      supporting this feature.  */
9829
9830   error (_("Cannot insert catchpoints in this configuration."));
9831 }
9832
9833 /* An observer of "executable_changed" events.
9834    Its role is to clear certain cached values that need to be recomputed
9835    each time a new executable is loaded by GDB.  */
9836
9837 static void
9838 ada_executable_changed_observer (void *unused)
9839 {
9840   /* If the executable changed, then it is possible that the Ada runtime
9841      is different.  So we need to invalidate the exception support info
9842      cache.  */
9843   exception_info = NULL;
9844 }
9845
9846 /* Return the name of the function at PC, NULL if could not find it.
9847    This function only checks the debugging information, not the symbol
9848    table.  */
9849
9850 static char *
9851 function_name_from_pc (CORE_ADDR pc)
9852 {
9853   char *func_name;
9854
9855   if (!find_pc_partial_function (pc, &func_name, NULL, NULL))
9856     return NULL;
9857
9858   return func_name;
9859 }
9860
9861 /* True iff FRAME is very likely to be that of a function that is
9862    part of the runtime system.  This is all very heuristic, but is
9863    intended to be used as advice as to what frames are uninteresting
9864    to most users.  */
9865
9866 static int
9867 is_known_support_routine (struct frame_info *frame)
9868 {
9869   struct symtab_and_line sal;
9870   char *func_name;
9871   int i;
9872
9873   /* If this code does not have any debugging information (no symtab),
9874      This cannot be any user code.  */
9875
9876   find_frame_sal (frame, &sal);
9877   if (sal.symtab == NULL)
9878     return 1;
9879
9880   /* If there is a symtab, but the associated source file cannot be
9881      located, then assume this is not user code:  Selecting a frame
9882      for which we cannot display the code would not be very helpful
9883      for the user.  This should also take care of case such as VxWorks
9884      where the kernel has some debugging info provided for a few units.  */
9885
9886   if (symtab_to_fullname (sal.symtab) == NULL)
9887     return 1;
9888
9889   /* Check the unit filename againt the Ada runtime file naming.
9890      We also check the name of the objfile against the name of some
9891      known system libraries that sometimes come with debugging info
9892      too.  */
9893
9894   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
9895     {
9896       re_comp (known_runtime_file_name_patterns[i]);
9897       if (re_exec (sal.symtab->filename))
9898         return 1;
9899       if (sal.symtab->objfile != NULL
9900           && re_exec (sal.symtab->objfile->name))
9901         return 1;
9902     }
9903
9904   /* Check whether the function is a GNAT-generated entity.  */
9905
9906   func_name = function_name_from_pc (get_frame_address_in_block (frame));
9907   if (func_name == NULL)
9908     return 1;
9909
9910   for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
9911     {
9912       re_comp (known_auxiliary_function_name_patterns[i]);
9913       if (re_exec (func_name))
9914         return 1;
9915     }
9916
9917   return 0;
9918 }
9919
9920 /* Find the first frame that contains debugging information and that is not
9921    part of the Ada run-time, starting from FI and moving upward.  */
9922
9923 static void
9924 ada_find_printable_frame (struct frame_info *fi)
9925 {
9926   for (; fi != NULL; fi = get_prev_frame (fi))
9927     {
9928       if (!is_known_support_routine (fi))
9929         {
9930           select_frame (fi);
9931           break;
9932         }
9933     }
9934
9935 }
9936
9937 /* Assuming that the inferior just triggered an unhandled exception
9938    catchpoint, return the address in inferior memory where the name
9939    of the exception is stored.
9940    
9941    Return zero if the address could not be computed.  */
9942
9943 static CORE_ADDR
9944 ada_unhandled_exception_name_addr (void)
9945 {
9946   return parse_and_eval_address ("e.full_name");
9947 }
9948
9949 /* Same as ada_unhandled_exception_name_addr, except that this function
9950    should be used when the inferior uses an older version of the runtime,
9951    where the exception name needs to be extracted from a specific frame
9952    several frames up in the callstack.  */
9953
9954 static CORE_ADDR
9955 ada_unhandled_exception_name_addr_from_raise (void)
9956 {
9957   int frame_level;
9958   struct frame_info *fi;
9959
9960   /* To determine the name of this exception, we need to select
9961      the frame corresponding to RAISE_SYM_NAME.  This frame is
9962      at least 3 levels up, so we simply skip the first 3 frames
9963      without checking the name of their associated function.  */
9964   fi = get_current_frame ();
9965   for (frame_level = 0; frame_level < 3; frame_level += 1)
9966     if (fi != NULL)
9967       fi = get_prev_frame (fi); 
9968
9969   while (fi != NULL)
9970     {
9971       const char *func_name =
9972         function_name_from_pc (get_frame_address_in_block (fi));
9973       if (func_name != NULL
9974           && strcmp (func_name, exception_info->catch_exception_sym) == 0)
9975         break; /* We found the frame we were looking for...  */
9976       fi = get_prev_frame (fi);
9977     }
9978
9979   if (fi == NULL)
9980     return 0;
9981
9982   select_frame (fi);
9983   return parse_and_eval_address ("id.full_name");
9984 }
9985
9986 /* Assuming the inferior just triggered an Ada exception catchpoint
9987    (of any type), return the address in inferior memory where the name
9988    of the exception is stored, if applicable.
9989
9990    Return zero if the address could not be computed, or if not relevant.  */
9991
9992 static CORE_ADDR
9993 ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
9994                            struct breakpoint *b)
9995 {
9996   switch (ex)
9997     {
9998       case ex_catch_exception:
9999         return (parse_and_eval_address ("e.full_name"));
10000         break;
10001
10002       case ex_catch_exception_unhandled:
10003         return exception_info->unhandled_exception_name_addr ();
10004         break;
10005       
10006       case ex_catch_assert:
10007         return 0;  /* Exception name is not relevant in this case.  */
10008         break;
10009
10010       default:
10011         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10012         break;
10013     }
10014
10015   return 0; /* Should never be reached.  */
10016 }
10017
10018 /* Same as ada_exception_name_addr_1, except that it intercepts and contains
10019    any error that ada_exception_name_addr_1 might cause to be thrown.
10020    When an error is intercepted, a warning with the error message is printed,
10021    and zero is returned.  */
10022
10023 static CORE_ADDR
10024 ada_exception_name_addr (enum exception_catchpoint_kind ex,
10025                          struct breakpoint *b)
10026 {
10027   struct gdb_exception e;
10028   CORE_ADDR result = 0;
10029
10030   TRY_CATCH (e, RETURN_MASK_ERROR)
10031     {
10032       result = ada_exception_name_addr_1 (ex, b);
10033     }
10034
10035   if (e.reason < 0)
10036     {
10037       warning (_("failed to get exception name: %s"), e.message);
10038       return 0;
10039     }
10040
10041   return result;
10042 }
10043
10044 /* Implement the PRINT_IT method in the breakpoint_ops structure
10045    for all exception catchpoint kinds.  */
10046
10047 static enum print_stop_action
10048 print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10049 {
10050   const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10051   char exception_name[256];
10052
10053   if (addr != 0)
10054     {
10055       read_memory (addr, exception_name, sizeof (exception_name) - 1);
10056       exception_name [sizeof (exception_name) - 1] = '\0';
10057     }
10058
10059   ada_find_printable_frame (get_current_frame ());
10060
10061   annotate_catchpoint (b->number);
10062   switch (ex)
10063     {
10064       case ex_catch_exception:
10065         if (addr != 0)
10066           printf_filtered (_("\nCatchpoint %d, %s at "),
10067                            b->number, exception_name);
10068         else
10069           printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10070         break;
10071       case ex_catch_exception_unhandled:
10072         if (addr != 0)
10073           printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10074                            b->number, exception_name);
10075         else
10076           printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10077                            b->number);
10078         break;
10079       case ex_catch_assert:
10080         printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10081                          b->number);
10082         break;
10083     }
10084
10085   return PRINT_SRC_AND_LOC;
10086 }
10087
10088 /* Implement the PRINT_ONE method in the breakpoint_ops structure
10089    for all exception catchpoint kinds.  */
10090
10091 static void
10092 print_one_exception (enum exception_catchpoint_kind ex,
10093                      struct breakpoint *b, CORE_ADDR *last_addr)
10094
10095   if (addressprint)
10096     {
10097       annotate_field (4);
10098       ui_out_field_core_addr (uiout, "addr", b->loc->address);
10099     }
10100
10101   annotate_field (5);
10102   *last_addr = b->loc->address;
10103   switch (ex)
10104     {
10105       case ex_catch_exception:
10106         if (b->exp_string != NULL)
10107           {
10108             char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10109             
10110             ui_out_field_string (uiout, "what", msg);
10111             xfree (msg);
10112           }
10113         else
10114           ui_out_field_string (uiout, "what", "all Ada exceptions");
10115         
10116         break;
10117
10118       case ex_catch_exception_unhandled:
10119         ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10120         break;
10121       
10122       case ex_catch_assert:
10123         ui_out_field_string (uiout, "what", "failed Ada assertions");
10124         break;
10125
10126       default:
10127         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10128         break;
10129     }
10130 }
10131
10132 /* Implement the PRINT_MENTION method in the breakpoint_ops structure
10133    for all exception catchpoint kinds.  */
10134
10135 static void
10136 print_mention_exception (enum exception_catchpoint_kind ex,
10137                          struct breakpoint *b)
10138 {
10139   switch (ex)
10140     {
10141       case ex_catch_exception:
10142         if (b->exp_string != NULL)
10143           printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10144                            b->number, b->exp_string);
10145         else
10146           printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10147         
10148         break;
10149
10150       case ex_catch_exception_unhandled:
10151         printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10152                          b->number);
10153         break;
10154       
10155       case ex_catch_assert:
10156         printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10157         break;
10158
10159       default:
10160         internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10161         break;
10162     }
10163 }
10164
10165 /* Virtual table for "catch exception" breakpoints.  */
10166
10167 static enum print_stop_action
10168 print_it_catch_exception (struct breakpoint *b)
10169 {
10170   return print_it_exception (ex_catch_exception, b);
10171 }
10172
10173 static void
10174 print_one_catch_exception (struct breakpoint *b, CORE_ADDR *last_addr)
10175 {
10176   print_one_exception (ex_catch_exception, b, last_addr);
10177 }
10178
10179 static void
10180 print_mention_catch_exception (struct breakpoint *b)
10181 {
10182   print_mention_exception (ex_catch_exception, b);
10183 }
10184
10185 static struct breakpoint_ops catch_exception_breakpoint_ops =
10186 {
10187   print_it_catch_exception,
10188   print_one_catch_exception,
10189   print_mention_catch_exception
10190 };
10191
10192 /* Virtual table for "catch exception unhandled" breakpoints.  */
10193
10194 static enum print_stop_action
10195 print_it_catch_exception_unhandled (struct breakpoint *b)
10196 {
10197   return print_it_exception (ex_catch_exception_unhandled, b);
10198 }
10199
10200 static void
10201 print_one_catch_exception_unhandled (struct breakpoint *b, CORE_ADDR *last_addr)
10202 {
10203   print_one_exception (ex_catch_exception_unhandled, b, last_addr);
10204 }
10205
10206 static void
10207 print_mention_catch_exception_unhandled (struct breakpoint *b)
10208 {
10209   print_mention_exception (ex_catch_exception_unhandled, b);
10210 }
10211
10212 static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
10213   print_it_catch_exception_unhandled,
10214   print_one_catch_exception_unhandled,
10215   print_mention_catch_exception_unhandled
10216 };
10217
10218 /* Virtual table for "catch assert" breakpoints.  */
10219
10220 static enum print_stop_action
10221 print_it_catch_assert (struct breakpoint *b)
10222 {
10223   return print_it_exception (ex_catch_assert, b);
10224 }
10225
10226 static void
10227 print_one_catch_assert (struct breakpoint *b, CORE_ADDR *last_addr)
10228 {
10229   print_one_exception (ex_catch_assert, b, last_addr);
10230 }
10231
10232 static void
10233 print_mention_catch_assert (struct breakpoint *b)
10234 {
10235   print_mention_exception (ex_catch_assert, b);
10236 }
10237
10238 static struct breakpoint_ops catch_assert_breakpoint_ops = {
10239   print_it_catch_assert,
10240   print_one_catch_assert,
10241   print_mention_catch_assert
10242 };
10243
10244 /* Return non-zero if B is an Ada exception catchpoint.  */
10245
10246 int
10247 ada_exception_catchpoint_p (struct breakpoint *b)
10248 {
10249   return (b->ops == &catch_exception_breakpoint_ops
10250           || b->ops == &catch_exception_unhandled_breakpoint_ops
10251           || b->ops == &catch_assert_breakpoint_ops);
10252 }
10253
10254 /* Return a newly allocated copy of the first space-separated token
10255    in ARGSP, and then adjust ARGSP to point immediately after that
10256    token.
10257
10258    Return NULL if ARGPS does not contain any more tokens.  */
10259
10260 static char *
10261 ada_get_next_arg (char **argsp)
10262 {
10263   char *args = *argsp;
10264   char *end;
10265   char *result;
10266
10267   /* Skip any leading white space.  */
10268
10269   while (isspace (*args))
10270     args++;
10271
10272   if (args[0] == '\0')
10273     return NULL; /* No more arguments.  */
10274   
10275   /* Find the end of the current argument.  */
10276
10277   end = args;
10278   while (*end != '\0' && !isspace (*end))
10279     end++;
10280
10281   /* Adjust ARGSP to point to the start of the next argument.  */
10282
10283   *argsp = end;
10284
10285   /* Make a copy of the current argument and return it.  */
10286
10287   result = xmalloc (end - args + 1);
10288   strncpy (result, args, end - args);
10289   result[end - args] = '\0';
10290   
10291   return result;
10292 }
10293
10294 /* Split the arguments specified in a "catch exception" command.  
10295    Set EX to the appropriate catchpoint type.
10296    Set EXP_STRING to the name of the specific exception if
10297    specified by the user.  */
10298
10299 static void
10300 catch_ada_exception_command_split (char *args,
10301                                    enum exception_catchpoint_kind *ex,
10302                                    char **exp_string)
10303 {
10304   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10305   char *exception_name;
10306
10307   exception_name = ada_get_next_arg (&args);
10308   make_cleanup (xfree, exception_name);
10309
10310   /* Check that we do not have any more arguments.  Anything else
10311      is unexpected.  */
10312
10313   while (isspace (*args))
10314     args++;
10315
10316   if (args[0] != '\0')
10317     error (_("Junk at end of expression"));
10318
10319   discard_cleanups (old_chain);
10320
10321   if (exception_name == NULL)
10322     {
10323       /* Catch all exceptions.  */
10324       *ex = ex_catch_exception;
10325       *exp_string = NULL;
10326     }
10327   else if (strcmp (exception_name, "unhandled") == 0)
10328     {
10329       /* Catch unhandled exceptions.  */
10330       *ex = ex_catch_exception_unhandled;
10331       *exp_string = NULL;
10332     }
10333   else
10334     {
10335       /* Catch a specific exception.  */
10336       *ex = ex_catch_exception;
10337       *exp_string = exception_name;
10338     }
10339 }
10340
10341 /* Return the name of the symbol on which we should break in order to
10342    implement a catchpoint of the EX kind.  */
10343
10344 static const char *
10345 ada_exception_sym_name (enum exception_catchpoint_kind ex)
10346 {
10347   gdb_assert (exception_info != NULL);
10348
10349   switch (ex)
10350     {
10351       case ex_catch_exception:
10352         return (exception_info->catch_exception_sym);
10353         break;
10354       case ex_catch_exception_unhandled:
10355         return (exception_info->catch_exception_unhandled_sym);
10356         break;
10357       case ex_catch_assert:
10358         return (exception_info->catch_assert_sym);
10359         break;
10360       default:
10361         internal_error (__FILE__, __LINE__,
10362                         _("unexpected catchpoint kind (%d)"), ex);
10363     }
10364 }
10365
10366 /* Return the breakpoint ops "virtual table" used for catchpoints
10367    of the EX kind.  */
10368
10369 static struct breakpoint_ops *
10370 ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
10371 {
10372   switch (ex)
10373     {
10374       case ex_catch_exception:
10375         return (&catch_exception_breakpoint_ops);
10376         break;
10377       case ex_catch_exception_unhandled:
10378         return (&catch_exception_unhandled_breakpoint_ops);
10379         break;
10380       case ex_catch_assert:
10381         return (&catch_assert_breakpoint_ops);
10382         break;
10383       default:
10384         internal_error (__FILE__, __LINE__,
10385                         _("unexpected catchpoint kind (%d)"), ex);
10386     }
10387 }
10388
10389 /* Return the condition that will be used to match the current exception
10390    being raised with the exception that the user wants to catch.  This
10391    assumes that this condition is used when the inferior just triggered
10392    an exception catchpoint.
10393    
10394    The string returned is a newly allocated string that needs to be
10395    deallocated later.  */
10396
10397 static char *
10398 ada_exception_catchpoint_cond_string (const char *exp_string)
10399 {
10400   return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10401 }
10402
10403 /* Return the expression corresponding to COND_STRING evaluated at SAL.  */
10404
10405 static struct expression *
10406 ada_parse_catchpoint_condition (char *cond_string,
10407                                 struct symtab_and_line sal)
10408 {
10409   return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10410 }
10411
10412 /* Return the symtab_and_line that should be used to insert an exception
10413    catchpoint of the TYPE kind.
10414
10415    EX_STRING should contain the name of a specific exception
10416    that the catchpoint should catch, or NULL otherwise.
10417
10418    The idea behind all the remaining parameters is that their names match
10419    the name of certain fields in the breakpoint structure that are used to
10420    handle exception catchpoints.  This function returns the value to which
10421    these fields should be set, depending on the type of catchpoint we need
10422    to create.
10423    
10424    If COND and COND_STRING are both non-NULL, any value they might
10425    hold will be free'ed, and then replaced by newly allocated ones.
10426    These parameters are left untouched otherwise.  */
10427
10428 static struct symtab_and_line
10429 ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10430                    char **addr_string, char **cond_string,
10431                    struct expression **cond, struct breakpoint_ops **ops)
10432 {
10433   const char *sym_name;
10434   struct symbol *sym;
10435   struct symtab_and_line sal;
10436
10437   /* First, find out which exception support info to use.  */
10438   ada_exception_support_info_sniffer ();
10439
10440   /* Then lookup the function on which we will break in order to catch
10441      the Ada exceptions requested by the user.  */
10442
10443   sym_name = ada_exception_sym_name (ex);
10444   sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10445
10446   /* The symbol we're looking up is provided by a unit in the GNAT runtime
10447      that should be compiled with debugging information.  As a result, we
10448      expect to find that symbol in the symtabs.  If we don't find it, then
10449      the target most likely does not support Ada exceptions, or we cannot
10450      insert exception breakpoints yet, because the GNAT runtime hasn't been
10451      loaded yet.  */
10452
10453   /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10454      in such a way that no debugging information is produced for the symbol
10455      we are looking for.  In this case, we could search the minimal symbols
10456      as a fall-back mechanism.  This would still be operating in degraded
10457      mode, however, as we would still be missing the debugging information
10458      that is needed in order to extract the name of the exception being
10459      raised (this name is printed in the catchpoint message, and is also
10460      used when trying to catch a specific exception).  We do not handle
10461      this case for now.  */
10462
10463   if (sym == NULL)
10464     error (_("Unable to break on '%s' in this configuration."), sym_name);
10465
10466   /* Make sure that the symbol we found corresponds to a function.  */
10467   if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10468     error (_("Symbol \"%s\" is not a function (class = %d)"),
10469            sym_name, SYMBOL_CLASS (sym));
10470
10471   sal = find_function_start_sal (sym, 1);
10472
10473   /* Set ADDR_STRING.  */
10474
10475   *addr_string = xstrdup (sym_name);
10476
10477   /* Set the COND and COND_STRING (if not NULL).  */
10478
10479   if (cond_string != NULL && cond != NULL)
10480     {
10481       if (*cond_string != NULL)
10482         {
10483           xfree (*cond_string);
10484           *cond_string = NULL;
10485         }
10486       if (*cond != NULL)
10487         {
10488           xfree (*cond);
10489           *cond = NULL;
10490         }
10491       if (exp_string != NULL)
10492         {
10493           *cond_string = ada_exception_catchpoint_cond_string (exp_string);
10494           *cond = ada_parse_catchpoint_condition (*cond_string, sal);
10495         }
10496     }
10497
10498   /* Set OPS.  */
10499   *ops = ada_exception_breakpoint_ops (ex);
10500
10501   return sal;
10502 }
10503
10504 /* Parse the arguments (ARGS) of the "catch exception" command.
10505  
10506    Set TYPE to the appropriate exception catchpoint type.
10507    If the user asked the catchpoint to catch only a specific
10508    exception, then save the exception name in ADDR_STRING.
10509
10510    See ada_exception_sal for a description of all the remaining
10511    function arguments of this function.  */
10512
10513 struct symtab_and_line
10514 ada_decode_exception_location (char *args, char **addr_string,
10515                                char **exp_string, char **cond_string,
10516                                struct expression **cond,
10517                                struct breakpoint_ops **ops)
10518 {
10519   enum exception_catchpoint_kind ex;
10520
10521   catch_ada_exception_command_split (args, &ex, exp_string);
10522   return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
10523                             cond, ops);
10524 }
10525
10526 struct symtab_and_line
10527 ada_decode_assert_location (char *args, char **addr_string,
10528                             struct breakpoint_ops **ops)
10529 {
10530   /* Check that no argument where provided at the end of the command.  */
10531
10532   if (args != NULL)
10533     {
10534       while (isspace (*args))
10535         args++;
10536       if (*args != '\0')
10537         error (_("Junk at end of arguments."));
10538     }
10539
10540   return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
10541                             ops);
10542 }
10543
10544                                 /* Operators */
10545 /* Information about operators given special treatment in functions
10546    below.  */
10547 /* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>).  */
10548
10549 #define ADA_OPERATORS \
10550     OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
10551     OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
10552     OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
10553     OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
10554     OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
10555     OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
10556     OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
10557     OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
10558     OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
10559     OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
10560     OP_DEFN (OP_ATR_POS, 1, 2, 0) \
10561     OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
10562     OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
10563     OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
10564     OP_DEFN (UNOP_QUAL, 3, 1, 0) \
10565     OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
10566     OP_DEFN (OP_OTHERS, 1, 1, 0) \
10567     OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
10568     OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
10569
10570 static void
10571 ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
10572 {
10573   switch (exp->elts[pc - 1].opcode)
10574     {
10575     default:
10576       operator_length_standard (exp, pc, oplenp, argsp);
10577       break;
10578
10579 #define OP_DEFN(op, len, args, binop) \
10580     case op: *oplenp = len; *argsp = args; break;
10581       ADA_OPERATORS;
10582 #undef OP_DEFN
10583
10584     case OP_AGGREGATE:
10585       *oplenp = 3;
10586       *argsp = longest_to_int (exp->elts[pc - 2].longconst);
10587       break;
10588
10589     case OP_CHOICES:
10590       *oplenp = 3;
10591       *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
10592       break;
10593     }
10594 }
10595
10596 static char *
10597 ada_op_name (enum exp_opcode opcode)
10598 {
10599   switch (opcode)
10600     {
10601     default:
10602       return op_name_standard (opcode);
10603
10604 #define OP_DEFN(op, len, args, binop) case op: return #op;
10605       ADA_OPERATORS;
10606 #undef OP_DEFN
10607
10608     case OP_AGGREGATE:
10609       return "OP_AGGREGATE";
10610     case OP_CHOICES:
10611       return "OP_CHOICES";
10612     case OP_NAME:
10613       return "OP_NAME";
10614     }
10615 }
10616
10617 /* As for operator_length, but assumes PC is pointing at the first
10618    element of the operator, and gives meaningful results only for the 
10619    Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise.  */
10620
10621 static void
10622 ada_forward_operator_length (struct expression *exp, int pc,
10623                              int *oplenp, int *argsp)
10624 {
10625   switch (exp->elts[pc].opcode)
10626     {
10627     default:
10628       *oplenp = *argsp = 0;
10629       break;
10630
10631 #define OP_DEFN(op, len, args, binop) \
10632     case op: *oplenp = len; *argsp = args; break;
10633       ADA_OPERATORS;
10634 #undef OP_DEFN
10635
10636     case OP_AGGREGATE:
10637       *oplenp = 3;
10638       *argsp = longest_to_int (exp->elts[pc + 1].longconst);
10639       break;
10640
10641     case OP_CHOICES:
10642       *oplenp = 3;
10643       *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
10644       break;
10645
10646     case OP_STRING:
10647     case OP_NAME:
10648       {
10649         int len = longest_to_int (exp->elts[pc + 1].longconst);
10650         *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
10651         *argsp = 0;
10652         break;
10653       }
10654     }
10655 }
10656
10657 static int
10658 ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
10659 {
10660   enum exp_opcode op = exp->elts[elt].opcode;
10661   int oplen, nargs;
10662   int pc = elt;
10663   int i;
10664
10665   ada_forward_operator_length (exp, elt, &oplen, &nargs);
10666
10667   switch (op)
10668     {
10669       /* Ada attributes ('Foo).  */
10670     case OP_ATR_FIRST:
10671     case OP_ATR_LAST:
10672     case OP_ATR_LENGTH:
10673     case OP_ATR_IMAGE:
10674     case OP_ATR_MAX:
10675     case OP_ATR_MIN:
10676     case OP_ATR_MODULUS:
10677     case OP_ATR_POS:
10678     case OP_ATR_SIZE:
10679     case OP_ATR_TAG:
10680     case OP_ATR_VAL:
10681       break;
10682
10683     case UNOP_IN_RANGE:
10684     case UNOP_QUAL:
10685       /* XXX: gdb_sprint_host_address, type_sprint */
10686       fprintf_filtered (stream, _("Type @"));
10687       gdb_print_host_address (exp->elts[pc + 1].type, stream);
10688       fprintf_filtered (stream, " (");
10689       type_print (exp->elts[pc + 1].type, NULL, stream, 0);
10690       fprintf_filtered (stream, ")");
10691       break;
10692     case BINOP_IN_BOUNDS:
10693       fprintf_filtered (stream, " (%d)",
10694                         longest_to_int (exp->elts[pc + 2].longconst));
10695       break;
10696     case TERNOP_IN_RANGE:
10697       break;
10698
10699     case OP_AGGREGATE:
10700     case OP_OTHERS:
10701     case OP_DISCRETE_RANGE:
10702     case OP_POSITIONAL:
10703     case OP_CHOICES:
10704       break;
10705
10706     case OP_NAME:
10707     case OP_STRING:
10708       {
10709         char *name = &exp->elts[elt + 2].string;
10710         int len = longest_to_int (exp->elts[elt + 1].longconst);
10711         fprintf_filtered (stream, "Text: `%.*s'", len, name);
10712         break;
10713       }
10714
10715     default:
10716       return dump_subexp_body_standard (exp, stream, elt);
10717     }
10718
10719   elt += oplen;
10720   for (i = 0; i < nargs; i += 1)
10721     elt = dump_subexp (exp, stream, elt);
10722
10723   return elt;
10724 }
10725
10726 /* The Ada extension of print_subexp (q.v.).  */
10727
10728 static void
10729 ada_print_subexp (struct expression *exp, int *pos,
10730                   struct ui_file *stream, enum precedence prec)
10731 {
10732   int oplen, nargs, i;
10733   int pc = *pos;
10734   enum exp_opcode op = exp->elts[pc].opcode;
10735
10736   ada_forward_operator_length (exp, pc, &oplen, &nargs);
10737
10738   *pos += oplen;
10739   switch (op)
10740     {
10741     default:
10742       *pos -= oplen;
10743       print_subexp_standard (exp, pos, stream, prec);
10744       return;
10745
10746     case OP_VAR_VALUE:
10747       fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
10748       return;
10749
10750     case BINOP_IN_BOUNDS:
10751       /* XXX: sprint_subexp */
10752       print_subexp (exp, pos, stream, PREC_SUFFIX);
10753       fputs_filtered (" in ", stream);
10754       print_subexp (exp, pos, stream, PREC_SUFFIX);
10755       fputs_filtered ("'range", stream);
10756       if (exp->elts[pc + 1].longconst > 1)
10757         fprintf_filtered (stream, "(%ld)",
10758                           (long) exp->elts[pc + 1].longconst);
10759       return;
10760
10761     case TERNOP_IN_RANGE:
10762       if (prec >= PREC_EQUAL)
10763         fputs_filtered ("(", stream);
10764       /* XXX: sprint_subexp */
10765       print_subexp (exp, pos, stream, PREC_SUFFIX);
10766       fputs_filtered (" in ", stream);
10767       print_subexp (exp, pos, stream, PREC_EQUAL);
10768       fputs_filtered (" .. ", stream);
10769       print_subexp (exp, pos, stream, PREC_EQUAL);
10770       if (prec >= PREC_EQUAL)
10771         fputs_filtered (")", stream);
10772       return;
10773
10774     case OP_ATR_FIRST:
10775     case OP_ATR_LAST:
10776     case OP_ATR_LENGTH:
10777     case OP_ATR_IMAGE:
10778     case OP_ATR_MAX:
10779     case OP_ATR_MIN:
10780     case OP_ATR_MODULUS:
10781     case OP_ATR_POS:
10782     case OP_ATR_SIZE:
10783     case OP_ATR_TAG:
10784     case OP_ATR_VAL:
10785       if (exp->elts[*pos].opcode == OP_TYPE)
10786         {
10787           if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
10788             LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
10789           *pos += 3;
10790         }
10791       else
10792         print_subexp (exp, pos, stream, PREC_SUFFIX);
10793       fprintf_filtered (stream, "'%s", ada_attribute_name (op));
10794       if (nargs > 1)
10795         {
10796           int tem;
10797           for (tem = 1; tem < nargs; tem += 1)
10798             {
10799               fputs_filtered ((tem == 1) ? " (" : ", ", stream);
10800               print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
10801             }
10802           fputs_filtered (")", stream);
10803         }
10804       return;
10805
10806     case UNOP_QUAL:
10807       type_print (exp->elts[pc + 1].type, "", stream, 0);
10808       fputs_filtered ("'(", stream);
10809       print_subexp (exp, pos, stream, PREC_PREFIX);
10810       fputs_filtered (")", stream);
10811       return;
10812
10813     case UNOP_IN_RANGE:
10814       /* XXX: sprint_subexp */
10815       print_subexp (exp, pos, stream, PREC_SUFFIX);
10816       fputs_filtered (" in ", stream);
10817       LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
10818       return;
10819
10820     case OP_DISCRETE_RANGE:
10821       print_subexp (exp, pos, stream, PREC_SUFFIX);
10822       fputs_filtered ("..", stream);
10823       print_subexp (exp, pos, stream, PREC_SUFFIX);
10824       return;
10825
10826     case OP_OTHERS:
10827       fputs_filtered ("others => ", stream);
10828       print_subexp (exp, pos, stream, PREC_SUFFIX);
10829       return;
10830
10831     case OP_CHOICES:
10832       for (i = 0; i < nargs-1; i += 1)
10833         {
10834           if (i > 0)
10835             fputs_filtered ("|", stream);
10836           print_subexp (exp, pos, stream, PREC_SUFFIX);
10837         }
10838       fputs_filtered (" => ", stream);
10839       print_subexp (exp, pos, stream, PREC_SUFFIX);
10840       return;
10841       
10842     case OP_POSITIONAL:
10843       print_subexp (exp, pos, stream, PREC_SUFFIX);
10844       return;
10845
10846     case OP_AGGREGATE:
10847       fputs_filtered ("(", stream);
10848       for (i = 0; i < nargs; i += 1)
10849         {
10850           if (i > 0)
10851             fputs_filtered (", ", stream);
10852           print_subexp (exp, pos, stream, PREC_SUFFIX);
10853         }
10854       fputs_filtered (")", stream);
10855       return;
10856     }
10857 }
10858
10859 /* Table mapping opcodes into strings for printing operators
10860    and precedences of the operators.  */
10861
10862 static const struct op_print ada_op_print_tab[] = {
10863   {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
10864   {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
10865   {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
10866   {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
10867   {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
10868   {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
10869   {"=", BINOP_EQUAL, PREC_EQUAL, 0},
10870   {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
10871   {"<=", BINOP_LEQ, PREC_ORDER, 0},
10872   {">=", BINOP_GEQ, PREC_ORDER, 0},
10873   {">", BINOP_GTR, PREC_ORDER, 0},
10874   {"<", BINOP_LESS, PREC_ORDER, 0},
10875   {">>", BINOP_RSH, PREC_SHIFT, 0},
10876   {"<<", BINOP_LSH, PREC_SHIFT, 0},
10877   {"+", BINOP_ADD, PREC_ADD, 0},
10878   {"-", BINOP_SUB, PREC_ADD, 0},
10879   {"&", BINOP_CONCAT, PREC_ADD, 0},
10880   {"*", BINOP_MUL, PREC_MUL, 0},
10881   {"/", BINOP_DIV, PREC_MUL, 0},
10882   {"rem", BINOP_REM, PREC_MUL, 0},
10883   {"mod", BINOP_MOD, PREC_MUL, 0},
10884   {"**", BINOP_EXP, PREC_REPEAT, 0},
10885   {"@", BINOP_REPEAT, PREC_REPEAT, 0},
10886   {"-", UNOP_NEG, PREC_PREFIX, 0},
10887   {"+", UNOP_PLUS, PREC_PREFIX, 0},
10888   {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
10889   {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
10890   {"abs ", UNOP_ABS, PREC_PREFIX, 0},
10891   {".all", UNOP_IND, PREC_SUFFIX, 1},
10892   {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
10893   {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
10894   {NULL, 0, 0, 0}
10895 };
10896 \f
10897 enum ada_primitive_types {
10898   ada_primitive_type_int,
10899   ada_primitive_type_long,
10900   ada_primitive_type_short,
10901   ada_primitive_type_char,
10902   ada_primitive_type_float,
10903   ada_primitive_type_double,
10904   ada_primitive_type_void,
10905   ada_primitive_type_long_long,
10906   ada_primitive_type_long_double,
10907   ada_primitive_type_natural,
10908   ada_primitive_type_positive,
10909   ada_primitive_type_system_address,
10910   nr_ada_primitive_types
10911 };
10912
10913 static void
10914 ada_language_arch_info (struct gdbarch *gdbarch,
10915                         struct language_arch_info *lai)
10916 {
10917   const struct builtin_type *builtin = builtin_type (gdbarch);
10918   lai->primitive_type_vector
10919     = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
10920                               struct type *);
10921   lai->primitive_type_vector [ada_primitive_type_int] =
10922     init_type (TYPE_CODE_INT,
10923                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10924                0, "integer", (struct objfile *) NULL);
10925   lai->primitive_type_vector [ada_primitive_type_long] =
10926     init_type (TYPE_CODE_INT,
10927                gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT,
10928                0, "long_integer", (struct objfile *) NULL);
10929   lai->primitive_type_vector [ada_primitive_type_short] =
10930     init_type (TYPE_CODE_INT,
10931                gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT,
10932                0, "short_integer", (struct objfile *) NULL);
10933   lai->string_char_type = 
10934     lai->primitive_type_vector [ada_primitive_type_char] =
10935     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
10936                0, "character", (struct objfile *) NULL);
10937   lai->primitive_type_vector [ada_primitive_type_float] =
10938     init_type (TYPE_CODE_FLT,
10939                gdbarch_float_bit (gdbarch)/ TARGET_CHAR_BIT,
10940                0, "float", (struct objfile *) NULL);
10941   lai->primitive_type_vector [ada_primitive_type_double] =
10942     init_type (TYPE_CODE_FLT,
10943                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10944                0, "long_float", (struct objfile *) NULL);
10945   lai->primitive_type_vector [ada_primitive_type_long_long] =
10946     init_type (TYPE_CODE_INT, 
10947                gdbarch_long_long_bit (gdbarch) / TARGET_CHAR_BIT,
10948                0, "long_long_integer", (struct objfile *) NULL);
10949   lai->primitive_type_vector [ada_primitive_type_long_double] =
10950     init_type (TYPE_CODE_FLT,
10951                gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT,
10952                0, "long_long_float", (struct objfile *) NULL);
10953   lai->primitive_type_vector [ada_primitive_type_natural] =
10954     init_type (TYPE_CODE_INT,
10955                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10956                0, "natural", (struct objfile *) NULL);
10957   lai->primitive_type_vector [ada_primitive_type_positive] =
10958     init_type (TYPE_CODE_INT,
10959                gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
10960                0, "positive", (struct objfile *) NULL);
10961   lai->primitive_type_vector [ada_primitive_type_void] = builtin->builtin_void;
10962
10963   lai->primitive_type_vector [ada_primitive_type_system_address] =
10964     lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
10965                                     (struct objfile *) NULL));
10966   TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
10967     = "system__address";
10968 }
10969 \f
10970                                 /* Language vector */
10971
10972 /* Not really used, but needed in the ada_language_defn.  */
10973
10974 static void
10975 emit_char (int c, struct ui_file *stream, int quoter)
10976 {
10977   ada_emit_char (c, stream, quoter, 1);
10978 }
10979
10980 static int
10981 parse (void)
10982 {
10983   warnings_issued = 0;
10984   return ada_parse ();
10985 }
10986
10987 static const struct exp_descriptor ada_exp_descriptor = {
10988   ada_print_subexp,
10989   ada_operator_length,
10990   ada_op_name,
10991   ada_dump_subexp_body,
10992   ada_evaluate_subexp
10993 };
10994
10995 const struct language_defn ada_language_defn = {
10996   "ada",                        /* Language name */
10997   language_ada,
10998   range_check_off,
10999   type_check_off,
11000   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
11001                                    that's not quite what this means.  */
11002   array_row_major,
11003   &ada_exp_descriptor,
11004   parse,
11005   ada_error,
11006   resolve,
11007   ada_printchar,                /* Print a character constant */
11008   ada_printstr,                 /* Function to print string constant */
11009   emit_char,                    /* Function to print single char (not used) */
11010   ada_print_type,               /* Print a type using appropriate syntax */
11011   ada_val_print,                /* Print a value using appropriate syntax */
11012   ada_value_print,              /* Print a top-level value */
11013   NULL,                         /* Language specific skip_trampoline */
11014   NULL,                         /* value_of_this */
11015   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
11016   basic_lookup_transparent_type,        /* lookup_transparent_type */
11017   ada_la_decode,                /* Language specific symbol demangler */
11018   NULL,                         /* Language specific class_name_from_physname */
11019   ada_op_print_tab,             /* expression operators for printing */
11020   0,                            /* c-style arrays */
11021   1,                            /* String lower bound */
11022   ada_get_gdb_completer_word_break_characters,
11023   ada_make_symbol_completion_list,
11024   ada_language_arch_info,
11025   ada_print_array_index,
11026   default_pass_by_reference,
11027   LANG_MAGIC
11028 };
11029
11030 void
11031 _initialize_ada_language (void)
11032 {
11033   add_language (&ada_language_defn);
11034
11035   varsize_limit = 65536;
11036
11037   obstack_init (&symbol_list_obstack);
11038
11039   decoded_names_store = htab_create_alloc
11040     (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11041      NULL, xcalloc, xfree);
11042
11043   observer_attach_executable_changed (ada_executable_changed_observer);
11044 }