Skip to content

Commit

Permalink
fixes bug reported in PR #5637
Browse files Browse the repository at this point in the history
  • Loading branch information
Araq committed Oct 30, 2017
1 parent 560d87f commit 6cb8bf8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
8 changes: 8 additions & 0 deletions compiler/ast.nim
Expand Up @@ -1387,6 +1387,14 @@ proc skipTypes*(t: PType, kinds: TTypeKinds): PType =
result = t
while result.kind in kinds: result = lastSon(result)

proc skipTypes*(t: PType, kinds: TTypeKinds; maxIters: int): PType =
result = t
var i = maxIters
while result.kind in kinds:
result = lastSon(result)
dec i
if i == 0: return nil

proc skipTypesOrNil*(t: PType, kinds: TTypeKinds): PType =
## same as skipTypes but handles 'nil'
result = t
Expand Down
5 changes: 4 additions & 1 deletion compiler/semtypes.nim
Expand Up @@ -1167,7 +1167,10 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType =

# special check for generic object with
# generic/partial specialized parent
let tx = result.skipTypes(abstractPtrs)
let tx = result.skipTypes(abstractPtrs, 50)
if tx.isNil:
localError(n.info, "invalid recursion in type '$1'" % typeToString(result[0]))
return errorType(c)
if tx != result and tx.kind == tyObject and tx.sons[0] != nil:
semObjectTypeForInheritedGenericInst(c, n, tx)

Expand Down
8 changes: 8 additions & 0 deletions tests/types/tillegaltyperecursion2.nim
@@ -0,0 +1,8 @@
discard """
errormsg: "invalid recursion in type 'Executor'"
line: 8
"""
# bug reported by PR #5637
type
Executor[N] = Executor[N]
var e: Executor[int]

0 comments on commit 6cb8bf8

Please sign in to comment.