Commits

Slava Pestov committed 3e7f2e195c9
SILGen: Refactoring MaterializeForSet to support default witness thunk emission Previously we would emit two types of MaterializeForSet implementations in SILGen: - materializeForSet for a concrete storage declaration - materializeForSet witness thunk in a conformance This refactoring decouples the code from taking a conformance, which is needed for two new types of materializeForSet that we need: - materializeForSet witness thunk in a default witness table -- this is necessary in order to be able to resiliently add storage requirements with default implementations to protocols - materializeForSet vtable thunk -- this is necessary to fix a missing re-abstraction case with overriding storage in a subclass This patch brings us closer to implementing these two. For default implementations, we still have an issue in that the materializeForSet has a different "generic signature abstraction pattern" in concrete and default witnesses, so default and concrete witnesses for materializeForSet are currently ABI-incompatible because the type metadata for the storage is passed differently to the callback.