-- file SymLiteralOps.Mesa
-- last modified by Satterthwaite, 25-Feb-82 14:51:08

DIRECTORY
  Alloc: TYPE USING [Handle],
  Literals: TYPE USING [STIndex],
  RTBcd: TYPE USING [RefLitIndex, TypeIndex],
  Symbols: TYPE USING [HTIndex, MDIndex, SEIndex],
  Tree: TYPE USING [Link];

SymLiteralOps: DEFINITIONS = {

 -- typeIds

  EnterType: PROC [type: Symbols.SEIndex, canonical: BOOLEAN←TRUE];
  TypeIndex: PROC [type: Symbols.SEIndex, canonical: BOOLEAN←TRUE] RETURNS [RTBcd.TypeIndex];
  TypeRef: PROC [type: Symbols.SEIndex, canonical: BOOLEAN←TRUE] RETURNS [Tree.Link];
  DescribeTypes: PROC RETURNS [offset, length: CARDINAL];
  EnumerateTypes: PROC [PROC [canonical: BOOLEAN, type: Symbols.SEIndex]];

  UTypeId: PROC [type: Symbols.SEIndex] RETURNS [Symbols.MDIndex, Symbols.SEIndex];

 -- atoms and REFs to literals

  RefLitItem: TYPE = RECORD [
    SELECT kind: * FROM
      atom => [pName: Symbols.HTIndex],
      text => [value: Literals.STIndex]
      ENDCASE];
      
  EnterAtom: PROC [name: Symbols.HTIndex];
  AtomIndex: PROC [name: Symbols.HTIndex] RETURNS [RTBcd.RefLitIndex];
  AtomRef: PROC [name: Symbols.HTIndex] RETURNS [Tree.Link];

  EnterText: PROC [sti: Literals.STIndex];
  TextIndex: PROC [sti: Literals.STIndex] RETURNS [RTBcd.RefLitIndex];
  TextRef: PROC [sti: Literals.STIndex] RETURNS [Tree.Link];

  DescribeRefLits: PROC RETURNS [offset, length: CARDINAL];
  EnumerateRefLits: PROC [PROC [RefLitItem]];

 -- state transitions

  Initialize: PROC [Alloc.Handle];
  Reset: PROC;
  Finalize: PROC;

  }.