Here are the notable omissions from the subset:
'Lengthon array objects (not on types and subtypes).
'Rangeon array objects (not subtypes), but only as the right operand of the membership (
'Unrestricted_Access(a GNAT extension).
Characters.Latin_1are not available and concatenation is not implemented. Thus, escape characters in strings are not currently available.
=’ and ‘
/=’) on arrays test for bitwise equality of representations. They will generally work correctly for strings and arrays whose elements have integer or enumeration types. They may not work correctly for arrays whose element types have user-defined equality, for arrays of real values (in particular, IEEE-conformant floating point, because of negative zeroes and NaNs), and for arrays whose elements contain unused bits with indeterminate values.
not, and relational tests other than equality) are not implemented.
There is limited support for array and record aggregates. They are permitted only on the right sides of assignments, as in these examples:
(gdb) set An_Array := (1, 2, 3, 4, 5, 6) (gdb) set An_Array := (1, others => 0) (gdb) set An_Array := (0|4 => 1, 1..3 => 2, 5 => 6) (gdb) set A_2D_Array := ((1, 2, 3), (4, 5, 6), (7, 8, 9)) (gdb) set A_Record := (1, "Peter", True); (gdb) set A_Record := (Name => "Peter", Id => 1, Alive => True)
discriminant’s value by assigning an aggregate has an
undefined effect if that discriminant is used within the record.
However, you can first modify discriminants by directly assigning to
them (which normally would not be allowed in Ada), and then performing an
aggregate assignment. For example, given a variable
declared to have a type such as:
type Rec (Len : Small_Integer := 0) is record Id : Integer; Vals : IntArray (1 .. Len); end record;
you can assign a value with a different size of
Vals with two
(gdb) set A_Rec.Len := 4 (gdb) set A_Rec := (Id => 42, Vals => (1, 2, 3, 4))
As this example also illustrates, GDB is very loose about the usual
rules concerning aggregates. You may leave out some of the
components of an array or record aggregate (such as the
component in the assignment to
A_Rec above); they will retain their
original values upon assignment. You may freely use dynamic values as
indices in component associations. You may even use overlapping or
redundant component associations, although which component values are
assigned in such cases is not defined.
newoperator is not implemented.
False, when not part of a qualified name, are interpreted as if implicitly prefixed by
Standard, regardless of context. Should your program redefine these names in a package or procedure (at best a dubious practice), you will have to use fully qualified names to access their new definitions.