|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 14336 (0x3800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Put_Code_For_Array_Type, seg_020bd4, separate Rpc_Io.Build_Interchange_Package_Body
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with String_Utilities; with Bounds_Utilities; with Lrm_Utilities; separate (Rpc_Io.Build_Interchange_Package_Body) procedure Put_Code_For_Array_Type (Array_Type_Decl : Ada.Declaration; Array_Type_Def : Ada.Element) is Component_Type : Ada.Element := Decls.Enclosing_Declaration (Ada.Definition (Types.Component_Type (Array_Type_Def))); function Image (Value : Integer; Base : Natural := 10; Width : Natural := 0; Leading : Character := ' ') return String renames String_Utilities.Number_To_String; function Image_Of_Current_Type (Type_Iterator : Ada.Element_Iterator) return String is begin return Analysis.Reference (Decls.Enclosing_Declaration (Ada.Definition (Ada.Value (Type_Iterator)))); end Image_Of_Current_Type; function Data_Variable_Ref (No_Of_Dimensions : Natural) return String is begin if No_Of_Dimensions = 1 then return "I1"; else return Data_Variable_Ref (No_Of_Dimensions - 1) & ", " & "I" & Image (No_Of_Dimensions); end if; end Data_Variable_Ref; begin if Types.Is_Constrained_Array (Array_Type_Def) then declare Index_Types : Ada.Element_Iterator := Types.Index_Constraints (Array_Type_Def); Index_Type : Ada.Element := Decls.Enclosing_Declaration (Ada.Definition (Ada.Value (Index_Types))); No_Of_Dimensions : Natural := Lrm_Utilities.Count (Index_Types); Data_Variable_Image : constant String := "Data (" & Data_Variable_Ref (No_Of_Dimensions) & ")"; begin Ada.Next (Index_Types); Traverse (Index_Type); Traverse (Component_Type); -- BUILD PUT PROCEDURE -- Put_Body_Start (Array_Type_Decl, Kind => Put, Internal_Comment => ""); -- Build FOR loops -- for Dimension in 1 .. No_Of_Dimensions loop Put ("for I" & Image (Dimension) & " in Data'Range(" & Image (Dimension) & ") loop", 1); end loop; if Is_Predefined (Component_Type) then Put ("Transport_Interchange.Put (Into, " & Data_Variable_Image & ");", 1); else Put ("Put (Into, " & Data_Variable_Image & ");", 1); end if; for Dimension in 1 .. No_Of_Dimensions loop Put ("end loop;", 1); end loop; -- Build exception handlers -- Put ("exception", 1); Put ("when Standard.Constraint_Error | "); Put ("Standard.Numeric_Error =>", 1); Put ("raise Interchange.Constraint_Error;", 1); Put (Ada_Io.Make_End); -- BUILD GET FUNCTION -- Put_Body_Start (Decl => Array_Type_Decl, Make_Null => False, Kind => Get, Internal_Comment => ""); -- Build FOR loops -- for Dimension in 1 .. No_Of_Dimensions loop Put ("for I" & Image (Dimension) & " in Data'Range(" & Image (Dimension) & ") loop", 1); end loop; if Is_Predefined (Component_Type) then Put ("Transport_Interchange.Get (From, " & Data_Variable_Image & ");", 1); else Put ("Get (From, " & Data_Variable_Image & ");", 1); end if; for Dimension in 1 .. No_Of_Dimensions loop Put ("end loop;", 1); end loop; -- Build exception handler -- Put ("exception", 1); Put ("when Standard.Constraint_Error | "); Put ("Standard.Numeric_Error =>", 1); Put ("raise Interchange.Constraint_Error;", 1); Put (Ada_Io.Make_End); end; else declare Index_Types : Ada.Element_Iterator := Types.Index_Subtype_Definitions (Array_Type_Def); Index_Type : Ada.Element := Decls.Enclosing_Declaration (Ada.Definition (Ada.Value (Index_Types))); No_Of_Dimensions : Natural := Lrm_Utilities.Count (Index_Types); Data_Variable_Image : constant String := "Data (" & Data_Variable_Ref (No_Of_Dimensions) & ")"; begin Ada.Next (Index_Types); Traverse (Index_Type); Traverse (Component_Type); -- BUILD PUT PROCEDURE -- Put_Body_Start (Array_Type_Decl, Kind => Put, Internal_Comment => ""); -- Build PUT calls for bounds -- Ada.Reset (Index_Types); for Dimension in 1 .. No_Of_Dimensions loop Put ("Transport_Interchange.Put (Into, Interchange.Natural (" & Image_Of_Current_Type (Index_Types) & "'Pos (Data'First(" & Image (Dimension) & "))));", 1); Put ("Transport_Interchange.Put (Into, Interchange.Natural (" & Image_Of_Current_Type (Index_Types) & "'Pos (Data'last(" & Image (Dimension) & "))));", 2); Ada.Next (Index_Types); end loop; -- Build FOR loops -- for Dimension in 1 .. No_Of_Dimensions loop Put ("for I" & Image (Dimension) & " in Data'Range(" & Image (Dimension) & ") loop", 1); end loop; if Is_Predefined (Component_Type) then Put ("Transport_Interchange.Put (Into, " & Data_Variable_Image & ");", 1); else Put ("Put (Into, " & Data_Variable_Image & ");", 1); end if; for Dimension in 1 .. No_Of_Dimensions loop Put ("end loop;", 1); end loop; -- Build exception handlers -- Put ("exception", 1); Put ("when Standard.Constraint_Error | "); Put ("Standard.Numeric_Error =>", 1); Put ("raise Interchange.Constraint_Error;", 1); Put (Ada_Io.Make_End); -- BUILD GET FUNCTION -- Put (Ascii.Lf & Ascii.Lf & Ada_Io.Make_Function (Name => "Get", Kind => Ada_Io.Body_Part, Parameters_Image => "From : Transport_Stream.Stream_Id", Return_Expression => Analysis.Reference (Array_Type_Decl))); -- Build local variable declarations -- for Dimension in 1 .. No_Of_Dimensions loop Put ("Lower_Bound" & Image (Dimension) & " : Interchange.Natural;", 1); Put ("Upper_Bound" & Image (Dimension) & " : Interchange.Natural;", 1); end loop; Put (Ada_Io.Make_Begin); -- Build GET calls for bounds -- for Dimension in 1 .. No_Of_Dimensions loop Put ("Transport_Interchange.Get (From, Lower_Bound" & Image (Dimension) & ");", 1); Put ("Transport_Interchange.Get (From, Upper_Bound" & Image (Dimension) & ");", 2); end loop; Put ("declare", 1); -- Build declaration for Data variable -- Put ("Data : " & Analysis.Reference (Array_Type_Decl) & " ("); Ada.Reset (Index_Types); for Dimension in 1 .. No_Of_Dimensions loop Put (Image_Of_Current_Type (Index_Types) & "'Val(Lower_Bound" & Image (Dimension) & ") .. " & Image_Of_Current_Type (Index_Types) & "'Val (Upper_Bound" & Image (Dimension) & ")"); if Dimension /= No_Of_Dimensions then Put (", "); end if; Ada.Next (Index_Types); end loop; Put (");"); Put (Ada_Io.Make_Begin); -- Build FOR loops -- for Dimension in 1 .. No_Of_Dimensions loop Put ("for I" & Image (Dimension) & " in Data'Range(" & Image (Dimension) & ") loop", 1); end loop; if Is_Predefined (Component_Type) then Put ("Transport_Interchange.Get (From, " & Data_Variable_Image & ");", 1); else Put ("Get (From, " & Data_Variable_Image & ");", 1); end if; for Dimension in 1 .. No_Of_Dimensions loop Put ("end loop;", 1); end loop; -- Build return and end clause; -- Put ("return Data;", 1); Put ("end;", 1); -- Build exception handler -- Put ("exception", 1); Put ("when Standard.Constraint_Error | "); Put ("Standard.Numeric_Error =>", 1); Put ("raise Interchange.Constraint_Error;", 1); Put (Ada_Io.Make_End); end; end if; end Put_Code_For_Array_Type;
nblk1=d nid=0 hdr6=1a [0x00] rec0=1a rec1=00 rec2=01 rec3=038 [0x01] rec0=1a rec1=00 rec2=02 rec3=03a [0x02] rec0=01 rec1=00 rec2=0d rec3=018 [0x03] rec0=1c rec1=00 rec2=03 rec3=066 [0x04] rec0=1a rec1=00 rec2=04 rec3=01a [0x05] rec0=19 rec1=00 rec2=05 rec3=046 [0x06] rec0=01 rec1=00 rec2=0c rec3=028 [0x07] rec0=18 rec1=00 rec2=06 rec3=01e [0x08] rec0=1c rec1=00 rec2=07 rec3=028 [0x09] rec0=16 rec1=00 rec2=08 rec3=072 [0x0a] rec0=1b rec1=00 rec2=09 rec3=006 [0x0b] rec0=1c rec1=00 rec2=0a rec3=00e [0x0c] rec0=04 rec1=00 rec2=0b rec3=000 tail 0x2171d3098838d456bac4a 0x42a00088462061e03