From 7394fad64e91edf99f04ab6f1d9474a4bd5794a6 Mon Sep 17 00:00:00 2001
From: Philippe Suter <philippe.suter@gmail.com>
Date: Thu, 6 Dec 2012 12:57:08 +0100
Subject: [PATCH] Progress from car ride.

---
 src/main/scala/leon/codegen/CodeGenPhase.scala           | 4 ++++
 src/main/scala/leon/purescala/Definitions.scala          | 5 +++++
 .../resources/regression/codegen/purescala/Prog002.scala | 9 +++++++++
 3 files changed, 18 insertions(+)
 create mode 100644 src/test/resources/regression/codegen/purescala/Prog002.scala

diff --git a/src/main/scala/leon/codegen/CodeGenPhase.scala b/src/main/scala/leon/codegen/CodeGenPhase.scala
index bfd072b88..bdc717c1d 100644
--- a/src/main/scala/leon/codegen/CodeGenPhase.scala
+++ b/src/main/scala/leon/codegen/CodeGenPhase.scala
@@ -19,6 +19,10 @@ object CodeGenPhase extends LeonPhase[Program,CompilationResult] {
 
     val cName = programToClassName(p)
 
+    for((p,cs) <- p.algebraicDataTypes) {
+      // val acf = new ClassFile(p....
+    } 
+
     val cf = new ClassFile(cName, None)
     cf.addDefaultConstructor
 
diff --git a/src/main/scala/leon/purescala/Definitions.scala b/src/main/scala/leon/purescala/Definitions.scala
index 969ef362c..186a858d6 100644
--- a/src/main/scala/leon/purescala/Definitions.scala
+++ b/src/main/scala/leon/purescala/Definitions.scala
@@ -43,6 +43,7 @@ object Definitions {
     def definedFunctions = mainObject.definedFunctions
     def definedClasses = mainObject.definedClasses
     def classHierarchyRoots = mainObject.classHierarchyRoots
+    def algebraicDataTypes = mainObject.algebraicDataTypes
     def callGraph = mainObject.callGraph
     def calls(f1: FunDef, f2: FunDef) = mainObject.calls(f1, f2)
     def callers(f1: FunDef) = mainObject.callers(f1)
@@ -84,6 +85,10 @@ object Definitions {
 
     lazy val classHierarchyRoots : Seq[ClassTypeDef] = defs.filter(_.isInstanceOf[ClassTypeDef]).map(_.asInstanceOf[ClassTypeDef]).filter(!_.hasParent)
 
+    lazy val algebraicDataTypes : Map[AbstractClassDef,Seq[CaseClassDef]] = (defs.collect {
+      case c @ CaseClassDef(_, Some(_), _) => c
+    }).groupBy(_.parent.get)
+
     lazy val (callGraph, callers, callees) = {
       type CallGraph = Set[(FunDef,FunDef)]
 
diff --git a/src/test/resources/regression/codegen/purescala/Prog002.scala b/src/test/resources/regression/codegen/purescala/Prog002.scala
new file mode 100644
index 000000000..496e9b6d1
--- /dev/null
+++ b/src/test/resources/regression/codegen/purescala/Prog002.scala
@@ -0,0 +1,9 @@
+object Prog002 {
+  sealed abstract class List
+  case class Nil() extends List
+  case class Cons(head : Int, tail : List) extends List
+
+  def isNil(l : List) : Boolean = {
+    l == Nil()
+  }
+}
-- 
GitLab