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