Skip to content

Commit 0412597

Browse files
Added swift_retainCount to EmbeddedRuntime.swift
Fixes test/embedded/concurrency-actors.swift
1 parent 50b1313 commit 0412597

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,14 @@ FUNCTION(CopyPOD, swift_copyPOD, C_CC, AlwaysAvailable,
204204
EFFECT(NoEffect),
205205
UNKNOWN_MEMEFFECTS)
206206

207+
// size_t swift_retainCount(void *ptr);
208+
FUNCTION(NativeRetainCount, swift_retainCount, C_CC, AlwaysAvailable,
209+
RETURNS(SizeTy),
210+
ARGS(RefCountedPtrTy),
211+
ATTRS(NoUnwind, WillReturn),
212+
EFFECT(RefCounting),
213+
UNKNOWN_MEMEFFECTS)
214+
207215
// void *swift_retain(void *ptr);
208216
FUNCTION(NativeStrongRetain, swift_retain, C_CC, AlwaysAvailable,
209217
RETURNS(RefCountedPtrTy),

stdlib/public/core/EmbeddedRuntime.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,13 @@ public func swift_bridgeObjectRelease_n(object: Builtin.RawPointer, n: UInt32) {
309309
swift_release_n(object: untaggedObject, n: n)
310310
}
311311

312-
312+
@_cdecl("swift_retainCount")
313+
public func swift_retainCount(object: Builtin.RawPointer) -> Int {
314+
if !isValidPointerForNativeRetain(object: object) { return 0 }
315+
let o = UnsafeMutablePointer<HeapObject>(object)
316+
let refcount = refcountPointer(for: o)
317+
return loadAcquire(refcount) & HeapObject.refcountMask
318+
}
313319

314320
/// Refcount helpers
315321

0 commit comments

Comments
 (0)