-- RCT.Mesa -- Last Edited by: Willie-Sue, December 10, 1982 11:48 am -- Last Edited by: Paul Rovner, December 10, 1982 3:02 pm DIRECTORY RefCounts, RTRefCounts USING[RefCt]; RCT: PROGRAM IMPORTS RefCounts = BEGIN totalEntries: INT _ 0; entriesMarked: INT _ 0; overMax: INT _ 0; pinned: INT _ 0; maxCount: NAT = 100; entryCountArray: ARRAY[0..maxCount] OF NAT _ ALL[0]; proc: PROC[ref: REF ANY, count: NAT, markedAsOnStack: BOOL] RETURNS[stop: BOOL _ FALSE] = {totalEntries _ totalEntries + 1; IF count < 0 THEN ERROR; IF markedAsOnStack THEN entriesMarked _ entriesMarked + 1; IF count <= maxCount THEN entryCountArray[count] _ entryCountArray[count] + 1 ELSE {overMax _ overMax + 1; IF count = LAST[RTRefCounts.RefCt] THEN pinned _ pinned + 1}; }; DoIt: PROC = {totalEntries _ 0; entriesMarked _ 0; overMax _ 0; pinned _ 0; FOR i: NAT IN [0..maxCount] DO entryCountArray[i] _ 0; ENDLOOP; [] _ RefCounts.Enumerate[proc]; }; END. Ê%˜Jšœï˜ïJ˜—…—ò