summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ast.nim8
-rw-r--r--tests/metatype/tstaticparams.nim4
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