Skip to content

Commit fefd952

Browse files
author
Amritpan Kaur
committed
[CSBindings] Create struct to print Bindings/Literals.
1 parent aecd184 commit fefd952

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

lib/Sema/CSBindings.cpp

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1726,23 +1726,48 @@ void BindingSet::dump(llvm::raw_ostream &out, unsigned indent) const {
17261726
if (numDefaultable > 0)
17271727
out << "[#defaultable_bindings: " << numDefaultable << "] ";
17281728

1729-
auto printBinding = [&](const PotentialBinding &binding) {
1730-
auto type = binding.BindingType;
1731-
switch (binding.Kind) {
1732-
case AllowedBindingKind::Exact:
1733-
break;
1729+
struct PrintableBinding {
1730+
private:
1731+
enum class BindingKind { Exact, Subtypes, Supertypes, Literal };
1732+
BindingKind Kind;
1733+
Type BindingType;
1734+
PrintableBinding(BindingKind kind, Type bindingType)
1735+
: Kind(kind), BindingType(bindingType) {}
17341736

1735-
case AllowedBindingKind::Subtypes:
1736-
out << "(subtypes of) ";
1737-
break;
1737+
public:
1738+
static PrintableBinding supertypesOf(Type binding) {
1739+
return PrintableBinding{BindingKind::Supertypes, binding};
1740+
}
1741+
1742+
static PrintableBinding subtypesOf(Type binding) {
1743+
return PrintableBinding{BindingKind::Subtypes, binding};
1744+
}
1745+
1746+
static PrintableBinding exact(Type binding) {
1747+
return PrintableBinding{BindingKind::Exact, binding};
1748+
}
1749+
1750+
static PrintableBinding literalDefaultType(Type binding) {
1751+
return PrintableBinding{BindingKind::Literal, binding};
1752+
}
17381753

1739-
case AllowedBindingKind::Supertypes:
1740-
out << "(supertypes of) ";
1741-
break;
1754+
void print(llvm::raw_ostream &out, const PrintOptions &PO,
1755+
unsigned indent = 0) const {
1756+
switch (Kind) {
1757+
case BindingKind::Exact:
1758+
break;
1759+
case BindingKind::Subtypes:
1760+
out << "(subtypes of) ";
1761+
break;
1762+
case BindingKind::Supertypes:
1763+
out << "(supertypes of) ";
1764+
break;
1765+
case BindingKind::Literal:
1766+
out << "(default type of literal) ";
1767+
break;
1768+
}
1769+
out << BindingType.getString(PO);
17421770
}
1743-
if (auto *literal = binding.getDefaultedLiteralProtocol())
1744-
out << "(default from " << literal->getName() << ") ";
1745-
out << type.getString(PO);
17461771
};
17471772

17481773
out << "[with possible bindings: ";

0 commit comments

Comments
 (0)