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