diff options
-rw-r--r-- | compiler/ast.nim | 8 | ||||
-rw-r--r-- | tests/metatype/tstaticparams.nim | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 55de43dd1..a48ba9dc5 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -398,7 +398,7 @@ const tyUserTypeClass, tyUserTypeClassInst, tyAnd, tyOr, tyNot, tyAnything} - tyMetaTypes* = {tyGenericParam, tyTypeDesc, tyStatic, tyExpr} + tyTypeClasses + tyMetaTypes* = {tyGenericParam, tyTypeDesc, tyExpr} + tyTypeClasses type TTypeKinds* = set[TTypeKind] @@ -969,7 +969,9 @@ var emptyNode* = newNode(nkEmpty) # There is a single empty node that is shared! Do not overwrite it! proc isMetaType*(t: PType): bool = - return t.kind in tyMetaTypes or tfHasMeta in t.flags + return t.kind in tyMetaTypes or + (t.kind == tyStatic and t.n == nil) or + tfHasMeta in t.flags proc linkTo*(t: PType, s: PSym): PType {.discardable.} = t.sym = s @@ -1313,7 +1315,7 @@ proc propagateToOwner*(owner, elem: PType) = if tfShared in elem.flags: owner.flags.incl tfHasShared - if elem.kind in tyMetaTypes: + if elem.isMetaType: owner.flags.incl tfHasMeta if elem.kind in {tyString, tyRef, tySequence} or diff --git a/tests/metatype/tstaticparams.nim b/tests/metatype/tstaticparams.nim index e76dae23c..fa162f4e8 100644 --- a/tests/metatype/tstaticparams.nim +++ b/tests/metatype/tstaticparams.nim @@ -14,6 +14,9 @@ type TA2[T; I: static[int]] = array[0..I, T] TA3[T; I: static[int]] = array[I-1, T] + TObj = object + x: TA3[int, 3] + proc takeFoo(x: TFoo) = echo "abracadabra" echo TFoo.Val @@ -28,6 +31,7 @@ var t1: TA1[float, 1] t2: TA2[string, 4] t3: TA3[int, 10] + t4: TObj # example from the manual: type |