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