diff options
-rwxr-xr-x | compiler/rodwrite.nim | 2 | ||||
-rwxr-xr-x | compiler/sem.nim | 6 | ||||
-rwxr-xr-x | compiler/semdata.nim | 2 | ||||
-rwxr-xr-x | compiler/semexprs.nim | 4 |
4 files changed, 12 insertions, 2 deletions
diff --git a/compiler/rodwrite.nim b/compiler/rodwrite.nim index a2cb44a43..6df1fbffd 100755 --- a/compiler/rodwrite.nim +++ b/compiler/rodwrite.nim @@ -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 = diff --git a/compiler/sem.nim b/compiler/sem.nim index 5090187d5..47d89436b 100755 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -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) diff --git a/compiler/semdata.nim b/compiler/semdata.nim index 1169ec843..39e4892b2 100755 --- a/compiler/semdata.nim +++ b/compiler/semdata.nim @@ -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: diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index a806cdb67..b16c1ade6 100755 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -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: |