mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Strict memory safety] Update standard library for unsafe treated as a call effect
This commit is contained in:
@@ -162,7 +162,7 @@ public struct CheckedContinuation<T, E: Error>: Sendable {
|
|||||||
/// the caller. The task continues executing when its executor is
|
/// the caller. The task continues executing when its executor is
|
||||||
/// able to reschedule it.
|
/// able to reschedule it.
|
||||||
public func resume(returning value: sending T) {
|
public func resume(returning value: sending T) {
|
||||||
if let c: UnsafeContinuation<T, E> = unsafe canary.takeContinuation() {
|
if let c: UnsafeContinuation<T, E> = canary.takeContinuation() {
|
||||||
unsafe c.resume(returning: value)
|
unsafe c.resume(returning: value)
|
||||||
} else {
|
} else {
|
||||||
#if !$Embedded
|
#if !$Embedded
|
||||||
@@ -186,7 +186,7 @@ public struct CheckedContinuation<T, E: Error>: Sendable {
|
|||||||
/// the caller. The task continues executing when its executor is
|
/// the caller. The task continues executing when its executor is
|
||||||
/// able to reschedule it.
|
/// able to reschedule it.
|
||||||
public func resume(throwing error: __owned E) {
|
public func resume(throwing error: __owned E) {
|
||||||
if let c: UnsafeContinuation<T, E> = unsafe canary.takeContinuation() {
|
if let c: UnsafeContinuation<T, E> = canary.takeContinuation() {
|
||||||
unsafe c.resume(throwing: error)
|
unsafe c.resume(throwing: error)
|
||||||
} else {
|
} else {
|
||||||
#if !$Embedded
|
#if !$Embedded
|
||||||
|
|||||||
@@ -886,7 +886,7 @@ internal func _task_serialExecutor_getExecutorRef<E>(_ executor: E) -> Builtin.E
|
|||||||
@_silgen_name("_task_taskExecutor_getTaskExecutorRef")
|
@_silgen_name("_task_taskExecutor_getTaskExecutorRef")
|
||||||
internal func _task_taskExecutor_getTaskExecutorRef<E>(_ taskExecutor: E) -> Builtin.Executor
|
internal func _task_taskExecutor_getTaskExecutorRef<E>(_ taskExecutor: E) -> Builtin.Executor
|
||||||
where E: TaskExecutor {
|
where E: TaskExecutor {
|
||||||
return unsafe taskExecutor.asUnownedTaskExecutor().executor
|
return taskExecutor.asUnownedTaskExecutor().executor
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used by the concurrency runtime
|
// Used by the concurrency runtime
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ public struct ExecutorJob: Sendable, ~Copyable {
|
|||||||
/// Returns the result of executing the closure.
|
/// Returns the result of executing the closure.
|
||||||
@available(SwiftStdlib 6.2, *)
|
@available(SwiftStdlib 6.2, *)
|
||||||
public func withUnsafeExecutorPrivateData<R, E>(body: (UnsafeMutableRawBufferPointer) throws(E) -> R) throws(E) -> R {
|
public func withUnsafeExecutorPrivateData<R, E>(body: (UnsafeMutableRawBufferPointer) throws(E) -> R) throws(E) -> R {
|
||||||
let base = unsafe _jobGetExecutorPrivateData(self.context)
|
let base = _jobGetExecutorPrivateData(self.context)
|
||||||
let size = unsafe 2 * MemoryLayout<OpaquePointer>.stride
|
let size = unsafe 2 * MemoryLayout<OpaquePointer>.stride
|
||||||
return unsafe try body(UnsafeMutableRawBufferPointer(start: base,
|
return unsafe try body(UnsafeMutableRawBufferPointer(start: base,
|
||||||
count: size))
|
count: size))
|
||||||
@@ -476,13 +476,13 @@ extension ExecutorJob {
|
|||||||
|
|
||||||
/// Allocate a specified number of bytes of uninitialized memory.
|
/// Allocate a specified number of bytes of uninitialized memory.
|
||||||
public func allocate(capacity: Int) -> UnsafeMutableRawBufferPointer {
|
public func allocate(capacity: Int) -> UnsafeMutableRawBufferPointer {
|
||||||
let base = unsafe _jobAllocate(context, capacity)
|
let base = _jobAllocate(context, capacity)
|
||||||
return unsafe UnsafeMutableRawBufferPointer(start: base, count: capacity)
|
return unsafe UnsafeMutableRawBufferPointer(start: base, count: capacity)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Allocate uninitialized memory for a single instance of type `T`.
|
/// Allocate uninitialized memory for a single instance of type `T`.
|
||||||
public func allocate<T>(as type: T.Type) -> UnsafeMutablePointer<T> {
|
public func allocate<T>(as type: T.Type) -> UnsafeMutablePointer<T> {
|
||||||
let base = unsafe _jobAllocate(context, MemoryLayout<T>.size)
|
let base = _jobAllocate(context, MemoryLayout<T>.size)
|
||||||
return unsafe base.bindMemory(to: type, capacity: 1)
|
return unsafe base.bindMemory(to: type, capacity: 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,7 +490,7 @@ extension ExecutorJob {
|
|||||||
/// instances of type `T`.
|
/// instances of type `T`.
|
||||||
public func allocate<T>(capacity: Int, as type: T.Type)
|
public func allocate<T>(capacity: Int, as type: T.Type)
|
||||||
-> UnsafeMutableBufferPointer<T> {
|
-> UnsafeMutableBufferPointer<T> {
|
||||||
let base = unsafe _jobAllocate(context, MemoryLayout<T>.stride * capacity)
|
let base = _jobAllocate(context, MemoryLayout<T>.stride * capacity)
|
||||||
let typedBase = unsafe base.bindMemory(to: T.self, capacity: capacity)
|
let typedBase = unsafe base.bindMemory(to: T.self, capacity: capacity)
|
||||||
return unsafe UnsafeMutableBufferPointer<T>(start: typedBase, count: capacity)
|
return unsafe UnsafeMutableBufferPointer<T>(start: typedBase, count: capacity)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,8 +125,8 @@ func __withTaskPriorityEscalationHandler0<T, E>(
|
|||||||
onPriorityEscalated handler0: @Sendable (UInt8, UInt8) -> Void,
|
onPriorityEscalated handler0: @Sendable (UInt8, UInt8) -> Void,
|
||||||
isolation: isolated (any Actor)? = #isolation
|
isolation: isolated (any Actor)? = #isolation
|
||||||
) async throws(E) -> T {
|
) async throws(E) -> T {
|
||||||
let record = unsafe _taskAddPriorityEscalationHandler(handler: handler0)
|
let record = _taskAddPriorityEscalationHandler(handler: handler0)
|
||||||
defer { unsafe _taskRemovePriorityEscalationHandler(record: record) }
|
defer { unsafe _taskRemovePriorityEscalationHandler(record: record) }
|
||||||
|
|
||||||
return try await operation()
|
return try await operation()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,9 +146,9 @@ public func withTaskExecutorPreference<T, Failure>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let taskExecutorBuiltin: Builtin.Executor =
|
let taskExecutorBuiltin: Builtin.Executor =
|
||||||
unsafe taskExecutor.asUnownedTaskExecutor().executor
|
taskExecutor.asUnownedTaskExecutor().executor
|
||||||
|
|
||||||
let record = unsafe _pushTaskExecutorPreference(taskExecutorBuiltin)
|
let record = _pushTaskExecutorPreference(taskExecutorBuiltin)
|
||||||
defer {
|
defer {
|
||||||
unsafe _popTaskExecutorPreference(record: record)
|
unsafe _popTaskExecutorPreference(record: record)
|
||||||
}
|
}
|
||||||
@@ -177,9 +177,9 @@ public func _unsafeInheritExecutor_withTaskExecutorPreference<T: Sendable>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let taskExecutorBuiltin: Builtin.Executor =
|
let taskExecutorBuiltin: Builtin.Executor =
|
||||||
unsafe taskExecutor.asUnownedTaskExecutor().executor
|
taskExecutor.asUnownedTaskExecutor().executor
|
||||||
|
|
||||||
let record = unsafe _pushTaskExecutorPreference(taskExecutorBuiltin)
|
let record = _pushTaskExecutorPreference(taskExecutorBuiltin)
|
||||||
defer {
|
defer {
|
||||||
unsafe _popTaskExecutorPreference(record: record)
|
unsafe _popTaskExecutorPreference(record: record)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1301,7 +1301,7 @@ extension Task where Success == Never, Failure == Never {
|
|||||||
@available(SwiftStdlib 5.1, *)
|
@available(SwiftStdlib 5.1, *)
|
||||||
public func withUnsafeCurrentTask<T>(body: (UnsafeCurrentTask?) throws -> T) rethrows -> T {
|
public func withUnsafeCurrentTask<T>(body: (UnsafeCurrentTask?) throws -> T) rethrows -> T {
|
||||||
guard let _task = _getCurrentAsyncTask() else {
|
guard let _task = _getCurrentAsyncTask() else {
|
||||||
return try unsafe body(nil)
|
return try body(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This retain seems pretty wrong, however if we don't we WILL crash
|
// FIXME: This retain seems pretty wrong, however if we don't we WILL crash
|
||||||
@@ -1315,7 +1315,7 @@ public func withUnsafeCurrentTask<T>(body: (UnsafeCurrentTask?) throws -> T) ret
|
|||||||
@available(SwiftStdlib 6.0, *)
|
@available(SwiftStdlib 6.0, *)
|
||||||
public func withUnsafeCurrentTask<T>(body: (UnsafeCurrentTask?) async throws -> T) async rethrows -> T {
|
public func withUnsafeCurrentTask<T>(body: (UnsafeCurrentTask?) async throws -> T) async rethrows -> T {
|
||||||
guard let _task = _getCurrentAsyncTask() else {
|
guard let _task = _getCurrentAsyncTask() else {
|
||||||
return try unsafe await body(nil)
|
return try await body(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This retain seems pretty wrong, however if we don't we WILL crash
|
// FIXME: This retain seems pretty wrong, however if we don't we WILL crash
|
||||||
@@ -1601,7 +1601,7 @@ internal func _getCurrentTaskName() -> UnsafePointer<UInt8>?
|
|||||||
|
|
||||||
@available(SwiftStdlib 6.2, *)
|
@available(SwiftStdlib 6.2, *)
|
||||||
internal func _getCurrentTaskNameString() -> String? {
|
internal func _getCurrentTaskNameString() -> String? {
|
||||||
if let stringPtr = unsafe _getCurrentTaskName() {
|
if let stringPtr = _getCurrentTaskName() {
|
||||||
unsafe String(cString: stringPtr)
|
unsafe String(cString: stringPtr)
|
||||||
} else {
|
} else {
|
||||||
nil
|
nil
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public func withTaskCancellationHandler<T>(
|
|||||||
) async rethrows -> T {
|
) async rethrows -> T {
|
||||||
// unconditionally add the cancellation record to the task.
|
// unconditionally add the cancellation record to the task.
|
||||||
// if the task was already cancelled, it will be executed right away.
|
// if the task was already cancelled, it will be executed right away.
|
||||||
let record = unsafe _taskAddCancellationHandler(handler: handler)
|
let record = _taskAddCancellationHandler(handler: handler)
|
||||||
defer { unsafe _taskRemoveCancellationHandler(record: record) }
|
defer { unsafe _taskRemoveCancellationHandler(record: record) }
|
||||||
|
|
||||||
return try await operation()
|
return try await operation()
|
||||||
@@ -98,7 +98,7 @@ public func _unsafeInheritExecutor_withTaskCancellationHandler<T>(
|
|||||||
) async rethrows -> T {
|
) async rethrows -> T {
|
||||||
// unconditionally add the cancellation record to the task.
|
// unconditionally add the cancellation record to the task.
|
||||||
// if the task was already cancelled, it will be executed right away.
|
// if the task was already cancelled, it will be executed right away.
|
||||||
let record = unsafe _taskAddCancellationHandler(handler: handler)
|
let record = _taskAddCancellationHandler(handler: handler)
|
||||||
defer { unsafe _taskRemoveCancellationHandler(record: record) }
|
defer { unsafe _taskRemoveCancellationHandler(record: record) }
|
||||||
|
|
||||||
return try await operation()
|
return try await operation()
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ public final class TaskLocal<Value: Sendable>: Sendable, CustomStringConvertible
|
|||||||
/// or if the task-local has no value bound, this will return the `defaultValue`
|
/// or if the task-local has no value bound, this will return the `defaultValue`
|
||||||
/// of the task local.
|
/// of the task local.
|
||||||
public func get() -> Value {
|
public func get() -> Value {
|
||||||
guard let rawValue = unsafe _taskLocalValueGet(key: key) else {
|
guard let rawValue = _taskLocalValueGet(key: key) else {
|
||||||
return self.defaultValue
|
return self.defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -549,7 +549,7 @@ extension DistributedActorSystem {
|
|||||||
errorCode: .typeDeserializationFailure)
|
errorCode: .typeDeserializationFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let resultBuffer = _openExistential(returnTypeFromTypeInfo, do: unsafe doAllocateReturnTypeBuffer) else {
|
guard let resultBuffer = _openExistential(returnTypeFromTypeInfo, do: doAllocateReturnTypeBuffer) else {
|
||||||
throw ExecuteDistributedTargetError(
|
throw ExecuteDistributedTargetError(
|
||||||
message: "Failed to allocate buffer for distributed target return type",
|
message: "Failed to allocate buffer for distributed target return type",
|
||||||
errorCode: .typeDeserializationFailure)
|
errorCode: .typeDeserializationFailure)
|
||||||
|
|||||||
@@ -951,6 +951,7 @@ extension Array: RangeReplaceableCollection {
|
|||||||
/// Entry point for `Array` literal construction; builds and returns
|
/// Entry point for `Array` literal construction; builds and returns
|
||||||
/// an Array of `count` uninitialized elements.
|
/// an Array of `count` uninitialized elements.
|
||||||
@inlinable
|
@inlinable
|
||||||
|
@unsafe
|
||||||
@_semantics("array.uninitialized")
|
@_semantics("array.uninitialized")
|
||||||
internal static func _allocateUninitialized(
|
internal static func _allocateUninitialized(
|
||||||
_ count: Int
|
_ count: Int
|
||||||
@@ -966,6 +967,7 @@ extension Array: RangeReplaceableCollection {
|
|||||||
///
|
///
|
||||||
/// - Precondition: `storage is _ContiguousArrayStorage`.
|
/// - Precondition: `storage is _ContiguousArrayStorage`.
|
||||||
@inlinable
|
@inlinable
|
||||||
|
@unsafe
|
||||||
@_semantics("array.uninitialized")
|
@_semantics("array.uninitialized")
|
||||||
@_effects(escaping storage => return.0.value**)
|
@_effects(escaping storage => return.0.value**)
|
||||||
@_effects(escaping storage.class*.value** => return.0.value**.class*.value**)
|
@_effects(escaping storage.class*.value** => return.0.value**.class*.value**)
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ internal struct _CocoaArrayWrapper: RandomAccessCollection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Look for contiguous storage in the NSArray
|
// Look for contiguous storage in the NSArray
|
||||||
let cocoaStorageBaseAddress = unsafe self.contiguousStorage(self.indices)
|
let cocoaStorageBaseAddress = self.contiguousStorage(self.indices)
|
||||||
|
|
||||||
if let cocoaStorageBaseAddress = unsafe cocoaStorageBaseAddress {
|
if let cocoaStorageBaseAddress = unsafe cocoaStorageBaseAddress {
|
||||||
return unsafe _SliceBuffer(
|
return unsafe _SliceBuffer(
|
||||||
@@ -113,7 +113,7 @@ internal struct _CocoaArrayWrapper: RandomAccessCollection {
|
|||||||
) -> UnsafeMutablePointer<AnyObject>?
|
) -> UnsafeMutablePointer<AnyObject>?
|
||||||
{
|
{
|
||||||
_internalInvariant(!subRange.isEmpty)
|
_internalInvariant(!subRange.isEmpty)
|
||||||
var enumerationState = unsafe _makeSwiftNSFastEnumerationState()
|
var enumerationState = _makeSwiftNSFastEnumerationState()
|
||||||
|
|
||||||
// This function currently returns nil unless the first
|
// This function currently returns nil unless the first
|
||||||
// subRange.upperBound items are stored contiguously. This is an
|
// subRange.upperBound items are stored contiguously. This is an
|
||||||
|
|||||||
@@ -190,13 +190,13 @@ internal final class _ContiguousArrayStorage<
|
|||||||
@objc(objectAtIndexedSubscript:)
|
@objc(objectAtIndexedSubscript:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
final override internal func objectAtSubscript(_ index: Int) -> Unmanaged<AnyObject> {
|
final override internal func objectAtSubscript(_ index: Int) -> Unmanaged<AnyObject> {
|
||||||
return unsafe _objectAt(index)
|
return _objectAt(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(objectAtIndex:)
|
@objc(objectAtIndex:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
final override internal func objectAt(_ index: Int) -> Unmanaged<AnyObject> {
|
final override internal func objectAt(_ index: Int) -> Unmanaged<AnyObject> {
|
||||||
return unsafe _objectAt(index)
|
return _objectAt(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc internal override final var count: Int {
|
@objc internal override final var count: Int {
|
||||||
|
|||||||
@@ -315,8 +315,8 @@ final internal class _SwiftDeferredNSDictionary<Key: Hashable, Value>
|
|||||||
) {
|
) {
|
||||||
_precondition(count >= 0, "Invalid count")
|
_precondition(count >= 0, "Invalid count")
|
||||||
guard count > 0 else { return }
|
guard count > 0 else { return }
|
||||||
let bridgedKeys = unsafe bridgeKeys()
|
let bridgedKeys = bridgeKeys()
|
||||||
let bridgedValues = unsafe bridgeValues()
|
let bridgedValues = bridgeValues()
|
||||||
var i = 0 // Current position in the output buffers
|
var i = 0 // Current position in the output buffers
|
||||||
|
|
||||||
defer { _fixLifetime(self) }
|
defer { _fixLifetime(self) }
|
||||||
@@ -355,8 +355,8 @@ final internal class _SwiftDeferredNSDictionary<Key: Hashable, Value>
|
|||||||
Unmanaged<AnyObject>,
|
Unmanaged<AnyObject>,
|
||||||
UnsafeMutablePointer<UInt8>
|
UnsafeMutablePointer<UInt8>
|
||||||
) -> Void) {
|
) -> Void) {
|
||||||
let bridgedKeys = unsafe bridgeKeys()
|
let bridgedKeys = bridgeKeys()
|
||||||
let bridgedValues = unsafe bridgeValues()
|
let bridgedValues = bridgeValues()
|
||||||
|
|
||||||
defer { _fixLifetime(self) }
|
defer { _fixLifetime(self) }
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ final internal class _SwiftDeferredNSDictionary<Key: Hashable, Value>
|
|||||||
var stored = 0
|
var stored = 0
|
||||||
|
|
||||||
// Only need to bridge once, so we can hoist it out of the loop.
|
// Only need to bridge once, so we can hoist it out of the loop.
|
||||||
let bridgedKeys = unsafe bridgeKeys()
|
let bridgedKeys = bridgeKeys()
|
||||||
for i in 0..<count {
|
for i in 0..<count {
|
||||||
if bucket == endBucket { break }
|
if bucket == endBucket { break }
|
||||||
|
|
||||||
@@ -700,7 +700,7 @@ extension __CocoaDictionary: Sequence {
|
|||||||
// This stored property should be stored at offset zero. There's code below
|
// This stored property should be stored at offset zero. There's code below
|
||||||
// relying on this.
|
// relying on this.
|
||||||
internal var _fastEnumerationState: _SwiftNSFastEnumerationState =
|
internal var _fastEnumerationState: _SwiftNSFastEnumerationState =
|
||||||
unsafe _makeSwiftNSFastEnumerationState()
|
_makeSwiftNSFastEnumerationState()
|
||||||
|
|
||||||
// This stored property should be stored right after
|
// This stored property should be stored right after
|
||||||
// `_fastEnumerationState`. There's code below relying on this.
|
// `_fastEnumerationState`. There's code below relying on this.
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ public func swift_slowAlloc(_ size: Int, _ alignMask: Int) -> UnsafeMutableRawPo
|
|||||||
} else {
|
} else {
|
||||||
alignment = alignMask + 1
|
alignment = alignMask + 1
|
||||||
}
|
}
|
||||||
return unsafe alignedAlloc(size: size, alignment: alignment)
|
return alignedAlloc(size: size, alignment: alignment)
|
||||||
}
|
}
|
||||||
|
|
||||||
@_cdecl("swift_slowDealloc")
|
@_cdecl("swift_slowDealloc")
|
||||||
@@ -171,7 +171,7 @@ public func swift_allocObject(metadata: Builtin.RawPointer, requiredSize: Int, r
|
|||||||
}
|
}
|
||||||
|
|
||||||
func swift_allocObject(metadata: UnsafeMutablePointer<ClassMetadata>, requiredSize: Int, requiredAlignmentMask: Int) -> UnsafeMutablePointer<HeapObject> {
|
func swift_allocObject(metadata: UnsafeMutablePointer<ClassMetadata>, requiredSize: Int, requiredAlignmentMask: Int) -> UnsafeMutablePointer<HeapObject> {
|
||||||
let p = unsafe swift_slowAlloc(requiredSize, requiredAlignmentMask)!
|
let p = swift_slowAlloc(requiredSize, requiredAlignmentMask)!
|
||||||
let object = unsafe p.assumingMemoryBound(to: HeapObject.self)
|
let object = unsafe p.assumingMemoryBound(to: HeapObject.self)
|
||||||
unsafe _swift_embedded_set_heap_object_metadata_pointer(object, metadata)
|
unsafe _swift_embedded_set_heap_object_metadata_pointer(object, metadata)
|
||||||
unsafe object.pointee.refcount = 1
|
unsafe object.pointee.refcount = 1
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ extension InlineArray where Element: ~Copyable {
|
|||||||
/// Converts the given raw pointer, which points at an uninitialized array
|
/// Converts the given raw pointer, which points at an uninitialized array
|
||||||
/// instance, to a mutable buffer suitable for initialization.
|
/// instance, to a mutable buffer suitable for initialization.
|
||||||
@available(SwiftStdlib 6.2, *)
|
@available(SwiftStdlib 6.2, *)
|
||||||
|
@unsafe
|
||||||
@_alwaysEmitIntoClient
|
@_alwaysEmitIntoClient
|
||||||
@_transparent
|
@_transparent
|
||||||
internal static func _initializationBuffer(
|
internal static func _initializationBuffer(
|
||||||
|
|||||||
@@ -629,7 +629,7 @@ public class ReferenceWritableKeyPath<
|
|||||||
return unsafe UnsafeMutablePointer(mutating: typedPointer)
|
return unsafe UnsafeMutablePointer(mutating: typedPointer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _openExistential(base, do: unsafe formalMutation(_:))
|
return _openExistential(base, do: formalMutation(_:))
|
||||||
}
|
}
|
||||||
|
|
||||||
return unsafe (address, keepAlive)
|
return unsafe (address, keepAlive)
|
||||||
@@ -1825,7 +1825,7 @@ internal struct RawKeyPathComponent {
|
|||||||
case .get(id: _, accessors: let accessors, argument: let argument),
|
case .get(id: _, accessors: let accessors, argument: let argument),
|
||||||
.mutatingGetSet(id: _, accessors: let accessors, argument: let argument),
|
.mutatingGetSet(id: _, accessors: let accessors, argument: let argument),
|
||||||
.nonmutatingGetSet(id: _, accessors: let accessors, argument: let argument):
|
.nonmutatingGetSet(id: _, accessors: let accessors, argument: let argument):
|
||||||
let getter: ComputedAccessorsPtr.Getter<CurValue, NewValue> = unsafe accessors.getter()
|
let getter: ComputedAccessorsPtr.Getter<CurValue, NewValue> = accessors.getter()
|
||||||
|
|
||||||
unsafe pointer.initialize(
|
unsafe pointer.initialize(
|
||||||
to: getter(
|
to: getter(
|
||||||
@@ -2263,7 +2263,7 @@ func _modifyAtReferenceWritableKeyPath_impl<Root, Value>(
|
|||||||
root: Root,
|
root: Root,
|
||||||
keyPath: ReferenceWritableKeyPath<Root, Value>
|
keyPath: ReferenceWritableKeyPath<Root, Value>
|
||||||
) -> (UnsafeMutablePointer<Value>, AnyObject?) {
|
) -> (UnsafeMutablePointer<Value>, AnyObject?) {
|
||||||
return unsafe keyPath._projectMutableAddress(from: root)
|
return keyPath._projectMutableAddress(from: root)
|
||||||
}
|
}
|
||||||
|
|
||||||
@_silgen_name("swift_setAtWritableKeyPath")
|
@_silgen_name("swift_setAtWritableKeyPath")
|
||||||
@@ -2299,7 +2299,7 @@ func _setAtReferenceWritableKeyPath<Root, Value>(
|
|||||||
value: __owned Value
|
value: __owned Value
|
||||||
) {
|
) {
|
||||||
// TODO: we should be able to do this more efficiently than projecting.
|
// TODO: we should be able to do this more efficiently than projecting.
|
||||||
let (addr, owner) = unsafe keyPath._projectMutableAddress(from: root)
|
let (addr, owner) = keyPath._projectMutableAddress(from: root)
|
||||||
unsafe addr.pointee = value
|
unsafe addr.pointee = value
|
||||||
_fixLifetime(owner)
|
_fixLifetime(owner)
|
||||||
// FIXME: this needs a deallocation barrier to ensure that the
|
// FIXME: this needs a deallocation barrier to ensure that the
|
||||||
@@ -3222,7 +3222,7 @@ internal func _walkKeyPathPattern<W: KeyPathPatternVisitor>(
|
|||||||
let witnessesRef = unsafe _pop(from: &componentBuffer, as: Int32.self)
|
let witnessesRef = unsafe _pop(from: &componentBuffer, as: Int32.self)
|
||||||
let witnesses: UnsafeRawPointer
|
let witnesses: UnsafeRawPointer
|
||||||
if witnessesRef == 0 {
|
if witnessesRef == 0 {
|
||||||
unsafe witnesses = unsafe __swift_keyPathGenericWitnessTable_addr()
|
unsafe witnesses = __swift_keyPathGenericWitnessTable_addr()
|
||||||
} else {
|
} else {
|
||||||
unsafe witnesses = unsafe _resolveRelativeAddress(witnessesBase, witnessesRef)
|
unsafe witnesses = unsafe _resolveRelativeAddress(witnessesBase, witnessesRef)
|
||||||
}
|
}
|
||||||
@@ -4353,7 +4353,7 @@ fileprivate func dynamicLibraryAddress<Base, Leaf>(
|
|||||||
_: Base.Type,
|
_: Base.Type,
|
||||||
_ leaf: Leaf.Type
|
_ leaf: Leaf.Type
|
||||||
) -> String {
|
) -> String {
|
||||||
let getter: ComputedAccessorsPtr.Getter<Base, Leaf> = unsafe pointer.getter()
|
let getter: ComputedAccessorsPtr.Getter<Base, Leaf> = pointer.getter()
|
||||||
let pointer = unsafe unsafeBitCast(getter, to: UnsafeRawPointer.self)
|
let pointer = unsafe unsafeBitCast(getter, to: UnsafeRawPointer.self)
|
||||||
if let cString = unsafe keyPath_copySymbolName(UnsafeRawPointer(pointer)) {
|
if let cString = unsafe keyPath_copySymbolName(UnsafeRawPointer(pointer)) {
|
||||||
defer {
|
defer {
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public func _getTypeName(_ type: Any.Type, qualified: Bool)
|
|||||||
@_unavailableInEmbedded
|
@_unavailableInEmbedded
|
||||||
public // @testable
|
public // @testable
|
||||||
func _typeName(_ type: Any.Type, qualified: Bool = true) -> String {
|
func _typeName(_ type: Any.Type, qualified: Bool = true) -> String {
|
||||||
let (stringPtr, count) = unsafe _getTypeName(type, qualified: qualified)
|
let (stringPtr, count) = _getTypeName(type, qualified: qualified)
|
||||||
return unsafe String._fromUTF8Repairing(
|
return unsafe String._fromUTF8Repairing(
|
||||||
UnsafeBufferPointer(start: stringPtr, count: count)).0
|
UnsafeBufferPointer(start: stringPtr, count: count)).0
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,7 @@ public func _getMangledTypeName(_ type: any (~Copyable & ~Escapable).Type)
|
|||||||
@_preInverseGenerics
|
@_preInverseGenerics
|
||||||
public // SPI
|
public // SPI
|
||||||
func _mangledTypeName(_ type: any (~Copyable & ~Escapable).Type) -> String? {
|
func _mangledTypeName(_ type: any (~Copyable & ~Escapable).Type) -> String? {
|
||||||
let (stringPtr, count) = unsafe _getMangledTypeName(type)
|
let (stringPtr, count) = _getMangledTypeName(type)
|
||||||
guard count > 0 else {
|
guard count > 0 else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ internal func _adHocPrint_unlocked<T, TargetStream: TextOutputStream>(
|
|||||||
}
|
}
|
||||||
target.write(")")
|
target.write(")")
|
||||||
case .enum:
|
case .enum:
|
||||||
if let cString = unsafe _getEnumCaseName(value),
|
if let cString = _getEnumCaseName(value),
|
||||||
let caseName = unsafe String(validatingCString: cString) {
|
let caseName = unsafe String(validatingCString: cString) {
|
||||||
// Write the qualified type name in debugPrint.
|
// Write the qualified type name in debugPrint.
|
||||||
if isDebugPrint {
|
if isDebugPrint {
|
||||||
@@ -389,7 +389,7 @@ internal func _adHocPrint_unlocked<T, TargetStream: TextOutputStream>(
|
|||||||
printTypeName(metatypeValue)
|
printTypeName(metatypeValue)
|
||||||
} else {
|
} else {
|
||||||
// Fall back to the type or an opaque summary of the kind
|
// Fall back to the type or an opaque summary of the kind
|
||||||
if let cString = unsafe _opaqueSummary(mirror.subjectType),
|
if let cString = _opaqueSummary(mirror.subjectType),
|
||||||
let opaqueSummary = unsafe String(validatingCString: cString) {
|
let opaqueSummary = unsafe String(validatingCString: cString) {
|
||||||
target.write(opaqueSummary)
|
target.write(opaqueSummary)
|
||||||
} else {
|
} else {
|
||||||
@@ -533,7 +533,7 @@ internal func _dumpPrint_unlocked<T, TargetStream: TextOutputStream>(
|
|||||||
return
|
return
|
||||||
case .`enum`:
|
case .`enum`:
|
||||||
target.write(_typeName(mirror.subjectType, qualified: true))
|
target.write(_typeName(mirror.subjectType, qualified: true))
|
||||||
if let cString = unsafe _getEnumCaseName(value),
|
if let cString = _getEnumCaseName(value),
|
||||||
let caseName = unsafe String(validatingCString: cString) {
|
let caseName = unsafe String(validatingCString: cString) {
|
||||||
target.write(".")
|
target.write(".")
|
||||||
target.write(caseName)
|
target.write(caseName)
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ func _convertConstArrayToPointerArgument<
|
|||||||
FromElement,
|
FromElement,
|
||||||
ToPointer: _Pointer
|
ToPointer: _Pointer
|
||||||
>(_ arr: [FromElement]) -> (AnyObject?, ToPointer) {
|
>(_ arr: [FromElement]) -> (AnyObject?, ToPointer) {
|
||||||
let (owner, opaquePointer) = unsafe arr._cPointerArgs()
|
let (owner, opaquePointer) = arr._cPointerArgs()
|
||||||
|
|
||||||
let validPointer: ToPointer
|
let validPointer: ToPointer
|
||||||
if let addr = unsafe opaquePointer {
|
if let addr = unsafe opaquePointer {
|
||||||
@@ -453,7 +453,7 @@ func _convertConstArrayToPointerArgument<
|
|||||||
FromElement,
|
FromElement,
|
||||||
ToPointer: _Pointer
|
ToPointer: _Pointer
|
||||||
>(_ arr: [FromElement]) -> (Builtin.NativeObject?, ToPointer) {
|
>(_ arr: [FromElement]) -> (Builtin.NativeObject?, ToPointer) {
|
||||||
let (owner, opaquePointer) = unsafe arr._cPointerArgs()
|
let (owner, opaquePointer) = arr._cPointerArgs()
|
||||||
|
|
||||||
let validPointer: ToPointer
|
let validPointer: ToPointer
|
||||||
if let addr = unsafe opaquePointer {
|
if let addr = unsafe opaquePointer {
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ struct _RuntimeFunctionCounters {
|
|||||||
public static let runtimeFunctionNames =
|
public static let runtimeFunctionNames =
|
||||||
getRuntimeFunctionNames()
|
getRuntimeFunctionNames()
|
||||||
public static let runtimeFunctionCountersOffsets =
|
public static let runtimeFunctionCountersOffsets =
|
||||||
unsafe _RuntimeFunctionCounters.getRuntimeFunctionCountersOffsets()
|
_RuntimeFunctionCounters.getRuntimeFunctionCountersOffsets()
|
||||||
public static let numRuntimeFunctionCounters =
|
public static let numRuntimeFunctionCounters =
|
||||||
Int(_RuntimeFunctionCounters.getNumRuntimeFunctionCounters())
|
Int(_RuntimeFunctionCounters.getNumRuntimeFunctionCounters())
|
||||||
public static let runtimeFunctionNameToIndex: [String: Int] =
|
public static let runtimeFunctionNameToIndex: [String: Int] =
|
||||||
@@ -119,7 +119,7 @@ struct _RuntimeFunctionCounters {
|
|||||||
UnsafePointer<UnsafePointer<CChar>>
|
UnsafePointer<UnsafePointer<CChar>>
|
||||||
|
|
||||||
public static func getRuntimeFunctionNames() -> [String] {
|
public static func getRuntimeFunctionNames() -> [String] {
|
||||||
let names = unsafe _RuntimeFunctionCounters._getRuntimeFunctionNames()
|
let names = _RuntimeFunctionCounters._getRuntimeFunctionNames()
|
||||||
let numRuntimeFunctionCounters =
|
let numRuntimeFunctionCounters =
|
||||||
Int(_RuntimeFunctionCounters.getNumRuntimeFunctionCounters())
|
Int(_RuntimeFunctionCounters.getNumRuntimeFunctionCounters())
|
||||||
var functionNames: [String] = []
|
var functionNames: [String] = []
|
||||||
@@ -504,7 +504,7 @@ public // @testable
|
|||||||
func _collectReferencesInsideObject(_ value: Any) -> [UnsafeRawPointer] {
|
func _collectReferencesInsideObject(_ value: Any) -> [UnsafeRawPointer] {
|
||||||
let savedMode = _RuntimeFunctionCounters.disableRuntimeFunctionCountersUpdates()
|
let savedMode = _RuntimeFunctionCounters.disableRuntimeFunctionCountersUpdates()
|
||||||
// Collect all references inside the object
|
// Collect all references inside the object
|
||||||
let refs = unsafe _RuntimeFunctionCounters.collectAllReferencesInsideObject(value)
|
let refs = _RuntimeFunctionCounters.collectAllReferencesInsideObject(value)
|
||||||
_RuntimeFunctionCounters.enableRuntimeFunctionCountersUpdates(mode: savedMode)
|
_RuntimeFunctionCounters.enableRuntimeFunctionCountersUpdates(mode: savedMode)
|
||||||
return unsafe refs
|
return unsafe refs
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ final internal class _SwiftDeferredNSSet<Element: Hashable>
|
|||||||
|
|
||||||
let (bucket, found) = native.find(element)
|
let (bucket, found) = native.find(element)
|
||||||
guard found else { return nil }
|
guard found else { return nil }
|
||||||
let bridged = unsafe bridgeElements()
|
let bridged = bridgeElements()
|
||||||
return unsafe bridged[bucket]
|
return unsafe bridged[bucket]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,7 +272,7 @@ final internal class _SwiftDeferredNSSet<Element: Hashable>
|
|||||||
"Invalid fast enumeration state")
|
"Invalid fast enumeration state")
|
||||||
|
|
||||||
// Only need to bridge once, so we can hoist it out of the loop.
|
// Only need to bridge once, so we can hoist it out of the loop.
|
||||||
let bridgedElements = unsafe bridgeElements()
|
let bridgedElements = bridgeElements()
|
||||||
|
|
||||||
var stored = 0
|
var stored = 0
|
||||||
for i in 0..<count {
|
for i in 0..<count {
|
||||||
@@ -526,7 +526,7 @@ extension __CocoaSet: Sequence {
|
|||||||
// This stored property should be stored at offset zero. There's code below
|
// This stored property should be stored at offset zero. There's code below
|
||||||
// relying on this.
|
// relying on this.
|
||||||
internal var _fastEnumerationState: _SwiftNSFastEnumerationState =
|
internal var _fastEnumerationState: _SwiftNSFastEnumerationState =
|
||||||
unsafe _makeSwiftNSFastEnumerationState()
|
_makeSwiftNSFastEnumerationState()
|
||||||
|
|
||||||
// This stored property should be stored right after
|
// This stored property should be stored right after
|
||||||
// `_fastEnumerationState`. There's code below relying on this.
|
// `_fastEnumerationState`. There's code below relying on this.
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ extension RawSpan {
|
|||||||
@_alwaysEmitIntoClient
|
@_alwaysEmitIntoClient
|
||||||
@lifetime(borrow mutableRawSpan)
|
@lifetime(borrow mutableRawSpan)
|
||||||
public init(_mutableRawSpan mutableRawSpan: borrowing MutableRawSpan) {
|
public init(_mutableRawSpan mutableRawSpan: borrowing MutableRawSpan) {
|
||||||
let (start, count) = unsafe (mutableRawSpan._start(), mutableRawSpan._count)
|
let (start, count) = (mutableRawSpan._start(), mutableRawSpan._count)
|
||||||
let span = unsafe RawSpan(_unsafeStart: start, byteCount: count)
|
let span = unsafe RawSpan(_unsafeStart: start, byteCount: count)
|
||||||
self = unsafe _overrideLifetime(span, borrowing: mutableRawSpan)
|
self = unsafe _overrideLifetime(span, borrowing: mutableRawSpan)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -600,7 +600,7 @@ extension MutableSpan where Element: BitwiseCopyable {
|
|||||||
) where Element: BitwiseCopyable {
|
) where Element: BitwiseCopyable {
|
||||||
guard count > 0 else { return }
|
guard count > 0 else { return }
|
||||||
// rebind _start manually in order to avoid assumptions about alignment.
|
// rebind _start manually in order to avoid assumptions about alignment.
|
||||||
let rp = unsafe _start()._rawValue
|
let rp = _start()._rawValue
|
||||||
let binding = Builtin.bindMemory(rp, count._builtinWordValue, Element.self)
|
let binding = Builtin.bindMemory(rp, count._builtinWordValue, Element.self)
|
||||||
let rebound = unsafe UnsafeMutablePointer<Element>(rp)
|
let rebound = unsafe UnsafeMutablePointer<Element>(rp)
|
||||||
unsafe rebound.update(repeating: repeatedValue, count: count)
|
unsafe rebound.update(repeating: repeatedValue, count: count)
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ private func _objc(_ str: _CocoaString) -> _StringSelectorHolder {
|
|||||||
|
|
||||||
@_effects(releasenone)
|
@_effects(releasenone)
|
||||||
private func _copyNSString(_ str: _StringSelectorHolder) -> _CocoaString {
|
private func _copyNSString(_ str: _StringSelectorHolder) -> _CocoaString {
|
||||||
return unsafe str.copy(with: nil)
|
return str.copy(with: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@usableFromInline // @testable
|
@usableFromInline // @testable
|
||||||
@@ -127,7 +127,7 @@ private func _stdlib_binary_createIndirectTaggedPointerNSString(
|
|||||||
internal func _stdlib_binary_CFStringGetCharactersPtr(
|
internal func _stdlib_binary_CFStringGetCharactersPtr(
|
||||||
_ source: _CocoaString
|
_ source: _CocoaString
|
||||||
) -> UnsafeMutablePointer<UTF16.CodeUnit>? {
|
) -> UnsafeMutablePointer<UTF16.CodeUnit>? {
|
||||||
return unsafe _NSStringCharactersPtr(_objc(source))
|
return _NSStringCharactersPtr(_objc(source))
|
||||||
}
|
}
|
||||||
|
|
||||||
@_effects(releasenone)
|
@_effects(releasenone)
|
||||||
@@ -284,7 +284,7 @@ internal func _cocoaHashASCIIBytes(
|
|||||||
internal func _cocoaCStringUsingEncodingTrampoline(
|
internal func _cocoaCStringUsingEncodingTrampoline(
|
||||||
_ string: _CocoaString, _ encoding: UInt
|
_ string: _CocoaString, _ encoding: UInt
|
||||||
) -> UnsafePointer<UInt8>? {
|
) -> UnsafePointer<UInt8>? {
|
||||||
return unsafe _swift_stdlib_NSStringCStringUsingEncodingTrampoline(string, encoding)
|
return _swift_stdlib_NSStringCStringUsingEncodingTrampoline(string, encoding)
|
||||||
}
|
}
|
||||||
|
|
||||||
@_effects(releasenone)
|
@_effects(releasenone)
|
||||||
@@ -373,7 +373,7 @@ private func _NSStringASCIIPointer(_ str: _StringSelectorHolder) -> UnsafePointe
|
|||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
private func _NSStringUTF8Pointer(_ str: _StringSelectorHolder) -> UnsafePointer<UInt8>? {
|
private func _NSStringUTF8Pointer(_ str: _StringSelectorHolder) -> UnsafePointer<UInt8>? {
|
||||||
//We don't have a way to ask for UTF8 here currently
|
//We don't have a way to ask for UTF8 here currently
|
||||||
return unsafe _NSStringASCIIPointer(str)
|
return _NSStringASCIIPointer(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
@@ -405,7 +405,7 @@ private func _withCocoaASCIIPointer<R>(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
defer { _fixLifetime(str) }
|
defer { _fixLifetime(str) }
|
||||||
if let ptr = unsafe _NSStringASCIIPointer(_objc(str)) {
|
if let ptr = _NSStringASCIIPointer(_objc(str)) {
|
||||||
return unsafe work(ptr)
|
return unsafe work(ptr)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -430,7 +430,7 @@ private func _withCocoaUTF8Pointer<R>(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
defer { _fixLifetime(str) }
|
defer { _fixLifetime(str) }
|
||||||
if let ptr = unsafe _NSStringUTF8Pointer(_objc(str)) {
|
if let ptr = _NSStringUTF8Pointer(_objc(str)) {
|
||||||
return unsafe work(ptr)
|
return unsafe work(ptr)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -476,7 +476,7 @@ private enum CocoaStringPointer {
|
|||||||
private func _getCocoaStringPointer(
|
private func _getCocoaStringPointer(
|
||||||
_ cfImmutableValue: _CocoaString
|
_ cfImmutableValue: _CocoaString
|
||||||
) -> CocoaStringPointer {
|
) -> CocoaStringPointer {
|
||||||
if let ascii = unsafe stableCocoaASCIIPointer(cfImmutableValue) {
|
if let ascii = stableCocoaASCIIPointer(cfImmutableValue) {
|
||||||
return unsafe .ascii(ascii)
|
return unsafe .ascii(ascii)
|
||||||
}
|
}
|
||||||
// We could ask for UTF16 here via _stdlib_binary_CFStringGetCharactersPtr,
|
// We could ask for UTF16 here via _stdlib_binary_CFStringGetCharactersPtr,
|
||||||
@@ -527,7 +527,7 @@ internal func _bridgeCocoaString(_ cocoaString: _CocoaString) -> _StringGuts {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
let (fastUTF8, isASCII): (Bool, Bool)
|
let (fastUTF8, isASCII): (Bool, Bool)
|
||||||
switch unsafe _getCocoaStringPointer(immutableCopy) {
|
switch _getCocoaStringPointer(immutableCopy) {
|
||||||
case .ascii(_): (fastUTF8, isASCII) = (true, true)
|
case .ascii(_): (fastUTF8, isASCII) = (true, true)
|
||||||
case .utf8(_): (fastUTF8, isASCII) = (true, false)
|
case .utf8(_): (fastUTF8, isASCII) = (true, false)
|
||||||
default: (fastUTF8, isASCII) = (false, false)
|
default: (fastUTF8, isASCII) = (false, false)
|
||||||
|
|||||||
@@ -973,7 +973,7 @@ extension _StringObject {
|
|||||||
#if _runtime(_ObjC)
|
#if _runtime(_ObjC)
|
||||||
if largeFastIsConstantCocoa {
|
if largeFastIsConstantCocoa {
|
||||||
return unsafe withCocoaObject {
|
return unsafe withCocoaObject {
|
||||||
unsafe _getNSCFConstantStringContentsPointer($0)
|
_getNSCFConstantStringContentsPointer($0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if largeIsCocoa {
|
if largeIsCocoa {
|
||||||
@@ -989,7 +989,7 @@ extension _StringObject {
|
|||||||
internal var sharedUTF8: UnsafeBufferPointer<UInt8> {
|
internal var sharedUTF8: UnsafeBufferPointer<UInt8> {
|
||||||
@_effects(releasenone) @inline(never) get {
|
@_effects(releasenone) @inline(never) get {
|
||||||
_internalInvariant(largeFastIsShared)
|
_internalInvariant(largeFastIsShared)
|
||||||
let start = unsafe self.getSharedUTF8Start()
|
let start = self.getSharedUTF8Start()
|
||||||
return unsafe UnsafeBufferPointer(start: start, count: largeCount)
|
return unsafe UnsafeBufferPointer(start: start, count: largeCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ extension _AbstractStringStorage {
|
|||||||
(_cocoaUTF8Encoding, _):
|
(_cocoaUTF8Encoding, _):
|
||||||
return unsafe start
|
return unsafe start
|
||||||
default:
|
default:
|
||||||
return unsafe _cocoaCStringUsingEncodingTrampoline(self, encoding)
|
return _cocoaCStringUsingEncodingTrampoline(self, encoding)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ extension __StringStorage {
|
|||||||
@objc(cStringUsingEncoding:)
|
@objc(cStringUsingEncoding:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
final internal func cString(encoding: UInt) -> UnsafePointer<UInt8>? {
|
final internal func cString(encoding: UInt) -> UnsafePointer<UInt8>? {
|
||||||
return unsafe _cString(encoding: encoding)
|
return _cString(encoding: encoding)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(getCString:maxLength:encoding:)
|
@objc(getCString:maxLength:encoding:)
|
||||||
@@ -318,7 +318,7 @@ extension __SharedStringStorage {
|
|||||||
@objc(cStringUsingEncoding:)
|
@objc(cStringUsingEncoding:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
final internal func cString(encoding: UInt) -> UnsafePointer<UInt8>? {
|
final internal func cString(encoding: UInt) -> UnsafePointer<UInt8>? {
|
||||||
return unsafe _cString(encoding: encoding)
|
return _cString(encoding: encoding)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(getCString:maxLength:encoding:)
|
@objc(getCString:maxLength:encoding:)
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ extension _StringGuts {
|
|||||||
usesScratch: false, allocatedMemory: false)
|
usesScratch: false, allocatedMemory: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
let (object, ptr, len) = unsafe self._allocateForDeconstruct()
|
let (object, ptr, len) = self._allocateForDeconstruct()
|
||||||
return unsafe (
|
return unsafe (
|
||||||
owner: object,
|
owner: object,
|
||||||
_convertPointerToPointerArgument(ptr),
|
_convertPointerToPointerArgument(ptr),
|
||||||
|
|||||||
@@ -852,7 +852,7 @@ extension String.UTF16View {
|
|||||||
return _utf16Distance(from: startIndex, to: idx)
|
return _utf16Distance(from: startIndex, to: idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
let breadcrumbs = unsafe _guts.loadUnmanagedBreadcrumbs()
|
let breadcrumbs = _guts.loadUnmanagedBreadcrumbs()
|
||||||
|
|
||||||
// Simple and common: endIndex aka `length`.
|
// Simple and common: endIndex aka `length`.
|
||||||
if idx == endIndex {
|
if idx == endIndex {
|
||||||
@@ -896,7 +896,7 @@ extension String.UTF16View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Simple and common: endIndex aka `length`.
|
// Simple and common: endIndex aka `length`.
|
||||||
let breadcrumbs = unsafe _guts.loadUnmanagedBreadcrumbs()
|
let breadcrumbs = _guts.loadUnmanagedBreadcrumbs()
|
||||||
let utf16Count = unsafe breadcrumbs._withUnsafeGuaranteedRef { $0.utf16Length }
|
let utf16Count = unsafe breadcrumbs._withUnsafeGuaranteedRef { $0.utf16Length }
|
||||||
if offset == utf16Count { return endIndex }
|
if offset == utf16Count { return endIndex }
|
||||||
|
|
||||||
|
|||||||
@@ -84,13 +84,13 @@ extension __SwiftNativeNSArrayWithContiguousStorage {
|
|||||||
@objc(objectAtIndexedSubscript:)
|
@objc(objectAtIndexedSubscript:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
dynamic internal func objectAtSubscript(_ index: Int) -> Unmanaged<AnyObject> {
|
dynamic internal func objectAtSubscript(_ index: Int) -> Unmanaged<AnyObject> {
|
||||||
return unsafe _objectAt(index)
|
return _objectAt(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(objectAtIndex:)
|
@objc(objectAtIndex:)
|
||||||
@_effects(readonly)
|
@_effects(readonly)
|
||||||
dynamic internal func objectAt(_ index: Int) -> Unmanaged<AnyObject> {
|
dynamic internal func objectAt(_ index: Int) -> Unmanaged<AnyObject> {
|
||||||
return unsafe _objectAt(index)
|
return _objectAt(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc internal func getObjects(
|
@objc internal func getObjects(
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ extension UTF8Span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private var _start: UnsafeRawPointer {
|
private var _start: UnsafeRawPointer {
|
||||||
unsafe codeUnits._start()
|
codeUnits._start()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decode and return the scalar starting at `currentCodeUnitOffset`.
|
/// Decode and return the scalar starting at `currentCodeUnitOffset`.
|
||||||
@@ -227,7 +227,7 @@ extension UTF8Span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private var _start: UnsafeRawPointer {
|
private var _start: UnsafeRawPointer {
|
||||||
unsafe codeUnits._start()
|
codeUnits._start()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the `Character` starting at `currentCodeUnitOffset`. After the
|
/// Return the `Character` starting at `currentCodeUnitOffset`. After the
|
||||||
|
|||||||
@@ -1277,7 +1277,7 @@ extension Unicode.Scalar.Properties {
|
|||||||
/// This property corresponds to the "Name_Alias" property in the
|
/// This property corresponds to the "Name_Alias" property in the
|
||||||
/// [Unicode Standard](http://www.unicode.org/versions/latest/).
|
/// [Unicode Standard](http://www.unicode.org/versions/latest/).
|
||||||
public var nameAlias: String? {
|
public var nameAlias: String? {
|
||||||
guard let nameAliasPtr = unsafe _swift_stdlib_getNameAlias(_scalar.value) else {
|
guard let nameAliasPtr = _swift_stdlib_getNameAlias(_scalar.value) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user