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))
@@ -524,7 +529,7 @@ proc loadRodFile*(filename: AbsoluteFile; m: var PackedModule; config: ConfigRef
524529 loadTabSection numbersSection, m.sh.numbers
525530
526531 loadSeqSection exportsSection, m.exports
527-
532+ loadSeqSection hiddenSection, m.hidden
528533 loadSeqSection reexportsSection, m.reexports
529534
530535 loadSeqSection compilerProcsSection, m.compilerProcs
@@ -589,7 +594,7 @@ proc saveRodFile*(filename: AbsoluteFile; encoder: var PackedEncoder; m: var Pac
589594 storeTabSection numbersSection, m.sh.numbers
590595
591596 storeSeqSection exportsSection, m.exports
592-
597+ storeSeqSection hiddenSection, m.hidden
593598 storeSeqSection reexportsSection, m.reexports
594599
595600 storeSeqSection compilerProcsSection, m.compilerProcs
655660 syms: seq [PSym ] # indexed by itemId
656661 types: seq [PType ]
657662 module* : PSym # the one true module symbol.
658- iface: Table [PIdent , seq [PackedItemId ]] # PackedItemId so that it works with reexported symbols too
663+ iface, ifaceHidden: Table [PIdent , seq [PackedItemId ]]
664+ # PackedItemId so that it works with reexported symbols too
665+ # ifaceHidden includes private symbols
659666
660667 PackedModuleGraph * = seq [LoadedModule ] # indexed by FileIndex
661668
@@ -882,12 +889,18 @@ proc newPackage(config: ConfigRef; cache: IdentCache; fileIdx: FileIndex): PSym
882889proc setupLookupTables (g: var PackedModuleGraph ; conf: ConfigRef ; cache: IdentCache ;
883890 fileIdx: FileIndex ; m: var LoadedModule ) =
884891 m.iface = initTable [PIdent , seq [PackedItemId ]]()
892+ m.ifaceHidden = initTable [PIdent , seq [PackedItemId ]]()
885893 for e in m.fromDisk.exports:
886894 let nameLit = e[0 ]
887895 m.iface.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (PackedItemId (module: LitId (0 ), item: e[1 ]))
888896 for re in m.fromDisk.reexports:
889897 let nameLit = re[0 ]
890898 m.iface.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (re[1 ])
899+ m.ifaceHidden.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (re[1 ])
900+
901+ for e in m.fromDisk.hidden:
902+ let nameLit = e[0 ]
903+ m.ifaceHidden.mgetOrPut (cache.getIdent (m.fromDisk.sh.strings[nameLit]), @ []).add (PackedItemId (module: LitId (0 ), item: e[1 ]))
891904
892905 let filename = AbsoluteFile toFullPath (conf, fileIdx)
893906 # We cannot call ``newSym`` here, because we have to circumvent the ID
@@ -1053,24 +1066,29 @@ type
10531066 values: seq [PackedItemId ]
10541067 i, module: int
10551068
1069+ template interfSelect (a: LoadedModule , importHidden: bool ): auto =
1070+ var ret = a.iface.addr
1071+ if importHidden: ret = a.ifaceHidden.addr
1072+ ret[]
1073+
10561074proc initRodIter * (it: var RodIter ; config: ConfigRef , cache: IdentCache ;
10571075 g: var PackedModuleGraph ; module: FileIndex ;
1058- name: PIdent ): PSym =
1076+ name: PIdent , importHidden: bool ): PSym =
10591077 it.decoder = PackedDecoder (
10601078 lastModule: int32 (- 1 ),
10611079 lastLit: LitId (0 ),
10621080 lastFile: FileIndex (- 1 ),
10631081 config: config,
10641082 cache: cache)
1065- it.values = g[int module].iface .getOrDefault (name)
1083+ it.values = g[int module].interfSelect (importHidden) .getOrDefault (name)
10661084 it.i = 0
10671085 it.module = int (module)
10681086 if it.i < it.values.len:
10691087 result = loadSym (it.decoder, g, int (module), it.values[it.i])
10701088 inc it.i
10711089
10721090proc initRodIterAllSyms * (it: var RodIter ; config: ConfigRef , cache: IdentCache ;
1073- g: var PackedModuleGraph ; module: FileIndex ): PSym =
1091+ g: var PackedModuleGraph ; module: FileIndex , importHidden: bool ): PSym =
10741092 it.decoder = PackedDecoder (
10751093 lastModule: int32 (- 1 ),
10761094 lastLit: LitId (0 ),
@@ -1079,7 +1097,7 @@ proc initRodIterAllSyms*(it: var RodIter; config: ConfigRef, cache: IdentCache;
10791097 cache: cache)
10801098 it.values = @ []
10811099 it.module = int (module)
1082- for v in g[int module].iface .values:
1100+ for v in g[int module].interfSelect (importHidden) .values:
10831101 it.values.add v
10841102 it.i = 0
10851103 if it.i < it.values.len:
@@ -1093,19 +1111,19 @@ proc nextRodIter*(it: var RodIter; g: var PackedModuleGraph): PSym =
10931111
10941112iterator interfaceSymbols * (config: ConfigRef , cache: IdentCache ;
10951113 g: var PackedModuleGraph ; module: FileIndex ;
1096- name: PIdent ): PSym =
1114+ name: PIdent , importHidden: bool ): PSym =
10971115 setupDecoder ()
1098- let values = g[int module].iface .getOrDefault (name)
1116+ let values = g[int module].interfSelect (importHidden) .getOrDefault (name)
10991117 for pid in values:
11001118 let s = loadSym (decoder, g, int (module), pid)
11011119 assert s != nil
11021120 yield s
11031121
11041122proc interfaceSymbol * (config: ConfigRef , cache: IdentCache ;
11051123 g: var PackedModuleGraph ; module: FileIndex ;
1106- name: PIdent ): PSym =
1124+ name: PIdent , importHidden: bool ): PSym =
11071125 setupDecoder ()
1108- let values = g[int module].iface .getOrDefault (name)
1126+ let values = g[int module].interfSelect (importHidden) .getOrDefault (name)
11091127 result = loadSym (decoder, g, int (module), values[0 ])
11101128
11111129proc idgenFromLoadedModule * (m: LoadedModule ): IdGenerator =
@@ -1126,7 +1144,7 @@ proc rodViewer*(rodfile: AbsoluteFile; config: ConfigRef, cache: IdentCache) =
11261144 let err = loadRodFile (rodfile, m, config, ignoreConfig= true )
11271145 if err != ok:
11281146 echo " Error: could not load: " , rodfile.string , " reason: " , err
1129- quit 1
1147+ doAssert false # quit would prevent getting a stacktrace
11301148
11311149 when true :
11321150 echo " exports:"
@@ -1140,6 +1158,10 @@ proc rodViewer*(rodfile: AbsoluteFile; config: ConfigRef, cache: IdentCache) =
11401158 echo " " , m.sh.strings[ex[0 ]]
11411159 # reexports*: seq[(LitId, PackedItemId)]
11421160
1161+ echo " hidden: " & $ m.hidden.len
1162+ for ex in m.hidden:
1163+ echo " " , m.sh.strings[ex[0 ]], " local ID: " , ex[1 ]
1164+
11431165 echo " all symbols"
11441166 for i in 0 .. high (m.sh.syms):
11451167 if m.sh.syms[i].name != LitId (0 ):
0 commit comments