<> <> <> <> 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.