6.3.2 Inline Expansion of Subprograms
[Subprograms may be expanded in line at the call
site.]
Syntax
{program
unit pragma (Inline) [partial]} {pragma,
program unit (Inline) [partial]} The form
of a
pragma
Inline, which is a program unit pragma (see
10.1.5),
is as follows:
Legality Rules
The
pragma
shall apply to one or more callable entities or generic subprograms.
Static Semantics
If a
pragma
Inline applies to a callable entity, this indicates that inline expansion
is desired for all calls to that entity. If a
pragma
Inline applies to a generic subprogram, this indicates that inline expansion
is desired for all calls to all instances of that generic subprogram.
Ramification:
Note that inline expansion is desired no matter what name is used
in the call. This allows one to request inlining for only one of several
overloaded subprograms as follows:
package IO is
procedure Put(X : in Integer);
procedure Put(X : in String);
procedure Put(X : in Character);
private
procedure Character_Put(X : in Character) renames Put;
pragma Inline(Character_Put);
end IO;
with IO; use IO;
procedure Main is
I : Integer;
C : Character;
begin
...
Put(C); -- Inline expansion is desired.
Put(I); -- Inline expansion is NOT desired.
end Main;
Ramification: The meaning of a subprogram
can be changed by a
pragma
Inline only in the presence of failing checks (see
11.6).
Implementation Permissions
For each call, an implementation is free to follow
or to ignore the recommendation expressed by the
pragma.
Ramification: Note, in particular, that
the recommendation cannot always be followed for a recursive call, and
is often infeasible for entries. Note also that the implementation can
inline calls even when no such desire was expressed by a pragma, so long
as the semantics of the program remains unchanged.
Reason: This is allowed for Ada 83 compatibility.
This is only a permission as this usage is considered obsolescent.
6 The
name
in a
pragma
Inline can denote more than one entity in the case of overloading. Such
a
pragma applies
to all of the denoted entities.
Incompatibilities With Ada 83
{
AI95-00309-01}
{
incompatibilities with Ada 83}
A pragma Inline
cannot refer to a
subprogram_body
outside of that body. The pragma can be given inside of the subprogram
body. Ada 2005 adds an Implementation Permission to allow this usage
for compatibility (and Ada 95 implementations also can use this permission),
but implementations do not have to allow such
pragmas.
Extensions to Ada 83
Extensions to Ada 95