diff options
-rw-r--r-- | compiler/lowerings.nim | 3 | ||||
-rw-r--r-- | compiler/sighashes.nim | 9 |
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: |