[llvm-arc-opts] Implement swift_{retain,release}_n.

rdar://21803771

Swift SVN r30204
This commit is contained in:
Michael Gottesman
2015-07-15 00:03:03 +00:00
parent 2315c8fd06
commit 4ce5cdad17
5 changed files with 97 additions and 1 deletions

View File

@@ -287,6 +287,17 @@ static HeapObject *_swift_retain_(HeapObject *object) {
}
auto swift::_swift_retain = _swift_retain_;
HeapObject *swift::swift_retain_n(HeapObject *object, uint32_t n) {
return _swift_retain_n(object, n);
}
static HeapObject *_swift_retain_n_(HeapObject *object, uint32_t n) {
if (object) {
object->refCount.increment(n);
}
return object;
}
auto swift::_swift_retain_n = _swift_retain_n_;
void swift::swift_release(HeapObject *object) {
SWIFT_RELEASE();
return _swift_release(object);
@@ -298,6 +309,16 @@ static void _swift_release_(HeapObject *object) {
}
auto swift::_swift_release = _swift_release_;
void swift::swift_release_n(HeapObject *object, uint32_t n) {
return _swift_release_n(object, n);
}
static void _swift_release_n_(HeapObject *object, uint32_t n) {
if (object && object->refCount.decrementShouldDeallocateN(n)) {
_swift_release_dealloc(object);
}
}
auto swift::_swift_release_n = _swift_release_n_;
size_t swift::swift_retainCount(HeapObject *object) {
return object->refCount.getCount();
}