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