|
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 - metrics - download
Length: 6144 (0x1800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Symbol, seg_03610b, seg_03639b, seg_036908
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Block; 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 Table.Eval (Current_Table, Name); 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 Block; Current_Node : Block.Node := Block.Current; Success : Boolean := False; Origin_Table, Table_In_Use : Table.Symbol_Kind := Block.Symbol (Current_Node); begin while (Current_Node /= Block.Empty_Node) loop Table.Find (The_Table => Table_In_Use, Name => Name, New_Reference => New_Reference, Success => Success); exit when Success; Current_Node := Block.Parent (Current_Node); if Current_Node /= Block.Empty_Node then Table_In_Use := Block.Symbol (Current_Node); end if; end loop; if Success then Current_Table := Table_In_Use; else Current_Table := Origin_Table; end if; Is_Found := Success; 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 In_Text is Current_Node : Block.Node := Block.Current; Table_In_Use : Table.Symbol_Kind; use Block; begin Table_In_Use := Block.Symbol (Current_Node); while (Current_Node /= Block.Empty_Node) loop Table.In_Text (Table_In_Use); Current_Node := Block.Parent (Current_Node); if Current_Node /= Block.Empty_Node then Table_In_Use := Block.Symbol (Current_Node); end if; end loop; end In_Text; end Symbol;
nblk1=5 nid=4 hdr6=6 [0x00] rec0=1b rec1=00 rec2=01 rec3=05e [0x01] rec0=1b rec1=00 rec2=03 rec3=01a [0x02] rec0=11 rec1=00 rec2=05 rec3=000 [0x03] rec0=04 rec1=00 rec2=04 rec3=000 [0x04] rec0=0c rec1=00 rec2=02 rec3=000 tail 0x21732fdc084dd85c81a45 0x42a00088462060003 Free Block Chain: 0x4: 0000 00 02 02 2f 80 17 20 20 20 70 72 6f 63 65 64 75 ┆ / procedu┆ 0x2: 0000 00 00 00 14 80 11 20 20 54 61 62 6c 65 2e 46 69 ┆ Table.Fi┆