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