<> <> <> DIRECTORY ConvertUnsafe USING [LS, SubString], FS USING [nullOpenFile, OpenFile], Symbols, SymbolSegment, TimeStamp USING [Stamp], Tree USING [Link], VM 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.