Skip to content

Commit dba0a40

Browse files
committed
Macro-metaprogram "baseline" features that all Swift compilers handle
This is better than a pile of usesXXXFeature() functions that return `false` with no explanation.
1 parent bae1026 commit dba0a40

File tree

2 files changed

+32
-83
lines changed

2 files changed

+32
-83
lines changed

include/swift/Basic/Features.def

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
// imply the existence of earlier features. (This only needs to apply to
3535
// suppressible features.)
3636
//
37+
// BASELINE_LANGUAGE_FEATURE is the same as LANGUAGE_FEATURE, but is used
38+
// for features that can be assumed to be available in any Swift compiler that
39+
// will be used to process the textual interface files produced by this
40+
// Swift compiler.
3741
//===----------------------------------------------------------------------===//
3842

3943
#ifndef LANGUAGE_FEATURE
@@ -62,29 +66,34 @@
6266
EXPERIMENTAL_FEATURE(FeatureName, AvailableInProd)
6367
#endif
6468

65-
LANGUAGE_FEATURE(AsyncAwait, 296, "async/await")
66-
LANGUAGE_FEATURE(EffectfulProp, 310, "Effectful properties")
67-
LANGUAGE_FEATURE(MarkerProtocol, 0, "@_marker protocol")
68-
LANGUAGE_FEATURE(Actors, 0, "actors")
69-
LANGUAGE_FEATURE(ConcurrentFunctions, 0, "@concurrent functions")
69+
#ifndef BASELINE_LANGUAGE_FEATURE
70+
# define BASELINE_LANGUAGE_FEATURE(FeatureName, SENumber, Description) \
71+
LANGUAGE_FEATURE(FeatureName, SENumber, Description)
72+
#endif
73+
74+
BASELINE_LANGUAGE_FEATURE(AsyncAwait, 296, "async/await")
75+
BASELINE_LANGUAGE_FEATURE(EffectfulProp, 310, "Effectful properties")
76+
BASELINE_LANGUAGE_FEATURE(MarkerProtocol, 0, "@_marker protocol")
77+
BASELINE_LANGUAGE_FEATURE(Actors, 0, "actors")
78+
BASELINE_LANGUAGE_FEATURE(ConcurrentFunctions, 0, "@concurrent functions")
7079
LANGUAGE_FEATURE(RethrowsProtocol, 0, "@rethrows protocol")
71-
LANGUAGE_FEATURE(GlobalActors, 316, "Global actors")
72-
LANGUAGE_FEATURE(BuiltinJob, 0, "Builtin.Job type")
73-
LANGUAGE_FEATURE(Sendable, 0, "Sendable and @Sendable")
74-
LANGUAGE_FEATURE(BuiltinExecutor, 0, "Builtin.Executor type")
75-
LANGUAGE_FEATURE(BuiltinContinuation, 0, "Continuation builtins")
76-
LANGUAGE_FEATURE(BuiltinHopToActor, 0, "Builtin.HopToActor")
77-
LANGUAGE_FEATURE(BuiltinTaskGroupWithArgument, 0, "TaskGroup builtins")
78-
LANGUAGE_FEATURE(InheritActorContext, 0, "@_inheritActorContext attribute")
79-
LANGUAGE_FEATURE(ImplicitSelfCapture, 0, "@_implicitSelfCapture attribute")
80+
BASELINE_LANGUAGE_FEATURE(GlobalActors, 316, "Global actors")
81+
BASELINE_LANGUAGE_FEATURE(BuiltinJob, 0, "Builtin.Job type")
82+
BASELINE_LANGUAGE_FEATURE(Sendable, 0, "Sendable and @Sendable")
83+
BASELINE_LANGUAGE_FEATURE(BuiltinExecutor, 0, "Builtin.Executor type")
84+
BASELINE_LANGUAGE_FEATURE(BuiltinContinuation, 0, "Continuation builtins")
85+
BASELINE_LANGUAGE_FEATURE(BuiltinHopToActor, 0, "Builtin.HopToActor")
86+
BASELINE_LANGUAGE_FEATURE(BuiltinTaskGroupWithArgument, 0, "TaskGroup builtins")
87+
BASELINE_LANGUAGE_FEATURE(InheritActorContext, 0, "@_inheritActorContext attribute")
88+
BASELINE_LANGUAGE_FEATURE(ImplicitSelfCapture, 0, "@_implicitSelfCapture attribute")
8089
LANGUAGE_FEATURE(BuiltinBuildTaskExecutorRef, 0, "TaskExecutor-building builtins")
8190
LANGUAGE_FEATURE(BuiltinBuildExecutor, 0, "Executor-building builtins")
8291
LANGUAGE_FEATURE(BuiltinBuildComplexEqualityExecutor, 0, "Executor-building for 'complexEquality executor' builtins")
83-
LANGUAGE_FEATURE(BuiltinBuildMainExecutor, 0, "MainActor executor building builtin")
84-
LANGUAGE_FEATURE(BuiltinCreateAsyncTaskInGroup, 0, "Task create in task group builtin with extra flags")
92+
BASELINE_LANGUAGE_FEATURE(BuiltinBuildMainExecutor, 0, "MainActor executor building builtin")
93+
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncTaskInGroup, 0, "Task create in task group builtin with extra flags")
8594
LANGUAGE_FEATURE(BuiltinCreateAsyncTaskInGroupWithExecutor, 0, "Task create in task group builtin with extra flags")
8695
LANGUAGE_FEATURE(BuiltinCreateAsyncDiscardingTaskInGroup, 0, "Task create in discarding task group builtin, accounting for the Void return type")
87-
LANGUAGE_FEATURE(BuiltinCreateAsyncTaskWithExecutor, 0, "Task create builtin with extra executor preference")
96+
BASELINE_LANGUAGE_FEATURE(BuiltinCreateAsyncTaskWithExecutor, 0, "Task create builtin with extra executor preference")
8897
LANGUAGE_FEATURE(BuiltinCreateAsyncDiscardingTaskInGroupWithExecutor, 0, "Task create in discarding task group with extra executor preference")
8998
LANGUAGE_FEATURE(BuiltinCopy, 0, "Builtin.copy()")
9099
LANGUAGE_FEATURE(BuiltinStackAlloc, 0, "Builtin.stackAlloc")
@@ -287,5 +296,6 @@ EXPERIMENTAL_FEATURE(IsolatedAny, false)
287296
#undef EXPERIMENTAL_FEATURE_EXCLUDED_FROM_MODULE_INTERFACE
288297
#undef EXPERIMENTAL_FEATURE
289298
#undef UPCOMING_FEATURE
299+
#undef BASELINE_LANGUAGE_FEATURE
290300
#undef SUPPRESSIBLE_LANGUAGE_FEATURE
291301
#undef LANGUAGE_FEATURE

lib/AST/ASTPrinter.cpp

Lines changed: 5 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2963,21 +2963,12 @@ static bool usesFeatureStaticAssert(Decl *decl) {
29632963
return false;
29642964
}
29652965

2966-
static bool usesFeatureEffectfulProp(Decl *decl) {
2967-
return false;
2968-
}
2969-
2970-
static bool usesFeatureAsyncAwait(Decl *decl) {
2971-
return false;
2972-
}
2973-
2974-
static bool usesFeatureMarkerProtocol(Decl *decl) {
2975-
return false;
2976-
}
2977-
2978-
static bool usesFeatureActors(Decl *decl) {
2979-
return false;
2966+
#define BASELINE_LANGUAGE_FEATURE(FeatureName, SENumber, Description) \
2967+
static bool usesFeature##FeatureName(Decl *decl) { \
2968+
return false; \
29802969
}
2970+
#define LANGUAGE_FEATURE(FeatureName, SENumber, Description)
2971+
#include "swift/Basic/Features.def"
29812972

29822973
static bool usesFeatureMacros(Decl *decl) {
29832974
return isa<MacroDecl>(decl);
@@ -3043,14 +3034,6 @@ static bool usesFeatureAttachedMacros(Decl *decl) {
30433034
return static_cast<bool>(macro->getMacroRoles() & getAttachedMacroRoles());
30443035
}
30453036

3046-
static bool usesFeatureConcurrentFunctions(Decl *decl) {
3047-
return false;
3048-
}
3049-
3050-
static bool usesFeatureSendable(Decl *decl) {
3051-
return false;
3052-
}
3053-
30543037
static bool usesFeatureRethrowsProtocol(
30553038
Decl *decl, SmallPtrSet<Decl *, 16> &checked) {
30563039
// Make sure we don't recurse.
@@ -3126,10 +3109,6 @@ static bool usesFeatureRethrowsProtocol(Decl *decl) {
31263109
return usesFeatureRethrowsProtocol(decl, checked);
31273110
}
31283111

3129-
static bool usesFeatureGlobalActors(Decl *decl) {
3130-
return false;
3131-
}
3132-
31333112
static bool usesFeatureRetroactiveAttribute(Decl *decl) {
31343113
auto ext = dyn_cast<ExtensionDecl>(decl);
31353114
if (!ext)
@@ -3152,14 +3131,6 @@ static bool usesTypeMatching(Decl *decl, llvm::function_ref<bool(Type)> fn) {
31523131
return false;
31533132
}
31543133

3155-
static bool usesFeatureBuiltinJob(Decl *decl) {
3156-
return false;
3157-
}
3158-
3159-
static bool usesFeatureBuiltinExecutor(Decl *decl) {
3160-
return false;
3161-
}
3162-
31633134
static bool usesFeatureBuiltinBuildTaskExecutorRef(Decl *decl) { return false; }
31643135

31653136
static bool usesFeatureBuiltinBuildExecutor(Decl *decl) {
@@ -3170,26 +3141,6 @@ static bool usesFeatureBuiltinBuildComplexEqualityExecutor(Decl *decl) {
31703141
return false;
31713142
}
31723143

3173-
static bool usesFeatureBuiltinBuildMainExecutor(Decl *decl) {
3174-
return false;
3175-
}
3176-
3177-
static bool usesFeatureBuiltinContinuation(Decl *decl) {
3178-
return false;
3179-
}
3180-
3181-
static bool usesFeatureBuiltinHopToActor(Decl *decl) {
3182-
return false;
3183-
}
3184-
3185-
static bool usesFeatureBuiltinTaskGroupWithArgument(Decl *decl) {
3186-
return false;
3187-
}
3188-
3189-
static bool usesFeatureBuiltinCreateAsyncTaskInGroup(Decl *decl) {
3190-
return false;
3191-
}
3192-
31933144
static bool usesFeatureBuiltinCreateAsyncTaskInGroupWithExecutor(Decl *decl) {
31943145
return false;
31953146
}
@@ -3198,10 +3149,6 @@ static bool usesFeatureBuiltinCreateAsyncDiscardingTaskInGroup(Decl *decl) {
31983149
return false;
31993150
}
32003151

3201-
static bool usesFeatureBuiltinCreateAsyncTaskWithExecutor(Decl *decl) {
3202-
return false;
3203-
}
3204-
32053152
static bool
32063153
usesFeatureBuiltinCreateAsyncDiscardingTaskInGroupWithExecutor(Decl *decl) {
32073154
return false;
@@ -3247,14 +3194,6 @@ static void suppressingFeatureSpecializeAttributeWithAvailability(
32473194
action();
32483195
}
32493196

3250-
static bool usesFeatureInheritActorContext(Decl *decl) {
3251-
return false;
3252-
}
3253-
3254-
static bool usesFeatureImplicitSelfCapture(Decl *decl) {
3255-
return false;
3256-
}
3257-
32583197
static bool usesFeatureBuiltinStackAlloc(Decl *decl) {
32593198
return false;
32603199
}

0 commit comments

Comments
 (0)