compilation cache: slurped files are a dependency too

This commit is contained in:
Araq 2011-10-30 01:02:15 +02:00
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 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 =

View file

@ -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)

View file

@ -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:

View file

@ -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: