<<>> <> <> <> <> DIRECTORY SmallCards, Symbols USING [Type, UNSPEC], Table USING [Base, Finger, IndexRep, Selector, Tag]; Literals: DEFINITIONS = { OPEN SmallCards; Base: TYPE = Table.Base; Finger: TYPE = Table.Finger; <> ltTag: Table.Tag = 3; stTag: Table.Tag = 4; <> WordSequence: TYPE = RECORD [SEQUENCE COMPUTED CARDINAL OF Symbols.UNSPEC]; WordSequencePtr: TYPE = LONG POINTER TO WordSequence; LTRecord: TYPE = MACHINE DEPENDENT RECORD [ link: LTIndex, class: LitClass, pad1: Card13 ¬ 0, pad2: Card15 ¬ 0, datum: SELECT kind: * FROM short => [value: Symbols.UNSPEC], <<32 bits and less>> long => [ bits: INT, codeIndex: Card16, value: SEQUENCE max: Card16 OF Symbols.UNSPEC] ENDCASE]; LitClass: TYPE = MACHINE DEPENDENT { unknown (0), unsigned (1), signed (2), either (3), real (4), bits(5) }; LTIndex: TYPE = Base RELATIVE LONG POINTER TO LTRecord; LTFirst: LTIndex = LOOPHOLE[Table.IndexRep[tag: ltTag, highBits:0, lowBits:0]]; LTLast: LTIndex = LOOPHOLE[Table.IndexRep[tag: ltTag]]; LTNull: LTIndex = LTLast; LTId: TYPE = RECORD [baseP: Finger, index: LTIndex]; LitDescriptor: TYPE = RECORD [ bits: INT, class: LitClass, words: [0..1024], offset: Base RELATIVE LONG POINTER TO WordSequence]; <> <> STRecord: TYPE = MACHINE DEPENDENT RECORD [ link: MSTIndex, cases: SELECT kind: * FROM master => [ local: BOOL, pad1: Card13 ¬ 0, codeIndex: Card16, info: CARD, length: Card16, string: PACKED SEQUENCE maxLength: Card16 OF CHAR], copy => [ mark: BOOL, pad1: Card13 ¬ 0, pad2: Card16 ¬ 0], heap => [ pad1: Card14 ¬ 0, pad2: Card16 ¬ 0, type: Symbols.Type, info: CARD] ENDCASE]; STIndex: TYPE = Base RELATIVE LONG POINTER TO STRecord; STFirst: STIndex = LOOPHOLE[Table.IndexRep[tag: stTag, highBits:0, lowBits:0]]; STLast: STIndex = LOOPHOLE[Table.IndexRep[tag: stTag]]; STNull: STIndex = STLast; MSTIndex: TYPE = Base RELATIVE LONG POINTER TO STRecord.master; <> ltType: Table.Selector = 7; stType: Table.Selector = 8; }.