<> <> <> <> DIRECTORY Symbols USING [Type], Table USING [Base, Finger, Selector, Limit]; Literals: DEFINITIONS = { Base: TYPE = Table.Base; Finger: TYPE = Table.Finger; Limit: NAT = Table.Limit/2; <> LitIndex: TYPE = RECORD [ SELECT litTag: * FROM word => [lti: LTIndex], string => [sti: STIndex] ENDCASE]; <> WordSequence: TYPE = ARRAY [0..0) OF WORD; LTRecord: TYPE = RECORD [ link: LTIndex, datum: SELECT kind: * FROM short => [value: WORD], long => [ codeIndex: [0..CARDINAL.LAST/2], length: CARDINAL, value: WordSequence] ENDCASE]; LTIndex: TYPE = Base RELATIVE POINTER[0..Limit) TO LTRecord; LTNull: LTIndex = LTIndex.LAST; LTId: TYPE = RECORD [baseP: Finger, index: LitIndex.word]; LitDescriptor: TYPE = RECORD[ offset: Base RELATIVE POINTER[0..CARDINAL.LAST) TO WordSequence, length: CARDINAL]; <> STRecord: TYPE = RECORD [ SELECT kind: * FROM master => [ link: MSTIndex, local: BOOL, info: CARDINAL, codeIndex: CARDINAL, string: StringBody], <> copy => [ mark: BOOL, link: MSTIndex], heap => [ link: MSTIndex, type: Symbols.Type, info: CARDINAL] ENDCASE]; STIndex: TYPE = Base RELATIVE POINTER[0..Limit) TO STRecord; STNull: STIndex = STIndex.LAST; MSTIndex: TYPE = Base RELATIVE POINTER[0..Limit) TO STRecord.master; <> ltType: Table.Selector = 7; stType: Table.Selector = 8; }.