concepts: fixes the stack overflow that happens for #6691
This commit is contained in:
parent
4e4d466d06
commit
9e4e1949e8
2 changed files with 15 additions and 1 deletions
|
|
@ -1057,9 +1057,10 @@ proc typeRelImpl(c: var TCandidate, f, aOrig: PType,
|
||||||
else: isNone
|
else: isNone
|
||||||
|
|
||||||
of tyUserTypeClass, tyUserTypeClassInst:
|
of tyUserTypeClass, tyUserTypeClassInst:
|
||||||
if c.c.matchedConcept != nil:
|
if c.c.matchedConcept != nil and c.c.matchedConcept.depth <= 4:
|
||||||
# consider this: 'var g: Node' *within* a concept where 'Node'
|
# consider this: 'var g: Node' *within* a concept where 'Node'
|
||||||
# is a concept too (tgraph)
|
# is a concept too (tgraph)
|
||||||
|
inc c.c.matchedConcept.depth
|
||||||
let x = typeRel(c, a, f, flags + {trDontBind})
|
let x = typeRel(c, a, f, flags + {trDontBind})
|
||||||
if x >= isGeneric:
|
if x >= isGeneric:
|
||||||
return isGeneric
|
return isGeneric
|
||||||
|
|
|
||||||
13
tests/concepts/tinfrecursion.nim
Normal file
13
tests/concepts/tinfrecursion.nim
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
# bug #6691
|
||||||
|
type
|
||||||
|
ConceptA = concept c
|
||||||
|
|
||||||
|
ConceptB = concept c
|
||||||
|
c.myProc(ConceptA)
|
||||||
|
|
||||||
|
Obj = object
|
||||||
|
|
||||||
|
proc myProc(obj: Obj, x: ConceptA) = discard
|
||||||
|
|
||||||
|
echo Obj is ConceptB
|
||||||
Loading…
Add table
Add a link
Reference in a new issue