<<>> <> <> <> <> DIRECTORY Alloc USING [Handle], ConvertUnsafe USING [SubString], Literals, Symbols USING [Type, UNSPEC], SymbolOps USING [DecodeCard, DecodeInt, DecodeReal, EncodeCard, EncodeInt, EncodeReal]; LiteralOps: DEFINITIONS IMPORTS SymbolOps = { OPEN Literals; Initialize: PROC [Alloc.Handle]; Finalize: PROC; ClassError: ERROR; <> <> CopyLiteral: PROC [LTId] RETURNS [LTIndex]; DescriptorValue: PROC [LTIndex] RETURNS [LitDescriptor]; FindDescriptor: PROC [bits: INT, ptr: WordSequencePtr] RETURNS [LTIndex]; IsShort: PROC [lti: LTIndex] RETURNS [BOOL]; Find: PROC [class: LitClass, val: Symbols.UNSPEC] RETURNS [LTIndex]; FindBits: PROC [val: CARD] RETURNS [LTIndex] = INLINE { RETURN [Find[bits, SymbolOps.EncodeCard[val]]]}; FindCard: PROC [val: CARD] RETURNS [LTIndex] = INLINE { RETURN [Find[unsigned, SymbolOps.EncodeCard[val]]]}; FindInt: PROC [val: INT] RETURNS [LTIndex] = INLINE { RETURN [Find[signed, SymbolOps.EncodeInt[val]]]}; FindReal: PROC [val: REAL] RETURNS [LTIndex] = INLINE { RETURN [Find[real, SymbolOps.EncodeReal[val]]]}; ForgetEntries: PROC RETURNS [ltBias: CARD, stBias: CARD]; Value: PROC [lti: LTIndex] RETURNS [class: LitClass, val: Symbols.UNSPEC]; ValueBits: PROC [lti: LTIndex] RETURNS [CARD] = INLINE { RETURN [SymbolOps.DecodeCard[Value[lti].val]]; }; ValueCard: PROC [lti: LTIndex] RETURNS [CARD] = INLINE { class: LitClass; val: Symbols.UNSPEC; card: CARD; [class, val] ¬ Value[lti]; card ¬ SymbolOps.DecodeCard[val]; SELECT class FROM unsigned => RETURN [card]; signed, either => IF card <= CARD[LAST[INT]] THEN RETURN [card]; ENDCASE; ERROR ClassError; }; ValueInt: PROC [lti: LTIndex] RETURNS [INT] = INLINE { class: LitClass; val: Symbols.UNSPEC; int: INT; [class, val] ¬ Value[lti]; int ¬ SymbolOps.DecodeInt[val]; SELECT class FROM unsigned, either => IF int >= 0 THEN RETURN [int]; signed => RETURN [int]; ENDCASE; ERROR ClassError; }; ValueReal: PROC [lti: LTIndex] RETURNS [REAL] = INLINE { class: LitClass; val: Symbols.UNSPEC; real: REAL; [class, val] ¬ Value[lti]; real ¬ SymbolOps.DecodeReal[val]; IF class # real THEN ERROR ClassError ELSE RETURN [real]; }; <> CopyStringLiteral: PROC [baseP: Literals.Finger, index: Literals.STIndex] RETURNS [Literals.STIndex]; FindHeapString: PROC [STIndex, Symbols.Type] RETURNS [STIndex]; FindLocalString: PROC [STIndex] RETURNS [STIndex]; FindString: PROC [ConvertUnsafe.SubString] RETURNS [STIndex]; MasterString: PROC [sti: STIndex] RETURNS [MSTIndex]; ResetLocalStrings: PROC RETURNS [STIndex]; StringReference: PROC [STIndex]; StringValue: PROC [STIndex] RETURNS [LONG STRING]; TextType: PROC [STIndex] RETURNS [Symbols.Type]; }.