From cfc07840a39350bfa2a7db999db41f8db859da93 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Thu, 22 Mar 2012 23:14:08 +0000
Subject: [PATCH] nested def are correctly extracted

---
 src/main/scala/leon/plugin/CodeExtraction.scala   | 7 ++-----
 src/main/scala/leon/plugin/Extractors.scala       | 6 +++---
 src/main/scala/leon/purescala/PrettyPrinter.scala | 2 ++
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/main/scala/leon/plugin/CodeExtraction.scala b/src/main/scala/leon/plugin/CodeExtraction.scala
index eb5191189..f723b2d7f 100644
--- a/src/main/scala/leon/plugin/CodeExtraction.scala
+++ b/src/main/scala/leon/plugin/CodeExtraction.scala
@@ -394,13 +394,10 @@ trait CodeExtraction extends Extractors {
         varSubsts.remove(vs)
         Let(newID, valTree, restTree)
       }
-      case dd @ ExLocalFunctionDef(n, p, t, b, rest) => {
+      case dd @ ExLocalFunctionDef(sy,n, p, t, b, rest) => {
         val funDef = extractFunSig(n, p, t).setPosInfo(dd.pos.line, dd.pos.column)
         val funDefWithBody = extractFunDef(funDef, b)
-        println("got let def: " + funDefWithBody)
-        println(funDef)
-        defsToDefs += (dd.symbol -> funDefWithBody)
-        println(defsToDefs)
+        defsToDefs += (sy -> funDefWithBody)
         val letRest = rec(rest)
         defsToDefs.remove(dd.symbol)
         val res = LetDef(funDefWithBody, letRest)
diff --git a/src/main/scala/leon/plugin/Extractors.scala b/src/main/scala/leon/plugin/Extractors.scala
index 8b55cf10d..26096444c 100644
--- a/src/main/scala/leon/plugin/Extractors.scala
+++ b/src/main/scala/leon/plugin/Extractors.scala
@@ -152,12 +152,12 @@ trait Extractors {
     }
 
     object ExLocalFunctionDef {
-      def unapply(tree: Block): Option[(String,Seq[ValDef],Tree,Tree,Tree)] = tree match {
+      def unapply(tree: Block): Option[(Symbol,String,Seq[ValDef],Tree,Tree,Tree)] = tree match {
         case Block((dd @ DefDef(_, name, tparams, vparamss, tpt, rhs)) :: rest, expr) if(tparams.isEmpty && vparamss.size == 1 && name != nme.CONSTRUCTOR) => {
           if(rest.isEmpty)
-            Some((name.toString, vparamss(0), tpt, rhs, expr))
+            Some((dd.symbol,name.toString, vparamss(0), tpt, rhs, expr))
           else
-            Some((name.toString, vparamss(0), tpt, rhs, Block(rest, expr)))
+            Some((dd.symbol,name.toString, vparamss(0), tpt, rhs, Block(rest, expr)))
         } 
         case _ => None
       }
diff --git a/src/main/scala/leon/purescala/PrettyPrinter.scala b/src/main/scala/leon/purescala/PrettyPrinter.scala
index 98cbee885..b16515c4a 100644
--- a/src/main/scala/leon/purescala/PrettyPrinter.scala
+++ b/src/main/scala/leon/purescala/PrettyPrinter.scala
@@ -74,6 +74,8 @@ object PrettyPrinter {
     case LetDef(fd,e) => {
       sb.append("{")
       pp(fd, sb, lvl)
+      sb.append("\n")
+      ind(sb, lvl)
       pp(e, sb, lvl)
       sb.append("}")
       sb
-- 
GitLab