From 8f737a51f0479ad9c6c6114a7aab530c2c01ec6d Mon Sep 17 00:00:00 2001 From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch> Date: Tue, 8 Mar 2016 11:03:55 +0100 Subject: [PATCH] SearchContext should not hold duplicate information --- src/main/scala/leon/repair/rules/Focus.scala | 2 +- src/main/scala/leon/synthesis/Search.scala | 4 ++-- src/main/scala/leon/synthesis/SearchContext.scala | 3 ++- src/main/scala/leon/synthesis/rules/CEGISLike.scala | 6 +++--- .../scala/leon/integration/solvers/StringRenderSuite.scala | 4 ++-- .../leon/regression/synthesis/StablePrintingSuite.scala | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/scala/leon/repair/rules/Focus.scala b/src/main/scala/leon/repair/rules/Focus.scala index f62a7bdcd..943a5a67f 100644 --- a/src/main/scala/leon/repair/rules/Focus.scala +++ b/src/main/scala/leon/repair/rules/Focus.scala @@ -30,7 +30,7 @@ case object Focus extends PreprocessingRule("Focus") { } - val fd = hctx.ci.fd + val fd = hctx.functionContext val program = hctx.program val evaluator = new DefaultEvaluator(hctx, program) diff --git a/src/main/scala/leon/synthesis/Search.scala b/src/main/scala/leon/synthesis/Search.scala index 225495cac..564c630fc 100644 --- a/src/main/scala/leon/synthesis/Search.scala +++ b/src/main/scala/leon/synthesis/Search.scala @@ -24,11 +24,11 @@ class Search(val ctx: LeonContext, ci: SourceInfo, p: Problem, val strat: Strate n match { case an: AndNode => ctx.timers.synthesis.applications.get(an.ri.asString(sctx)).timed { - an.expand(new SearchContext(sctx, ci, an, this)) + an.expand(new SearchContext(sctx, ci.source, an, this)) } case on: OrNode => - on.expand(new SearchContext(sctx, ci, on, this)) + on.expand(new SearchContext(sctx, ci.source, on, this)) } } } diff --git a/src/main/scala/leon/synthesis/SearchContext.scala b/src/main/scala/leon/synthesis/SearchContext.scala index 201dcaf21..63683d927 100644 --- a/src/main/scala/leon/synthesis/SearchContext.scala +++ b/src/main/scala/leon/synthesis/SearchContext.scala @@ -4,6 +4,7 @@ package leon package synthesis import graph._ +import purescala.Expressions.Expr /** * This is context passed down rules, and include search-wise context, as well @@ -11,7 +12,7 @@ import graph._ */ class SearchContext ( sctx: SynthesisContext, - val ci: SourceInfo, + val source: Expr, val currentNode: Node, val search: Search ) extends SynthesisContext( diff --git a/src/main/scala/leon/synthesis/rules/CEGISLike.scala b/src/main/scala/leon/synthesis/rules/CEGISLike.scala index 913e54a49..32bf63486 100644 --- a/src/main/scala/leon/synthesis/rules/CEGISLike.scala +++ b/src/main/scala/leon/synthesis/rules/CEGISLike.scala @@ -284,7 +284,7 @@ abstract class CEGISLike[T <: Typed](name: String) extends Rule(name) { .getOrElse(hctx.reporter.fatalError("Unable to get outer solution")) } - val program0 = addFunDefs(hctx.program, Seq(cTreeFd, phiFd) ++ outerSolution.defs, hctx.ci.fd) + val program0 = addFunDefs(hctx.program, Seq(cTreeFd, phiFd) ++ outerSolution.defs, hctx.functionContext) cTreeFd.body = None @@ -295,11 +295,11 @@ abstract class CEGISLike[T <: Typed](name: String) extends Rule(name) { ) replaceFunDefs(program0){ - case fd if fd == hctx.ci.fd => + case fd if fd == hctx.functionContext => val nfd = fd.duplicate() nfd.fullBody = postMap { - case src if src eq hctx.ci.source => + case src if src eq hctx.source => Some(outerSolution.term) case _ => None diff --git a/src/test/scala/leon/integration/solvers/StringRenderSuite.scala b/src/test/scala/leon/integration/solvers/StringRenderSuite.scala index fb3f1ecae..c0c724c81 100644 --- a/src/test/scala/leon/integration/solvers/StringRenderSuite.scala +++ b/src/test/scala/leon/integration/solvers/StringRenderSuite.scala @@ -86,7 +86,7 @@ class StringRenderSuite extends LeonTestSuiteWithProgram with Matchers with Scal val synth = new Synthesizer(ctx, program, ci, SynthesisSettings(rules = Seq(StringRender))) val orNode = search.g.root if (!orNode.isExpanded) { - val hctx = new SearchContext(synth.sctx, synth.ci, orNode, search) + val hctx = new SearchContext(synth.sctx, synth.ci.source, orNode, search) orNode.expand(hctx) } val andNodes = orNode.descendants.collect { @@ -104,7 +104,7 @@ class StringRenderSuite extends LeonTestSuiteWithProgram with Matchers with Scal val solutions = (search.traversePath(path) match { case Some(an: AndNode) => - val hctx = new SearchContext(synth.sctx, synth.ci, an, search) + val hctx = new SearchContext(synth.sctx, synth.ci.source, an, search) an.ri.apply(hctx) case _ => throw new Exception("Was not an and node") }) match { diff --git a/src/test/scala/leon/regression/synthesis/StablePrintingSuite.scala b/src/test/scala/leon/regression/synthesis/StablePrintingSuite.scala index c2f818a78..cedfa529f 100644 --- a/src/test/scala/leon/regression/synthesis/StablePrintingSuite.scala +++ b/src/test/scala/leon/regression/synthesis/StablePrintingSuite.scala @@ -104,7 +104,7 @@ class StablePrintingSuite extends LeonRegressionSuite { val sctx = synthesizer.sctx try { val search = synthesizer.getSearch - val hctx = new SearchContext(sctx, ci, search.g.root, search) + val hctx = new SearchContext(sctx, ci.source, search.g.root, search) val problem = ci.problem info(j.info("synthesis "+problem.asString(sctx))) val apps = decompRules flatMap { _.instantiateOn(hctx, problem)} -- GitLab