Skip to content

Commit 8107cea

Browse files
committed
RequirementMachine: Define operator<< overloads
1 parent d03ff29 commit 8107cea

File tree

3 files changed

+39
-47
lines changed

3 files changed

+39
-47
lines changed

lib/AST/RequirementMachine/RewriteSystem.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -885,9 +885,7 @@ MutableTerm RewriteContext::getMutableTermForType(CanType paramType,
885885
}
886886

887887
void Rule::dump(llvm::raw_ostream &out) const {
888-
LHS.dump(out);
889-
out << " => ";
890-
RHS.dump(out);
888+
out << LHS << " => " << RHS;
891889
if (deleted)
892890
out << " [deleted]";
893891
}
@@ -946,11 +944,7 @@ bool RewriteSystem::addRule(MutableTerm lhs, MutableTerm rhs) {
946944
assert(lhs.compare(rhs, Protos) > 0);
947945

948946
if (DebugAdd) {
949-
llvm::dbgs() << "# Adding rule ";
950-
lhs.dump(llvm::dbgs());
951-
llvm::dbgs() << " => ";
952-
rhs.dump(llvm::dbgs());
953-
llvm::dbgs() << "\n";
947+
llvm::dbgs() << "# Adding rule " << lhs << " => " << rhs << "\n";
954948
}
955949

956950
unsigned i = Rules.size();
@@ -1001,9 +995,7 @@ bool RewriteSystem::simplify(MutableTerm &term) const {
1001995
bool changed = false;
1002996

1003997
if (DebugSimplify) {
1004-
llvm::dbgs() << "= Term ";
1005-
term.dump(llvm::dbgs());
1006-
llvm::dbgs() << "\n";
998+
llvm::dbgs() << "= Term " << term << "\n";
1007999
}
10081000

10091001
while (true) {
@@ -1013,16 +1005,12 @@ bool RewriteSystem::simplify(MutableTerm &term) const {
10131005
continue;
10141006

10151007
if (DebugSimplify) {
1016-
llvm::dbgs() << "== Rule ";
1017-
rule.dump(llvm::dbgs());
1018-
llvm::dbgs() << "\n";
1008+
llvm::dbgs() << "== Rule " << rule << "\n";
10191009
}
10201010

10211011
if (rule.apply(term)) {
10221012
if (DebugSimplify) {
1023-
llvm::dbgs() << "=== Result ";
1024-
term.dump(llvm::dbgs());
1025-
llvm::dbgs() << "\n";
1013+
llvm::dbgs() << "=== Result " << term << "\n";
10261014
}
10271015

10281016
changed = true;
@@ -1051,9 +1039,7 @@ void RewriteSystem::simplifyRightHandSides() {
10511039

10521040
#define ASSERT_RULE(expr) \
10531041
if (!(expr)) { \
1054-
llvm::errs() << "&&& Malformed rewrite rule: "; \
1055-
rule.dump(llvm::errs()); \
1056-
llvm::errs() << "\n\n"; \
1042+
llvm::errs() << "&&& Malformed rewrite rule: " << rule << "\n\n"; \
10571043
dump(llvm::errs()); \
10581044
assert(expr); \
10591045
}
@@ -1107,9 +1093,7 @@ void RewriteSystem::simplifyRightHandSides() {
11071093
void RewriteSystem::dump(llvm::raw_ostream &out) const {
11081094
out << "Rewrite system: {\n";
11091095
for (const auto &rule : Rules) {
1110-
out << "- ";
1111-
rule.dump(out);
1112-
out << "\n";
1096+
out << "- " << rule << "\n";
11131097
}
11141098
out << "}\n";
11151099
}

lib/AST/RequirementMachine/RewriteSystem.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ class Atom final {
203203
friend bool operator!=(Atom lhs, Atom rhs) {
204204
return !(lhs == rhs);
205205
}
206+
207+
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &out, Atom atom) {
208+
atom.dump(out);
209+
return out;
210+
}
206211
};
207212

208213
/// See the implementation of MutableTerm::checkForOverlap() for a discussion.
@@ -264,6 +269,11 @@ class Term final {
264269
friend bool operator!=(Term lhs, Term rhs) {
265270
return !(lhs == rhs);
266271
}
272+
273+
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &out, Term term) {
274+
term.dump(out);
275+
return out;
276+
}
267277
};
268278

269279
/// A term is a sequence of one or more atoms.
@@ -357,6 +367,12 @@ class MutableTerm final {
357367
MutableTerm &v) const;
358368

359369
void dump(llvm::raw_ostream &out) const;
370+
371+
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &out,
372+
const MutableTerm &term) {
373+
term.dump(out);
374+
return out;
375+
}
360376
};
361377

362378
/// A global object that can be shared by multiple rewrite systems.
@@ -456,6 +472,12 @@ class Rule final {
456472
}
457473

458474
void dump(llvm::raw_ostream &out) const;
475+
476+
friend llvm::raw_ostream &operator<<(llvm::raw_ostream &out,
477+
const Rule &rule) {
478+
rule.dump(out);
479+
return out;
480+
}
459481
};
460482

461483
/// A term rewrite system for working with types in a generic signature.

lib/AST/RequirementMachine/RewriteSystemCompletion.cpp

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -293,17 +293,12 @@ void RewriteSystem::processMergedAssociatedTypes() {
293293
// X.[P2:T] => X.[P1&P2:T]
294294
if (DebugMerge) {
295295
llvm::dbgs() << "## Associated type merge candidate ";
296-
lhs.dump(llvm::dbgs());
297-
llvm::dbgs() << " => ";
298-
rhs.dump(llvm::dbgs());
299-
llvm::dbgs() << "\n";
296+
llvm::dbgs() << lhs << " => " << rhs << "\n";
300297
}
301298

302299
auto mergedAtom = mergeAssociatedTypes(lhs.back(), rhs.back());
303300
if (DebugMerge) {
304-
llvm::dbgs() << "### Merged atom ";
305-
mergedAtom.dump(llvm::dbgs());
306-
llvm::dbgs() << "\n";
301+
llvm::dbgs() << "### Merged atom " << mergedAtom << "\n";
307302
}
308303

309304
// Build the term X.[P1&P2:T].
@@ -331,9 +326,7 @@ void RewriteSystem::processMergedAssociatedTypes() {
331326
//
332327
// [P2:T].[Q] => [P2:T]
333328
if (DebugMerge) {
334-
llvm::dbgs() << "### Lifting conformance rule ";
335-
otherRule.dump(llvm::dbgs());
336-
llvm::dbgs() << "\n";
329+
llvm::dbgs() << "### Lifting conformance rule " << otherRule << "\n";
337330
}
338331

339332
// We know that [P1:T] or [P2:T] conforms to Q, therefore the
@@ -462,11 +455,9 @@ RewriteSystem::computeConfluentCompletion(unsigned maxIterations,
462455

463456
if (DebugCompletion) {
464457
llvm::dbgs() << "$ Check for overlap: (#" << next.first << ") ";
465-
lhs.dump(llvm::dbgs());
466-
llvm::dbgs() << "\n";
458+
llvm::dbgs() << lhs << "\n";
467459
llvm::dbgs() << " -vs- (#" << next.second << ") ";
468-
rhs.dump(llvm::dbgs());
469-
llvm::dbgs() << ":\n";
460+
llvm::dbgs() << rhs << ":\n";
470461
}
471462

472463
auto pair = computeCriticalPair(lhs, rhs);
@@ -483,13 +474,8 @@ RewriteSystem::computeConfluentCompletion(unsigned maxIterations,
483474
std::tie(first, second) = *pair;
484475

485476
if (DebugCompletion) {
486-
llvm::dbgs() << "$$ First term of critical pair is ";
487-
first.dump(llvm::dbgs());
488-
llvm::dbgs() << "\n";
489-
490-
llvm::dbgs() << "$$ Second term of critical pair is ";
491-
second.dump(llvm::dbgs());
492-
llvm::dbgs() << "\n\n";
477+
llvm::dbgs() << "$$ First term of critical pair is " << first << "\n";
478+
llvm::dbgs() << "$$ Second term of critical pair is " << second << "\n\n";
493479
}
494480
unsigned i = Rules.size();
495481

@@ -521,9 +507,9 @@ RewriteSystem::computeConfluentCompletion(unsigned maxIterations,
521507
// If this rule reduces some existing rule, delete the existing rule.
522508
if (rule.canReduceLeftHandSide(newRule)) {
523509
if (DebugCompletion) {
524-
llvm::dbgs() << "$ Deleting rule ";
525-
rule.dump(llvm::dbgs());
526-
llvm::dbgs() << "\n";
510+
llvm::dbgs() << "$ Deleting rule " << rule << " because "
511+
<< "its left hand side contains " << newRule
512+
<< "\n";
527513
}
528514
rule.markDeleted();
529515
}

0 commit comments

Comments
 (0)