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