2828proc indexFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .2.idx.nif"
2929proc parsedFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .1.nif"
3030proc depsFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .1.deps.nif"
31+ proc deps2File (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .2.deps.nif"
3132proc semmedFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .2.nif"
3233proc nifcFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .c.nif"
3334proc cFile (config: NifConfig ; f: FilePair ): string = config.nifcachePath / f.modname & " .c"
6667 includeStack: seq [string ]
6768 processedModules: HashSet [string ]
6869 moduleFlags: set [ModuleFlag ]
70+ isGeneratingFinal: bool
6971
7072proc toPair (c: DepContext ; f: string ): FilePair =
7173 FilePair (nimFile: f, modname: moduleSuffix (f, c.config.paths))
@@ -176,6 +178,7 @@ proc processDep(c: var DepContext; n: var Cursor; current: Node) =
176178 of ImportS :
177179 processImport c, n, current
178180 of IncludeS :
181+ assert not c.isGeneratingFinal
179182 processInclude c, n, current
180183 of FromimportS , ImportexceptS :
181184 processSingleImport c, n, current
@@ -215,7 +218,7 @@ proc importSystem(c: var DepContext; current: Node) =
215218proc parseDeps (c: var DepContext ; p: FilePair ; current: Node ) =
216219 execNifler c, p.nimFile, c.config.parsedFile (p)
217220
218- let depsFile = c.config.depsFile (p)
221+ let depsFile = if c.isGeneratingFinal: c.config. deps2File (p) else : c.config.depsFile (p)
219222 var stream = nifstreams.open (depsFile)
220223 try :
221224 discard processDirectives (stream.r)
@@ -385,14 +388,17 @@ proc buildGraph*(config: sink NifConfig; project: string; forceRebuild, silentMa
385388 quoteShell (cfgNif)
386389 parseNifConfig cfgNif, config
387390
388- var c = DepContext (nifler: nifler, config: config, rootNode: nil , includeStack: @ [],
389- forceRebuild: forceRebuild, moduleFlags: moduleFlags, nimsem: findTool (" nimsem" ),
390- cmd: cmd)
391- let p = c.toPair (project)
392- c.rootNode = Node (files: @ [p], id: 0 , parent: - 1 , active: 0 , isSystem: IsSystem in moduleFlags)
393- c.nodes.add c.rootNode
394- c.processedModules.incl p.modname
395- parseDeps c, p, c.rootNode
391+ template initDepContext (isFinal: bool ): DepContext =
392+ var c = DepContext (nifler: nifler, config: config, rootNode: nil , includeStack: @ [],
393+ forceRebuild: forceRebuild, moduleFlags: moduleFlags, nimsem: findTool (" nimsem" ),
394+ cmd: cmd, isGeneratingFinal: isFinal)
395+ let p = c.toPair (project)
396+ c.rootNode = Node (files: @ [p], id: 0 , parent: - 1 , active: 0 , isSystem: IsSystem in moduleFlags)
397+ c.nodes.add c.rootNode
398+ c.processedModules.incl p.modname
399+ parseDeps c, p, c.rootNode
400+ c
401+ var c = initDepContext (false )
396402 generateCachedConfigFile c, passC, passL
397403 let makeFilename = generateFrontendMakefile (c, commandLineArgs)
398404 # echo "run with: make -f ", makeFilename
@@ -404,6 +410,10 @@ proc buildGraph*(config: sink NifConfig; project: string; forceRebuild, silentMa
404410 " -f "
405411 exec makeCommand & quoteShell (makeFilename)
406412
413+ # Parse `.2.deps.nif`.
414+ # It is generated by nimsem and doesn't contains modules imported under `when false:`.
415+ # https://github.com/nim-lang/nimony/issues/985
416+ c = initDepContext (true )
407417 let makeFinalFilename = generateFinalMakefile (c, commandLineArgsNifc, passC, passL)
408418 exec makeCommand & quoteShell (makeFinalFilename)
409419 if cmd == DoRun :
0 commit comments