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