DIRECTORY Finalize; FinalizeImpl: CEDAR PROGRAM EXPORTS Finalize ~ { FinalizationState: TYPE ~ Finalize.FinalizationState; Handle: TYPE ~ REF FinalizableObject; FinalizableObject: PUBLIC TYPE ~ WORD32 MACHINE DEPENDENT RECORD [ word1(0): CARD32, word2(1): CARD32, finalizationQueue(2): FinalizationQueue, next(3): Handle, clientData(4): REF ]; FinalizationQueue: TYPE ~ REF FinalizationQueueRep; FinalizationQueueRep: PUBLIC TYPE ~ WORD32 MACHINE DEPENDENT RECORD [ head(0): Handle, tail(1): Handle, nonempty(2): CONDITION ]; IsHandle: PUBLIC PROC [x: REF] RETURNS [BOOL] = { RETURN [ISTYPE [x, REF FinalizableObject]] }; NarrowHandle: PUBLIC PROC [x: REF] RETURNS [Handle] = { RETURN [NARROW [x, REF FinalizableObject]] }; NewFQ: PUBLIC PROC RETURNS [FinalizationQueue] ~ { XRNewFQ: PROC RETURNS [FinalizationQueue] ~ TRUSTED MACHINE CODE { "XR_NewFQ" }; RETURN[ XRNewFQ[] ]; }; FQEmpty: PUBLIC PROC [fq: FinalizationQueue] RETURNS[BOOL] ~ { XRFQEmpty: PROC [fq: FinalizationQueue] RETURNS[BOOL] ~ TRUSTED MACHINE CODE { "XR_FQEmpty" }; RETURN [ XRFQEmpty[fq] ]; }; XRFQNextNoAbort: PROC [fq: FinalizationQueue] RETURNS[handle: Handle] ~ TRUSTED MACHINE CODE { "XR_FQNextNoAbort" }; FQNextNoAbort: PUBLIC PROC [fq: FinalizationQueue] RETURNS[handle: Handle] ~ { RETURN [ XRFQNextNoAbort[fq] ]; }; FQNext: PUBLIC PROC [fq: FinalizationQueue] RETURNS[handle: Handle ¬ NIL] ~ { handle ¬ XRFQNextNoAbort[fq]; IF handle = NIL THEN ERROR ABORTED; }; EnableFinalization: PUBLIC PROC [object: REF, fq: FinalizationQueue, clientData: REF ¬ NIL] RETURNS [handle: Handle] ~ { XREnableFinalization: PROC [object: REF, fq: FinalizationQueue, handle: Handle] ~ TRUSTED MACHINE CODE { "XR_EnableFinalization" }; handle ¬ NEW[ FinalizableObject ¬ [0, 0, fq, NIL, clientData]]; XREnableFinalization[object, fq, handle]; }; DisableFinalization: PUBLIC PROC [handle: Handle] RETURNS [oldState: FinalizationState] ~ { XRDisableFinalization: PROC [handle: Handle] RETURNS [oldState: FinalizationState] ~ TRUSTED MACHINE CODE { "XR_DisableFinalization" }; RETURN[ XRDisableFinalization[handle] ]; }; ReenableFinalization: PUBLIC PROC [handle: Handle, fq: FinalizationQueue] RETURNS [oldState: FinalizationState] ~ { XRReenableFinalization: PROC [handle: Handle, fq: FinalizationQueue] RETURNS [oldState: FinalizationState] ~ TRUSTED MACHINE CODE { "XR_ReenableFinalization" }; RETURN[ XRReenableFinalization[handle, fq] ]; }; GetFinalizationState: PUBLIC PROC [handle: Handle] RETURNS [state: FinalizationState] ~ { XRGetFinalizationState: PROC [handle: Handle] RETURNS [state: FinalizationState] ~ TRUSTED MACHINE CODE { "XR_GetFinalizationState" }; RETURN[ XRGetFinalizationState[handle] ]; }; HandleToObject: PUBLIC PROC [handle: Handle] RETURNS [object: REF] ~ { XRHandleToObject: PROC [handle: Handle] RETURNS [object: REF] ~ TRUSTED MACHINE CODE { "XR_HandleToObject" }; RETURN[ XRHandleToObject[handle] ]; }; GetClientData: PUBLIC PROC [handle: Handle] RETURNS [REF] ~ { RETURN[ handle.clientData ]; }; }. ¦ FinalizeImpl.mesa Copyright Σ 1989, 1991 by Xerox Corporation. All rights reserved. Demers, March 27, 1989 2:35:09 pm PST Willie-Sue Orr, March 30, 1989 1:48:04 pm PST Willie-s, August 6, 1991 1:18 pm PDT Christian Jacobi, July 20, 1992 4:40 pm PDT Types --the four first words are exactly as required by garbage collector --further fields are unknown to the garbage collector FQ Manipulation Object Finalization Κe•NewlineDelimiter –(cedarcode) style™code™Kšœ Οeœ7™BK™%K™-K™$K™+K˜—šΟk ˜ K˜ K˜—šΟn œžœž˜Kšžœ ˜K˜head™Kšœžœ˜5K˜Kšœžœžœ˜%š œžœžœžœžœž œžœ˜BK™CKšœ žœ˜Kšœ žœ˜K˜(K˜K™5Kšœž˜K˜K˜—Kšœžœžœ˜3š œžœžœžœžœž œžœ˜EK˜K˜Kšœ ž ˜Kšœ˜K˜—š Ÿœž œžœžœžœ˜1Kšžœžœžœ˜*K˜K˜—š Ÿ œžœžœžœžœ ˜7Kšžœžœžœ˜*K˜K˜——™šŸœžœžœžœ˜2Kš Ÿœžœžœžœžœžœ˜PKšžœ˜K˜K˜—š Ÿœžœžœžœžœ˜>KšŸ œžœžœžœžœžœžœ˜^Kšžœ˜K˜K˜—Kš Ÿœžœžœžœžœžœ˜tK˜šŸ œžœžœžœ˜NKšžœ˜K˜K˜—š Ÿœžœžœžœžœ˜MK˜Kš žœ žœžœžœžœ˜#K˜——™šŸœžœžœ žœ%žœžœžœ˜xKš Ÿœžœ žœ+žœžœžœ˜ƒKšœ žœ!žœ˜?Kšœ)˜)K˜K˜—šŸœžœžœžœ"˜[Kš Ÿœžœžœ!žœžœžœ˜‡Kšžœ"˜(K˜K˜—šŸœžœžœ)žœ"˜sKš Ÿœžœ)žœ!žœžœžœ˜ Kšžœ'˜-K˜K˜—šŸœžœžœžœ˜YKš Ÿœžœžœžœžœžœ˜†Kšžœ#˜)K˜K˜—š Ÿœžœžœžœ žœ˜FKšŸœžœžœ žœžœžœžœ˜mKšžœ˜#K˜K˜—š Ÿ œžœžœžœžœ˜=Kšžœ˜K˜K˜——K˜—K˜K˜—…— ΔΟ