Skip to content

Commit 10a4940

Browse files
committed
[Requirement Machine] Add ability to prepend a symbol to a term, clean up existing code
1 parent 6393a32 commit 10a4940

File tree

2 files changed

+7
-10
lines changed

2 files changed

+7
-10
lines changed

lib/AST/RequirementMachine/RuleBuilder.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,6 @@ void RuleBuilder::addRequirement(const Requirement &req,
367367

368368
case RequirementKind::SameType: {
369369
auto otherType = CanType(req.getSecondType());
370-
auto elementSymbol = Symbol::forPackElement(Context);
371370

372371
if (!otherType->isTypeParameter()) {
373372
// A concrete same-type requirement T == C<X, Y> becomes a
@@ -386,9 +385,7 @@ void RuleBuilder::addRequirement(const Requirement &req,
386385
//
387386
// [element].T.[concrete: C<X, Y>] => [element].T
388387
if (subjectType->isParameterPack()) {
389-
llvm::SmallVector<Symbol, 3> subjectSymbols{elementSymbol};
390-
subjectSymbols.append(subjectTerm.begin(), subjectTerm.end());
391-
subjectTerm = MutableTerm(std::move(subjectSymbols));
388+
subjectTerm.prepend(Symbol::forPackElement(Context));
392389
}
393390

394391
constraintTerm = subjectTerm;
@@ -404,14 +401,10 @@ void RuleBuilder::addRequirement(const Requirement &req,
404401

405402
if (subjectType->isParameterPack() != otherType->isParameterPack()) {
406403
// This is a same-element requirement.
407-
llvm::SmallVector<Symbol, 3> symbols{elementSymbol};
408-
409404
if (subjectType->isParameterPack()) {
410-
symbols.append(subjectTerm.begin(), subjectTerm.end());
411-
subjectTerm = MutableTerm(std::move(symbols));
405+
subjectTerm.prepend(Symbol::forPackElement(Context));
412406
} else {
413-
symbols.append(constraintTerm.begin(), constraintTerm.end());
414-
constraintTerm = MutableTerm(std::move(symbols));
407+
constraintTerm.prepend(Symbol::forPackElement(Context));
415408
}
416409
}
417410

lib/AST/RequirementMachine/Term.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ class MutableTerm final {
133133
Symbols.push_back(symbol);
134134
}
135135

136+
void prepend(Symbol symbol) {
137+
Symbols.insert(Symbols.begin(), symbol);
138+
}
139+
136140
void append(Term other) {
137141
Symbols.append(other.begin(), other.end());
138142
}

0 commit comments

Comments
 (0)