diff options
-rw-r--r-- | compiler/sigmatch.nim | 7 | ||||
-rw-r--r-- | tests/generics/t4884.nim | 11 |
2 files changed, 15 insertions, 3 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 7f7572968..46d5704e3 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1358,9 +1358,10 @@ proc paramTypesMatchAux(m: var TCandidate, f, argType: PType, return argSemantized if argType.kind == tyStatic: - if m.callee.kind == tyGenericBody and tfGenericTypeParam notin argType.flags: - result = newNodeIT(nkType, argOrig.info, makeTypeFromExpr(c, arg)) - return + if m.callee.kind == tyGenericBody and + argType.len == 0 and + tfGenericTypeParam notin argType.flags: + return newNodeIT(nkType, argOrig.info, makeTypeFromExpr(c, arg)) else: var evaluated = c.semTryConstExpr(c, arg) if evaluated != nil: diff --git a/tests/generics/t4884.nim b/tests/generics/t4884.nim new file mode 100644 index 000000000..9a560f649 --- /dev/null +++ b/tests/generics/t4884.nim @@ -0,0 +1,11 @@ +type + Vec*[N: static[int], T] = object + arr*: array[N, T] + + Mat*[N,M: static[int], T] = object + arr*: array[N, Vec[M,T]] + +var m : Mat[3,3,float] +var strMat : Mat[m.N, m.M, string] +var lenMat : Mat[m.N, m.M, int] + |