mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This is the same as the last few commits, but with the additional complication of designated initializers affecting other behavior around the type. In particular, convenience initializers cannot be invoked on subclasses if the designated initializers are not all present on the subclass. If a designated initializer is dropped, it's not possible to satisfy that. It would be nice to do better here, since a class's initializers are mostly independent of the superclass's initializers. Unfortunately, it still affects whether /this/ class can inherit convenience initializers, as well as vtable layout. This is conservative, at least.
118 lines
3.0 KiB
Objective-C
118 lines
3.0 KiB
Objective-C
@interface Object
|
|
- (nonnull instancetype)init;
|
|
@end
|
|
|
|
@interface Base : Object
|
|
#if !BAD
|
|
- (void)disappearingMethod;
|
|
- (nullable id)nullabilityChangeMethod;
|
|
- (nonnull id)typeChangeMethod;
|
|
@property (readonly) long disappearingProperty;
|
|
#else
|
|
//- (void)disappearingMethod;
|
|
- (nonnull id)nullabilityChangeMethod;
|
|
- (nonnull Base *)typeChangeMethod;
|
|
// @property (readonly) long disappearingProperty;
|
|
#endif
|
|
@end
|
|
|
|
@interface Base (ExtraMethodsToTriggerCircularReferences)
|
|
#if !BAD
|
|
- (void)disappearingMethodWithOverload;
|
|
#else
|
|
//- (void)disappearingMethodWithOverload;
|
|
#endif
|
|
@end
|
|
|
|
@interface GenericBase<Element>: Object
|
|
#if !BAD
|
|
- (void)disappearingMethod;
|
|
- (nullable Element)nullabilityChangeMethod;
|
|
- (nonnull id)typeChangeMethod;
|
|
#else
|
|
//- (void)disappearingMethod;
|
|
- (nonnull Element)nullabilityChangeMethod;
|
|
- (nonnull Element)typeChangeMethod;
|
|
#endif
|
|
@end
|
|
|
|
|
|
@interface IndexedSubscriptDisappearsBase : Object
|
|
#if !BAD
|
|
- (nonnull id)objectAtIndexedSubscript:(long)index;
|
|
#else
|
|
//- (nonnull id)objectAtIndexedSubscript:(long)index;
|
|
#endif
|
|
@end
|
|
|
|
@interface KeyedSubscriptDisappearsBase : Object
|
|
#if !BAD
|
|
- (nonnull id)objectForKeyedSubscript:(nonnull id)key;
|
|
#else
|
|
// - (nonnull id)objectForKeyedSubscript:(nonnull id)key;
|
|
#endif
|
|
@end
|
|
|
|
@interface GenericIndexedSubscriptDisappearsBase<Element> : Object
|
|
#if !BAD
|
|
- (nonnull Element)objectAtIndexedSubscript:(long)index;
|
|
#else
|
|
// - (nonnull Element)objectAtIndexedSubscript:(long)index;
|
|
#endif
|
|
@end
|
|
|
|
@interface GenericKeyedSubscriptDisappearsBase<Element> : Object
|
|
#if !BAD
|
|
- (nonnull Element)objectAtIndexedSubscript:(nonnull id)key;
|
|
#else
|
|
// - (nonnull Element)objectAtIndexedSubscript:(nonnull id)key;
|
|
#endif
|
|
@end
|
|
|
|
|
|
@interface DesignatedInitDisappearsBase : Object
|
|
- (nonnull instancetype)init __attribute__((objc_designated_initializer));
|
|
- (nonnull instancetype)initConvenience:(long)value;
|
|
#if !BAD
|
|
- (nonnull instancetype)initWithValue:(long)value __attribute__((objc_designated_initializer));
|
|
#else
|
|
//- (nonnull instancetype)initWithValue:(long)value __attribute__((objc_designated_initializer));
|
|
#endif
|
|
@end
|
|
|
|
@interface OnlyDesignatedInitDisappearsBase : Object
|
|
- (nonnull instancetype)initConvenience:(long)value;
|
|
#if !BAD
|
|
- (nonnull instancetype)initWithValue:(long)value __attribute__((objc_designated_initializer));
|
|
#else
|
|
//- (nonnull instancetype)initWithValue:(long)value __attribute__((objc_designated_initializer));
|
|
#endif
|
|
@end
|
|
|
|
@interface ConvenienceInitDisappearsBase : Object
|
|
- (nonnull instancetype)init __attribute__((objc_designated_initializer));
|
|
- (nonnull instancetype)initConvenience:(long)value;
|
|
#if !BAD
|
|
- (nonnull instancetype)initWithValue:(long)value;
|
|
#else
|
|
//- (nonnull instancetype)initWithValue:(long)value;
|
|
#endif
|
|
@end
|
|
|
|
@interface UnknownInitDisappearsBase : Object
|
|
- (nonnull instancetype)init;
|
|
#if !BAD
|
|
- (nonnull instancetype)initWithValue:(long)value;
|
|
#else
|
|
//- (nonnull instancetype)initWithValue:(long)value;
|
|
#endif
|
|
@end
|
|
|
|
@interface OnlyUnknownInitDisappearsBase : Object
|
|
#if !BAD
|
|
- (nonnull instancetype)initWithValue:(long)value;
|
|
#else
|
|
//- (nonnull instancetype)initWithValue:(long)value;
|
|
#endif
|
|
@end
|