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