1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
import Resilient
import Foundation
import OneWordSuperclass
public class StaticClass: OneWordSuperclass {
@objc var first: Int32 = 0
var middle = GrowsToInt64()
@objc var last: Int = 0
@objc public static var offsetOfFirst: Int {
// IRGen lays out Swift classes that subclass Objective-C classes as if the
// only superclass was NSObject, so the starting (offset % alignment) isn't
// always 0. This means that on 32-bit platforms we'll have a gap *before*
// 'first' when we need 8-byte alignment, rather than after as you'd see in
// a struct (or base class).
return max(MemoryLayout<Int>.size, MemoryLayout<GrowsToInt64>.alignment) +
MemoryLayout<Int>.size
}
@objc public static var totalSize: Int {
return (2 * MemoryLayout<Int>.size) +
(2 * MemoryLayout<GrowsToInt64>.size) + // alignment
MemoryLayout<Int>.size
}
}
/// This class has the same layout as `StaticClass`, but will be accessed using
/// `NSClassFromString` instead of `+class`.
public class DynamicClass: OneWordSuperclass {
@objc var first: Int32 = 0
var middle = GrowsToInt64()
@objc var last: Int = 0
@objc public static var offsetOfFirst: Int {
// See above.
return max(MemoryLayout<Int>.size, MemoryLayout<GrowsToInt64>.alignment) +
MemoryLayout<Int>.size
}
@objc public static var totalSize: Int {
return (2 * MemoryLayout<Int>.size) +
(2 * MemoryLayout<GrowsToInt64>.size) + // alignment
MemoryLayout<Int>.size
}
}
public class PureSwiftBaseClass {
var word: Int64 = 0
}
public class PureSwiftClass: PureSwiftBaseClass {
@objc var first: Int32 = 0
var middle = GrowsToInt64()
@objc var last: Int = 0
@objc public static var offsetOfFirst: Int {
return (2 * MemoryLayout<Int>.size) + MemoryLayout<Int64>.size
}
@objc public static var totalSize: Int {
return (2 * MemoryLayout<Int>.size) + MemoryLayout<Int64>.size +
(2 * MemoryLayout<GrowsToInt64>.size) + // alignment
MemoryLayout<Int>.size
}
}
|