mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-03 02:18:00 +00:00
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.
(cherry picked from commit f765898a75)
This commit is contained in:
@@ -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)
|
||||
|
||||
23
tests/macros/t23547.nim
Normal file
23
tests/macros/t23547.nim
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user