diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-29 13:54:30 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-29 13:54:30 +0000 |
commit | 59f3e67584aedf0c02cf570274ba53d92e93cbf6 (patch) | |
tree | dd6c79976a1022d09f477d90a77c354e8c0153d6 /gcc/ada/s-finmas.ads | |
parent | a26164c22f21901275ca87582ce684f7824ee094 (diff) | |
download | gcc-59f3e67584aedf0c02cf570274ba53d92e93cbf6.tar.gz |
2011-08-29 Yannick Moy <moy@adacore.com>
* gnat1drv.adb (Adjust_Global_Switches): Restore expansion of tagged
types and dispatching calls in Alfa mode.
* lib-xref-alfa.adb (Collect_ALFA): Rewrite computation of
correspondance between body and spec scopes, to reuse utility functions
(Traverse_Declarations_Or_Statements): Protect access to body for stub
by testing the presence of the library unit for the body
* sem_ch6.adb (Set_Actual_Subtypes): take into account that in Alfa
mode the expansion of accept statements is skipped
* sem_util.adb, sem_util.ads (Unique_Entity): New function returning
the unique entity corresponding to the one returned by
Unique_Defining_Entity applied to the enclosing declaration of the
argument.
2011-08-29 Bob Duff <duff@adacore.com>
* treepr.ads: Improve debugging facilities. pn(x) no longer crashes in
gdb when x is not a node (it can be a node list, name_id, etc). pp is
an alias for pn. ppp is an alias for pt.
2011-08-29 Javier Miranda <miranda@adacore.com>
* exp_aggr.adb (Expand_Record_Aggregate): Use the top-level enclosing
aggregate to take a consistent decision on the need to convert into
assignments aggregates that initialize constant objects.
2011-08-29 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch4.adb (Expand_Allocator_Expression): Add a call to
Build_Allocate_Deallocate_Proc in order to handle allocation of
non-controlled objects on subpools.
* impunit.adb: Remove s-finmas and s-spsufi since they were never meant
to be end-user visible.
* s-finmas.adb: Add with and use clause for System.HTable.
Add an instantiation of Simple_HTable which provides a mapping between
the address of a controlled object and the corresponding
Finalize_Address used to clean up the object. The table is used when a
master is operating in heterogeneous mode.
(Attach): Explain why the input node is not verified on being already
attached.
(Delete_Finalize_Address): New routine.
(Detach): Add pragma Assert which ensures that a node is already
attached.
(Finalize): Add local variable Cleanup. Rewrite the iteration scheme
since nodes are no longer removed on traversal. Explain why node
detachment is undesirable in this case.
(Get_Finalize_Address): New routine.
(Hash): New routine.
(Is_Empty_List): Removed.
(pm): Renamed to Print_Master. Add output for discriminant
Is_Homogeneous.
Comment reformatting.
(Set_Finalize_Address (Address, Finalize_Address_Ptr)): New routine.
* s-finmas.ads: Various comments additions / improvements.
Type Finalization_Master has a discriminant which determines the mode of
operation.
(Delete_Finalize_Address): New routine.
(Get_Finalize_Address): New routine.
(pm): Renamed to Print_Master.
(Set_Finalize_Address (Address, Finalize_Address_Ptr)): New routine.
* s-stposu.adb: Add with clause for System.Address_Image; Add with and
use clause for System.IO.
(Allocate_Any_Controlled): Add machinery to set TSS primitive
Finalize_Address depending on the mode of allocation and the mode of
the master.
(Deallocate_Any_Controlled): Remove the relation pair object -
Finalize_Address regardless of the master mode. Add comment explaining
the reason.
(Detach): Ensure that fields Prev and Next are null after detachment.
(Finalize_Pool): Remove local variable Next_Ptr. Rewrite the iteration
scheme to check whether the list of subpools is empty. There is no
longer need to store the next subpool or advance the current pointer.
(Is_Empty_List): New routine.
(Print_Pool): New routine.
(Print_Subpool): New routine.
* s-stposu.ads: Various comments additions / improvements.
Field Master of type Root_Subpool is now a heterogeneous collection.
(Print_Pool): New routine.
(Print_Subpool): New routine.
2011-08-29 Ed Schonberg <schonberg@adacore.com>
* exp_ch5.adb (Expand_N_Iterator_Loop): Implement Ada2012 loop iterator
forms, using aspects of container types.
* sem_ch3.adb (Find_Type_Name): Preserve Has_Delayed_Aspects and
Has_Implicit_Dereference flags, that may be set on the partial view.
* sem_ch4.adb (Process_Overloaded_Indexed_Component): Prefix may be a
container type with an indexing aspect.
(Analyze_Quantified_Expression): Analyze construct with expansion
disabled, because it will be rewritten as a loop during expansion.
(Try_Container_Indexing): The prefix itself may be a container type
with an indexing aspect, as with a vector of vectors.
* sem_ch5.adb (Analyze_Iteration_Scheme): In a generic context, analyze
the original doamin of iteration, for name capture.
(Analyze_Iterator_Specification): If the domain is an expression that
needs finalization, create a separate declaration for it.
For an iterator with "of" retrieve default iterator info from aspect of
container type. For "in" iterator, retrieve type of Iterate function.
* sem_ch13.adb (Check_Iterator_Function): Fix typo.
(Check_Aspect_At_End_Of_Declaration): Make type unfrozen before
analysis, to prevent spurious errors about late attributes.
* sprint.adb: Handle quantified expression with either loop or iterator
specification.
* a-convec.ads, a-convec.adb: Iterate function returns a reversible
iterator.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178235 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-finmas.ads')
-rw-r--r-- | gcc/ada/s-finmas.ads | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/ada/s-finmas.ads b/gcc/ada/s-finmas.ads index 87a607678bc..6dd5e38fba7 100644 --- a/gcc/ada/s-finmas.ads +++ b/gcc/ada/s-finmas.ads @@ -31,7 +31,6 @@ with Ada.Finalization; with Ada.Unchecked_Conversion; - with System.Storage_Elements; with System.Storage_Pools; @@ -69,9 +68,10 @@ package System.Finalization_Masters is -- Finalization master type structure. A unique master is associated with -- each access-to-controlled or access-to-class-wide type. Masters also act - -- as components of subpools. + -- as components of subpools. By default, a master contains objects of the + -- same designated type but it may also accomodate heterogeneous objects. - type Finalization_Master is + type Finalization_Master (Is_Homogeneous : Boolean := True) is new Ada.Finalization.Limited_Controlled with record Base_Pool : Any_Storage_Pool_Ptr := null; @@ -83,7 +83,8 @@ package System.Finalization_Masters is -- objects allocated in a [sub]pool. Finalize_Address : Finalize_Address_Ptr := null; - -- A reference to the routine reponsible for object finalization + -- A reference to the routine reponsible for object finalization. This + -- is used only when the master is in homogeneous mode. Finalization_Started : Boolean := False; pragma Atomic (Finalization_Started); @@ -114,6 +115,10 @@ package System.Finalization_Masters is -- Return a reference to the underlying storage pool on which the master -- operates. + procedure Delete_Finalize_Address (Obj : System.Address); + -- Destroy the relation pair object - Finalize_Address from the internal + -- hash table. + procedure Detach (N : not null FM_Node_Ptr); -- Remove a node from an arbitrary finalization master @@ -122,6 +127,11 @@ package System.Finalization_Masters is -- the list of allocated controlled objects, finalizing each one by calling -- its specific Finalize_Address. In the end, deallocate the dummy head. + function Get_Finalize_Address + (Obj : System.Address) return Finalize_Address_Ptr; + -- Retrieve the Finalize_Address primitive associated with a particular + -- object. + function Header_Offset return System.Storage_Elements.Storage_Offset; -- Return the size of type FM_Node as Storage_Offset @@ -131,7 +141,7 @@ package System.Finalization_Masters is overriding procedure Initialize (Master : in out Finalization_Master); -- Initialize the dummy head of a finalization master - procedure pm (Master : Finalization_Master); + procedure Print_Master (Master : Finalization_Master); -- Debug routine, outputs the contents of a master procedure Set_Base_Pool @@ -144,4 +154,9 @@ package System.Finalization_Masters is Fin_Addr_Ptr : Finalize_Address_Ptr); -- Set the clean up routine of a finalization master + procedure Set_Finalize_Address + (Obj : System.Address; + Fin_Addr_Ptr : Finalize_Address_Ptr); + -- Add a relation pair object - Finalize_Address to the internal hash table + end System.Finalization_Masters; |