From 51a4db480329ac3c4565755bacebaecc8933d7c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mika=C3=ABl=20Mayer?= <mikael.mayer@epfl.ch>
Date: Wed, 20 Apr 2016 10:25:23 +0200
Subject: [PATCH] Corrected type cardinality

---
 src/main/scala/leon/purescala/TypeOps.scala | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/main/scala/leon/purescala/TypeOps.scala b/src/main/scala/leon/purescala/TypeOps.scala
index 8715767c9..546e57263 100644
--- a/src/main/scala/leon/purescala/TypeOps.scala
+++ b/src/main/scala/leon/purescala/TypeOps.scala
@@ -268,10 +268,20 @@ object TypeOps extends GenTreeOps[TypeTree] {
         Math.pow(t + 1, f).toInt
       }
     case cct: CaseClassType =>
-      Some(cct.fields.map { field =>
-        typeCardinality(field.getType).getOrElse(return None)
+      Some(cct.fieldsTypes.map { tpe =>
+        typeCardinality(tpe).getOrElse(return None)
       }.product)
     case act: AbstractClassType =>
+      val possibleChildTypes = leon.utils.fixpoint((tpes: Set[TypeTree]) => {
+        tpes.flatMap(tpe => 
+          Set(tpe) ++ (tpe match {
+            case cct: CaseClassType => cct.fieldsTypes
+            case act: AbstractClassType => Set(act) ++ act.knownCCDescendants
+            case _ => Set.empty
+          })
+        )
+      })(act.knownCCDescendants.toSet)
+      if(possibleChildTypes(act)) return None
       Some(act.knownCCDescendants.map(typeCardinality).map(_.getOrElse(return None)).sum)
     case _ => None
   }
-- 
GitLab