summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/lowerings.nim3
-rw-r--r--compiler/sighashes.nim9
2 files changed, 11 insertions, 1 deletions
diff --git a/compiler/lowerings.nim b/compiler/lowerings.nim
index 50a9b6319..245cc5f61 100644
--- a/compiler/lowerings.nim
+++ b/compiler/lowerings.nim
@@ -114,9 +114,10 @@ proc createObj*(owner: PSym, info: TLineInfo): PType =
   rawAddSon(result, nil)
   incl result.flags, tfFinal
   result.n = newNodeI(nkRecList, info)
-  when false:
+  when true:
     let s = newSym(skType, getIdent("Env_" & info.toFilename & "_" & $info.line),
                    owner, info)
+    incl s.flags, sfAnon
     s.typ = result
     result.sym = s
 
diff --git a/compiler/sighashes.nim b/compiler/sighashes.nim
index 1eb8d5b9c..78896f152 100644
--- a/compiler/sighashes.nim
+++ b/compiler/sighashes.nim
@@ -165,6 +165,15 @@ proc hashType(c: var MD5Context, t: PType; flags: set[ConsiderFlag]) =
       #  echo "yes ", t.sym.name.s
       #  #quit 1
       c.hashSym(t.sym)
+      if sfAnon in t.sym.flags:
+        # generated object names can be identical, so we need to
+        # disambiguate furthermore by hashing the field types and names:
+        let n = t.n
+        for i in 0 ..< n.len:
+          assert n[i].kind == nkSym
+          let s = n[i].sym
+          c.hashSym s
+          c.hashType s.typ, flags
     else:
       c &= t.id
   of tyRef, tyPtr, tyGenericBody, tyVar: