DIRECTORY PrincOps USING[SD], RTSD USING[sMapStiStd], RTSymbolDefs USING[nullHandle], RTTypesBasicPrivate USING[STDesc, SymbolTableIndex, InitialSTIRangeSize, MapStiStd, LOOPHOLEDTMapStiStd, RSTDesc, RMapStiStd], SafeStorage USING[TypeIndex], UnsafeStorage USING[GetSystemUZone]; SymbolAccessImpl: MONITOR -- protects MapStiStd IMPORTS RTTypesBasicPrivate, UnsafeStorage EXPORTS RTTypesBasicPrivate = BEGIN OPEN RTTypesBasicPrivate, SafeStorage; lastSTIndex: TypeIndex _ 0; TooManyTypes: ERROR = CODE; BlessMapStiStd: PUBLIC ENTRY PROC = { ENABLE UNWIND => NULL; t: LOOPHOLEDTMapStiStd = LOOPHOLE[MapStiStd]; LOOPHOLE[MapStiStd, LOOPHOLEDTMapStiStd] _ NIL; MapStiStd _ NEW[RMapStiStd[InitialSTIRangeSize]]; FOR i: SymbolTableIndex IN [1..lastSTIndex] DO MapStiStd[i] _ NEW[STDesc _ t[i]^] ENDLOOP; LOOPHOLE[LONG[@PrincOps.SD[RTSD.sMapStiStd]], LONG POINTER TO LONG POINTER]^ _ LOOPHOLE[MapStiStd, LONG POINTER]; }; FindSTI: PUBLIC ENTRY PROC[std: STDesc, initializing: BOOL] RETURNS[i: SymbolTableIndex] = { ENABLE UNWIND => NULL; FOR i IN [1..lastSTIndex] DO IF MapStiStd[i].symbolsStamp = std.symbolsStamp AND (std.bcd = NIL OR std.sgi = MapStiStd[i].sgi) THEN { IF MapStiStd[i].sth = RTSymbolDefs.nullHandle THEN { IF initializing THEN LOOPHOLE[MapStiStd, LOOPHOLEDTMapStiStd][i].sth _ std.sth ELSE MapStiStd[i].sth _ std.sth; }; RETURN[i]; }; ENDLOOP; IF lastSTIndex = InitialSTIRangeSize - 1 THEN ERROR TooManyTypes; i _ lastSTIndex _ lastSTIndex + 1; IF initializing THEN LOOPHOLE[MapStiStd, LOOPHOLEDTMapStiStd][i] _ UnsafeStorage.GetSystemUZone[].NEW[STDesc _ std] ELSE MapStiStd[i] _ NEW[STDesc _ std]; }; END. ²SymbolAccessImpl.mesa BEWARE of assumptions below about RC activity. This module is used before the sun comes up. Last Modified By Paul Rovner On August 17, 1983 10:43 am Ê­˜Jšœ™Jšœ\™\šœ8™8J˜šÏk ˜ Jšœ œœ˜Jšœœ ˜Jšœ œ ˜Jšœœe˜~Jšœ œ ˜Jšœœ˜$—J˜šœœÏc˜0Jšœ#˜*Jšœ˜—Jšœœœ"˜.˜Jšœ˜Jšœœœ˜J˜š ÏnÐbn œœœœ˜%Jšœœœ˜Jšœœ ˜-J˜Jšœ#œ˜/Jšœ œ"˜1J˜šœœ˜+Jšœœœ˜.—J˜šœœ œœœœœœœ˜LJšœœ œœ˜$—Jšœ˜J˜—š Ÿœœœœœ˜;Jšœ˜ Jšœœœ˜šœœ˜š˜šœ-˜/šœ œœœ˜8šœ+˜-šœ˜šœ ˜Jšœœ1˜>Jšœ˜ —Jšœ˜——Jšœ˜ Jšœ˜———Jšœ˜—Jšœ'œœ˜AJšœ"˜"šœ ˜šœœ#˜0Jšœ,œ˜=—Jšœœ˜&—Jšœ˜——J˜Jšœ˜—J˜—…—l Ë