|
|
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: 2223 (0x8af)
Types: TextFile
Names: »B«
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with Bloc;
with Table;
with Object;
package body Symbol is
function Eval (Name : Message.Tiny_String) return Object.Reference is
New_Reference : Object.Reference := Object.Void_Reference;
Success : Boolean := False;
Current_Table : Table.Symbol_Kind;
begin
Find (Name, New_Reference, Current_Table, Success);
return New_Reference;
-- if not success return object.void_reference
end Eval;
procedure Find (Name : Message.Tiny_String;
New_Reference : in out Object.Reference;
Current_Table : out Table.Symbol_Kind;
Is_Found : out Boolean) is
use Bloc;
Current_Node : Bloc.Node := Bloc.Current;
Success : Boolean := False;
Table_In_Use : Table.Symbol_Kind;
begin
Table_In_Use := Bloc.Symbol (Current_Node);
while (Current_Node /= Bloc.Empty_Node) loop
Table.Find (The_Table => Table_In_Use,
Name => Name,
New_Reference => New_Reference,
Success => Success);
exit when Success;
Current_Node := Bloc.Parent (Current_Node);
if Current_Node /= Bloc.Empty_Node then
Table_In_Use := Bloc.Symbol (Current_Node);
end if;
end loop;
Is_Found := Success;
Current_Table := Table_In_Use;
end Find;
procedure Insert (Name : Message.Tiny_String;
New_Reference : Object.Reference) is
Object_Found : Object.Reference := Object.Void_Reference;
Table_In_Use : Table.Symbol_Kind;
Is_Found : Boolean := False;
begin
Find (Name, Object_Found, Table_In_Use, Is_Found);
Table.Insert (Table_In_Use, Name, New_Reference);
end Insert;
procedure Remove (Name : Message.Tiny_String) is
Success : Boolean := False;
Object_Found : Object.Reference := Object.Void_Reference;
Table_In_Use : Table.Symbol_Kind;
begin
Find (Name, Object_Found, Table_In_Use, Success);
if Success then
Table.Remove (Table_In_Use, Name);
end if;
end Remove;
end Symbol;