diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-04 11:06:19 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-04 11:06:19 +0000 |
commit | 1147840a03d8b5bb79089f8c2a13c912ab02a19f (patch) | |
tree | eb723f684eca66cfc93f09df6fa537a3371b2f14 /gcc/ada/s-restri.adb | |
parent | dfabcc74d4cc132642d1c73f735b9b5893ea9f44 (diff) | |
download | gcc-1147840a03d8b5bb79089f8c2a13c912ab02a19f.tar.gz |
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.adb | 96 |
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; |