@@ -599,127 +599,6 @@ namespace {
599
599
};
600
600
}
601
601
602
- namespace std {
603
- // FIXME: Egregious hack to work around a bogus static_assert in
604
- // llvm::GraphWriter. Good thing nobody else cares about this trait...
605
- template <>
606
- struct is_pointer <EquivalenceClassVizNode>
607
- : std::integral_constant<bool , true > { };
608
- }
609
-
610
- namespace llvm {
611
- // Visualize the same-type constraints within an equivalence class.
612
- template <>
613
- struct GraphTraits <const EquivalenceClass *> {
614
- using NodeRef = EquivalenceClassVizNode;
615
-
616
- static NodeRef getEntryNode (const EquivalenceClass *equivClass) {
617
- return { equivClass, equivClass->members .front ()->getDependentType ({ }) };
618
- }
619
-
620
- class nodes_iterator {
621
- using BaseIterator = PotentialArchetype * const *;
622
-
623
- const EquivalenceClass *equivClass;
624
- BaseIterator base;
625
-
626
- public:
627
- using difference_type = ptrdiff_t ;
628
- using value_type = EquivalenceClassVizNode;
629
- using reference = value_type;
630
- using pointer = value_type*;
631
- using iterator_category = std::forward_iterator_tag;
632
-
633
- nodes_iterator (const EquivalenceClass *equivClass, BaseIterator base)
634
- : equivClass(equivClass), base(base) { }
635
-
636
- BaseIterator &getBase () { return base; }
637
- const BaseIterator &getBase () const { return base; }
638
-
639
- reference operator *() const {
640
- return { equivClass, (*getBase ())->getDependentType ({ }) };
641
- }
642
-
643
- nodes_iterator& operator ++() {
644
- ++getBase ();
645
- return *this ;
646
- }
647
-
648
- nodes_iterator operator ++(int ) {
649
- nodes_iterator result = *this ;
650
- ++(*this );
651
- return result;
652
- }
653
-
654
- friend bool operator ==(const nodes_iterator &lhs,
655
- const nodes_iterator &rhs) {
656
- return lhs.getBase () == rhs.getBase ();
657
- }
658
-
659
- friend bool operator !=(const nodes_iterator &lhs,
660
- const nodes_iterator &rhs) {
661
- return lhs.getBase () != rhs.getBase ();
662
- }
663
- };
664
-
665
- static nodes_iterator nodes_begin (const EquivalenceClass *equivClass) {
666
- return nodes_iterator (equivClass, equivClass->members .begin ());
667
- }
668
-
669
- static nodes_iterator nodes_end (const EquivalenceClass *equivClass) {
670
- return nodes_iterator (equivClass, equivClass->members .end ());
671
- }
672
-
673
- static unsigned size (const EquivalenceClass *equivClass) {
674
- return equivClass->members .size ();
675
- }
676
-
677
- using ChildIteratorType = EquivalenceClassVizIterator;
678
-
679
- static ChildIteratorType child_begin (NodeRef node) {
680
- auto base = node.first ->sameTypeConstraints .data ();
681
- auto baseEnd = base + node.first ->sameTypeConstraints .size ();
682
- return ChildIteratorType (node, base, baseEnd);
683
- }
684
-
685
- static ChildIteratorType child_end (NodeRef node) {
686
- auto base = node.first ->sameTypeConstraints .data ();
687
- auto baseEnd = base + node.first ->sameTypeConstraints .size ();
688
- return ChildIteratorType (node, baseEnd, baseEnd);
689
- }
690
- };
691
-
692
- template <>
693
- struct DOTGraphTraits <const EquivalenceClass *>
694
- : public DefaultDOTGraphTraits
695
- {
696
- DOTGraphTraits (bool = false ) { }
697
-
698
- static std::string getGraphName (const EquivalenceClass *equivClass) {
699
- return " Equivalence class for '" +
700
- equivClass->members .front ()->getDebugName () + " '" ;
701
- }
702
-
703
- std::string getNodeLabel (EquivalenceClassVizNode node,
704
- const EquivalenceClass *equivClass) const {
705
- return node.second .getString ();
706
- }
707
-
708
- static std::string getEdgeAttributes (EquivalenceClassVizNode node,
709
- EquivalenceClassVizIterator iter,
710
- const EquivalenceClass *equivClass) {
711
- if (iter.getBase ()->source ->kind
712
- == RequirementSource::NestedTypeNameMatch)
713
- return " color=\" blue\" " ;
714
-
715
- if (iter.getBase ()->source ->isDerivedRequirement ())
716
- return " color=\" gray\" " ;
717
-
718
- return " color=\" red\" " ;
719
- }
720
- };
721
- } // end namespace llvm
722
-
723
602
namespace {
724
603
// / Retrieve the type described by the given unresolved tyoe.
725
604
Type getUnresolvedType (GSBUnresolvedType type,
@@ -2370,37 +2249,6 @@ void EquivalenceClass::dump(llvm::raw_ostream &out,
2370
2249
rewriteRoot->dump (out);
2371
2250
}
2372
2251
}
2373
-
2374
- {
2375
- out << " ---GraphViz output for same-type constraints---\n " ;
2376
-
2377
- // Render the output
2378
- std::string graphviz;
2379
- {
2380
- llvm::raw_string_ostream graphvizOut (graphviz);
2381
- llvm::WriteGraph (graphvizOut, this );
2382
- }
2383
-
2384
- // Clean up the output to turn it into an undirected graph.
2385
- // FIXME: This is horrible, GraphWriter should be able to support
2386
- // undirected graphs.
2387
- auto digraphPos = graphviz.find (" digraph" );
2388
- if (digraphPos != std::string::npos) {
2389
- // digraph -> graph
2390
- graphviz.erase (graphviz.begin () + digraphPos,
2391
- graphviz.begin () + digraphPos + 2 );
2392
- }
2393
-
2394
- // Directed edges to undirected edges: -> to --
2395
- while (true ) {
2396
- auto arrowPos = graphviz.find (" ->" );
2397
- if (arrowPos == std::string::npos) break ;
2398
-
2399
- graphviz.replace (arrowPos, 2 , " --" );
2400
- }
2401
-
2402
- out << graphviz;
2403
- }
2404
2252
}
2405
2253
2406
2254
void EquivalenceClass::dump (GenericSignatureBuilder *builder) const {
0 commit comments