Implement real literal extension for Ada
authorTom Tromey <tromey@adacore.com>
Wed, 16 Feb 2022 17:07:18 +0000 (10:07 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 7 Mar 2022 15:27:38 +0000 (08:27 -0700)
commit63fc2437deda87a566059444630ccc402945ae99
treeff778d7fab7aea1716f23f4c36c5553d9c5c1449
parentc9bfa277e9e6467dad91641357e09bf0a7ac0dc2
Implement real literal extension for Ada

Sometimes it is convenient to be able to specify the exact bits of a
floating-point literal.  For example, you may want to set a
floating-point register to a denormalized value, or to a particular
NaN.

In C, you can do this by combining the "{}" cast with an array
literal, like:

    (gdb) p {double}{0x576488BDD2AE9FFE}
    $1 = 9.8765449999999996e+112

This patch adds a somewhat similar idea to Ada.  It extends the lexer
to allow "l" and "f" suffixes in a based literal.  The "f" indicates a
floating-point literal, and the "l"s control the size of the
floating-point type.

Note that this differs from Ada's based real literals.  I believe
those can also be used to control the bits of a floating-point value,
but they are a bit more cumbersome to use (simplest is binary but
that's also very lengthy).  Also, these aren't implemented in GDB.

I chose not to allow this extension to work with based integer
literals with exponents.  That didn't seem very useful.
gdb/NEWS
gdb/ada-lex.l
gdb/doc/gdb.texinfo
gdb/testsuite/gdb.ada/float-bits.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/float-bits/prog.adb [new file with mode: 0644]