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