blob: 8589984564e5489a8eb0679abfb15ad8ef0a1ad0 [file] [log] [blame] [edit]
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#import <Foundation/NSThread.h>
#include "arc_test.h"
#if !__has_feature(objc_arc)
#error "This file must be compiled with ARC enabled"
#endif
@implementation ArcTestObject
+ (instancetype)allocTheThing {
return [ArcTestObject alloc];
}
+ (instancetype)newWithCounter:(int32_t*) _counter {
return [[ArcTestObject alloc] initWithCounter: _counter];
}
- (instancetype)initWithCounter:(int32_t*) _counter {
counter = _counter;
++*counter;
return [super init];
}
+ (instancetype)makeAndAutorelease:(int32_t*) _counter {
return [[ArcTestObject alloc] initWithCounter: _counter];
}
- (void)setCounter:(int32_t*) _counter {
counter = _counter;
++*counter;
}
- (void)dealloc {
--*counter;
}
- (ArcTestObject*)copyMe {
return [[ArcTestObject alloc] initWithCounter: counter];
}
- (ArcTestObject*)mutableCopyMe {
return [[ArcTestObject alloc] initWithCounter: counter];
}
- (id)copyWithZone:(NSZone*) zone {
return [[ArcTestObject alloc] initWithCounter: counter];
}
- (ArcTestObject*)returnsRetained NS_RETURNS_RETAINED {
return [self copyMe];
}
- (ArcTestObject*)copyMeNoRetain __attribute__((ns_returns_not_retained)) {
return [self copyMe];
}
- (ArcTestObject*)copyMeAutorelease __attribute__((ns_returns_autoreleased)) {
return [self copyMe];
}
- (ArcTestObject*)copyMeConsumeSelf __attribute__((ns_consumes_self)) {
return [self copyMe];
}
+ (void)consumeArg:(ArcTestObject*) __attribute((ns_consumed)) arg {}
@end
@implementation ArcDtorTestObject
- (instancetype)initWithCounters:(int32_t*) _dtorCounter
onMainThread: (int32_t*) _dtorOnMainThreadCounter {
dtorCounter = _dtorCounter;
dtorOnMainThreadCounter = _dtorOnMainThreadCounter;
return [super init];
}
- (void)dealloc {
++*dtorCounter;
if ([NSThread isMainThread]) {
++*dtorOnMainThreadCounter;
}
}
@end