<<>> <> <> <> <> <> <> <> <> <> SafeStorage: CEDAR DEFINITIONS = BEGIN <> GetSystemZone: PROC RETURNS [ZONE]; <> GetPermanentZone: PROC RETURNS [ZONE]; <> <<>> GetUntracedZone: UNSAFE PROC RETURNS [ZONE]; <> <> NewObject: PRIVATE PROC [nUnits: INT, type: SafeStorage.Type] RETURNS [REF] ~ TRUSTED MACHINE CODE { "XR_NewObject" }; NewUntracedObject: PROC [nUnits: INT, type: Type] RETURNS [REF] ~ TRUSTED MACHINE CODE { "XR_NewUntracedObject" }; GetTypeIndex: PRIVATE PROC [typeString: STRING, struct, rcmap: POINTER] RETURNS [Type] ~ TRUSTED MACHINE CODE { "XR_GetTypeIndex" }; <> SetCollectionInterval: PROC [newInterval: CARD] RETURNS [previous: CARD]; <> ReclaimCollectibleObjects: PROC [suspendMe: BOOL ¬ TRUE, traceAndSweep: BOOL ¬ FALSE]; <> <> ReclamationReason: TYPE = {clientRequest, clientTAndSRequest, clientNoTraceRequest, rcTableOverflow, allocationInterval, quantaNeeded, finalizationThreshold}; IsCollectorActive: PROC RETURNS[active: BOOL, previousIncarnation: INT]; WaitForCollectorStart: PROC RETURNS[incarnation: INT, reason: ReclamationReason, wordsAllocated, objectsAllocated: INT -- since previous collection was initiated --]; <<>> WaitForCollectorDone: PROC RETURNS[incarnation: INT, reason: ReclamationReason, wordsReclaimed: INT, objectsReclaimed: INT]; <> CurrentByteCount: PROC RETURNS [CARD]; <> CurrentObjectCount: PROC RETURNS [CARD]; <> TotalByteCount: PROC RETURNS [CARD]; <> TotalObjectCount: PROC RETURNS [CARD]; <> <<>> HeapSize: PROC RETURNS [CARD]; <> <> TypeIndex: TYPE = CARDINAL; Type: TYPE = MACHINE DEPENDENT {null(0), last(TypeIndex.LAST)}; nullType: Type = VAL[0]; unspecType: Type = VAL[1]; -- the distinguished type of UNSPECIFIED fhType: Type = VAL[2]; -- the distinguished type of localFrames gfhType: Type = VAL[3]; -- the distinguished type of globalFrames anyType: Type = VAL[4]; -- the distinguished type of ANY lastPredefinedTypeIndex: TypeIndex = 4; <> <> GetReferentType: PROC[ref: REF ANY] RETURNS[type: Type]; GetCanonicalReferentType: PROC[ref: REF ANY] RETURNS[type: Type]; <<... gets the canonical type for the given type>> EquivalentTypes: PROC[t1, t2: Type] RETURNS[BOOL]; <<... tests the two types for equivalence (GetCanonicalType[t1] = GetCanonicalType[t2])>> GetCanonicalType: PROC[type: Type] RETURNS[Type]; <<... gets the canonical type for the given type>> IsReferentType: PROC[ref: REF ANY, type: Type] RETURNS[BOOL]; <<... tests the given ref for having the given referent type>> NarrowRef: PROC[ref: REF ANY, type: Type] RETURNS[REF ANY]; <> <> <> MemoryExhausted: ERROR; NarrowFault: ERROR; NarrowRefFault: ERROR [ref: REF ANY, targetType: Type]; UnsafeProcAssignment: SIGNAL [proc: PROC ANY RETURNS ANY]; InvalidType: ERROR [type: Type]; END. <<>> <> <> <>