-- Finalize --
--------------
- overriding procedure Finalize
- (Collection : in out Finalization_Collection)
- is
+ procedure Finalize (Collection : in out Finalization_Collection) is
Curr_Ptr : Collection_Node_Ptr;
Exc_Occur : Exception_Occurrence;
Finalization_Exception_Raised : Boolean := False;
-- Initialize --
----------------
- overriding procedure Initialize
- (Collection : in out Finalization_Collection)
- is
+ procedure Initialize (Collection : in out Finalization_Collection) is
begin
-- The dummy head must point to itself in both directions
-- --
------------------------------------------------------------------------------
-with Ada.Finalization;
-
with System.OS_Locks;
with System.Storage_Elements;
-- This package encapsulates the types and operations used by the compiler
--- to support finalization of objects of Ada controlled types (types derived
--- from types Controlled and Limited_Controlled).
+-- to support finalization of objects of finalizable types (types derived
+-- from standard Ada types Controlled and Limited_Controlled, as well as
+-- types declared with the GNAT Finalizable aspect).
package System.Finalization_Primitives with Preelaborate is
-- object itself is managed via a Master_Node attached to its finalization
-- master.
- type Finalization_Collection is
- new Ada.Finalization.Limited_Controlled with private;
+ type Finalization_Collection is limited private
+ with Finalizable => (Initialize => Initialize,
+ Finalize => Finalize,
+ Relaxed_Finalization => Standard.False);
-- Objects of this type encapsulate a set of zero or more controlled
-- objects associated with an access type. The compiler ensures that
-- each finalization collection is in turn associated with a finalization
-- A reference to a collection. Since this type may not be used to
-- allocate objects, its storage size is zero.
- overriding procedure Initialize
- (Collection : in out Finalization_Collection);
+ procedure Initialize (Collection : in out Finalization_Collection);
-- Initializes the dummy head of a collection
- overriding procedure Finalize
- (Collection : in out Finalization_Collection);
+ procedure Finalize (Collection : in out Finalization_Collection);
-- Finalizes each object that has been associated with a finalization
-- collection, in some arbitrary order. Calls to this procedure with
-- a collection that has already been finalized have no effect.
-- Finalization collection type structure
- type Finalization_Collection is
- new Ada.Finalization.Limited_Controlled with
- record
+ type Finalization_Collection is limited record
Head : aliased Collection_Node;
-- The head of the circular doubly-linked list of collection nodes