From fd10866ae301c43adff35ac427b6765f80689478 Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 11 Jan 2015 02:23:39 +0100 Subject: [PATCH] fixes #1919 --- compiler/semtypes.nim | 13 +++++++------ tests/generics/tgeneric_inheritance.nim | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 tests/generics/tgeneric_inheritance.nim diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index deb4b12887..0d7472607d 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -608,12 +608,6 @@ proc addInheritedFieldsAux(c: PContext, check: var IntSet, pos: var int, incl(check, n.sym.name.id) inc(pos) else: internalError(n.info, "addInheritedFieldsAux()") - -proc addInheritedFields(c: PContext, check: var IntSet, pos: var int, - obj: PType) = - if (sonsLen(obj) > 0) and (obj.sons[0] != nil): - addInheritedFields(c, check, pos, obj.sons[0]) - addInheritedFieldsAux(c, check, pos, obj.n) proc skipGenericInvokation(t: PType): PType {.inline.} = result = t @@ -622,6 +616,13 @@ proc skipGenericInvokation(t: PType): PType {.inline.} = if result.kind == tyGenericBody: result = lastSon(result) +proc addInheritedFields(c: PContext, check: var IntSet, pos: var int, + obj: PType) = + assert obj.kind == tyObject + if (sonsLen(obj) > 0) and (obj.sons[0] != nil): + addInheritedFields(c, check, pos, obj.sons[0].skipGenericInvokation) + addInheritedFieldsAux(c, check, pos, obj.n) + proc semObjectNode(c: PContext, n: PNode, prev: PType): PType = if n.sonsLen == 0: return newConstraint(c, tyObject) var check = initIntSet() diff --git a/tests/generics/tgeneric_inheritance.nim b/tests/generics/tgeneric_inheritance.nim new file mode 100644 index 0000000000..66b5a6c691 --- /dev/null +++ b/tests/generics/tgeneric_inheritance.nim @@ -0,0 +1,19 @@ +discard """ + output: '0.0' +""" + +# bug #1919 + +type + Base[M] = object of RootObj + a : M + + Sub1[M] = object of Base[M] + b : int + + Sub2[M] = object of Sub1[M] + c : int + +var x: Sub2[float] + +echo x.a