DIRECTORY ConvertUnsafe: TYPE USING [LS, SubString], FS: TYPE USING [nullOpenFile, OpenFile], Symbols: TYPE, SymbolSegment: TYPE, TimeStamp: TYPE USING [Stamp], Tree: TYPE USING [Link], VM: TYPE USING [Interval, nullInterval]; SymbolOperations: DEFINITIONS = BEGIN Base: TYPE = Symbols.Base; BitAddress: TYPE = Symbols.BitAddress; BitCount: TYPE = Symbols.BitCount; BTIndex: TYPE = Symbols.BTIndex; CSEIndex: TYPE = Symbols.CSEIndex; CTXIndex: TYPE = Symbols.CTXIndex; CTXNull: CTXIndex = Symbols.CTXNull; ExtIndex: TYPE = SymbolSegment.ExtIndex; ExtNull: ExtIndex = SymbolSegment.ExtNull; ExtensionType: TYPE = Symbols.ExtensionType; FGTEntry: TYPE = SymbolSegment.FGTEntry; FieldBitCount: TYPE = Symbols.FieldBitCount; ISEIndex: TYPE = Symbols.ISEIndex; ISENull: ISEIndex = Symbols.ISENull; HashVector: TYPE = Symbols.HashVector; HTRecord: TYPE = Symbols.HTRecord; HVIndex: TYPE = Symbols.HVIndex; Linkage: TYPE = Symbols.Linkage; LongString: TYPE = ConvertUnsafe.LS; MDIndex: TYPE = Symbols.MDIndex; MDNull: MDIndex = Symbols.MDNull; Name: TYPE = Symbols.Name; nullName: Name = Symbols.nullName; RecordSEIndex: TYPE = Symbols.RecordSEIndex; RefClass: TYPE = Symbols.RefClass; STHeader: TYPE = SymbolSegment.STHeader; STHeaderPtr: TYPE = LONG POINTER TO STHeader; SubString: TYPE = ConvertUnsafe.SubString; TransferMode: TYPE = Symbols.TransferMode; Type: TYPE = Symbols.Type; TypeClass: TYPE = Symbols.TypeClass; WordCount: TYPE = Symbols.WordCount; SymbolTableBase: TYPE = REF SymbolTableBaseRep; SymbolTableBaseRep: TYPE = RECORD[ interval: VM.Interval_VM.nullInterval, file: FS.OpenFile_FS.nullOpenFile, hashVec: LONG POINTER TO HashVector_NIL, -- hash index ht: LONG DESCRIPTOR FOR ARRAY Name OF HTRecord_NIL, -- hash table ssb: LongString_NIL, -- id string seb: Base_NIL, -- se table ctxb: Base_NIL, -- context table mdb: Base_NIL, -- module directory base bb: Base_NIL, -- body table tb: Base_NIL, -- tree area ltb: Base_NIL, -- literal area extb: Base_NIL, -- extension map mdLimit: MDIndex_MDNull, -- module directory size extLimit: ExtIndex_ExtNull, -- extension size mainCtx: CTXIndex_CTXNull, stHandle: STHeaderPtr_NIL, sourceFile: LongString_NIL, fgTable: LONG DESCRIPTOR FOR ARRAY OF FGTEntry_NIL ]; Acquire: PROC[file: FS.OpenFile, startPage: CARDINAL, pages: CARDINAL] RETURNS[stb: SymbolTableBase _ NIL]; Release: PROC[stb: SymbolTableBase]; FindString: PROC[stb: SymbolTableBase, s: SubString] RETURNS[name: Name]; HashValue: PROC[stb: SymbolTableBase, s: SubString] RETURNS[HVIndex]; SubStringForName: PROC[stb: SymbolTableBase, name: Name] RETURNS[s: SubString]; CtxEntries: PROC[stb: SymbolTableBase, ctx: CTXIndex] RETURNS[n: CARDINAL]; FirstCtxSe: PROC[stb: SymbolTableBase, ctx: CTXIndex] RETURNS[ISEIndex]; NextSe: PROC[stb: SymbolTableBase, sei: ISEIndex] RETURNS[ISEIndex]; SearchContext: PROC [stb: SymbolTableBase, name: Name, ctx: CTXIndex] RETURNS[ISEIndex]; SeiForValue: PROC [stb: SymbolTableBase, value: CARDINAL, ctx: CTXIndex] RETURNS[ISEIndex]; FindMdi: PROC [stb: SymbolTableBase, stamp: TimeStamp.Stamp] RETURNS[MDIndex]; ArgCtx: PROC [stb: SymbolTableBase, type: CSEIndex] RETURNS[CTXIndex]; ArgRecord: PROC [stb: SymbolTableBase, type: CSEIndex] RETURNS[RecordSEIndex]; ClusterSe: PROC[stb: SymbolTableBase, type: Type] RETURNS[Type]; NormalType: PROC[stb: SymbolTableBase, type: CSEIndex] RETURNS[CSEIndex]; RecordLink: PROC [stb: SymbolTableBase, type: RecordSEIndex] RETURNS[RecordSEIndex]; RecordRoot: PROC [stb: SymbolTableBase, type: RecordSEIndex] RETURNS[root: RecordSEIndex]; ReferentType: PROC [stb: SymbolTableBase, type: CSEIndex] RETURNS[CSEIndex]; TransferTypes: PROC [stb: SymbolTableBase, type: Type] RETURNS[typeIn, typeOut: RecordSEIndex]; TypeForm: PROC[stb: SymbolTableBase, type: Type] RETURNS[TypeClass]; TypeLink: PROC[stb: SymbolTableBase, type: Type] RETURNS[Type]; TypeRoot: PROC[stb: SymbolTableBase, type: Type] RETURNS[root: Type]; UnderType: PROC[stb: SymbolTableBase, type: Type] RETURNS[CSEIndex]; XferMode: PROC[stb: SymbolTableBase, type: Type] RETURNS[TransferMode]; BitsForRange: PROC [stb: SymbolTableBase, maxValue: CARDINAL] RETURNS[nBits: CARDINAL _ 1]; BitsForType: PROC[stb: SymbolTableBase, type: Type] RETURNS[BitCount _ 0]; BitsPerElement: PROC [stb: SymbolTableBase, type: Type, packed: BOOL] RETURNS[BitCount]; Cardinality: PROC [stb: SymbolTableBase, type: Type] RETURNS[LONG CARDINAL]; FindExtension: PROC [stb: SymbolTableBase, sei: ISEIndex] RETURNS[type: ExtensionType, tree: Tree.Link]; FnField: PROC [stb: SymbolTableBase, field: ISEIndex] RETURNS[offset: BitAddress, size: FieldBitCount]; NameForSe: PROC[stb: SymbolTableBase, sei: ISEIndex] RETURNS[Name]; LinkMode: PROC[stb: SymbolTableBase, sei: ISEIndex] RETURNS[Linkage]; RecField: PROC [stb: SymbolTableBase, field: ISEIndex] RETURNS[offset: BitAddress, size: FieldBitCount]; RCType: PROC[stb: SymbolTableBase, type: CSEIndex] RETURNS[RefClass]; VariantField: PROC[stb: SymbolTableBase, type: CSEIndex] RETURNS[ISEIndex]; WordsForType: PROC[stb: SymbolTableBase, type: Type] RETURNS[WordCount]; ParentBti: PROC[stb: SymbolTableBase, bti: BTIndex] RETURNS[BTIndex]; SiblingBti: PROC[stb: SymbolTableBase, bti: BTIndex] RETURNS[BTIndex]; SonBti: PROC[stb: SymbolTableBase, bti: BTIndex] RETURNS[BTIndex]; EnumerateBodies: PROC [stb: SymbolTableBase, root: BTIndex, proc: PROC[BTIndex] RETURNS[stop: BOOL]] RETURNS[bti: BTIndex]; END. tSymbolOperations.mesa Russ Atkinson, October 17, 1983 4:13 pm Satterthwaite March 11, 1986 9:14:39 am PST This file has been shamelessly ripped off from SymbolOps.mesa of July 6, 1983 1:36 pm. It is meant as an eventual replacement, which would permit symbol tables to exist without the use of global frames or excessive MDS (hooray!). There is NO provision for table movement! the basis for our symbols tables defining the current symbol table info defining the source file links hash manipulation context management module management type manipulation information returning procedures body table management Κ Γ˜šœ™J™'Icode™+—J˜Jšœ‘™‘J˜šΟk ˜ Jšœœœœ ˜*Jšœœœ˜(Jšœ œ˜Jšœœ˜Jšœ œœ ˜Jšœœœ˜Jšœœœ˜(—J˜šœ ˜Jšœ˜—˜Jšœœ˜Jšœ œ˜&Jšœ œ˜"Jšœ œ˜ Jšœ œ˜"šœ œ˜"Jšœ$˜$—šœ œ˜(Jšœ*˜*—Jšœœ˜,Jšœ œ˜(Jšœœ˜,šœ œ˜"Jšœ$˜$—Jšœ œ˜&Jšœ œ˜"Jšœ œ˜ Jšœ œ˜ Jšœ œœ˜$šœ œ˜ Jšœ!˜!—šœœ˜Jšœ"˜"—Jšœœ˜,Jšœ œ˜"Jšœ œ˜(Jš œ œœœœ ˜-Jšœ œ˜*Jšœœ˜*Jšœœ˜Jšœ œ˜$Jšœ œ˜$J˜Jšœœœ˜/•postFix32 sp tabStops•postfix32 sp tabStops•PostFix32 sp tabStopsšœœœ˜"šœ™Jšœ œ œ˜&Jšœœ œ˜"—–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ(™(J–32 sp tabStops–32 sp tabstops– 32 sp tabStopš œ œœœ œΟc ˜6J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœœ œœœœ œž ˜AJ–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœœž ˜!J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž ˜J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž˜ J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž˜'J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž ˜J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž ˜J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž˜J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ œž˜ J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœž˜1J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœž˜-J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœ˜J–32 sp tabStops–32 sp tabstops– 32 sp tabStopšœœ˜—–32 sp tabStops–32 sp tabStops–32 sp tabStopsšœ#™#J–32 sp tabStops–32 sp tabStops–32 sp tabStopsšœœ˜J–32 sp tabStops–32 sp tabStops–32 sp tabStopsš œ œ œœœœ ˜2—J–32 sp tabStops–32 sp tabStops–32 sp tabStops˜J–32 sp tabStops–32 sp tabStops–32 sp tabStops˜—š Οnœœœœ œ˜FJšœœ˜$—J˜šŸœœ˜$J˜—šœ™J™JšŸ œœ%œ ˜IJ˜JšŸ œœ%œ ˜EJ˜JšŸœœ#œ˜O—J™šœ™J™šŸ œœ&œœ˜KJ˜—šŸ œœ&œ ˜HJ˜—šŸœœ&œ ˜DJ˜—šŸ œ˜Jšœ2œ ˜DJ˜—šŸ œ˜Jšœœœ ˜I—J™—šœ™J™šŸœ˜ Jšœ/œ ˜@—J™—šœ™J™šŸœœ(œ ˜FJ˜—šŸ œ˜Jšœ'œ˜>J˜—šŸ œœ#œ˜@J˜—šŸ œœ'œ ˜IJ˜—šŸ œ˜Jšœ,œ˜CJ˜—šŸ œ˜Jšœ,œ˜IJ˜—šŸ œ˜Jšœ'œ ˜9J˜—šŸ œ˜Jšœ"œ!˜KJ˜—šŸœœ#œ ˜DJ˜—šŸœœ#œ˜?J˜—šŸœœ#œ ˜EJ˜—šŸ œœ#œ ˜DJ˜—JšŸœœ#œ˜G—J™šœ ™ J˜šŸ œ˜Jšœ!œœœ˜HJ˜—šŸ œœ#œ˜JJ˜—šŸœ˜Jšœ+œœ ˜CJ˜—š Ÿ œœ$œœœ˜LJ˜—šŸ œ˜Jšœ&œ'˜TJ˜—šŸœ˜ Jšœ'œ*˜YJ˜—šŸ œœ&œ˜CJ˜—šŸœœ&œ ˜EJ˜—šŸœ˜Jšœ'œ*˜YJ˜—šŸœœ'œ ˜EJ˜—šŸ œœ'œ ˜KJ˜—JšŸ œœ#œ ˜H—J™šœ™J™šŸ œœ%œ ˜EJ˜—šŸ œœ%œ ˜FJ˜—šŸœœ%œ ˜BJ˜—šŸœ˜Jšœ,œ œœ˜NJšœ˜———J˜Jšœ˜J˜J˜—…—8#o