@@ -1726,23 +1726,48 @@ void BindingSet::dump(llvm::raw_ostream &out, unsigned indent) const {
1726
1726
if (numDefaultable > 0 )
1727
1727
out << " [#defaultable_bindings: " << numDefaultable << " ] " ;
1728
1728
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) {}
1734
1736
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
+ }
1738
1753
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);
1742
1770
}
1743
- if (auto *literal = binding.getDefaultedLiteralProtocol ())
1744
- out << " (default from " << literal->getName () << " ) " ;
1745
- out << type.getString (PO);
1746
1771
};
1747
1772
1748
1773
out << " [with possible bindings: " ;
0 commit comments