static struct type * printable_val_type (struct type *type, char *valaddr) { return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL); }
static struct type * printable_val_type (struct type *type, const gdb_byte *valaddr) { return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1); }
void ada_print_type (struct type *type0, const char *varstring, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { struct type *type = ada_check_typedef (ada_get_base_type (type0)); char *type_name = decoded_type_name (type0); int is_var_decl = (varstring != NULL && varstring[0] != '\0'); if (type == NULL) { if (is_var_decl) fprintf_filtered (stream, "%.*s: ", ada_name_prefix_len (varstring), varstring); fprintf_filtered (stream, "<null type?>"); return; } if (show > 0) type = ada_check_typedef (type); if (is_var_decl && TYPE_CODE (type) != TYPE_CODE_FUNC) fprintf_filtered (stream, "%.*s: ", ada_name_prefix_len (varstring), varstring); if (type_name != NULL && show <= 0 && !ada_is_aligner_type (type)) { fprintf_filtered (stream, "%.*s", ada_name_prefix_len (type_name), type_name); return; } if (ada_is_aligner_type (type)) ada_print_type (ada_aligned_type (type), "", stream, show, level, flags); else if (ada_is_constrained_packed_array_type (type) && TYPE_CODE (type) != TYPE_CODE_PTR) print_array_type (type, stream, show, level, flags); else switch (TYPE_CODE (type)) { default: fprintf_filtered (stream, "<"); c_print_type (type, "", stream, show, level, flags); fprintf_filtered (stream, ">"); break; case TYPE_CODE_PTR: case TYPE_CODE_TYPEDEF: fprintf_filtered (stream, "access "); ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); break; case TYPE_CODE_REF: fprintf_filtered (stream, "<ref> "); ada_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); break; case TYPE_CODE_ARRAY: print_array_type (type, stream, show, level, flags); break; case TYPE_CODE_BOOL: fprintf_filtered (stream, "(false, true)"); break; case TYPE_CODE_INT: if (ada_is_fixed_point_type (type)) print_fixed_point_type (type, stream); else { const char *name = ada_type_name (type); if (!ada_is_range_type_name (name)) fprintf_filtered (stream, _("<%d-byte integer>"), TYPE_LENGTH (type)); else { fprintf_filtered (stream, "range "); print_range_type (type, stream); } } break; case TYPE_CODE_RANGE: if (ada_is_fixed_point_type (type)) print_fixed_point_type (type, stream); else if (ada_is_modular_type (type)) fprintf_filtered (stream, "mod %s", int_string (ada_modulus (type), 10, 0, 0, 1)); else { fprintf_filtered (stream, "range "); print_range (type, stream); } break; case TYPE_CODE_FLT: fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type)); break; case TYPE_CODE_ENUM: if (show < 0) fprintf_filtered (stream, "(...)"); else print_enum_type (type, stream); break; case TYPE_CODE_STRUCT: if (ada_is_array_descriptor_type (type)) print_array_type (type, stream, show, level, flags); else if (ada_is_bogus_array_descriptor (type)) fprintf_filtered (stream, _("array (?) of ? (<mal-formed descriptor>)")); else print_record_type (type, stream, show, level, flags); break; case TYPE_CODE_UNION: print_unchecked_union_type (type, stream, show, level, flags); break; case TYPE_CODE_FUNC: print_func_type (type, stream, varstring, flags); break; } }