@@ -80,6 +80,8 @@ namespace llvm {
80
80
81
81
#define DEBUG_TYPE " Generic signature builder"
82
82
STATISTIC (NumPotentialArchetypes, " # of potential archetypes" );
83
+ STATISTIC (NumEquivalenceClassesAllocated, " # of equivalence classes allocated" );
84
+ STATISTIC (NumEquivalenceClassesFreed, " # of equivalence classes freed" );
83
85
STATISTIC (NumConformances, " # of conformances tracked" );
84
86
STATISTIC (NumConformanceConstraints, " # of conformance constraints tracked" );
85
87
STATISTIC (NumSameTypeConstraints, " # of same-type constraints tracked" );
@@ -529,13 +531,18 @@ GenericSignatureBuilder::Implementation::allocateEquivalenceClass(
529
531
530
532
auto equivClass = new (mem) EquivalenceClass (representative);
531
533
EquivalenceClasses.push_back (equivClass);
534
+
535
+ ++NumEquivalenceClassesAllocated;
536
+
532
537
return equivClass;
533
538
}
534
539
535
540
void GenericSignatureBuilder::Implementation::deallocateEquivalenceClass (
536
541
EquivalenceClass *equivClass) {
537
542
EquivalenceClasses.erase (equivClass);
538
543
FreeEquivalenceClasses.push_back (equivClass);
544
+
545
+ ++NumEquivalenceClassesFreed;
539
546
}
540
547
541
548
namespace {
@@ -1620,9 +1627,22 @@ bool FloatingRequirementSource::isRecursive(
1620
1627
return false ;
1621
1628
}
1622
1629
1623
- GenericSignatureBuilder::PotentialArchetype::~PotentialArchetype () {
1630
+ GenericSignatureBuilder::PotentialArchetype::PotentialArchetype (
1631
+ PotentialArchetype *parent, AssociatedTypeDecl *assocType)
1632
+ : parentOrContext(parent), identifier(assocType) {
1633
+ ++NumPotentialArchetypes;
1634
+ assert (parent != nullptr && " Not a nested type?" );
1635
+ assert (assocType->getOverriddenDecls ().empty ());
1636
+ }
1637
+
1638
+
1639
+ GenericSignatureBuilder::PotentialArchetype::PotentialArchetype (
1640
+ ASTContext &ctx, GenericParamKey genericParam)
1641
+ : parentOrContext(&ctx), identifier(genericParam) {
1624
1642
++NumPotentialArchetypes;
1643
+ }
1625
1644
1645
+ GenericSignatureBuilder::PotentialArchetype::~PotentialArchetype () {
1626
1646
for (const auto &nested : NestedTypes) {
1627
1647
for (auto pa : nested.second ) {
1628
1648
pa->~PotentialArchetype ();
@@ -7138,11 +7158,8 @@ void GenericSignatureBuilder::dump(llvm::raw_ostream &out) {
7138
7158
case RequirementKind::SameType:
7139
7159
out << " \n " ;
7140
7160
out << type.getString () << " == " ;
7141
- if (auto secondType = constraint.dyn_cast <Type>()) {
7142
- out << secondType.getString ();
7143
- } else {
7144
- out << constraint.get <PotentialArchetype *>()->getDebugName ();
7145
- }
7161
+ auto secondType = constraint.get <Type>();
7162
+ out << secondType.getString ();
7146
7163
out << " [" ;
7147
7164
source->print (out, &Context.SourceMgr );
7148
7165
out << " ]" ;
0 commit comments