compilation cache: slurped files are a dependency too

This commit is contained in:
Araq
2011-10-30 01:02:15 +02:00
parent 299390a585
commit 78f37b2336
4 changed files with 12 additions and 2 deletions

View File

@@ -578,9 +578,9 @@ proc myOpen(module: PSym, filename: string): PPassContext =
result = w
proc myClose(c: PPassContext, n: PNode): PNode =
result = process(c, n)
var w = PRodWriter(c)
writeRod(w)
result = n
idgen.saveMaxIds(options.projectPath / options.projectName)
proc rodwritePass(): TPass =

View File

@@ -205,6 +205,12 @@ proc myClose(context: PPassContext, n: PNode): PNode =
else:
InternalError(n.info, "n is not nil") #result := n;
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)
popOwner()
popProcCon(c)

View File

@@ -70,6 +70,7 @@ type
filename*: string # the module's filename
userPragmas*: TStrTable
evalContext*: PEvalContext
slurpedFiles*: seq[string]
var
gGenericsCache: PGenericsCache # save for modularity
@@ -150,6 +151,7 @@ proc newContext(module: PSym, nimfile: string): PContext =
result.filename = nimfile
result.includedFiles = initIntSet()
initStrTable(result.userPragmas)
result.slurpedFiles = @[]
if optSymbolFiles notin gGlobalOptions:
# re-usage of generic instantiations across module boundaries is
# very nice for code size:

View File

@@ -947,10 +947,12 @@ proc semSlurp(c: PContext, n: PNode, flags: TExprFlags): PNode =
if sonsLen(n) == 2:
var a = expectStringArg(c, n, 0)
try:
var content = readFile(a.strVal.FindFile)
var filename = a.strVal.FindFile
var content = readFile(filename)
result = newStrNode(nkStrLit, content)
result.typ = getSysType(tyString)
result.info = n.info
c.slurpedFiles.add(filename)
except EIO:
GlobalError(a.info, errCannotOpenFile, a.strVal)
else: