diff options
-rw-r--r-- | compiler/semtypinst.nim | 2 | ||||
-rw-r--r-- | tests/statictypes/tstatictypes.nim | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/semtypinst.nim b/compiler/semtypinst.nim index 0ef1d0898..2fe8c55e4 100644 --- a/compiler/semtypinst.nim +++ b/compiler/semtypinst.nim @@ -204,7 +204,7 @@ proc hasValuelessStatics(n: PNode): bool = proc doThing(_: MyThing) ]# if n.safeLen == 0: - n.typ.kind == tyStatic + n.typ == nil or n.typ.kind == tyStatic else: for x in n: if hasValuelessStatics(x): diff --git a/tests/statictypes/tstatictypes.nim b/tests/statictypes/tstatictypes.nim index 5df3f35fd..9b2d81b25 100644 --- a/tests/statictypes/tstatictypes.nim +++ b/tests/statictypes/tstatictypes.nim @@ -391,3 +391,23 @@ var sorted = newSeq[int](1000) for i in 0..<sorted.len: sorted[i] = i*2 doAssert isSorted2(sorted, compare) doAssert isSorted2(sorted, proc (a, b: int): bool {.inline.} = a < b) + + +block: # Ensure static descriminated objects compile + type + ObjKind = enum + KindA, KindB, KindC + + MyObject[kind: static[ObjKind]] = object of RootObj + myNumber: int + when kind != KindA: + driverType: int + otherField: int + elif kind == KindC: + driverType: uint + otherField: int + + var instance: MyObject[KindA] + discard instance + discard MyObject[KindC]() + |