summaryrefslogtreecommitdiffstats
path: root/gcc/ada/s-restri.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-04 11:06:19 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-04 11:06:19 +0000
commit1147840a03d8b5bb79089f8c2a13c912ab02a19f (patch)
treeeb723f684eca66cfc93f09df6fa537a3371b2f14 /gcc/ada/s-restri.adb
parentdfabcc74d4cc132642d1c73f735b9b5893ea9f44 (diff)
downloadppe42-gcc-1147840a03d8b5bb79089f8c2a13c912ab02a19f.tar.gz
ppe42-gcc-1147840a03d8b5bb79089f8c2a13c912ab02a19f.zip
2004-02-04 Robert Dewar <dewar@gnat.com>
* 5gtasinf.adb, 5gtasinf.ads, 5gtaprop.adb, ali.adb, ali.ads, gprcmd.adb: Minor reformatting * bindgen.adb: Output restrictions string for new style restrictions handling * impunit.adb: Add s-rident.ads (System.Rident) and s-restri (System.Restrictions) * lib-writ.adb: Fix bug in writing restrictions string (last few entries wrong) * s-restri.ads, s-restri.adb: Change name Restrictions to Run_Time_Restrictions to avoid conflict with package name. Add circuit to read and acquire run time restrictions. 2004-02-04 Jose Ruiz <ruiz@act-europe.fr> * restrict.ads, restrict.adb: Use the new restriction No_Task_Attributes_Package instead of the old No_Task_Attributes. * sem_prag.adb: No_Task_Attributes is a synonym of No_Task_Attributes_Package. * snames.ads, snames.adb: New entry for proper handling of No_Task_Attributes. * s-rident.ads: Adding restriction No_Task_Attributes_Package (AI-00249) that supersedes the GNAT specific restriction No_Task_Attributes. 2004-02-04 Ed Schonberg <schonberg@gnat.com> * sem_prag.adb: (Analyze_Pragma, case Warnings): In an inlined body, as in an instance body, an identifier may be wrapped in an unchecked conversion. 2004-02-04 Vincent Celier <celier@gnat.com> * lib-writ.ads: Comment update for the W lines * bld.adb: (Expression): An empty string list is static * fname-uf.adb: Minor comment update * fname-uf.ads: (Get_File_Name): Document new parameter May_Fail * gnatbind.adb: Initialize Cumulative_Restrictions with the restrictions on the target. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77233 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-restri.adb')
-rw-r--r--gcc/ada/s-restri.adb96
1 files changed, 91 insertions, 5 deletions
diff --git a/gcc/ada/s-restri.adb b/gcc/ada/s-restri.adb
index e258e5e6755..be39f231831 100644
--- a/gcc/ada/s-restri.adb
+++ b/gcc/ada/s-restri.adb
@@ -40,9 +40,9 @@ package body System.Restrictions is
function Abort_Allowed return Boolean is
begin
- return Restrictions.Violated (No_Abort_Statements)
+ return Run_Time_Restrictions.Violated (No_Abort_Statements)
or else
- Restrictions.Violated (Max_Asynchronous_Select_Nesting);
+ Run_Time_Restrictions.Violated (Max_Asynchronous_Select_Nesting);
end Abort_Allowed;
---------------------
@@ -51,12 +51,98 @@ package body System.Restrictions is
function Tasking_Allowed return Boolean is
begin
- return Restrictions.Violated (Max_Tasks)
+ return Run_Time_Restrictions.Violated (Max_Tasks)
or else
- Restrictions.Violated (No_Tasking);
+ Run_Time_Restrictions.Violated (No_Tasking);
end Tasking_Allowed;
+-- Package elaboration code (acquire restrictions)
+
begin
- null;
+ Acquire_Restrictions : declare
+
+ subtype Big_String is String (Positive);
+ type Big_String_Ptr is access all Big_String;
+
+ RString : Big_String_Ptr;
+ pragma Import (C, RString, "__gl_restrictions");
+
+ P : Natural := 1;
+ -- Pointer to scan string
+
+ C : Character;
+ -- Next character from string
+
+ function Get_Char return Character;
+ -- Get next character from string
+
+ function Get_Natural return Natural;
+ -- Scan out natural value known to be in range, updating P past it
+
+ --------------
+ -- Get_Char --
+ --------------
+
+ function Get_Char return Character is
+ begin
+ P := P + 1;
+ return RString (P - 1);
+ end Get_Char;
+
+ -----------------
+ -- Get_Natural --
+ -----------------
+
+ function Get_Natural return Natural is
+ N : Natural := 0;
+
+ begin
+ while RString (P) in '0' .. '9' loop
+ N := N * 10 + (Character'Pos (Get_Char) - Character'Pos ('0'));
+ end loop;
+
+ return N;
+ end Get_Natural;
+
+ -- Start of processing for Acquire_Restrictions
+
+ begin
+ -- Acquire data corresponding to first R line
+
+ for R in All_Boolean_Restrictions loop
+ C := Get_Char;
+
+ if C = 'v' then
+ Run_Time_Restrictions.Violated (R) := True;
+
+ elsif C = 'r' then
+ Run_Time_Restrictions.Set (R) := True;
+ end if;
+ end loop;
+
+ -- Acquire data corresponding to second R line
+
+ for RP in All_Parameter_Restrictions loop
+
+ -- Acquire restrictions pragma information
+
+ if Get_Char = 'r' then
+ Run_Time_Restrictions.Set (RP) := True;
+ Run_Time_Restrictions.Value (RP) := Get_Natural;
+ end if;
+
+ -- Acquire restrictions violations information
+
+ if Get_Char = 'v' then
+ Run_Time_Restrictions.Violated (RP) := True;
+ Run_Time_Restrictions.Count (RP) := Get_Natural;
+
+ if RString (P) = '+' then
+ Run_Time_Restrictions.Unknown (RP) := True;
+ P := P + 1;
+ end if;
+ end if;
+ end loop;
+ end Acquire_Restrictions;
end System.Restrictions;
OpenPOWER on IntegriCloud