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