-- file SymLiteralOps.Mesa
-- last modified by Satterthwaite, April 15, 1983 9:52 am

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

SymLiteralOps: DEFINITIONS = {

 -- typeIds

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

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

 -- atoms and REFs to literals

  RefLitItem: TYPE = RECORD [
    SELECT kind: * FROM
      atom => [pName: Symbols.Name],
      text => [value: Literals.STIndex],
      ENDCASE];
      
  EnterAtom: PROC [name: Symbols.Name];
  AtomIndex: PROC [name: Symbols.Name] RETURNS [RTBcd.RefLitIndex];
  AtomRef: PROC [name: Symbols.Name] 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 [pad: BOOL];
  Finalize: PROC;

  }.