@@ -17,10 +17,15 @@ import SwiftShims
1717public struct ClassMetadata {
1818 var superclassMetadata : UnsafeMutablePointer < ClassMetadata > ?
1919
20- // There is no way to express the actual calling convention on the heap desroy
20+ // There is no way to express the actual calling convention on this
2121 // function (swiftcc with 'self') currently, so let's use UnsafeRawPointer
2222 // and a helper function in C (_swift_embedded_invoke_heap_object_destroy).
2323 var destroy : UnsafeRawPointer
24+
25+ // There is no way to express the actual calling convention on this
26+ // function (swiftcc with 'self') currently, so let's use UnsafeRawPointer
27+ // and a helper function in C (_swift_embedded_invoke_heap_object_ivardestroyer).
28+ var ivarDestroyer : UnsafeRawPointer
2429}
2530
2631public struct HeapObject {
@@ -116,6 +121,20 @@ func swift_deallocClassInstance(object: UnsafeMutablePointer<HeapObject>, alloca
116121 free ( object. _rawValue)
117122}
118123
124+ @_cdecl ( " swift_deallocPartialClassInstance " )
125+ public func swift_deallocPartialClassInstance( object: Builtin . RawPointer , metadata: Builtin . RawPointer , allocatedSize: Int , allocatedAlignMask: Int ) {
126+ swift_deallocPartialClassInstance ( object: UnsafeMutablePointer < HeapObject > ( object) , metadata: UnsafeMutablePointer < ClassMetadata > ( metadata) , allocatedSize: allocatedSize, allocatedAlignMask: allocatedAlignMask)
127+ }
128+
129+ func swift_deallocPartialClassInstance( object: UnsafeMutablePointer < HeapObject > , metadata: UnsafeMutablePointer < ClassMetadata > , allocatedSize: Int , allocatedAlignMask: Int ) {
130+ var classMetadata = _swift_embedded_get_heap_object_metadata_pointer ( object) . assumingMemoryBound ( to: ClassMetadata . self)
131+ while classMetadata != metadata {
132+ _swift_embedded_invoke_heap_object_ivardestroyer ( object, classMetadata)
133+ guard let superclassMetadata = classMetadata. pointee. superclassMetadata else { break }
134+ classMetadata = superclassMetadata
135+ }
136+ }
137+
119138@_cdecl ( " swift_initStaticObject " )
120139public func swift_initStaticObject( metadata: Builtin . RawPointer , object: Builtin . RawPointer ) -> Builtin . RawPointer {
121140 return swift_initStaticObject ( metadata: UnsafeMutablePointer < ClassMetadata > ( metadata) , object: UnsafeMutablePointer < HeapObject > ( object) ) . _rawValue
0 commit comments