Skip to content

Commit 72f9c3f

Browse files
authored
Merge pull request swiftlang#63535 from Azoy/reflection-fixes
[Reflection] Some bug fixes and other improvements
2 parents dbeff97 + 4edc241 commit 72f9c3f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+528
-638
lines changed

stdlib/public/Reflection/Package.swift

Lines changed: 0 additions & 77 deletions
This file was deleted.

stdlib/public/Reflection/README.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

stdlib/public/Reflection/Sources/Reflection/Case.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,19 @@ public struct Case {
2929

3030
@inlinable
3131
public init?(from instance: Any) {
32-
guard Type(instance).isEnum else {
32+
let instanceTy = type(of: instance)
33+
34+
guard Type(instanceTy).isEnum else {
3335
return nil
3436
}
3537

3638
var container = unsafeBitCast(instance, to: AnyExistentialContainer.self)
3739

3840
let tag = container.projectValue {
39-
Metadata(type(of: instance)).enum.enumVWT.getEnumTag($0)
41+
Metadata(instanceTy).enum.enumVWT.getEnumTag($0)
4042
}
4143

42-
self.parent = Metadata(type(of: instance)).enum
44+
self.parent = Metadata(instanceTy).enum
4345
self.tag = Int(truncatingIfNeeded: tag)
4446
}
4547
}

stdlib/public/Reflection/Sources/Reflection/Field.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ extension Field {
4242
@inlinable
4343
public var name: String {
4444
guard parent.kind != .tuple else {
45-
//return TupleMetadata(parent.ptr).elements[index].
46-
return "hello"
45+
return parent.tuple.elements[index].label
4746
}
4847

4948
return parent.type.descriptor.fields[index].name

stdlib/public/Reflection/Sources/Reflection/GenericArguments.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ extension GenericArguments: RandomAccessCollection {
5151

5252
let start = argumentPointer.unsafelyUnwrapped
5353
let address = start + position * MemoryLayout<Type>.size
54-
return address.loadUnaligned(as: Type.self)
54+
return address.unprotectedLoad(as: Type.self)
5555
}
5656
}
5757

stdlib/public/Reflection/Sources/Reflection/KeyPath.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ extension Case {
9696
var value = pair.buffer
9797

9898
if isIndirect {
99-
let owner = value.loadUnaligned(as: HeapObject.self)
99+
let owner = value.unprotectedLoad(as: HeapObject.self)
100100
value = swift_projectBox(owner)
101101
}
102102

stdlib/public/Reflection/Sources/_Runtime/ContextDescriptor/ClassDescriptor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ extension ClassDescriptor {
8080
// 'TargetStoredClassMetadataBounds', by the time we access this it will
8181
// have already been initialized way before for us. Thus, it is safe to
8282
// access this value non-atomically.
83-
return storedBounds.load(as: Int.self)
83+
return storedBounds.unprotectedLoad(as: Int.self)
8484
}
8585

8686
@inlinable

stdlib/public/Reflection/Sources/_Runtime/ContextDescriptor/GenericSignature.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ extension GenericSignature.RequirementDescriptor {
119119
@available(SwiftStdlib 5.9, *)
120120
@inlinable
121121
public var layoutKind: GenericSignature.LayoutKind {
122-
address(for: \.requirement).loadUnaligned(
122+
address(for: \.requirement).unprotectedLoad(
123123
as: GenericSignature.LayoutKind.self
124124
)
125125
}
@@ -140,7 +140,7 @@ extension GenericSignature.RequirementDescriptor {
140140
) -> Any.Type? {
141141
_getTypeByMangledNameInContext(
142142
UnsafePointer(parameter.ptr._rawValue),
143-
UInt(parameter.length),
143+
UInt(truncatingIfNeeded: parameter.length),
144144
genericContext: context.ptr,
145145
genericArguments: argPtr
146146
)
@@ -269,7 +269,7 @@ extension GenericSignature.RequirementDescriptor {
269269
func getGenericSignature(at address: UnsafeRawPointer) -> GenericSignature {
270270
var address = address
271271

272-
let header = address.loadUnaligned(as: GenericSignature.Header.self)
272+
let header = address.unprotectedLoad(as: GenericSignature.Header.self)
273273
address += MemoryLayout<GenericSignature.Header>.size
274274

275275
let parameters = BufferView<GenericSignature.ParameterDescriptor>(

stdlib/public/Reflection/Sources/_Runtime/ExistentialContainer.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,14 @@ extension AnyExistentialContainer {
6767
}
6868
}
6969

70-
let alignMask = UInt(metadata.vwt.flags.alignmentMask)
70+
let alignMask = UInt(truncatingIfNeeded:metadata.vwt.flags.alignmentMask)
7171
let heapObjSize = UInt(MemoryLayout<Int>.size * 2)
7272
let byteOffset = (heapObjSize + alignMask) & ~alignMask
7373

7474
return try withUnsafeMutablePointer(to: &self) {
75-
let raw = UnsafeMutableRawPointer($0)
76-
let heap = raw.loadUnaligned(as: UnsafeMutableRawPointer.self)
75+
let heap = $0.raw.unprotectedLoad(as: UnsafeMutableRawPointer.self)
7776

78-
return try body(heap + Int(byteOffset))
77+
return try body(heap + Int(truncatingIfNeeded: byteOffset))
7978
}
8079
}
8180
}

stdlib/public/Reflection/Sources/_Runtime/Metadata/TupleMetadata.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ extension TupleMetadata.Elements.Element {
8585
// string
8686
address -= MemoryLayout<Int>.size
8787

88-
guard let cString = address.loadUnaligned(
88+
guard let cString = address.unprotectedLoad(
8989
as: UnsafePointer<CChar>?.self
9090
) else {
9191
return ""

0 commit comments

Comments
 (0)