compilation cache: slurped files are a dependency too
This commit is contained in:
parent
299390a585
commit
78f37b2336
4 changed files with 12 additions and 2 deletions
|
|
@ -578,9 +578,9 @@ proc myOpen(module: PSym, filename: string): PPassContext =
|
||||||
result = w
|
result = w
|
||||||
|
|
||||||
proc myClose(c: PPassContext, n: PNode): PNode =
|
proc myClose(c: PPassContext, n: PNode): PNode =
|
||||||
|
result = process(c, n)
|
||||||
var w = PRodWriter(c)
|
var w = PRodWriter(c)
|
||||||
writeRod(w)
|
writeRod(w)
|
||||||
result = n
|
|
||||||
idgen.saveMaxIds(options.projectPath / options.projectName)
|
idgen.saveMaxIds(options.projectPath / options.projectName)
|
||||||
|
|
||||||
proc rodwritePass(): TPass =
|
proc rodwritePass(): TPass =
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,12 @@ proc myClose(context: PPassContext, n: PNode): PNode =
|
||||||
else:
|
else:
|
||||||
InternalError(n.info, "n is not nil") #result := n;
|
InternalError(n.info, "n is not nil") #result := n;
|
||||||
addCodeForGenerics(c, result)
|
addCodeForGenerics(c, result)
|
||||||
|
# we produce a fake include statement for every slurped filename, so that
|
||||||
|
# the module dependencies are accurate:
|
||||||
|
var ics = newNode(nkIncludeStmt)
|
||||||
|
for s in items(c.slurpedFiles): ics.add(newStrNode(nkStrLit, s))
|
||||||
|
result.add(ics)
|
||||||
|
|
||||||
checkThreads(c)
|
checkThreads(c)
|
||||||
popOwner()
|
popOwner()
|
||||||
popProcCon(c)
|
popProcCon(c)
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ type
|
||||||
filename*: string # the module's filename
|
filename*: string # the module's filename
|
||||||
userPragmas*: TStrTable
|
userPragmas*: TStrTable
|
||||||
evalContext*: PEvalContext
|
evalContext*: PEvalContext
|
||||||
|
slurpedFiles*: seq[string]
|
||||||
|
|
||||||
var
|
var
|
||||||
gGenericsCache: PGenericsCache # save for modularity
|
gGenericsCache: PGenericsCache # save for modularity
|
||||||
|
|
@ -150,6 +151,7 @@ proc newContext(module: PSym, nimfile: string): PContext =
|
||||||
result.filename = nimfile
|
result.filename = nimfile
|
||||||
result.includedFiles = initIntSet()
|
result.includedFiles = initIntSet()
|
||||||
initStrTable(result.userPragmas)
|
initStrTable(result.userPragmas)
|
||||||
|
result.slurpedFiles = @[]
|
||||||
if optSymbolFiles notin gGlobalOptions:
|
if optSymbolFiles notin gGlobalOptions:
|
||||||
# re-usage of generic instantiations across module boundaries is
|
# re-usage of generic instantiations across module boundaries is
|
||||||
# very nice for code size:
|
# very nice for code size:
|
||||||
|
|
|
||||||
|
|
@ -947,10 +947,12 @@ proc semSlurp(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
if sonsLen(n) == 2:
|
if sonsLen(n) == 2:
|
||||||
var a = expectStringArg(c, n, 0)
|
var a = expectStringArg(c, n, 0)
|
||||||
try:
|
try:
|
||||||
var content = readFile(a.strVal.FindFile)
|
var filename = a.strVal.FindFile
|
||||||
|
var content = readFile(filename)
|
||||||
result = newStrNode(nkStrLit, content)
|
result = newStrNode(nkStrLit, content)
|
||||||
result.typ = getSysType(tyString)
|
result.typ = getSysType(tyString)
|
||||||
result.info = n.info
|
result.info = n.info
|
||||||
|
c.slurpedFiles.add(filename)
|
||||||
except EIO:
|
except EIO:
|
||||||
GlobalError(a.info, errCannotOpenFile, a.strVal)
|
GlobalError(a.info, errCannotOpenFile, a.strVal)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue