|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 4361 (0x1109)
Types: TextFile
Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦24d1ddd49⟧
└─⟦this⟧
separate (Shared_Code_Generic_Support)
function Satisfies (Type_Desc : Type_Descriptor;
Exp : Expression;
Exp_Kind : Expression_Kind;
Chk : Check_Kind) return Boolean is
pragma Suppress_All;
pragma Routine_Number (Runtime_Ids.Internal);
Result : Boolean := False;
procedure Value_Op (Exp_1 : Expression) is
pragma Routine_Number (Runtime_Ids.Internal);
begin
-- Note that when we have a Value, a short pointer is really
-- a long pointer, and hence we need not special case them.
Result := Satisfies_Ops.Satisfies_Value
(Type_Desc => Type_Desc,
Exp => Exp_1,
Constraints => Type_Desc.Constraints,
Type_Kind => Type_Desc.Type_Kind,
Size => Type_Desc.Size,
Chk => Chk);
end Value_Op;
-- pragma Inline (Value_Op);
procedure Data_Op (Exp_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
Result := Satisfies_Ops.Satisfies_Value
(Type_Desc => Type_Desc,
Exp => Short_Pointer_Ops.Short_To_Long
(Exp_Data),
Constraints => Type_Desc.Constraints,
Type_Kind => Type_Desc.Type_Kind,
Size => Type_Desc.Size,
Chk => Chk);
return;
end if;
Result := Satisfies_Ops.Satisfies_Data
(Type_Desc => Type_Desc,
Exp_Data => Exp_Data,
Constraints => Type_Desc.Constraints,
Type_Kind => Type_Desc.Type_Kind,
Size => Type_Desc.Size,
Chk => Chk);
end Data_Op;
-- pragma Inline (Data_Op);
procedure Unconstrained_Array_Op (Exp_Dope : Dope_Vector;
Exp_Data : in out Data) is
pragma Routine_Number (Runtime_Ids.Internal);
begin
Result := Satisfies_Ops.Satisfies_Unconstrained_Array
(Exp_Dope => Exp_Dope,
Constraints => Type_Desc.Constraints,
Chk => Chk);
end Unconstrained_Array_Op;
-- pragma Inline (Unconstrained_Array_Op);
procedure Unconstrained_Record_Op (Exp_Constrained : Boolean;
Exp_Data : in out Data) is
pragma Routine_Number (Runtime_Ids.Internal);
begin
-- Note that if we got here, Type_Desc.Dscrmt_Record_Satisfies_
-- Subp must be nil.
Result := True;
end Unconstrained_Record_Op;
-- pragma Inline (Unconstrained_Record_Op);
procedure Dispatch is new Unary_Dispatch (Value_Op,
Data_Op,
Unconstrained_Array_Op,
Unconstrained_Record_Op,
Get_Value_Size);
-- pragma Inline (Dispatch);
--[workaround]
begin
-- Trivially true if no check is necessary
if Chk = Nil_Check then
return True;
elsif Can_Be_Trusted (Exp_Kind) then
return True;
else
declare
Satisfies_Subp : constant Subprogram_Variable :=
Get_Dscrmt_Record_Satisfies_Subp (Type_Desc);
begin
if Satisfies_Subp.Code /= Nil_Code then
return Asm_Interface.Dscrmt_Record_Satisfies
(Subp => Satisfies_Subp,
Type_Desc => Type_Desc,
Exp => Exp,
Exp_Kind => Exp_Kind);
else
Dispatch (Type_Desc, Exp, Exp_Kind);
return Result;
end if;
end;
end if;
end Satisfies;
pragma Runtime_Unit (Unit_Number => Runtime_Ids.Runtime_Compunit,
Elab_Routine_Number => Runtime_Ids.Internal);