summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-08-29 15:45:27 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-08-29 15:47:38 +0200
commite92a7fd50841e91e538bd7c1e5c6efa85b54174c (patch)
tree5fee4a3ad0144cdd47a1df6c8935c0ae64afbbb5
parent12cd8fe9e27256e2fb565ca3445ef94328339a6d (diff)
downloadNim-e92a7fd50841e91e538bd7c1e5c6efa85b54174c.tar.gz
nimsuggest improvements
-rw-r--r--compiler/modules.nim7
-rw-r--r--compiler/passes.nim13
-rw-r--r--compiler/scriptconfig.nim2
3 files changed, 7 insertions, 15 deletions
diff --git a/compiler/modules.nim b/compiler/modules.nim
index aa12325f4..711fb6aa4 100644
--- a/compiler/modules.nim
+++ b/compiler/modules.nim
@@ -186,14 +186,11 @@ proc compileModule*(fileIdx: int32, flags: TSymFlags): PSym =
         return
     else:
       result.id = getID()
-    if sfMainModule in flags and gProjectIsStdin:
-      processModule(result, llStreamOpen(stdin), rd)
-    else:
-      processModule(result, nil, rd)
+    let validFile = processModule(result, if sfMainModule in flags and gProjectIsStdin: llStreamOpen(stdin) else: nil, rd)
     if optCaasEnabled in gGlobalOptions:
       gMemCacheData[fileIdx].compiledAt = gLastCmdTime
       gMemCacheData[fileIdx].needsRecompile = Recompiled
-      doHash fileIdx
+      if validFile: doHash fileIdx
   else:
     if checkDepMem(fileIdx) == Yes:
       result = compileModule(fileIdx, flags)
diff --git a/compiler/passes.nim b/compiler/passes.nim
index ceb3e2b8a..b7642e3e4 100644
--- a/compiler/passes.nim
+++ b/compiler/passes.nim
@@ -46,12 +46,6 @@ proc makePass*(open: TPassOpen = nil,
   result.close = close
   result.process = process
 
-  # This implements a memory preserving scheme: Top level statements are
-  # processed in a pipeline. The compiler never looks at a whole module
-  # any longer. However, this is simple to change, as new passes may perform
-  # whole program optimizations. For now, we avoid it to save a lot of memory.
-proc processModule*(module: PSym, stream: PLLStream, rd: PRodReader)
-
 # the semantic checker needs these:
 var
   gImportModule*: proc (m: PSym, fileIdx: int32): PSym {.nimcall.}
@@ -160,7 +154,8 @@ proc processImplicits(implicits: seq[string], nodeKind: TNodeKind,
     importStmt.addSon str
     if not processTopLevelStmt(importStmt, a): break
 
-proc processModule(module: PSym, stream: PLLStream, rd: PRodReader) =
+proc processModule*(module: PSym, stream: PLLStream,
+                    rd: PRodReader): bool {.discardable.} =
   var
     p: TParsers
     a: TPassContextArray
@@ -173,7 +168,7 @@ proc processModule(module: PSym, stream: PLLStream, rd: PRodReader) =
       s = llStreamOpen(filename, fmRead)
       if s == nil:
         rawMessage(errCannotOpenFile, filename)
-        return
+        return false
     else:
       s = stream
     while true:
@@ -211,4 +206,4 @@ proc processModule(module: PSym, stream: PLLStream, rd: PRodReader) =
     var n = loadInitSection(rd)
     for i in countup(0, sonsLen(n) - 1): processTopLevelStmtCached(n.sons[i], a)
     closePassesCached(a)
-
+  result = true
diff --git a/compiler/scriptconfig.nim b/compiler/scriptconfig.nim
index 8b2653bc9..0f1dfaa1e 100644
--- a/compiler/scriptconfig.nim
+++ b/compiler/scriptconfig.nim
@@ -150,7 +150,7 @@ proc runNimScript*(scriptName: string; freshDefines=true) =
   vm.globalCtx = setupVM(m, scriptName)
 
   compileSystemModule()
-  processModule(m, llStreamOpen(scriptName, fmRead), nil)
+  discard processModule(m, llStreamOpen(scriptName, fmRead), nil)
 
   # ensure we load 'system.nim' again for the real non-config stuff!
   resetAllModulesHard()