mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 06:43:52 +00:00
fix a regrsesion in signature matching of derived ptr types
This commit is contained in:
@@ -1240,13 +1240,15 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
|
||||
if prev == nil: put(c, f, a)
|
||||
result = isGeneric
|
||||
else:
|
||||
var aAsObject = roota.lastSon
|
||||
if rootf.lastSon.kind in {tyAnd, tyOr}:
|
||||
let fKind = rootf.lastSon.kind
|
||||
if fKind in {tyAnd, tyOr}:
|
||||
result = typeRel(c, lastSon(f), a)
|
||||
if result != isNone: put(c, f, a)
|
||||
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
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user