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;
---------------------
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;