Skip to content

Commit 564f626

Browse files
committed
RequirementMachine: Rename some RuleBuilder methods for clarity
1 parent 1d8dd94 commit 564f626

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

lib/AST/RequirementMachine/RequirementLowering.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,13 @@ ProtocolDependenciesRequest::evaluate(Evaluator &evaluator,
10471047
// Building rewrite rules from desugared requirements.
10481048
//
10491049

1050-
void RuleBuilder::addRequirements(ArrayRef<Requirement> requirements) {
1050+
/// For building a rewrite system for a generic signature from canonical
1051+
/// requirements.
1052+
void RuleBuilder::initWithGenericSignatureRequirements(
1053+
ArrayRef<Requirement> requirements) {
1054+
assert(!Initialized);
1055+
Initialized = 1;
1056+
10511057
// Collect all protocols transitively referenced from these requirements.
10521058
for (auto req : requirements) {
10531059
if (req.getKind() == RequirementKind::Conformance) {
@@ -1062,7 +1068,13 @@ void RuleBuilder::addRequirements(ArrayRef<Requirement> requirements) {
10621068
addRequirement(req, /*proto=*/nullptr, /*requirementID=*/None);
10631069
}
10641070

1065-
void RuleBuilder::addRequirements(ArrayRef<StructuralRequirement> requirements) {
1071+
/// For building a rewrite system for a generic signature from user-written
1072+
/// requirements.
1073+
void RuleBuilder::initWithWrittenRequirements(
1074+
ArrayRef<StructuralRequirement> requirements) {
1075+
assert(!Initialized);
1076+
Initialized = 1;
1077+
10661078
// Collect all protocols transitively referenced from these requirements.
10671079
for (auto req : requirements) {
10681080
if (req.req.getKind() == RequirementKind::Conformance) {
@@ -1080,7 +1092,11 @@ void RuleBuilder::addRequirements(ArrayRef<StructuralRequirement> requirements)
10801092
/// For building a rewrite system for a protocol connected component from
10811093
/// user-written requirements. Used when actually building requirement
10821094
/// signatures.
1083-
void RuleBuilder::addProtocols(ArrayRef<const ProtocolDecl *> protos) {
1095+
void RuleBuilder::initWithProtocolWrittenRequirements(
1096+
ArrayRef<const ProtocolDecl *> protos) {
1097+
assert(!Initialized);
1098+
Initialized = 1;
1099+
10841100
for (auto *proto : protos) {
10851101
ReferencedProtocols.insert(proto);
10861102
}

lib/AST/RequirementMachine/RequirementLowering.h

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,21 @@ struct RuleBuilder {
111111

112112
/// Enables debugging output. Controlled by the -dump-requirement-machine
113113
/// frontend flag.
114-
bool Dump;
114+
unsigned Dump : 1;
115+
116+
/// Used to ensure the initWith*() methods are only called once.
117+
unsigned Initialized : 1;
115118

116119
RuleBuilder(RewriteContext &ctx,
117120
llvm::DenseSet<const ProtocolDecl *> &referencedProtocols)
118-
: Context(ctx), ReferencedProtocols(referencedProtocols),
119-
Dump(ctx.getASTContext().LangOpts.DumpRequirementMachine) {}
120-
121-
void addRequirements(ArrayRef<Requirement> requirements);
122-
void addRequirements(ArrayRef<StructuralRequirement> requirements);
123-
void addProtocols(ArrayRef<const ProtocolDecl *> proto);
121+
: Context(ctx), ReferencedProtocols(referencedProtocols) {
122+
Dump = ctx.getASTContext().LangOpts.DumpRequirementMachine;
123+
Initialized = 0;
124+
}
125+
126+
void initWithGenericSignatureRequirements(ArrayRef<Requirement> requirements);
127+
void initWithWrittenRequirements(ArrayRef<StructuralRequirement> requirements);
128+
void initWithProtocolWrittenRequirements(ArrayRef<const ProtocolDecl *> proto);
124129
void addReferencedProtocol(const ProtocolDecl *proto);
125130
void collectRulesFromReferencedProtocols();
126131

lib/AST/RequirementMachine/RequirementMachine.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ RequirementMachine::initWithGenericSignature(CanGenericSignature sig) {
9191
// Collect the top-level requirements, and all transtively-referenced
9292
// protocol requirement signatures.
9393
RuleBuilder builder(Context, System.getReferencedProtocols());
94-
builder.addRequirements(sig.getRequirements());
94+
builder.initWithGenericSignatureRequirements(sig.getRequirements());
9595

9696
// Add the initial set of rewrite rules to the rewrite system.
9797
System.initialize(/*recordLoops=*/false,
@@ -135,7 +135,7 @@ RequirementMachine::initWithProtocols(ArrayRef<const ProtocolDecl *> protos) {
135135
}
136136

137137
RuleBuilder builder(Context, System.getReferencedProtocols());
138-
builder.addProtocols(protos);
138+
builder.initWithProtocolWrittenRequirements(protos);
139139

140140
// Add the initial set of rewrite rules to the rewrite system.
141141
System.initialize(/*recordLoops=*/true, protos,
@@ -182,7 +182,7 @@ RequirementMachine::initWithWrittenRequirements(
182182
// Collect the top-level requirements, and all transtively-referenced
183183
// protocol requirement signatures.
184184
RuleBuilder builder(Context, System.getReferencedProtocols());
185-
builder.addRequirements(requirements);
185+
builder.initWithWrittenRequirements(requirements);
186186

187187
// Add the initial set of rewrite rules to the rewrite system.
188188
System.initialize(/*recordLoops=*/true,

0 commit comments

Comments
 (0)