-- Heap.mesa (last edited by: McJones on: May 28, 1980 1:07 PM)
-- Alto version, HGM, January 30, 1981 4:40 PM
Heap: DEFINITIONS =
BEGIN
NWords: TYPE = [0..32766); -- Limit on node size
systemZone: READONLY UNCOUNTED ZONE;
systemMDSZone: READONLY MDSZone;
MakeNode: PROCEDURE [z: UNCOUNTED ZONE ← systemZone, n: NWords]
RETURNS [LONG POINTER];
FreeNode: PROCEDURE [z: UNCOUNTED ZONE ← systemZone, p: LONG POINTER];
MakeMDSNode: PROCEDURE [z: MDSZone ← systemMDSZone, n: NWords]
RETURNS [POINTER];
FreeMDSNode: PROCEDURE [z: MDSZone ← systemMDSZone, p: POINTER];
MakeString: PROCEDURE [z: UNCOUNTED ZONE ← systemZone, maxlength: CARDINAL]
RETURNS [LONG STRING] = INLINE {RETURN[z.NEW[StringBody [maxlength]]]};
FreeString: PROCEDURE [z: UNCOUNTED ZONE ← systemZone, s: LONG STRING] = INLINE
{z.FREE[@s]}; -- note this sets local s to NIL
MakeMDSString: PROCEDURE [z: MDSZone ← systemMDSZone, maxlength: CARDINAL]
RETURNS [STRING] = INLINE {RETURN[z.NEW[StringBody [maxlength]]]};
FreeMDSString: PROCEDURE [z: MDSZone ← systemMDSZone, s: STRING] = INLINE {
z.FREE[@s]}; -- note this sets local s to NIL
END.