Skip to content

Commit 51e0594

Browse files
committed
Runtime: Remove retainCount entry points.
They're only used for testing and ObjC interop, so don't need to be exported from the runtime.
1 parent bfd8413 commit 51e0594

File tree

6 files changed

+23
-40
lines changed

6 files changed

+23
-40
lines changed

Diff for: docs/Runtime.md

+2-14
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,6 @@ Rename with a non-`stdlib` naming scheme.
8989

9090
## Reference counting
9191

92-
### swift\_retainCount
93-
94-
```
95-
@convention(c) (@unowned NativeObject) -> UInt
96-
```
97-
98-
Returns a random number.
99-
100-
**ABI TODO**: Only used by runtime tests and `SwiftObject.mm`. Should be
101-
internalized.
102-
10392
### TODO
10493

10594
```
@@ -112,7 +101,6 @@ internalized.
112101
000000000001ce30 T _swift_retain
113102
000000000001ce50 T _swift_retain_n
114103
000000000001d140 T _swift_tryPin
115-
000000000001d240 T _swift_tryRetain
116104
0000000000027b10 T _swift_unknownRelease
117105
0000000000027a70 T _swift_unknownRelease_n
118106
0000000000027ad0 T _swift_unknownRetain
@@ -139,7 +127,6 @@ internalized.
139127
000000000001cfb0 T _swift_unownedRelease
140128
000000000001d0a0 T _swift_unownedRelease_n
141129
000000000001cf70 T _swift_unownedRetain
142-
000000000001cf60 T _swift_unownedRetainCount
143130
000000000001d2b0 T _swift_unownedRetainStrong
144131
000000000001d310 T _swift_unownedRetainStrongAndRelease
145132
000000000001d060 T _swift_unownedRetain_n
@@ -163,7 +150,6 @@ internalized.
163150
000000000002b290 T _swift_isUniquelyReferencedOrPinned_nonNull_native
164151
000000000002af00 T _swift_isUniquelyReferenced_native
165152
000000000002aea0 T _swift_isUniquelyReferenced_nonNull_native
166-
000000000001d280 T _swift_isDeallocating
167153
```
168154

169155
**ABI TODO**: `_unsynchronized` r/r entry points
@@ -346,6 +332,8 @@ runtime.
346332
```
347333
0000000000023e60 T _swift_demangleSimpleClass
348334
0000000000028770 T _swift_objcRespondsToSelector
335+
000000000001d280 T _swift_isDeallocating
336+
000000000001d240 T _swift_tryRetain
349337
```
350338

351339
## Metatypes

Diff for: include/swift/Runtime/HeapObject.h

-4
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,6 @@ extern "C" void swift_release(HeapObject *object);
206206
/// count reaches zero, the object is destroyed
207207
extern "C" void swift_release_n(HeapObject *object, uint32_t n);
208208

209-
/// ObjC compatibility. Never call this.
210-
extern "C" size_t swift_retainCount(HeapObject *object);
211-
extern "C" size_t swift_unownedRetainCount(HeapObject *object);
212-
213209
/// Is this pointer a non-null unique reference to an object
214210
/// that uses Swift reference counting?
215211
extern "C" bool swift_isUniquelyReferencedNonObjC(const void *);

Diff for: stdlib/public/runtime/HeapObject.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -309,14 +309,6 @@ static void _swift_release_n_(HeapObject *object, uint32_t n) {
309309
}
310310
auto swift::_swift_release_n = _swift_release_n_;
311311

312-
size_t swift::swift_retainCount(HeapObject *object) {
313-
return object->refCount.getCount();
314-
}
315-
316-
size_t swift::swift_unownedRetainCount(HeapObject *object) {
317-
return object->weakRefCount.getCount();
318-
}
319-
320312
void swift::swift_unownedRetain(HeapObject *object) {
321313
if (!object) return;
322314

Diff for: stdlib/public/runtime/SwiftObject.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ - (id)autorelease {
262262
return _objc_rootAutorelease(self);
263263
}
264264
- (NSUInteger)retainCount {
265-
return swift::swift_retainCount(reinterpret_cast<HeapObject *>(self));
265+
return reinterpret_cast<HeapObject *>(self)->refCount.getCount();
266266
}
267267
- (BOOL)_isDeallocating {
268268
return swift_isDeallocating(reinterpret_cast<HeapObject *>(self));

Diff for: unittests/runtime/Refcounting.cpp

+19-12
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,30 @@ TEST(RefcountingTest, pin_pin_unpin_unpin) {
9898
EXPECT_EQ(1u, value);
9999
}
100100

101+
static uintptr_t retainCount(HeapObject *obj) {
102+
return obj->refCount.getCount();
103+
}
104+
static uintptr_t unownedRetainCount(HeapObject *obj) {
105+
return obj->weakRefCount.getCount();
106+
}
107+
101108
TEST(RefcountingTest, retain_release_n) {
102109
size_t value = 0;
103110
auto object = allocTestObject(&value, 1);
104111
EXPECT_EQ(0u, value);
105112
swift_retain_n(object, 32);
106113
swift_retain(object);
107114
EXPECT_EQ(0u, value);
108-
EXPECT_EQ(34u, swift_retainCount(object));
115+
EXPECT_EQ(34u, retainCount(object));
109116
swift_release_n(object, 31);
110117
EXPECT_EQ(0u, value);
111-
EXPECT_EQ(3u, swift_retainCount(object));
118+
EXPECT_EQ(3u, retainCount(object));
112119
swift_release(object);
113120
EXPECT_EQ(0u, value);
114-
EXPECT_EQ(2u, swift_retainCount(object));
121+
EXPECT_EQ(2u, retainCount(object));
115122
swift_release_n(object, 1);
116123
EXPECT_EQ(0u, value);
117-
EXPECT_EQ(1u, swift_retainCount(object));
124+
EXPECT_EQ(1u, retainCount(object));
118125
swift_release(object);
119126
EXPECT_EQ(1u, value);
120127
}
@@ -126,16 +133,16 @@ TEST(RefcountingTest, unknown_retain_release_n) {
126133
swift_unknownRetain_n(object, 32);
127134
swift_unknownRetain(object);
128135
EXPECT_EQ(0u, value);
129-
EXPECT_EQ(34u, swift_retainCount(object));
136+
EXPECT_EQ(34u, retainCount(object));
130137
swift_unknownRelease_n(object, 31);
131138
EXPECT_EQ(0u, value);
132-
EXPECT_EQ(3u, swift_retainCount(object));
139+
EXPECT_EQ(3u, retainCount(object));
133140
swift_unknownRelease(object);
134141
EXPECT_EQ(0u, value);
135-
EXPECT_EQ(2u, swift_retainCount(object));
142+
EXPECT_EQ(2u, retainCount(object));
136143
swift_unknownRelease_n(object, 1);
137144
EXPECT_EQ(0u, value);
138-
EXPECT_EQ(1u, swift_retainCount(object));
145+
EXPECT_EQ(1u, retainCount(object));
139146
swift_unknownRelease(object);
140147
EXPECT_EQ(1u, value);
141148
}
@@ -146,13 +153,13 @@ TEST(RefcountingTest, unowned_retain_release_n) {
146153
EXPECT_EQ(0u, value);
147154
swift_unownedRetain_n(object, 32);
148155
swift_unownedRetain(object);
149-
EXPECT_EQ(34u, swift_unownedRetainCount(object));
156+
EXPECT_EQ(34u, unownedRetainCount(object));
150157
swift_unownedRelease_n(object, 31);
151-
EXPECT_EQ(3u, swift_unownedRetainCount(object));
158+
EXPECT_EQ(3u, unownedRetainCount(object));
152159
swift_unownedRelease(object);
153-
EXPECT_EQ(2u, swift_unownedRetainCount(object));
160+
EXPECT_EQ(2u, unownedRetainCount(object));
154161
swift_unownedRelease_n(object, 1);
155-
EXPECT_EQ(1u, swift_unownedRetainCount(object));
162+
EXPECT_EQ(1u, unownedRetainCount(object));
156163
swift_release(object);
157164
EXPECT_EQ(1u, value);
158165
}

Diff for: unittests/runtime/weak.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ - (void) dealloc {
4040
extern "C" HeapObject *make_swift_object();
4141

4242
static unsigned getUnownedRetainCount(HeapObject *object) {
43-
return swift_unownedRetainCount(object) - 1;
43+
return object->weakRefCount.getCount() - 1;
4444
}
4545

4646
static void unknown_release(void *value) {

0 commit comments

Comments
 (0)