From 53d41d0253b33399af0b8314a8aed0f36c61d6c4 Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Mon, 16 Mar 2015 12:51:40 +0100
Subject: [PATCH] ExpressionGrammars should ignore synthetic functions

---
 src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
index 23cd164dd..f44f23717 100644
--- a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
+++ b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
@@ -300,6 +300,7 @@ object ExpressionGrammars {
           }
         }
 
+        val funFilter = (fd: FunDef) => fd.isSynthetic || (excludeFCalls contains fd)
         val subs: Seq[(L, Gen)] = (e match {
           
           case _: Terminal | _: Let | _: LetDef | _: MatchExpr =>
@@ -308,7 +309,7 @@ object ExpressionGrammars {
           case cc @ CaseClass(cct, exprs) =>
             gens(e, gl, exprs, { case ss => CaseClass(cct, ss) }) ++ ccVariations(gl, cc)
 
-          case FunctionInvocation(TypedFunDef(fd, _), _) if excludeFCalls contains fd =>
+          case FunctionInvocation(TypedFunDef(fd, _), _) if funFilter(fd) =>
             // We allow only exact call, and/or cegis extensions
             /*Seq(el -> Generator[L, Expr](Nil, { _ => e })) ++*/ cegis(gl)
 
@@ -401,7 +402,8 @@ object ExpressionGrammars {
        }
      }
 
-     val funcs = functionsAvailable(prog).toSeq.flatMap(getCandidates).filterNot( tfd => exclude contains tfd.fd)
+     val filter = (tfd:TypedFunDef) => tfd.fd.isSynthetic || (exclude contains tfd.fd)
+     val funcs = functionsAvailable(prog).toSeq.flatMap(getCandidates).filterNot(filter)
 
      funcs.map{ tfd =>
        Generator[TypeTree, Expr](tfd.params.map(_.getType), { sub => FunctionInvocation(tfd, sub) })
-- 
GitLab