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