mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-19 07:21:19 +00:00
fixes #4545
This commit is contained in:
@@ -1310,6 +1310,13 @@ proc localConvMatch(c: PContext, m: var TCandidate, f, a: PType,
|
||||
if r == isGeneric:
|
||||
result.typ = getInstantiatedType(c, arg, m, base(f))
|
||||
m.baseTypeMatch = true
|
||||
# bug #4545: allow the call to go through a 'var T':
|
||||
let vt = result.sons[0].typ.sons[1]
|
||||
if vt.kind == tyVar:
|
||||
let x = result.sons[1]
|
||||
let va = newNodeIT(nkHiddenAddr, x.info, vt)
|
||||
va.add x
|
||||
result.sons[1] = va
|
||||
|
||||
proc incMatches(m: var TCandidate; r: TTypeRelation; convMatch = 1) =
|
||||
case r
|
||||
|
||||
18
tests/overload/tvart_varargs.nim
Normal file
18
tests/overload/tvart_varargs.nim
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
# bug #4545
|
||||
type SomeObject = object
|
||||
a : int
|
||||
|
||||
type AbstractObject = object
|
||||
objet: ptr SomeObject
|
||||
|
||||
proc convert(this: var SomeObject): AbstractObject =
|
||||
AbstractObject(objet: this.addr)
|
||||
|
||||
proc varargProc(args: varargs[AbstractObject, convert]): int =
|
||||
for arg in args:
|
||||
result += arg.objet.a
|
||||
|
||||
var obj = SomeObject(a: 17)
|
||||
|
||||
discard varargProc(obj)
|
||||
Reference in New Issue
Block a user