summary refs log tree commit diff stats
path: root/compiler/cgen.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2016-12-13 09:22:20 +0100
committerAraq <rumpf_a@web.de>2016-12-13 09:22:20 +0100
commit71a23fbbb7f4bb3aa860da2824cdde34ebec708d (patch)
tree2d1d944913c2d9a122f3e099ac7aa7f037a749df /compiler/cgen.nim
parentd1663ca81c6548f43bb69cf2147f577cb344090b (diff)
downloadNim-71a23fbbb7f4bb3aa860da2824cdde34ebec708d.tar.gz
sighashes: do not use the ID mechanism at all
Diffstat (limited to 'compiler/cgen.nim')
-rw-r--r--compiler/cgen.nim35
1 files changed, 28 insertions, 7 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim
index 6a60e87e9..082512753 100644
--- a/compiler/cgen.nim
+++ b/compiler/cgen.nim
@@ -723,29 +723,49 @@ proc genProcPrototype(m: BModule, sym: PSym) =
     add(m.s[cfsProcHeaders], rfmt(nil, "$1;$n", header))
 
 proc genProcNoForward(m: BModule, prc: PSym) =
-  fillProcLoc(m, prc)
-  useHeader(m, prc)
   if lfImportCompilerProc in prc.loc.flags:
+    fillProcLoc(m, prc)
+    useHeader(m, prc)
     # dependency to a compilerproc:
     discard cgsym(m, prc.name.s)
     return
-  genProcPrototype(m, prc)
-  if lfNoDecl in prc.loc.flags: discard
+  if lfNoDecl in prc.loc.flags:
+    fillProcLoc(m, prc)
+    useHeader(m, prc)
+    genProcPrototype(m, prc)
   elif prc.typ.callConv == ccInline:
     # We add inline procs to the calling module to enable C based inlining.
     # This also means that a check with ``q.declaredThings`` is wrong, we need
     # a check for ``m.declaredThings``.
-    if not containsOrIncl(m.declaredThings, prc.id): genProcAux(m, prc)
+    if not containsOrIncl(m.declaredThings, prc.id):
+      #if prc.loc.k == locNone:
+      fillProcLoc(m, prc)
+      #elif {sfExportc, sfImportc} * prc.flags == {}:
+      #  # reset name to restore consistency in case of hashing collisions:
+      #  echo "resetting ", prc.id, " by ", m.module.name.s
+      #  prc.loc.r = nil
+      #  prc.loc.r = mangleName(m, prc)
+      useHeader(m, prc)
+      genProcPrototype(m, prc)
+      genProcAux(m, prc)
   elif lfDynamicLib in prc.loc.flags:
     var q = findPendingModule(m, prc)
+    fillProcLoc(q, prc)
+    useHeader(m, prc)
+    genProcPrototype(m, prc)
     if q != nil and not containsOrIncl(q.declaredThings, prc.id):
       symInDynamicLib(q, prc)
     else:
       symInDynamicLibPartial(m, prc)
   elif sfImportc notin prc.flags:
     var q = findPendingModule(m, prc)
+    fillProcLoc(q, prc)
+    useHeader(m, prc)
+    genProcPrototype(m, prc)
     if q != nil and not containsOrIncl(q.declaredThings, prc.id):
       genProcAux(q, prc)
+  else:
+    fillProcLoc(m, prc)
 
 proc requestConstImpl(p: BProc, sym: PSym) =
   var m = p.module
@@ -772,8 +792,9 @@ proc isActivated(prc: PSym): bool = prc.typ != nil
 
 proc genProc(m: BModule, prc: PSym) =
   if sfBorrow in prc.flags or not isActivated(prc): return
-  fillProcLoc(m, prc)
-  if sfForward in prc.flags: addForwardedProc(m, prc)
+  if sfForward in prc.flags:
+    addForwardedProc(m, prc)
+    fillProcLoc(m, prc)
   else:
     genProcNoForward(m, prc)
     if {sfExportc, sfCompilerProc} * prc.flags == {sfExportc} and