3636 bodies* : PackedTree # other trees. Referenced from typ.n and sym.ast by their position.
3737 # producedGenerics*: Table[GenericKey, SymId]
3838 exports* : seq [(LitId , int32 )]
39+ hidden* : seq [(LitId , int32 )]
3940 reexports* : seq [(LitId , PackedItemId )]
4041 compilerProcs* : seq [(LitId , int32 )]
4142 converters* , methods* , trmacros* , pureEnums* : seq [int32 ]
@@ -177,6 +178,10 @@ proc addIncludeFileDep*(c: var PackedEncoder; m: var PackedModule; f: FileIndex)
177178proc addImportFileDep * (c: var PackedEncoder ; m: var PackedModule ; f: FileIndex ) =
178179 m.imports.add toLitId (f, c, m)
179180
181+ proc addHidden * (c: var PackedEncoder ; m: var PackedModule ; s: PSym ) =
182+ let nameId = getOrIncl (m.sh.strings, s.name.s)
183+ m.hidden.add ((nameId, s.itemId.item))
184+
180185proc addExported * (c: var PackedEncoder ; m: var PackedModule ; s: PSym ) =
181186 let nameId = getOrIncl (m.sh.strings, s.name.s)
182187 m.exports.add ((nameId, s.itemId.item))
@@ -525,7 +530,7 @@ proc loadRodFile*(filename: AbsoluteFile; m: var PackedModule; config: ConfigRef
525530 loadTabSection floatsSection, m.sh.floats
526531
527532 loadSeqSection exportsSection, m.exports
528-
533+ loadSeqSection hiddenSection, m.hidden
529534 loadSeqSection reexportsSection, m.reexports
530535
531536 loadSeqSection compilerProcsSection, m.compilerProcs
@@ -591,7 +596,7 @@ proc saveRodFile*(filename: AbsoluteFile; encoder: var PackedEncoder; m: var Pac
591596 storeTabSection floatsSection, m.sh.floats
592597
593598 storeSeqSection exportsSection, m.exports
594-
599+ storeSeqSection hiddenSection, m.hidden
595600 storeSeqSection reexportsSection, m.reexports
596601
597602 storeSeqSection compilerProcsSection, m.compilerProcs
657662 syms: seq [PSym ] # indexed by itemId
658663 types: seq [PType ]
659664 module* : PSym # the one true module symbol.
660- iface: Table [PIdent , seq [PackedItemId ]] # PackedItemId so that it works with reexported symbols too
665+ iface, ifaceHidden: Table [PIdent , seq [PackedItemId ]]
666+ # PackedItemId so that it works with reexported symbols too
667+ # ifaceHidden includes private symbols
661668
662669 PackedModuleGraph * = seq [LoadedModule ] # indexed by FileIndex
663670
@@ -884,12 +891,18 @@ proc newPackage(config: ConfigRef; cache: IdentCache; fileIdx: FileIndex): PSym
884891proc setupLookupTables (g: var PackedModuleGraph ; conf: ConfigRef ; cache: IdentCache ;
885892 fileIdx: FileIndex ; m: var LoadedModule ) =
886893 m.iface = initTable [PIdent , seq [PackedItemId ]]()
894+ m.ifaceHidden = initTable [PIdent , seq [PackedItemId ]]()
887895 for e in m.fromDisk.exports:
888896 let nameLit = e[0 ]
889897 m.iface.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (PackedItemId (module: LitId (0 ), item: e[1 ]))
890898 for re in m.fromDisk.reexports:
891899 let nameLit = re[0 ]
892900 m.iface.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (re[1 ])
901+ m.ifaceHidden.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (re[1 ])
902+
903+ for e in m.fromDisk.hidden:
904+ let nameLit = e[0 ]
905+ m.ifaceHidden.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (PackedItemId (module: LitId (0 ), item: e[1 ]))
893906
894907 let filename = AbsoluteFile toFullPath (conf, fileIdx)
895908 # We cannot call ``newSym`` here, because we have to circumvent the ID
@@ -1055,24 +1068,29 @@ type
10551068 values: seq [PackedItemId ]
10561069 i, module: int
10571070
1071+ template interfSelect (a: LoadedModule , importHidden: bool ): auto =
1072+ var ret = a.iface.addr
1073+ if importHidden: ret = a.ifaceHidden.addr
1074+ ret[]
1075+
10581076proc initRodIter * (it: var RodIter ; config: ConfigRef , cache: IdentCache ;
10591077 g: var PackedModuleGraph ; module: FileIndex ;
1060- name: PIdent ): PSym =
1078+ name: PIdent , importHidden: bool ): PSym =
10611079 it.decoder = PackedDecoder (
10621080 lastModule: int32 (- 1 ),
10631081 lastLit: LitId (0 ),
10641082 lastFile: FileIndex (- 1 ),
10651083 config: config,
10661084 cache: cache)
1067- it.values = g[int module].iface .getOrDefault (name)
1085+ it.values = g[int module].interfSelect (importHidden) .getOrDefault (name)
10681086 it.i = 0
10691087 it.module = int (module)
10701088 if it.i < it.values.len:
10711089 result = loadSym (it.decoder, g, int (module), it.values[it.i])
10721090 inc it.i
10731091
10741092proc initRodIterAllSyms * (it: var RodIter ; config: ConfigRef , cache: IdentCache ;
1075- g: var PackedModuleGraph ; module: FileIndex ): PSym =
1093+ g: var PackedModuleGraph ; module: FileIndex , importHidden: bool ): PSym =
10761094 it.decoder = PackedDecoder (
10771095 lastModule: int32 (- 1 ),
10781096 lastLit: LitId (0 ),
@@ -1081,7 +1099,7 @@ proc initRodIterAllSyms*(it: var RodIter; config: ConfigRef, cache: IdentCache;
10811099 cache: cache)
10821100 it.values = @ []
10831101 it.module = int (module)
1084- for v in g[int module].iface .values:
1102+ for v in g[int module].interfSelect (importHidden) .values:
10851103 it.values.add v
10861104 it.i = 0
10871105 if it.i < it.values.len:
@@ -1095,19 +1113,19 @@ proc nextRodIter*(it: var RodIter; g: var PackedModuleGraph): PSym =
10951113
10961114iterator interfaceSymbols * (config: ConfigRef , cache: IdentCache ;
10971115 g: var PackedModuleGraph ; module: FileIndex ;
1098- name: PIdent ): PSym =
1116+ name: PIdent , importHidden: bool ): PSym =
10991117 setupDecoder ()
1100- let values = g[int module].iface .getOrDefault (name)
1118+ let values = g[int module].interfSelect (importHidden) .getOrDefault (name)
11011119 for pid in values:
11021120 let s = loadSym (decoder, g, int (module), pid)
11031121 assert s != nil
11041122 yield s
11051123
11061124proc interfaceSymbol * (config: ConfigRef , cache: IdentCache ;
11071125 g: var PackedModuleGraph ; module: FileIndex ;
1108- name: PIdent ): PSym =
1126+ name: PIdent , importHidden: bool ): PSym =
11091127 setupDecoder ()
1110- let values = g[int module].iface .getOrDefault (name)
1128+ let values = g[int module].interfSelect (importHidden) .getOrDefault (name)
11111129 result = loadSym (decoder, g, int (module), values[0 ])
11121130
11131131proc idgenFromLoadedModule * (m: LoadedModule ): IdGenerator =
@@ -1128,7 +1146,7 @@ proc rodViewer*(rodfile: AbsoluteFile; config: ConfigRef, cache: IdentCache) =
11281146 let err = loadRodFile (rodfile, m, config, ignoreConfig= true )
11291147 if err != ok:
11301148 echo " Error: could not load: " , rodfile.string , " reason: " , err
1131- quit 1
1149+ doAssert false # quit would prevent getting a stacktrace
11321150
11331151 when true :
11341152 echo " exports:"
@@ -1142,6 +1160,10 @@ proc rodViewer*(rodfile: AbsoluteFile; config: ConfigRef, cache: IdentCache) =
11421160 echo " " , m.sh.strings[ex[0 ]]
11431161 # reexports*: seq[(LitId, PackedItemId)]
11441162
1163+ echo " hidden: " & $ m.hidden.len
1164+ for ex in m.hidden:
1165+ echo " " , m.sh.strings[ex[0 ]], " local ID: " , ex[1 ]
1166+
11451167 echo " all symbols"
11461168 for i in 0 .. high (m.sh.syms):
11471169 if m.sh.syms[i].name != LitId (0 ):
0 commit comments