-- file CompilerOps.Mesa
-- last modified by Satterthwaite, June 7, 1983 10:08 am
-- last modified by Russ Atkinson, 28-Aug-81 12:26:43

DIRECTORY
  File: TYPE USING [Capability],
  FileSegment: TYPE USING [Span],
  FileParms: TYPE USING [ActualId, Ops],
  Stream: TYPE USING [Handle],
  Strings: TYPE USING [String],
  TimeStamp: TYPE USING [Stamp];

CompilerOps: DEFINITIONS = {

 -- transaction definitions

  LetterSwitches: TYPE = PACKED ARRAY CHAR['a..'z] OF BOOL;
  
  Transaction: TYPE = RECORD [
   -- action
    op: {compile, replace} ← $compile,
   -- input
    source: FileParms.ActualId,
    sourceStream: Stream.Handle,
    fileParms: FileParms.Ops,
    switches: LetterSwitches,
    pattern: FileParms.ActualId,
    objectName: Strings.String,
    objectFile: File.Capability,
    debugPass: CARDINAL←CARDINAL.LAST,
   -- output
    objectVersion: TimeStamp.Stamp,
    interface: BOOL,
    matched: BOOL,
    sourceTokens: CARDINAL,
    nErrors, nWarnings: CARDINAL,
    objectBytes, objectFrameSize, linkCount: CARDINAL,
    bcdPages, codePages, symbolPages: FileSegment.Span,
   -- interaction
    getStream: PROC [StreamId] RETURNS [Stream.Handle],
    startPass: PROC [CARDINAL] RETURNS [goOn: BOOL]];

  StreamId: TYPE = MACHINE DEPENDENT {source, object, log, (255)};

 -- inquiries
 
  DefaultSwitches: PROC RETURNS [LetterSwitches];
  CompilerVersion: PROC RETURNS [TimeStamp.Stamp];
  AppendHerald: PROC [Strings.String];
   
 -- operations
 
  Start: PROC [scratchZone: UNCOUNTED ZONE];
  DoTransaction: PROC [POINTER TO Transaction];		-- really a VAR
  Stop: PROC;
   
  Punt: ERROR;

  }.