]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2014-07-16 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Jul 2014 13:53:37 +0000 (13:53 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Jul 2014 13:53:37 +0000 (13:53 +0000)
* a-coinho.adb, a-coinho-shared.adb, a-coinho-shared.ads: Minor
reformatting.

2014-07-16  Ed Schonberg  <schonberg@adacore.com>

* a-cohase.ads: Type Iterator must be controlled, so that the
tampering bit is properly set through an iteration.
* a-cohase.adb: Add Finalize operation for type Iterator.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212643 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/a-cohase.adb
gcc/ada/a-cohase.ads
gcc/ada/a-coinho-shared.adb
gcc/ada/a-coinho-shared.ads
gcc/ada/a-coinho.adb

index e18dff08d6bea0f7bb9fcc9c078a1d4b487f85ec..2ff72261881c01c5f656a56c0c56374a48c6e789 100644 (file)
@@ -1,3 +1,14 @@
+2014-07-16  Robert Dewar  <dewar@adacore.com>
+
+       * a-coinho.adb, a-coinho-shared.adb, a-coinho-shared.ads: Minor
+       reformatting.
+
+2014-07-16  Ed Schonberg  <schonberg@adacore.com>
+
+       * a-cohase.ads: Type Iterator must be controlled, so that the
+       tampering bit is properly set through an iteration.
+       * a-cohase.adb: Add Finalize operation for type Iterator.
+
 2014-07-16  Ed Schonberg  <schonberg@adacore.com>
 
        * a-coinho-shared.adb, a-coinho-shared.ads: Proper structures for
index 129ad6a71206fccdf38ece7d5f19468fd68764ae..1c3db68f8074caa032c82fefab33d54b576288c0 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2004-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2004-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -601,6 +601,17 @@ package body Ada.Containers.Hashed_Sets is
       end if;
    end Finalize;
 
+   procedure Finalize (Object : in out Iterator) is
+   begin
+      if Object.Container /= null then
+         declare
+            B : Natural renames Object.Container.HT.Busy;
+         begin
+            B := B - 1;
+         end;
+      end if;
+   end Finalize;
+
    ----------
    -- Find --
    ----------
@@ -1029,8 +1040,12 @@ package body Ada.Containers.Hashed_Sets is
    function Iterate
      (Container : Set) return Set_Iterator_Interfaces.Forward_Iterator'Class
    is
+      B  : Natural renames Container'Unrestricted_Access.all.HT.Busy;
    begin
-      return Iterator'(Container => Container'Unrestricted_Access);
+      B := B + 1;
+      return It : constant Iterator :=
+         Iterator'(Limited_Controlled with
+              Container => Container'Unrestricted_Access);
    end Iterate;
 
    ------------
index 2931800aaf883ef0512f4c49363cfcf3d428cfa2..9e4ebc173f585431f05ef57a0fe3e8865f2aabac 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2004-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2004-2014, Free Software Foundation, Inc.         --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT. The copyright notice above, and the license provisions that follow --
@@ -543,8 +543,8 @@ private
 
    No_Element : constant Cursor := (Container => null, Node => null);
 
-   type Iterator is limited new
-     Set_Iterator_Interfaces.Forward_Iterator with record
+   type Iterator is new Limited_Controlled
+     and Set_Iterator_Interfaces.Forward_Iterator with record
         Container : Set_Access;
      end record;
 
@@ -553,5 +553,6 @@ private
    overriding function Next
      (Object   : Iterator;
       Position : Cursor) return Cursor;
+   overriding procedure Finalize (Object : in out Iterator);
 
 end Ada.Containers.Hashed_Sets;
index c9f117ebcfea3532654b50f791533fb7798e680e..df2d55ad574eb2ae2c8db7dc4d9e0dad799d6516 100644 (file)
@@ -38,12 +38,13 @@ package body Ada.Containers.Indefinite_Holders is
 
    function "=" (Left, Right : Holder) return Boolean is
    begin
-      if Left.Reference = null and Right.Reference = null then
+      if Left.Reference = Right.Reference then
+         --  Covers both null and not null but the same shared object cases.
+
          return True;
 
       elsif Left.Reference /= null and Right.Reference /= null then
          return Left.Reference.Element.all = Right.Reference.Element.all;
-
       else
          return False;
       end if;
@@ -66,6 +67,7 @@ package body Ada.Containers.Indefinite_Holders is
    begin
       if Control.Container /= null then
          Reference (Control.Container.Reference);
+
          declare
             B : Natural renames Control.Container.Busy;
          begin
@@ -122,10 +124,9 @@ package body Ada.Containers.Indefinite_Holders is
               (Element => Container.Reference.Element.all'Access,
                Control => (Controlled with Container'Unrestricted_Access));
       B   : Natural renames Ref.Control.Container.Busy;
-
    begin
       Reference (Ref.Control.Container.Reference);
-         B := B + 1;
+      B := B + 1;
       return Ref;
    end Constant_Reference;
 
index 8294d8e6a270d2d973e4f05c6d5ec20cbfb75176..3e1ed18a4b0baf17aca22286cde0aed11d07fb40 100644 (file)
@@ -130,8 +130,7 @@ private
    overriding procedure Adjust (Container : in out Holder);
    overriding procedure Finalize (Container : in out Holder);
 
-   type Reference_Control_Type is new Controlled with
-   record
+   type Reference_Control_Type is new Controlled with record
       Container : Holder_Access;
    end record;
 
index 4cb717936d68702bcc7eebb1393a34474bd98c00..9fe4c143e4d637c6fe6990c4a7fbcb01e97c191b 100644 (file)
@@ -40,10 +40,8 @@ package body Ada.Containers.Indefinite_Holders is
    begin
       if Left.Element = null and Right.Element = null then
          return True;
-
       elsif Left.Element /= null and Right.Element /= null then
          return Left.Element.all = Right.Element.all;
-
       else
          return False;
       end if;