From b1717ead01394101b70789cb9f13af845aeb1c62 Mon Sep 17 00:00:00 2001 From: Philippe Suter <philippe.suter@gmail.com> Date: Thu, 7 Oct 2010 15:49:53 +0000 Subject: [PATCH] --- WISHLIST | 1 + src/funcheck/FunCheckPlugin.scala | 2 ++ src/purescala/Settings.scala | 1 + src/purescala/Z3Solver.scala | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/WISHLIST b/WISHLIST index ad101dd4e..f3f3f786d 100644 --- a/WISHLIST +++ b/WISHLIST @@ -5,6 +5,7 @@ PS: rewrite pattern-matching translator to use if-then-else PS: generate VCs for preconditions PS: generate VCs for pattern-matching PS: support multiple top-level objects, and use 'private' accessor to indicate what's part of the interface +PS: support tuples (including natively in Z3) Wishes granted so far diff --git a/src/funcheck/FunCheckPlugin.scala b/src/funcheck/FunCheckPlugin.scala index 826e99d2d..4a580fa23 100644 --- a/src/funcheck/FunCheckPlugin.scala +++ b/src/funcheck/FunCheckPlugin.scala @@ -27,6 +27,7 @@ class FunCheckPlugin(val global: Global) extends Plugin { " -P:funcheck:axioms Generate simple forall axioms for recursive functions when possible" + "\n" + " -P:funcheck:tolerant Silently extracts non-pure function bodies as ''unknown''" + "\n" + " -P:funcheck:nobapa Disable BAPA Z3 extension" + "\n" + + " -P:funcheck:newPM Use the new pattern-matching translator" + "\n" + " -P:funcheck:quiet No info and warning messages from the extensions" + "\n" + " -P:funcheck:XP Enable weird transformations and other bug-producing features" ) @@ -44,6 +45,7 @@ class FunCheckPlugin(val global: Global) extends Plugin { case "nodefaults" => purescala.Settings.runDefaultExtensions = false case "axioms" => purescala.Settings.noForallAxioms = false case "nobapa" => purescala.Settings.useBAPA = false + case "newPM" => purescala.Settings.useNewPatternMatchingTranslator = true case "XP" => purescala.Settings.experimental = true case s if s.startsWith("unrolling=") => purescala.Settings.unrollingLevel = try { s.substring("unrolling=".length, s.length).toInt } catch { case _ => 0 } case s if s.startsWith("functions=") => purescala.Settings.functionsToAnalyse = Set(splitList(s.substring("functions=".length, s.length)): _*) diff --git a/src/purescala/Settings.scala b/src/purescala/Settings.scala index 8be325547..51225d73f 100644 --- a/src/purescala/Settings.scala +++ b/src/purescala/Settings.scala @@ -13,4 +13,5 @@ object Settings { var noForallAxioms: Boolean = true var unrollingLevel: Int = 0 var useBAPA: Boolean = true + var useNewPatternMatchingTranslator: Boolean = false } diff --git a/src/purescala/Z3Solver.scala b/src/purescala/Z3Solver.scala index 25073c324..f85158b62 100644 --- a/src/purescala/Z3Solver.scala +++ b/src/purescala/Z3Solver.scala @@ -9,7 +9,7 @@ import TypeTrees._ import z3plugins.bapa.{BAPATheory, BAPATheoryEqc, BAPATheoryBubbles} -class Z3Solver(reporter: Reporter) extends Solver(reporter) { +class Z3Solver(reporter: Reporter) extends Solver(reporter) with Z3ModelReconstruction { import Settings.useBAPA val description = "Z3 Solver" override val shortDescription = "Z3" @@ -23,7 +23,7 @@ class Z3Solver(reporter: Reporter) extends Solver(reporter) { // this is fixed private val z3cfg = new Z3Config( "MODEL" -> true, - "SOFT_TIMEOUT" -> 180000, // this one doesn't work apparently + "SOFT_TIMEOUT" -> 100, "TYPE_CHECK" -> true, "WELL_SORTED_CHECK" -> true ) -- GitLab