DIRECTORY UnsafeStorage; UnsafeStorageImpl: CEDAR PROGRAM IMPORTS EXPORTS UnsafeStorage ~ BEGIN UZone: TYPE = POINTER TO UZoneRecord; UZoneRecord: TYPE = MACHINE DEPENDENT RECORD [new: NewProc, free: FreeProc]; NewProc: TYPE = UNSAFE PROC[self: UZone, units: CARD32] RETURNS[POINTER]; FreeProc: TYPE = UNSAFE PROC[self: UZone, object: POINTER]; systemUZone: UNCOUNTED ZONE ฌ GetUZone[New, Free]; GetSystemUZone: PUBLIC PROC RETURNS [UNCOUNTED ZONE] = { RETURN[systemUZone]}; GetUZone: PROC [new: NewProc, free: FreeProc] RETURNS [UNCOUNTED ZONE] = TRUSTED { uZone: UZone ฌ new[NIL, UNITS[UZoneRecord]]; uZoneญ ฌ [new, free]; RETURN[LOOPHOLE[uZone]]}; overheadBytes: CARD = 8; -- There exist broken clients that use these bytes for there own purposes. New: NewProc = { malloc: PROC[units: CARD32] RETURNS [WORD] ~ TRUSTED MACHINE CODE { "GC_malloc" }; ptr: WORD ฌ malloc[units+overheadBytes]; RETURN [LOOPHOLE[ptr+overheadBytes]]; }; Free: FreeProc = { free: PROC[p: CARDINAL] = TRUSTED MACHINE CODE { "GC_free" }; ptr: CARDINAL ฌ LOOPHOLE[object, CARDINAL]-overheadBytes; free[LOOPHOLE[ptr]]; }; NewUObject: PUBLIC PROC [size: CARDINAL, zone: UNCOUNTED ZONE] RETURNS [LONG POINTER] = TRUSTED { RETURN [New[LOOPHOLE[zone, UZone], size]]; }; GetTransientPageUZone: PUBLIC PROC RETURNS [UNCOUNTED ZONE] = {ERROR NYI}; NYI: ERROR ~ CODE ; InvalidPointer: PUBLIC ERROR [ptr: LONG POINTER] ~ CODE; END. า UnsafeStorageImpl.mesa Copyright ำ 1988, 1991 by Xerox Corporation. All rights reserved. Andy Litman May 25, 1988 5:42:58 pm PDT JKF August 1, 1988 11:11:22 am PDT Chauser, July 22, 1992 10:01 am PDT ส–(cedarcode) style•NewlineDelimiter ™šœ™Icodešœ ฯeœ7™BKšœ'™'K™"K™#—K˜šฯk ˜ Kšœ˜—K˜Kšฯnœžœž˜ Kšžœ˜Kšžœ˜Kšœž˜˜Kšœžœžœžœ ˜%Kš œ žœžœž œžœ ˜LKš œ žœžœžœžœžœžœ˜IKš œ žœžœžœžœ˜;—˜Kšœ ž œžœ˜2K˜š Ÿœžœžœžœž œžœ˜8Kšžœ˜K˜—š Ÿœžœ žœž œžœžœ˜RKšœžœžœ˜,Kšœ˜Kšžœžœ ˜K˜—Kš œžœฯc       "  ˜cK˜šŸœ˜šœžœžœžœžžžžœžœžœžœ˜CK˜ Kšœ˜—Kšœžžžžœ˜(Kšžœžœ˜%—K˜K˜šŸœ˜š œžœžœžœžœž˜.K˜—Kšœžœžœ žœ˜9Kšœžœ ˜K˜——K˜˜šŸ œž œž œž œžœžœžœžœžœ˜aKšžœžœ˜*Kšœ˜K˜K™—KšŸœž œžœž œžœžœžœ˜JK™Kšžœžœžœ˜Kš Ÿœž œžœžœžœ˜9K˜—Kšžœ˜—…—ˆ \