/* Support for printing Ada types for GDB, the GNU debugger.
- Copyright (C) 1986-2017 Free Software Foundation, Inc.
+ Copyright (C) 1986-2019 Free Software Foundation, Inc.
This file is part of GDB.
#include "language.h"
#include "demangle.h"
#include "c-lang.h"
+#include "cli/cli-style.h"
#include "typeprint.h"
+#include "target-float.h"
#include "ada-lang.h"
#include <ctype.h>
case TYPE_CODE_RANGE:
case TYPE_CODE_ENUM:
{
- struct type *target_type;
LONGEST lo = 0, hi = 0; /* init for gcc -Wall */
int got_error = 0;
- target_type = TYPE_TARGET_TYPE (type);
- if (target_type == NULL)
- target_type = type;
-
- TRY
+ try
{
lo = ada_discrete_type_low_bound (type);
hi = ada_discrete_type_high_bound (type);
}
- CATCH (e, RETURN_MASK_ERROR)
+ catch (const gdb_exception_error &e)
{
/* This can happen when the range is dynamic. Sometimes,
resolving dynamic property values requires us to have
fprintf_filtered (stream, "<>");
got_error = 1;
}
- END_CATCH
if (!got_error)
{
- ada_print_scalar (target_type, lo, stream);
+ ada_print_scalar (type, lo, stream);
fprintf_filtered (stream, " .. ");
- ada_print_scalar (target_type, hi, stream);
+ ada_print_scalar (type, hi, stream);
}
}
break;
static void
print_fixed_point_type (struct type *type, struct ui_file *stream)
{
- DOUBLEST delta = ada_delta (type);
- DOUBLEST small = ada_fixed_to_float (type, 1);
+ struct value *delta = ada_delta (type);
+ struct value *small = ada_scaling_factor (type);
- if (delta < 0.0)
+ if (delta == nullptr)
fprintf_filtered (stream, "delta ??");
else
{
- fprintf_filtered (stream, "delta %g", (double) delta);
- if (delta != small)
- fprintf_filtered (stream, " <'small = %g>", (double) small);
+ std::string str;
+ str = target_float_to_string (value_contents (delta),
+ value_type (delta), "%g");
+ fprintf_filtered (stream, "delta %s", str.c_str());
+ if (!value_equal (delta, small))
+ {
+ str = target_float_to_string (value_contents (small),
+ value_type (small), "%g");
+ fprintf_filtered (stream, " <'small = %s>", str.c_str());
+ }
}
}
fprintf_filtered (stream, "function");
if (name != NULL && name[0] != '\0')
- fprintf_filtered (stream, " %s", name);
+ {
+ fputs_filtered (" ", stream);
+ fputs_styled (name, function_name_style.style (), stream);
+ }
if (len > 0)
{
const char *name = ada_type_name (type);
if (!ada_is_range_type_name (name))
- fprintf_filtered (stream, _("<%d-byte integer>"),
- TYPE_LENGTH (type));
+ fprintf_filtered (stream, _("<%s-byte integer>"),
+ pulongest (TYPE_LENGTH (type)));
else
{
fprintf_filtered (stream, "range ");
}
break;
case TYPE_CODE_FLT:
- fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type));
+ fprintf_filtered (stream, _("<%s-byte float>"),
+ pulongest (TYPE_LENGTH (type)));
break;
case TYPE_CODE_ENUM:
if (show < 0)