summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xcompiler/rodwrite.nim2
-rwxr-xr-xcompiler/sem.nim6
-rwxr-xr-xcompiler/semdata.nim2
-rwxr-xr-xcompiler/semexprs.nim4
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: