fix a regrsesion in signature matching of derived ptr types
This commit is contained in:
parent
13701c0957
commit
3e52bb6535
2 changed files with 25 additions and 3 deletions
|
|
@ -1240,13 +1240,15 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
|
||||||
if prev == nil: put(c, f, a)
|
if prev == nil: put(c, f, a)
|
||||||
result = isGeneric
|
result = isGeneric
|
||||||
else:
|
else:
|
||||||
var aAsObject = roota.lastSon
|
let fKind = rootf.lastSon.kind
|
||||||
if rootf.lastSon.kind in {tyAnd, tyOr}:
|
if fKind in {tyAnd, tyOr}:
|
||||||
result = typeRel(c, lastSon(f), a)
|
result = typeRel(c, lastSon(f), a)
|
||||||
if result != isNone: put(c, f, a)
|
if result != isNone: put(c, f, a)
|
||||||
return
|
return
|
||||||
|
|
||||||
if rootf.lastSon.kind == tyRef and aAsObject.kind == tyRef:
|
var aAsObject = roota.lastSon
|
||||||
|
|
||||||
|
if fKind in {tyRef, tyPtr} and aAsObject.kind == fKind:
|
||||||
aAsObject = aAsObject.base
|
aAsObject = aAsObject.base
|
||||||
|
|
||||||
if aAsObject.kind == tyObject:
|
if aAsObject.kind == tyObject:
|
||||||
|
|
|
||||||
20
tests/generics/tptrinheritance.nim
Normal file
20
tests/generics/tptrinheritance.nim
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
type NSPasteboardItem* = ptr object
|
||||||
|
type NSPasteboard* = ptr object
|
||||||
|
type NSArrayAbstract = ptr object {.inheritable.}
|
||||||
|
type NSMutableArrayAbstract = ptr object of NSArrayAbstract
|
||||||
|
type NSArray*[T] = ptr object of NSArrayAbstract
|
||||||
|
type NSMutableArray*[T] = ptr object of NSArray[T]
|
||||||
|
|
||||||
|
proc newMutableArrayAbstract*(): NSMutableArrayAbstract = discard
|
||||||
|
|
||||||
|
template newMutableArray*(T: typedesc): NSMutableArray[T] =
|
||||||
|
cast[NSMutableArray[T]](newMutableArrayAbstract())
|
||||||
|
|
||||||
|
proc writeObjects*(p: NSPasteboard, o: ptr NSArray[NSPasteboardItem]) = discard
|
||||||
|
|
||||||
|
let a = newMutableArray NSPasteboardItem
|
||||||
|
var x: NSMutableArray[NSPasteboardItem]
|
||||||
|
var y: NSArray[NSPasteboardItem] = x
|
||||||
|
|
||||||
|
writeObjects(nil, a)
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue