Skip to content

Commit 2a46916

Browse files
committed
Reseat CompilerBuildConfiguration on top of StaticBuildConfiguration
Now that we have a per-ASTContext StaticBuildConfiguration, reimplement (almost) everything in CompilerBuildConfiguration to sit on top of it. Only canImport requires the full ASTContext, so that gets its own implementation, as does one other operation that can produce an error. Aside from more code sharing, this provides additional validation that the StaticBuildConfiguration we build is complete and accurate.
1 parent 3082b04 commit 2a46916

File tree

5 files changed

+39
-159
lines changed

5 files changed

+39
-159
lines changed

include/swift/Basic/BasicBridging.h

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -505,34 +505,6 @@ SWIFT_NAME("BridgedLangOptions.hasFeature(self:_:)")
505505
bool BridgedLangOptions_hasFeature(BridgedLangOptions cLangOpts,
506506
BridgedFeature feature);
507507

508-
SWIFT_NAME("BridgedLangOptions.customConditionSet(self:_:)")
509-
bool BridgedLangOptions_customConditionSet(BridgedLangOptions cLangOpts,
510-
BridgedStringRef cName);
511-
512-
SWIFT_NAME("BridgedLangOptions.hasFeatureNamed(self:_:)")
513-
bool BridgedLangOptions_hasFeatureNamed(BridgedLangOptions cLangOpts,
514-
BridgedStringRef cName);
515-
516-
SWIFT_NAME("BridgedLangOptions.isActiveTargetOS(self:_:)")
517-
bool BridgedLangOptions_isActiveTargetOS(BridgedLangOptions cLangOpts,
518-
BridgedStringRef cName);
519-
520-
SWIFT_NAME("BridgedLangOptions.isActiveTargetArchitecture(self:_:)")
521-
bool BridgedLangOptions_isActiveTargetArchitecture(BridgedLangOptions cLangOpts,
522-
BridgedStringRef cName);
523-
524-
SWIFT_NAME("BridgedLangOptions.isActiveTargetEnvironment(self:_:)")
525-
bool BridgedLangOptions_isActiveTargetEnvironment(BridgedLangOptions cLangOpts,
526-
BridgedStringRef cName);
527-
528-
SWIFT_NAME("BridgedLangOptions.isActiveTargetRuntime(self:_:)")
529-
bool BridgedLangOptions_isActiveTargetRuntime(BridgedLangOptions cLangOpts,
530-
BridgedStringRef cName);
531-
532-
SWIFT_NAME("BridgedLangOptions.isActiveTargetPtrAuth(self:_:)")
533-
bool BridgedLangOptions_isActiveTargetPtrAuth(BridgedLangOptions cLangOpts,
534-
BridgedStringRef cName);
535-
536508
SWIFT_NAME("BridgedLangOptions.getTargetAtomicBitWidths(self:_:)")
537509
SwiftInt BridgedLangOptions_getTargetAtomicBitWidths(BridgedLangOptions cLangOpts,
538510
SwiftInt* _Nullable * _Nonnull cComponents);

lib/AST/Bridging/ASTContextBridging.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,6 @@ BridgedAvailabilityMacroMap BridgedASTContext::getAvailabilityMacroMap() const {
8989
return &unbridged().getAvailabilityMacroMap();
9090
}
9191

92-
bool BridgedLangOptions_hasAttributeNamed(BridgedLangOptions cLangOpts,
93-
BridgedStringRef cName) {
94-
return hasAttribute(cLangOpts.unbridged(), cName.unbridged());
95-
}
96-
9792
void *BridgedASTContext_staticBuildConfiguration(BridgedASTContext cContext) {
9893
ASTContext &ctx = cContext.unbridged();
9994
void *staticBuildConfiguration = ctx.getGlobalCache().StaticBuildConfiguration;

lib/ASTGen/Sources/ASTGen/CompilerBuildConfiguration.swift

Lines changed: 25 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -31,32 +31,25 @@ extension BridgedASTContext {
3131
/// queries.
3232
struct CompilerBuildConfiguration: BuildConfiguration {
3333
let ctx: BridgedASTContext
34+
let staticBuildConfiguration: StaticBuildConfiguration
3435
let sourceBuffer: UnsafeBufferPointer<UInt8>
3536

3637
init(ctx: BridgedASTContext, sourceBuffer: UnsafeBufferPointer<UInt8>) {
3738
self.ctx = ctx
39+
self.staticBuildConfiguration = ctx.staticBuildConfiguration
3840
self.sourceBuffer = sourceBuffer
3941
}
4042

41-
func isCustomConditionSet(name: String) throws -> Bool {
42-
var name = name
43-
return name.withBridgedString { nameRef in
44-
ctx.langOpts.customConditionSet(nameRef)
45-
}
43+
func isCustomConditionSet(name: String) -> Bool {
44+
staticBuildConfiguration.isCustomConditionSet(name: name)
4645
}
4746

48-
func hasFeature(name: String) throws -> Bool {
49-
var name = name
50-
return name.withBridgedString { nameRef in
51-
ctx.langOpts.hasFeatureNamed(nameRef)
52-
}
47+
func hasFeature(name: String) -> Bool {
48+
staticBuildConfiguration.hasFeature(name: name)
5349
}
5450

55-
func hasAttribute(name: String) throws -> Bool {
56-
var name = name
57-
return name.withBridgedString { nameRef in
58-
ctx.langOpts.hasAttributeNamed(nameRef)
59-
}
51+
func hasAttribute(name: String) -> Bool {
52+
staticBuildConfiguration.hasAttribute(name: name)
6053
}
6154

6255
func canImport(
@@ -97,85 +90,50 @@ struct CompilerBuildConfiguration: BuildConfiguration {
9790
}
9891
}
9992

100-
func isActiveTargetOS(name: String) throws -> Bool {
101-
var name = name
102-
return name.withBridgedString { nameRef in
103-
ctx.langOpts.isActiveTargetOS(nameRef)
104-
}
93+
func isActiveTargetOS(name: String) -> Bool {
94+
staticBuildConfiguration.isActiveTargetOS(name: name)
10595
}
10696

107-
func isActiveTargetArchitecture(name: String) throws -> Bool {
108-
var name = name
109-
return name.withBridgedString { nameRef in
110-
ctx.langOpts.isActiveTargetArchitecture(nameRef)
111-
}
97+
func isActiveTargetArchitecture(name: String) -> Bool {
98+
staticBuildConfiguration.isActiveTargetArchitecture(name: name)
11299
}
113100

114-
func isActiveTargetEnvironment(name: String) throws -> Bool {
115-
var name = name
116-
return name.withBridgedString { nameRef in
117-
ctx.langOpts.isActiveTargetEnvironment(nameRef)
118-
}
101+
func isActiveTargetEnvironment(name: String) -> Bool {
102+
staticBuildConfiguration.isActiveTargetEnvironment(name: name)
119103
}
120104

121105
func isActiveTargetRuntime(name: String) throws -> Bool {
122-
var name = name
123-
124106
// Complain if the provided runtime isn't one of the known values.
125107
switch name {
126108
case "_Native", "_ObjC", "_multithreaded": break
127109
default: throw IfConfigError.unexpectedRuntimeCondition
128110
}
129111

130-
return name.withBridgedString { nameRef in
131-
ctx.langOpts.isActiveTargetRuntime(nameRef)
132-
}
112+
return staticBuildConfiguration.isActiveTargetRuntime(name: name)
133113
}
134-
135-
func isActiveTargetPointerAuthentication(name: String) throws -> Bool {
136-
var name = name
137-
return name.withBridgedString { nameRef in
138-
ctx.langOpts.isActiveTargetPtrAuth(nameRef)
139-
}
114+
115+
func isActiveTargetPointerAuthentication(name: String) -> Bool {
116+
staticBuildConfiguration.isActiveTargetPointerAuthentication(name: name)
140117
}
141118

142119
var targetPointerBitWidth: Int {
143-
Int(ctx.langOpts.targetPointerBitWidth)
120+
staticBuildConfiguration.targetPointerBitWidth
144121
}
145122

146123
var targetAtomicBitWidths: [Int] {
147-
var bitWidthsBuf: UnsafeMutablePointer<SwiftInt>? = nil
148-
let count = ctx.langOpts.getTargetAtomicBitWidths(&bitWidthsBuf)
149-
let bitWidths = Array(UnsafeMutableBufferPointer(start: bitWidthsBuf, count: count))
150-
deallocateIntBuffer(bitWidthsBuf);
151-
return bitWidths
124+
staticBuildConfiguration.targetAtomicBitWidths
152125
}
153126

154127
var endianness: Endianness {
155-
switch ctx.langOpts.targetEndianness {
156-
case .EndianBig: return .big
157-
case .EndianLittle: return .little
158-
}
128+
staticBuildConfiguration.endianness
159129
}
160130

161-
var languageVersion: VersionTuple {
162-
var componentsBuf: UnsafeMutablePointer<SwiftInt>? = nil
163-
let count = ctx.langOpts.getLanguageVersion(&componentsBuf)
164-
let version = VersionTuple(
165-
components: Array(UnsafeMutableBufferPointer(start: componentsBuf, count: count))
166-
)
167-
deallocateIntBuffer(componentsBuf);
168-
return version
131+
var languageVersion: VersionTuple {
132+
staticBuildConfiguration.languageVersion
169133
}
170134

171-
var compilerVersion: VersionTuple {
172-
var componentsBuf: UnsafeMutablePointer<SwiftInt>? = nil
173-
let count = ctx.langOpts.getCompilerVersion(&componentsBuf)
174-
let version = VersionTuple(
175-
components: Array(UnsafeMutableBufferPointer(start: componentsBuf, count: count))
176-
)
177-
deallocateIntBuffer(componentsBuf);
178-
return version
135+
var compilerVersion: VersionTuple {
136+
staticBuildConfiguration.compilerVersion
179137
}
180138
}
181139

lib/ASTGen/Sources/ASTGen/EmbeddedSupport.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,26 +68,26 @@ struct EmbeddedBuildConfiguration: BuildConfiguration {
6868
self.configuration = .init(ctx: ctx, sourceBuffer: sourceBuffer)
6969
}
7070

71-
func isCustomConditionSet(name: String) throws -> Bool {
71+
func isCustomConditionSet(name: String) -> Bool {
7272
// $Embedded is set when building Embedded Swift
7373
if name == "$Embedded" {
7474
return true
7575
}
7676

77-
return try configuration.isCustomConditionSet(name: name)
77+
return configuration.isCustomConditionSet(name: name)
7878
}
7979

80-
func hasFeature(name: String) throws -> Bool {
80+
func hasFeature(name: String) -> Bool {
8181
// The "Embedded" feature is set when building Embedded Swift.
8282
if name == "Embedded" {
8383
return true
8484
}
8585

86-
return try configuration.hasFeature(name: name)
86+
return configuration.hasFeature(name: name)
8787
}
8888

89-
func hasAttribute(name: String) throws -> Bool {
90-
return try configuration.hasAttribute(name: name)
89+
func hasAttribute(name: String) -> Bool {
90+
return configuration.hasAttribute(name: name)
9191
}
9292

9393
func canImport(
@@ -100,24 +100,24 @@ struct EmbeddedBuildConfiguration: BuildConfiguration {
100100
return false
101101
}
102102

103-
func isActiveTargetOS(name: String) throws -> Bool {
104-
return try configuration.isActiveTargetOS(name: name)
103+
func isActiveTargetOS(name: String) -> Bool {
104+
return configuration.isActiveTargetOS(name: name)
105105
}
106106

107-
func isActiveTargetArchitecture(name: String) throws -> Bool {
108-
return try configuration.isActiveTargetArchitecture(name: name)
107+
func isActiveTargetArchitecture(name: String) -> Bool {
108+
return configuration.isActiveTargetArchitecture(name: name)
109109
}
110110

111-
func isActiveTargetEnvironment(name: String) throws -> Bool {
112-
return try configuration.isActiveTargetEnvironment(name: name)
111+
func isActiveTargetEnvironment(name: String) -> Bool {
112+
return configuration.isActiveTargetEnvironment(name: name)
113113
}
114114

115115
func isActiveTargetRuntime(name: String) throws -> Bool {
116116
return try configuration.isActiveTargetRuntime(name: name)
117117
}
118118

119-
func isActiveTargetPointerAuthentication(name: String) throws -> Bool {
120-
return try configuration.isActiveTargetPointerAuthentication(name: name)
119+
func isActiveTargetPointerAuthentication(name: String) -> Bool {
120+
return configuration.isActiveTargetPointerAuthentication(name: name)
121121
}
122122

123123
var targetPointerBitWidth: Int {

lib/Basic/LangOptionsBridging.cpp

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,51 +22,6 @@ bool BridgedLangOptions_hasFeature(BridgedLangOptions cLangOpts,
2222
}
2323

2424

25-
bool BridgedLangOptions_customConditionSet(BridgedLangOptions cLangOpts,
26-
BridgedStringRef cName) {
27-
const LangOptions &langOpts = cLangOpts.unbridged();
28-
auto name = cName.unbridged();
29-
if (name.starts_with("$") && langOpts.hasFeature(name.drop_front()))
30-
return true;
31-
32-
return langOpts.isCustomConditionalCompilationFlagSet(name);
33-
}
34-
35-
bool BridgedLangOptions_hasFeatureNamed(BridgedLangOptions cLangOpts,
36-
BridgedStringRef cName) {
37-
return cLangOpts.unbridged().hasFeature(cName.unbridged());
38-
}
39-
40-
bool BridgedLangOptions_isActiveTargetOS(BridgedLangOptions cLangOpts,
41-
BridgedStringRef cName) {
42-
return cLangOpts.unbridged().checkPlatformCondition(
43-
PlatformConditionKind::OS, cName.unbridged());
44-
}
45-
46-
bool BridgedLangOptions_isActiveTargetArchitecture(
47-
BridgedLangOptions cLangOpts, BridgedStringRef cName) {
48-
return cLangOpts.unbridged().checkPlatformCondition(
49-
PlatformConditionKind::Arch, cName.unbridged());
50-
}
51-
52-
bool BridgedLangOptions_isActiveTargetEnvironment(
53-
BridgedLangOptions cLangOpts, BridgedStringRef cName) {
54-
return cLangOpts.unbridged().checkPlatformCondition(
55-
PlatformConditionKind::TargetEnvironment, cName.unbridged());
56-
}
57-
58-
bool BridgedLangOptions_isActiveTargetRuntime(BridgedLangOptions cLangOpts,
59-
BridgedStringRef cName) {
60-
return cLangOpts.unbridged().checkPlatformCondition(
61-
PlatformConditionKind::Runtime, cName.unbridged());
62-
}
63-
64-
bool BridgedLangOptions_isActiveTargetPtrAuth(BridgedLangOptions cLangOpts,
65-
BridgedStringRef cName) {
66-
return cLangOpts.unbridged().checkPlatformCondition(
67-
PlatformConditionKind::PtrAuth, cName.unbridged());
68-
}
69-
7025
unsigned BridgedLangOptions::getTargetPointerBitWidth() const {
7126
return unbridged().Target.isArch64Bit() ? 64
7227
: unbridged().Target.isArch32Bit() ? 32

0 commit comments

Comments
 (0)