include generic bodies in allowMetaTypes (#23968)

fixes #19848

Not sure why this wasn't the case already. The `if cl.allowMetaTypes:
return` line below for `tyFromExpr` [was added 10 years
ago](d5798b43de).
Hopefully it was just negligence?
This commit is contained in:
metagn
2024-08-20 17:20:35 +03:00
committed by GitHub
parent 6336d2681b
commit 1befb8d4a3
2 changed files with 18 additions and 1 deletions

View File

@@ -573,6 +573,7 @@ proc replaceTypeVarsTAux(cl: var TReplTypeVars, t: PType): PType =
result.kind = tyUserTypeClassInst
of tyGenericBody:
if cl.allowMetaTypes: return
localError(
cl.c.config,
cl.info,
@@ -645,7 +646,7 @@ proc replaceTypeVarsTAux(cl: var TReplTypeVars, t: PType): PType =
for i, resulti in result.ikids:
if resulti != nil:
if resulti.kind == tyGenericBody:
if resulti.kind == tyGenericBody and not cl.allowMetaTypes:
localError(cl.c.config, if t.sym != nil: t.sym.info else: cl.info,
"cannot instantiate '" &
typeToString(result[i], preferDesc) &

16
tests/generics/t19848.nim Normal file
View File

@@ -0,0 +1,16 @@
discard """
output: '''
todo
'''
"""
type
Maybe[T] = object
List[T] = object
proc dump[M: Maybe](a: List[M]) =
echo "todo"
var a: List[Maybe[int]]
dump(a)