carlokok
(Carlo Kok)
1
From the Array struct inside Swift.SwiftInterface, I'm trying to find out why Swift passes the witness table for RangeReplacableCollection.
extension BidirectionalCollection where Self == Self.SubSequence {
@discardableResult
@inlinable mutating public func removeLast() -> Element {
let element = last!
self = self[startIndex..<index(before: endIndex)]
return element
}
}
From left to right it passes, the resut pointer, the type of the array, the witness table for BidirectionalCollection, the witness table for RangeReplaceableCollection and the Array itself.
I understand the "why" for most of these. However, how does the compiler decide RangeReplaceableCollection becomes part of this?
carlokok
(Carlo Kok)
2
The only reasoning I can come up with is that somehow, the body of the method influences what witness tables are passed, but that can't be true right?