-- file CompilerUtil.Mesa
-- last modified by Satterthwaite, 25-Feb-82 15:15:18

DIRECTORY
  Alloc: TYPE USING [Handle],
  CompilerOps: TYPE USING [StreamId],
  FileStream: TYPE USING [FileByteIndex],
  Stream: TYPE USING [Handle],
  Strings: TYPE USING [String],
  Tree: TYPE USING [Link, Map, Scan];

CompilerUtil: DEFINITIONS = {

 -- stream management

  StreamId: TYPE = CompilerOps.StreamId;

  AcquireStream: PROC [StreamId] RETURNS [Stream.Handle];
  ReleaseStream: PROC [StreamId];

 -- binary table management

  TableId: TYPE = MACHINE DEPENDENT {parse, error, debug, (255)};

  AcquireTable: PROC [TableId] RETURNS [LONG POINTER];
  ReleaseTable: PROC [TableId];

 -- scratch zone management
 
  AcquireZone: PROC RETURNS [UNCOUNTED ZONE];
  ReleaseZone: PROC [UNCOUNTED ZONE] = INLINE {};
  
 -- compiler passes

  PassIndex: TYPE = {utilities, pass1, pass2, pass3, pass3p, pass4, pass5, debug};

  PrefillSymbols: PROC;

  P1Unit: PROC RETURNS [BOOLEAN];
  P2Unit: Tree.Map;
  P3Unit: Tree.Map;
  P3Postlude: PROC [expand: BOOLEAN];
  P4Unit: Tree.Scan;
  P5module: PROC;

 -- object output

  Address: TYPE = LONG POINTER;
  
  StartObjectFile: PROC [Stream.Handle, UNCOUNTED ZONE];
  EndObjectFile: PROC [update: BOOLEAN];
  TableOut: PROC [Alloc.Handle];
  RTTableOut: PROC [Alloc.Handle];

  NextFilePage: PROC RETURNS [CARDINAL];
  StartBCD: PROC;
  ReadBCDOffset: PROC RETURNS [CARDINAL];
  ReadBCDIndex: PROC RETURNS [FileStream.FileByteIndex];
  AppendBCDWord: PROC [word: UNSPECIFIED];
  AppendBCDWords: PROC [addr: Address, n: CARDINAL];
  AppendBCDString: PROC [s: Strings.String];
  FillBCDPage: PROC;
  UpdateBCDWords: PROC [offset: CARDINAL, addr: Address, n: CARDINAL];
  EndBCD: PROC;

 -- debugging

  PrintTree: PROC [table: Alloc.Handle, root: Tree.Link];
  PrintBodies: PROC [table: Alloc.Handle];
  PrintSymbols: PROC [table: Alloc.Handle, definitions: BOOLEAN];

  }.