mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
AST: Promote various move-only features to the baseline.
This commit is contained in:
@@ -176,8 +176,8 @@ BASELINE_LANGUAGE_FEATURE(Macros, 0, "Macros")
|
|||||||
BASELINE_LANGUAGE_FEATURE(FreestandingExpressionMacros, 382, "Expression macros")
|
BASELINE_LANGUAGE_FEATURE(FreestandingExpressionMacros, 382, "Expression macros")
|
||||||
BASELINE_LANGUAGE_FEATURE(AttachedMacros, 389, "Attached macros")
|
BASELINE_LANGUAGE_FEATURE(AttachedMacros, 389, "Attached macros")
|
||||||
BASELINE_LANGUAGE_FEATURE(ExtensionMacros, 402, "Extension macros")
|
BASELINE_LANGUAGE_FEATURE(ExtensionMacros, 402, "Extension macros")
|
||||||
LANGUAGE_FEATURE(MoveOnly, 390, "noncopyable types")
|
BASELINE_LANGUAGE_FEATURE(MoveOnly, 390, "noncopyable types")
|
||||||
LANGUAGE_FEATURE(MoveOnlyResilientTypes, 390, "non-@frozen noncopyable types with library evolution")
|
BASELINE_LANGUAGE_FEATURE(MoveOnlyResilientTypes, 390, "non-@frozen noncopyable types with library evolution")
|
||||||
BASELINE_LANGUAGE_FEATURE(ParameterPacks, 393, "Value and type parameter packs")
|
BASELINE_LANGUAGE_FEATURE(ParameterPacks, 393, "Value and type parameter packs")
|
||||||
SUPPRESSIBLE_LANGUAGE_FEATURE(LexicalLifetimes, 0, "@_eagerMove/@_noEagerMove/@_lexicalLifetimes annotations")
|
SUPPRESSIBLE_LANGUAGE_FEATURE(LexicalLifetimes, 0, "@_eagerMove/@_noEagerMove/@_lexicalLifetimes annotations")
|
||||||
BASELINE_LANGUAGE_FEATURE(FreestandingMacros, 397, "freestanding declaration macros")
|
BASELINE_LANGUAGE_FEATURE(FreestandingMacros, 397, "freestanding declaration macros")
|
||||||
@@ -191,7 +191,7 @@ LANGUAGE_FEATURE(BuiltinStoreRaw, 0, "Builtin.storeRaw")
|
|||||||
BASELINE_LANGUAGE_FEATURE(BuiltinCreateTask, 0, "Builtin.createTask and Builtin.createDiscardingTask")
|
BASELINE_LANGUAGE_FEATURE(BuiltinCreateTask, 0, "Builtin.createTask and Builtin.createDiscardingTask")
|
||||||
SUPPRESSIBLE_LANGUAGE_FEATURE(AssociatedTypeImplements, 0, "@_implements on associated types")
|
SUPPRESSIBLE_LANGUAGE_FEATURE(AssociatedTypeImplements, 0, "@_implements on associated types")
|
||||||
LANGUAGE_FEATURE(BuiltinAddressOfRawLayout, 0, "Builtin.addressOfRawLayout")
|
LANGUAGE_FEATURE(BuiltinAddressOfRawLayout, 0, "Builtin.addressOfRawLayout")
|
||||||
LANGUAGE_FEATURE(MoveOnlyPartialConsumption, 429, "Partial consumption of noncopyable values")
|
BASELINE_LANGUAGE_FEATURE(MoveOnlyPartialConsumption, 429, "Partial consumption of noncopyable values")
|
||||||
LANGUAGE_FEATURE(BitwiseCopyable, 426, "BitwiseCopyable protocol")
|
LANGUAGE_FEATURE(BitwiseCopyable, 426, "BitwiseCopyable protocol")
|
||||||
BASELINE_LANGUAGE_FEATURE(NoncopyableGenerics, 427, "Noncopyable generics")
|
BASELINE_LANGUAGE_FEATURE(NoncopyableGenerics, 427, "Noncopyable generics")
|
||||||
BASELINE_LANGUAGE_FEATURE(NoncopyableGenerics2, 427, "Noncopyable generics alias")
|
BASELINE_LANGUAGE_FEATURE(NoncopyableGenerics2, 427, "Noncopyable generics alias")
|
||||||
|
|||||||
@@ -141,48 +141,6 @@ static bool usesFeatureSpecializeAttributeWithAvailability(Decl *decl) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool usesFeatureMoveOnly(Decl *decl) {
|
|
||||||
if (auto *extension = dyn_cast<ExtensionDecl>(decl)) {
|
|
||||||
if (auto *nominal = extension->getExtendedNominal())
|
|
||||||
return usesFeatureMoveOnly(nominal);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto hasInverseInType = [&](Type type) {
|
|
||||||
return type.findIf([&](Type type) -> bool {
|
|
||||||
if (auto *NTD = type->getAnyNominal()) {
|
|
||||||
if (NTD->getAttrs().hasAttribute<MoveOnlyAttr>())
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
if (auto *TD = dyn_cast<TypeDecl>(decl)) {
|
|
||||||
if (auto *alias = dyn_cast<TypeAliasDecl>(TD))
|
|
||||||
return hasInverseInType(alias->getUnderlyingType());
|
|
||||||
|
|
||||||
if (auto *NTD = dyn_cast<NominalTypeDecl>(TD)) {
|
|
||||||
if (NTD->getAttrs().hasAttribute<MoveOnlyAttr>())
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (auto *VD = dyn_cast<ValueDecl>(decl)) {
|
|
||||||
return hasInverseInType(VD->getInterfaceType());
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool usesFeatureMoveOnlyResilientTypes(Decl *decl) {
|
|
||||||
if (auto *nomDecl = dyn_cast<NominalTypeDecl>(decl))
|
|
||||||
return nomDecl->isResilient() && usesFeatureMoveOnly(decl);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool hasParameterPacks(Decl *decl) {
|
static bool hasParameterPacks(Decl *decl) {
|
||||||
if (auto genericContext = decl->getAsGenericContext()) {
|
if (auto genericContext = decl->getAsGenericContext()) {
|
||||||
auto sig = genericContext->getGenericSignature();
|
auto sig = genericContext->getGenericSignature();
|
||||||
@@ -341,29 +299,15 @@ static bool usesFeatureSymbolLinkageMarkers(Decl *decl) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UNINTERESTING_FEATURE(LazyImmediate)
|
UNINTERESTING_FEATURE(LazyImmediate)
|
||||||
|
UNINTERESTING_FEATURE(MoveOnlyClasses)
|
||||||
static bool usesFeatureMoveOnlyClasses(Decl *decl) {
|
|
||||||
return isa<ClassDecl>(decl) && usesFeatureMoveOnly(decl);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool usesFeatureNoImplicitCopy(Decl *decl) {
|
static bool usesFeatureNoImplicitCopy(Decl *decl) {
|
||||||
return decl->isNoImplicitCopy();
|
return decl->isNoImplicitCopy();
|
||||||
}
|
}
|
||||||
|
|
||||||
UNINTERESTING_FEATURE(OldOwnershipOperatorSpellings)
|
UNINTERESTING_FEATURE(OldOwnershipOperatorSpellings)
|
||||||
|
UNINTERESTING_FEATURE(MoveOnlyEnumDeinits)
|
||||||
static bool usesFeatureMoveOnlyEnumDeinits(Decl *decl) {
|
|
||||||
if (auto *ei = dyn_cast<EnumDecl>(decl)) {
|
|
||||||
return usesFeatureMoveOnly(ei) && ei->getValueTypeDestructor();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
UNINTERESTING_FEATURE(MoveOnlyTuples)
|
UNINTERESTING_FEATURE(MoveOnlyTuples)
|
||||||
|
|
||||||
// Partial consumption does not affect declarations directly.
|
|
||||||
UNINTERESTING_FEATURE(MoveOnlyPartialConsumption)
|
|
||||||
|
|
||||||
UNINTERESTING_FEATURE(MoveOnlyPartialReinitialization)
|
UNINTERESTING_FEATURE(MoveOnlyPartialReinitialization)
|
||||||
|
|
||||||
UNINTERESTING_FEATURE(OneWayClosureParameters)
|
UNINTERESTING_FEATURE(OneWayClosureParameters)
|
||||||
|
|||||||
Reference in New Issue
Block a user