diff options
author | SirOlaf <34164198+SirOlaf@users.noreply.github.com> | 2024-07-17 23:54:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-17 23:54:15 +0200 |
commit | f765898a7518f5c6bbebffd4217ccc35fd02747d (patch) | |
tree | 151575a7e1938b87a075178c33d2e829a135379e | |
parent | ddb31ce9682aa83e91119567bfb763bfc7bf0558 (diff) | |
download | Nim-f765898a7518f5c6bbebffd4217ccc35fd02747d.tar.gz |
Set type of object constructor during annotateType (#23852)
Fix https://github.com/nim-lang/Nim/issues/23547 Tested locally with the included test, the test from constantine and the original issue.
-rw-r--r-- | compiler/semmacrosanity.nim | 1 | ||||
-rw-r--r-- | tests/macros/t23547.nim | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/compiler/semmacrosanity.nim b/compiler/semmacrosanity.nim index 4aab216c7..727f36470 100644 --- a/compiler/semmacrosanity.nim +++ b/compiler/semmacrosanity.nim @@ -51,6 +51,7 @@ proc annotateType*(n: PNode, t: PType; conf: ConfigRef) = of nkObjConstr: let x = t.skipTypes(abstractPtrs) n.typ = t + n[0].typ = t for i in 1..<n.len: var j = i-1 let field = x.ithField(j) diff --git a/tests/macros/t23547.nim b/tests/macros/t23547.nim new file mode 100644 index 000000000..9a2bff9ff --- /dev/null +++ b/tests/macros/t23547.nim @@ -0,0 +1,23 @@ +# https://github.com/nim-lang/Nim/issues/23547 + +type + A[T] = object + x: T + +proc mulCheckSparse[F](dummy: var A[F], xmulchecksparse: static A[F]) = + static: + echo "mulCheckSparse: ", typeof(dummy), ", ", typeof(xmulchecksparse) # when generic params not specified: A[system.int], A + +template sumImpl(xsumimpl: typed) = + static: + echo "sumImpl: ", typeof(xsumimpl) # A + var a = A[int](x: 55) + mulCheckSparse(a, xsumimpl) # fails here + +proc sum[T](xsum: static T) = + static: + echo "sum: ", typeof(xsum) # A[system.int] + sumImpl(xsum) + +const constA = A[int](x : 100) +sum[A[int]](constA) |