diff options
-rwxr-xr-x | compiler/cgen.nim | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim index 57dd85d9c..ffd9babde 100755 --- a/compiler/cgen.nim +++ b/compiler/cgen.nim @@ -40,15 +40,7 @@ proc addForwardedProc(m: BModule, prc: PSym) = proc findPendingModule(m: BModule, s: PSym): BModule = var ms = getModule(s) - if ms.id == m.module.id: return m - for i in countup(0, high(gModules)): - result = gModules[i] - if result.module.id == ms.id: return - # else we found no pending module: This can happen for procs that are in - # a module that is already closed. This is fine, don't generate code for - # it then: - result = nil - #InternalError(s.info, "no pending module found for: " & s.name.s) + result = gModules[ms.position] proc emitLazily(s: PSym): bool {.inline.} = result = optDeadCodeElim in gGlobalOptions or @@ -1139,6 +1131,11 @@ proc writeModule(m: BModule, pending: bool) = addFileToCompile(cfilenoext) addFileToLink(cfilenoext) +proc genPlatformAsserts(m: BModule) = + appf(m.s[cfsForwardTypes], + "typedef assert_numbits[sizeof(NI) == sizeof(void*) &&" & + "NIM_INTBITS == sizeof(NI)*8 ? 1 : -1];$N") + proc myClose(b: PPassContext, n: PNode): PNode = result = n if b == nil or passes.skipCodegen(n): return @@ -1152,6 +1149,7 @@ proc myClose(b: PPassContext, n: PNode): PNode = if sfMainModule in m.module.flags: var disp = generateMethodDispatchers() for i in 0..sonsLen(disp)-1: genProcAux(m, disp.sons[i].sym) + genPlatformAsserts(m) genMainProc(m) # we need to process the transitive closure because recursive module # deps are allowed (and the system module is processed in the wrong |