This commit is contained in:
Araq
2015-07-03 00:14:54 +02:00
parent 3df9d2bd0c
commit cdc6529ccf
2 changed files with 30 additions and 2 deletions

View File

@@ -629,7 +629,7 @@ proc skipGenericInvocation(t: PType): PType {.inline.} =
result = t
if result.kind == tyGenericInvocation:
result = result.sons[0]
while result.kind in {tyGenericInst, tyGenericBody}:
while result.kind in {tyGenericInst, tyGenericBody, tyRef, tyPtr}:
result = lastSon(result)
proc addInheritedFields(c: PContext, check: var IntSet, pos: var int,
@@ -651,7 +651,7 @@ proc semObjectNode(c: PContext, n: PNode, prev: PType): PType =
if base.isNil:
localError(n.info, errIllegalRecursionInTypeX, "object")
else:
var concreteBase = skipGenericInvocation(base).skipTypes(skipPtrs)
var concreteBase = skipGenericInvocation(base)
if concreteBase.kind == tyObject and tfFinal notin concreteBase.flags:
addInheritedFields(c, check, pos, concreteBase)
else:

View File

@@ -0,0 +1,28 @@
# bug #2540
type
BaseSceneNode[T] = ref object of RootObj
children*: seq[BaseSceneNode[T]]
parent*: BaseSceneNode[T]
SceneNode[T] = ref object of BaseSceneNode[T]
SomeObj = ref object
proc newSceneNode[T](): SceneNode[T] =
new result
result.children = @[]
var aNode = newSceneNode[SomeObj]()
# bug #3038
type
Data[T] = ref object of RootObj
data: T
Type = ref object of RootObj
SubType[T] = ref object of Type
data: Data[T]
SubSubType = ref object of SubType
SubSubSubType = ref object of SubSubType