From 38ab106051481953c53d179542005c9576ae5983 Mon Sep 17 00:00:00 2001 From: Araq Date: Mon, 5 Dec 2016 23:37:01 +0100 Subject: [PATCH] re-enable object name generation for less dependence on IDs --- compiler/lowerings.nim | 3 ++- compiler/sighashes.nim | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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: