aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Duff <duff@adacore.com>2017-04-27 12:10:04 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2017-04-27 14:10:04 +0200
commita3ef4e650e37bb768468d18d7c0f0b45298c3452 (patch)
tree3657e85cdcbfea67ca837f008807519105a2fe24
parentde33eb3865a19e2fcc527de18e611de0703cb83a (diff)
downloadgcc-a3ef4e650e37bb768468d18d7c0f0b45298c3452.zip
gcc-a3ef4e650e37bb768468d18d7c0f0b45298c3452.tar.gz
gcc-a3ef4e650e37bb768468d18d7c0f0b45298c3452.tar.bz2
g-dyntab.ads, [...]: Default for Table_Low_Bound.
2017-04-27 Bob Duff <duff@adacore.com> * g-dyntab.ads, g-dyntab.adb: Default for Table_Low_Bound. Rename Empty --> Empty_Table_Ptr, and don't duplicate code for it. Free renames Init, since they do the same thing. * g-table.ads: Default for Table_Low_Bound. * table.ads: Default for Table_Low_Bound, Table_Initial, and Table_Increment. From-SVN: r247324
-rw-r--r--gcc/ada/ChangeLog9
-rw-r--r--gcc/ada/g-dyntab.adb61
-rw-r--r--gcc/ada/g-dyntab.ads12
-rw-r--r--gcc/ada/g-table.ads6
-rw-r--r--gcc/ada/table.ads6
5 files changed, 45 insertions, 49 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 7c5953f..ce6a02c 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,14 @@
2017-04-27 Bob Duff <duff@adacore.com>
+ * g-dyntab.ads, g-dyntab.adb: Default for Table_Low_Bound.
+ Rename Empty --> Empty_Table_Ptr, and don't duplicate code for it.
+ Free renames Init, since they do the same thing.
+ * g-table.ads: Default for Table_Low_Bound.
+ * table.ads: Default for Table_Low_Bound, Table_Initial, and
+ Table_Increment.
+
+2017-04-27 Bob Duff <duff@adacore.com>
+
* g-dyntab.ads, g-dyntab.adb: Add assertions to subprograms that
can reallocate.
* atree.adb, elists.adb, fname-uf.adb, ghost.adb, inline.adb,
diff --git a/gcc/ada/g-dyntab.adb b/gcc/ada/g-dyntab.adb
index 60bf3455..1b53936 100644
--- a/gcc/ada/g-dyntab.adb
+++ b/gcc/ada/g-dyntab.adb
@@ -38,9 +38,6 @@ with System;
package body GNAT.Dynamic_Tables is
- Empty : constant Table_Ptr :=
- Empty_Table_Array_Ptr_To_Table_Ptr (Empty_Table_Array'Access);
-
-----------------------
-- Local Subprograms --
-----------------------
@@ -117,32 +114,6 @@ package body GNAT.Dynamic_Tables is
end For_Each;
----------
- -- Free --
- ----------
-
- procedure Free (T : in out Instance) is
- pragma Assert (not T.Locked);
- subtype Alloc_Type is Table_Type (First .. T.P.Last_Allocated);
- type Alloc_Ptr is access all Alloc_Type;
-
- procedure Free is new Ada.Unchecked_Deallocation (Alloc_Type, Alloc_Ptr);
- function To_Alloc_Ptr is
- new Ada.Unchecked_Conversion (Table_Ptr, Alloc_Ptr);
-
- Temp : Alloc_Ptr := To_Alloc_Ptr (T.Table);
-
- begin
- if T.Table = Empty then
- pragma Assert (T.P = (Last_Allocated | Last => First - 1));
- null;
- else
- Free (Temp);
- T.Table := Empty;
- T.P := (Last_Allocated | Last => First - 1);
- end if;
- end Free;
-
- ----------
-- Grow --
----------
@@ -169,7 +140,7 @@ package body GNAT.Dynamic_Tables is
New_Allocated_Length : Table_Length_Type;
begin
- if T.Table = Empty then
+ if T.Table = Empty_Table_Ptr then
New_Allocated_Length := Table_Length_Type (Table_Initial);
else
New_Allocated_Length :=
@@ -213,7 +184,7 @@ package body GNAT.Dynamic_Tables is
New_Table : constant Alloc_Ptr := new Alloc_Type;
begin
- if T.Table /= Empty then
+ if T.Table /= Empty_Table_Ptr then
New_Table (First .. T.P.Last) := Old_Table (First .. T.P.Last);
Free (Old_Table);
end if;
@@ -223,7 +194,7 @@ package body GNAT.Dynamic_Tables is
pragma Assert (New_Last <= T.P.Last_Allocated);
pragma Assert (T.Table /= null);
- pragma Assert (T.Table /= Empty);
+ pragma Assert (T.Table /= Empty_Table_Ptr);
end Grow;
--------------------
@@ -241,9 +212,25 @@ package body GNAT.Dynamic_Tables is
----------
procedure Init (T : in out Instance) is
- begin
pragma Assert (not T.Locked);
- Free (T);
+ subtype Alloc_Type is Table_Type (First .. T.P.Last_Allocated);
+ type Alloc_Ptr is access all Alloc_Type;
+
+ procedure Free is new Ada.Unchecked_Deallocation (Alloc_Type, Alloc_Ptr);
+ function To_Alloc_Ptr is
+ new Ada.Unchecked_Conversion (Table_Ptr, Alloc_Ptr);
+
+ Temp : Alloc_Ptr := To_Alloc_Ptr (T.Table);
+
+ begin
+ if T.Table = Empty_Table_Ptr then
+ pragma Assert (T.P = (Last_Allocated | Last => First - 1));
+ null;
+ else
+ Free (Temp);
+ T.Table := Empty_Table_Ptr;
+ T.P := (Last_Allocated | Last => First - 1);
+ end if;
end Init;
--------------
@@ -253,7 +240,7 @@ package body GNAT.Dynamic_Tables is
function Is_Empty (T : Instance) return Boolean is
Result : constant Boolean := T.P.Last = Table_Low_Bound - 1;
begin
- pragma Assert (Result = (T.Table = Empty));
+ pragma Assert (Result = (T.Table = Empty_Table_Ptr));
return Result;
end Is_Empty;
@@ -277,7 +264,7 @@ package body GNAT.Dynamic_Tables is
pragma Assert (Is_Empty (To));
To := From;
- From.Table := Empty;
+ From.Table := Empty_Table_Ptr;
From.Locked := False;
From.P.Last_Allocated := Table_Low_Bound - 1;
From.P.Last := Table_Low_Bound - 1;
@@ -326,7 +313,7 @@ package body GNAT.Dynamic_Tables is
begin
if New_Last_Alloc < T.P.Last_Allocated then
pragma Assert (T.P.Last < T.P.Last_Allocated);
- pragma Assert (T.Table /= Empty);
+ pragma Assert (T.Table /= Empty_Table_Ptr);
declare
subtype Old_Alloc_Type is Table_Type (First .. Old_Last_Allocated);
diff --git a/gcc/ada/g-dyntab.ads b/gcc/ada/g-dyntab.ads
index b3095b6..a983456 100644
--- a/gcc/ada/g-dyntab.ads
+++ b/gcc/ada/g-dyntab.ads
@@ -53,7 +53,7 @@ generic
type Table_Component_Type is private;
type Table_Index_Type is range <>;
- Table_Low_Bound : Table_Index_Type;
+ Table_Low_Bound : Table_Index_Type := Table_Index_Type'First;
Table_Initial : Positive := 8;
Table_Increment : Natural := 100;
Release_Threshold : Natural := 0; -- size in bytes
@@ -153,12 +153,13 @@ package GNAT.Dynamic_Tables is
Empty_Table_Array : aliased Empty_Table_Array_Type;
function Empty_Table_Array_Ptr_To_Table_Ptr is
new Ada.Unchecked_Conversion (Empty_Table_Array_Ptr, Table_Ptr);
+ Empty_Table_Ptr : constant Table_Ptr :=
+ Empty_Table_Array_Ptr_To_Table_Ptr (Empty_Table_Array'Access);
-- End private use only. The above are used to initialize Table to point to
-- an empty array.
type Instance is record
- Table : Table_Ptr :=
- Empty_Table_Array_Ptr_To_Table_Ptr (Empty_Table_Array'Access);
+ Table : Table_Ptr := Empty_Table_Ptr;
-- The table itself. The lower bound is the value of First. Logically
-- the upper bound is the current value of Last (although the actual
-- size of the allocated table may be larger than this). The program may
@@ -187,6 +188,8 @@ package GNAT.Dynamic_Tables is
-- Reinitializes the table to empty. There is no need to call this before
-- using a table; tables default to empty.
+ procedure Free (T : in out Instance) renames Init;
+
function First return Table_Index_Type;
pragma Inline (First);
-- Export First as synonym for Table_Low_Bound (parallel with use of Last)
@@ -208,9 +211,6 @@ package GNAT.Dynamic_Tables is
-- chunk of memory. In both cases current array values are not affected by
-- this call.
- procedure Free (T : in out Instance);
- -- Same as Init
-
procedure Set_Last (T : in out Instance; New_Val : Table_Last_Type);
pragma Inline (Set_Last);
-- This procedure sets Last to the indicated value. If necessary the table
diff --git a/gcc/ada/g-table.ads b/gcc/ada/g-table.ads
index c2c3324..3df5694 100644
--- a/gcc/ada/g-table.ads
+++ b/gcc/ada/g-table.ads
@@ -49,7 +49,7 @@ generic
type Table_Component_Type is private;
type Table_Index_Type is range <>;
- Table_Low_Bound : Table_Index_Type;
+ Table_Low_Bound : Table_Index_Type := Table_Index_Type'First;
Table_Initial : Positive := 8;
Table_Increment : Natural := 100;
Table_Name : String := ""; -- for debugging printouts
@@ -70,6 +70,7 @@ package GNAT.Table is
subtype Valid_Table_Index_Type is Tab.Valid_Table_Index_Type;
subtype Table_Last_Type is Tab.Table_Last_Type;
subtype Table_Type is Tab.Table_Type;
+ function "=" (X, Y : Table_Type) return Boolean renames Tab."=";
subtype Big_Table_Type is Tab.Big_Table_Type;
subtype Table_Ptr is Tab.Table_Ptr;
@@ -81,6 +82,7 @@ package GNAT.Table is
function Is_Empty return Boolean;
procedure Init;
+ procedure Free;
function First return Table_Index_Type;
pragma Inline (First);
@@ -90,8 +92,6 @@ package GNAT.Table is
procedure Release;
- procedure Free;
-
procedure Set_Last (New_Val : Table_Last_Type);
pragma Inline (Set_Last);
diff --git a/gcc/ada/table.ads b/gcc/ada/table.ads
index 066dc4f..7311f6f 100644
--- a/gcc/ada/table.ads
+++ b/gcc/ada/table.ads
@@ -51,9 +51,9 @@ package Table is
type Table_Component_Type is private;
type Table_Index_Type is range <>;
- Table_Low_Bound : Table_Index_Type;
- Table_Initial : Pos;
- Table_Increment : Nat;
+ Table_Low_Bound : Table_Index_Type := Table_Index_Type'First;
+ Table_Initial : Pos := 8;
+ Table_Increment : Nat := 100;
Table_Name : String; -- for debugging printouts
Release_Threshold : Nat := 0;