Don't blow up with recursive objects

This commit is contained in:
LemonBoy
2018-06-22 15:09:35 +02:00
parent af66258dca
commit e39baf46fc
2 changed files with 18 additions and 4 deletions

View File

@@ -193,16 +193,15 @@ proc hashType(c: var MD5Context, t: PType; flags: set[ConsiderFlag]) =
# generated object names can be identical, so we need to
# disambiguate furthermore by hashing the field types and names:
# mild hack to prevent endless recursions (makes nimforum compile again):
let wasAnon = sfAnon in t.sym.flags
excl t.sym.flags, sfAnon
let oldFlags = t.sym.flags
t.sym.flags = t.sym.flags - {sfAnon, sfGenSym}
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
if wasAnon:
incl t.sym.flags, sfAnon
t.sym.flags = oldFlags
else:
c &= t.id
if t.len > 0 and t.sons[0] != nil:

View File

@@ -2,6 +2,8 @@ discard """
output: '''
(member: "hello world")
(member: 123.456)
(member: "hello world", x: ...)
(member: 123.456, x: ...)
'''
"""
@@ -16,3 +18,16 @@ template foobar(arg: typed): untyped =
foobar("hello world")
foobar(123.456'f64)
template foobarRec(arg: typed): untyped =
type
MyType = object
member: type(arg)
x: ref MyType
var myVar: MyType
myVar.member = arg
echo myVar
foobarRec("hello world")
foobarRec(123.456'f64)