DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦f156edb62⟧ TextFile

    Length: 8305 (0x2071)
    Types: TextFile
    Names: »B«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦f794ecd1d⟧ 
            └─⟦24d1ddd49⟧ 
                └─⟦this⟧ 

TextFile

separate (Shared_Code_Generic_Support)
procedure Copy_Expression_Generic (Type_Desc        : Type_Descriptor;
                                   Source           : Expression;
                                   Source_Kind      : Expression_Kind;
                                   Dest_Address     : System.Address;
                                   Dest_Kind        : Expression_Kind;
                                   Dest_Constraints : Constraint_Descriptor;
                                   Chk              : Copy_Check_Kind) is
    pragma Suppress_All;
    pragma Routine_Number (Runtime_Ids.Internal);

    procedure Value_Op (Source_Exp : Expression;  
                        Dest_Exp   : Expression) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin
        -- Note that when we have Value's, a short pointer is really
        -- a long pointer, and hence we need not special case them.
        if not Satisfies_Ops.Satisfies_Value  
                  (Type_Desc   => Type_Desc,
                   Exp         => Source_Exp,
                   Constraints => Dest_Constraints,
                   Type_Kind   => Type_Desc.Type_Kind,
                   Size        => Type_Desc.Size,
                   Chk         => Chk) then
            raise Constraint_Error;
        end if;

        -- In case Type_Desc.Size < Bytes_Per_Integer, this will copy
        -- some garbage bytes.  Thats ok!
        Cnvt (Dest_Address).all := Source_Exp;
    end Value_Op;
    -- pragma Inline (Value_Op);


    procedure Data_Op (Source_Data : in out Data;  
                       Dest_Data   : in out Data) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin  
        if Target.Supports_Segmented_Heaps and then
           Type_Desc.Is_Short_Pointer then
            if not Satisfies_Ops.Satisfies_Value  
                      (Type_Desc   => Type_Desc,
                       Exp         => Short_Pointer_Ops.Short_To_Long  
                                         (Source_Data),
                       Constraints => Dest_Constraints,
                       Type_Kind   => Type_Desc.Type_Kind,
                       Size        => Type_Desc.Size,
                       Chk         => Chk) then
                raise Constraint_Error;
            end if;

            Short_Pointer_Ops.Copy_Data_To_Data (Source_Data, Dest_Address);

            return;
        end if;

        if not Satisfies_Ops.Satisfies_Data  
                  (Type_Desc   => Type_Desc,
                   Exp_Data    => Source_Data,  
                   Constraints => Dest_Constraints,  
                   Type_Kind   => Type_Desc.Type_Kind,
                   Size        => Type_Desc.Size,
                   Chk         => Chk) then
            raise Constraint_Error;
        end if;

        Dest_Data := Source_Data;
    end Data_Op;
    -- pragma Inline (Data_Op);


    procedure Value_Data_Op (Source_Exp :        Expression;
                             Dest_Data  : in out Data) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin  
        if Target.Supports_Segmented_Heaps and then
           Type_Desc.Is_Short_Pointer then
            if not Satisfies_Ops.Satisfies_Value  
                      (Type_Desc   => Type_Desc,
                       Exp         => Source_Exp,
                       Constraints => Dest_Constraints,
                       Type_Kind   => Type_Desc.Type_Kind,
                       Size        => Type_Desc.Size,
                       Chk         => Chk) then
                raise Constraint_Error;
            end if;

            Short_Pointer_Ops.Copy_Value_To_Data (Source_Exp, Dest_Address);

            return;
        end if;

        if not Satisfies_Ops.Satisfies_Value  
                  (Type_Desc   => Type_Desc,
                   Exp         => Source_Exp,
                   Constraints => Dest_Constraints,
                   Type_Kind   => Type_Desc.Type_Kind,
                   Size        => Type_Desc.Size,
                   Chk         => Chk) then
            raise Constraint_Error;
        end if;

        Copy_Indirect (Dest   => Dest_Data'Address,
                       Source => Get_Scalar_Data_Address  
                                    (Source_Exp'Address, Type_Desc.Size),
                       Size   => Type_Desc.Size);
    end Value_Data_Op;
    -- pragma Inline (Value_Data_Op);


    procedure Data_Value_Op (Source_Data : in out Data;  
                             Dest_Exp    :        Expression) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin
        if Target.Supports_Segmented_Heaps and then
           Type_Desc.Is_Short_Pointer then
            if not Satisfies_Ops.Satisfies_Value  
                      (Type_Desc   => Type_Desc,
                       Exp         => Short_Pointer_Ops.Short_To_Long  
                                         (Source_Data),
                       Constraints => Dest_Constraints,
                       Type_Kind   => Type_Desc.Type_Kind,
                       Size        => Type_Desc.Size,
                       Chk         => Chk) then
                raise Constraint_Error;
            end if;

            Short_Pointer_Ops.Copy_Data_To_Value (Source_Data, Dest_Address);

            return;
        end if;

        if not Satisfies_Ops.Satisfies_Data  
                  (Type_Desc   => Type_Desc,
                   Exp_Data    => Source_Data,  
                   Constraints => Dest_Constraints,  
                   Type_Kind   => Type_Desc.Type_Kind,
                   Size        => Type_Desc.Size,
                   Chk         => Chk) then
            raise Constraint_Error;
        end if;

        -- Tricky!  Note that Dest must be a Value.  So we put the
        -- result in the PROPER portion of the Dest_Address!
        Copy_Indirect (Dest   => Get_Scalar_Data_Address
                                    (Dest_Address, Type_Desc.Size),
                       Source => Source_Data'Address,
                       Size   => Type_Desc.Size);
    end Data_Value_Op;
    -- pragma Inline (Data_Value_Op);


    procedure Unconstrained_Array_Op (Source_Dope :        Dope_Vector;
                                      Source_Data : in out Data;
                                      Dest_Dope   :        Dope_Vector;
                                      Dest_Data   : in out Data) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin
        if not Satisfies_Ops.Satisfies_Unconstrained_Array
                  (Exp_Dope    => Source_Dope,
                   Constraints => Dest_Constraints,
                   Chk         => Chk) then
            raise Constraint_Error;
        end if;

        Dest_Data := Source_Data;
    end Unconstrained_Array_Op;
    -- pragma Inline (Unconstrained_Array_Op);


    procedure Unconstrained_Record_Op (Source_Constrained :        Boolean;
                                       Source_Data        : in out Data;
                                       Dest_Constrained   :        Boolean;
                                       Dest_Data          : in out Data) is
        pragma Routine_Number (Runtime_Ids.Internal);
    begin
        -- Note that if we got here, Type_Desc.Dscrmt_Record_Assign_
        -- Subp must be nil.
        Dest_Data := Source_Data;
    end Unconstrained_Record_Op;
    -- pragma Inline (Unconstrained_Record_Op);


    procedure Dispatch is new Binary_Dispatch (Value_Op,  
                                               Data_Op,  
                                               Value_Data_Op,  
                                               Data_Value_Op,  
                                               Unconstrained_Array_Op,  
                                               Unconstrained_Record_Op,  
                                               Get_Value_Size);
    -- pragma Inline (Dispatch);
begin
    Dispatch (Type_Desc  => Type_Desc,
              Exp_1      => Source,
              Exp_1_Kind => Source_Kind,
              Exp_2      => Get_Expression (Dest_Address, Dest_Kind),
              Exp_2_Kind => Dest_Kind);
end Copy_Expression_Generic;
pragma Runtime_Unit (Unit_Number         => Runtime_Ids.Runtime_Compunit,
                     Elab_Routine_Number => Runtime_Ids.Internal);