summary refs log tree commit diff stats
path: root/compiler/passes.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-07-08 11:12:39 +0200
committerAraq <rumpf_a@web.de>2015-07-08 11:49:34 +0200
commit0a624bec1ef734cec0cf3376c9073ea40c0b0381 (patch)
tree64a27c0695525299d10ffc504120e0d23b09edbb /compiler/passes.nim
parenta2b8b8b0dd3f9d80e897033ff9cd71f01ee38310 (diff)
downloadNim-0a624bec1ef734cec0cf3376c9073ea40c0b0381.tar.gz
implemented {.noforward:on.} for type sections; useful for c2nim generated wrappers; to be documented
Diffstat (limited to 'compiler/passes.nim')
-rw-r--r--compiler/passes.nim13
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/passes.nim b/compiler/passes.nim
index e031dae10..ceb3e2b8a 100644
--- a/compiler/passes.nim
+++ b/compiler/passes.nim
@@ -190,8 +190,17 @@ proc processModule(module: PSym, stream: PLLStream, rd: PRodReader) =
       while true:
         var n = parseTopLevelStmt(p)
         if n.kind == nkEmpty: break
-        if not processTopLevelStmt(n, a): break
-
+        if sfNoForward in module.flags:
+          # read everything, no streaming possible
+          var sl = newNodeI(nkStmtList, n.info)
+          sl.add n
+          while true:
+            var n = parseTopLevelStmt(p)
+            if n.kind == nkEmpty: break
+            sl.add n
+          discard processTopLevelStmt(sl, a)
+          break
+        elif not processTopLevelStmt(n, a): break
       closeParsers(p)
       if s.kind != llsStdIn: break
     closePasses(a)