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