-- DHeap.mesa  last edit, Bruce  July 30, 1980  7:45 AM

DIRECTORY
  DebugOps USING [Foo],
  Mopcodes USING [zBLT, zBLTL];

DHeap: DEFINITIONS =
  BEGIN

  Initialize: PROCEDURE;
  FreeEverything: PROCEDURE;

  AllocFob: PROCEDURE RETURNS [f: DebugOps.Foo];
  FreeFobs: PROCEDURE;

  -- utilities
  FreeLong: PROC [p: LONG POINTER];
  NotInHeap: SIGNAL;

  Zero: PROC [p: POINTER, l: CARDINAL] = INLINE
    BEGIN
    IF l = 0 THEN RETURN;
    p↑ ← 0;
    COPY[from: p, to: p+1, nwords: l-1]
    END;

  COPY: PROC [from: POINTER, nwords: CARDINAL, to: POINTER] =
    MACHINE CODE BEGIN Mopcodes.zBLT END;

  LongCOPY: PROC [from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] =
    MACHINE CODE BEGIN Mopcodes.zBLTL END;

  END.