DIRECTORY TreesDefs USING [NodeType, TreeNode], Storage USING [Free, FreeString, Node]; TreesImpl: PROGRAM IMPORTS Storage EXPORTS TreesDefs = { MakeNode: PUBLIC PROCEDURE [left, right: LONG POINTER TO TreesDefs.TreeNode, string: LONG STRING, nodeType: TreesDefs.NodeType] RETURNS [newNode: LONG POINTER TO TreesDefs.TreeNode] = { newNode _ Storage.Node[nwords: SIZE[TreesDefs.TreeNode]]; newNode.left _ left; newNode.right _ right; newNode.lastInList _ NIL; newNode.string _ string; newNode.nodeType _ nodeType; newNode.char _ FALSE; newNode.short _ FALSE; newNode.int _ FALSE; newNode.long _ FALSE; newNode.unsigned _ FALSE; newNode.float _ FALSE; newNode.double _ FALSE; newNode.structure _ FALSE; newNode.union _ FALSE; newNode.enumeration _ FALSE; newNode.class _ noClass; newNode.declaratorType _ unknown; newNode.operationType _ unknown; newNode.dataType _ none; newNode.typeString _ NIL; newNode.baseDataType _ none; newNode.pointerCount _ 0; }; FreeTree: PUBLIC PROCEDURE [node: LONG POINTER TO TreesDefs.TreeNode] = { IF node = NIL THEN RETURN; FreeTree[node.left]; FreeTree[node.right]; IF node.string # NIL THEN Storage.FreeString[node.string]; Storage.Free[node]; }; }.