toolchain/share/doc/gdb/Omissions-from-Ada.html

160 lines
6.9 KiB
HTML

<html lang="en">
<head>
<title>Omissions from Ada - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Ada.html#Ada" title="Ada">
<link rel="prev" href="Ada-Mode-Intro.html#Ada-Mode-Intro" title="Ada Mode Intro">
<link rel="next" href="Additions-to-Ada.html#Additions-to-Ada" title="Additions to Ada">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Omissions-from-Ada"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Additions-to-Ada.html#Additions-to-Ada">Additions to Ada</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Ada-Mode-Intro.html#Ada-Mode-Intro">Ada Mode Intro</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Ada.html#Ada">Ada</a>
<hr>
</div>
<h5 class="subsubsection">15.4.10.2 Omissions from Ada</h5>
<p><a name="index-Ada_002c-omissions-from-1059"></a>
Here are the notable omissions from the subset:
<ul>
<li>Only a subset of the attributes are supported:
<ul>
<li><tt>'First</tt>, <tt>'Last</tt>, and <tt>'Length</tt>
on array objects (not on types and subtypes).
<li><tt>'Min</tt> and <tt>'Max</tt>.
<li><tt>'Pos</tt> and <tt>'Val</tt>.
<li><tt>'Tag</tt>.
<li><tt>'Range</tt> on array objects (not subtypes), but only as the right
operand of the membership (<code>in</code>) operator.
<li><tt>'Access</tt>, <tt>'Unchecked_Access</tt>, and
<tt>'Unrestricted_Access</tt> (a GNAT extension).
<li><tt>'Address</tt>.
</ul>
<li>The names in
<code>Characters.Latin_1</code> are not available and
concatenation is not implemented. Thus, escape characters in strings are
not currently available.
<li>Equality tests (&lsquo;<samp><span class="samp">=</span></samp>&rsquo; and &lsquo;<samp><span class="samp">/=</span></samp>&rsquo;) 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.
<li>The other component-by-component array operations (<code>and</code>, <code>or</code>,
<code>xor</code>, <code>not</code>, and relational tests other than equality)
are not implemented.
<li><a name="index-array-aggregates-_0028Ada_0029-1060"></a><a name="index-record-aggregates-_0028Ada_0029-1061"></a><a name="index-aggregates-_0028Ada_0029-1062"></a>There is limited support for array and record aggregates. They are
permitted only on the right sides of assignments, as in these examples:
<pre class="smallexample"> (gdb) set An_Array := (1, 2, 3, 4, 5, 6)
(gdb) set An_Array := (1, others =&gt; 0)
(gdb) set An_Array := (0|4 =&gt; 1, 1..3 =&gt; 2, 5 =&gt; 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 =&gt; "Peter", Id =&gt; 1, Alive =&gt; True)
</pre>
<p>Changing a
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 <code>A_Rec</code>
declared to have a type such as:
<pre class="smallexample"> type Rec (Len : Small_Integer := 0) is record
Id : Integer;
Vals : IntArray (1 .. Len);
end record;
</pre>
<p>you can assign a value with a different size of <code>Vals</code> with two
assignments:
<pre class="smallexample"> (gdb) set A_Rec.Len := 4
(gdb) set A_Rec := (Id =&gt; 42, Vals =&gt; (1, 2, 3, 4))
</pre>
<p>As this example also illustrates, <span class="sc">gdb</span> 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 <code>Len</code>
component in the assignment to <code>A_Rec</code> 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.
<li>Calls to dispatching subprograms are not implemented.
<li>The overloading algorithm is much more limited (i.e., less selective)
than that of real Ada. It makes only limited use of the context in
which a subexpression appears to resolve its meaning, and it is much
looser in its rules for allowing type matches. As a result, some
function calls will be ambiguous, and the user will be asked to choose
the proper resolution.
<li>The <code>new</code> operator is not implemented.
<li>Entry calls are not implemented.
<li>Aside from printing, arithmetic operations on the native VAX floating-point
formats are not supported.
<li>It is not possible to slice a packed array.
<li>The names <code>True</code> and <code>False</code>, when not part of a qualified name,
are interpreted as if implicitly prefixed by <code>Standard</code>, 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.
</ul>
</body></html>