From 5cfe3f9f1d3ec8dd8aecaaced356e8d8437224c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Sinan=20K=C3=B6ksal?= <alisinan@gmail.com> Date: Wed, 6 Apr 2011 11:54:15 +0000 Subject: [PATCH] private CodeExtraction members, RBT example in CP --- cp-demo/ChooseCalls.scala | 16 +++++++++++++--- cp-runner | 2 +- src/cp/CPComponent.scala | 10 ---------- src/cp/CallTransformation.scala | 1 + src/funcheck/CodeExtraction.scala | 18 ++++++++++++------ 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/cp-demo/ChooseCalls.scala b/cp-demo/ChooseCalls.scala index 2e4480db2..77f37349e 100644 --- a/cp-demo/ChooseCalls.scala +++ b/cp-demo/ChooseCalls.scala @@ -38,11 +38,21 @@ object ChooseCalls { } def chooseTree(height : Int) : Tree = { - choose((t: Tree) => blackBalanced(t) && size(t) == height) + choose((t: Tree) => blackBalanced(t) && redNodesHaveBlackChildren(t) && isBlack(t) && size(t) == height) } def main(args: Array[String]) : Unit = { - val height = 5 - println("The chosen tree (of height " + height + ") is : " + chooseTree(height)) + + /** Printing trees */ + def indent(s: String) = (" "+s).split('\n').mkString("\n ") + + def print(tree: Tree): String = tree match { + case Node(c,l,v,r) => + indent(print(r)) + "\n" + (if (c == Black()) "B" else "R") + " " + v.toString + "\n" + indent(print(l)) + case Empty() => "E" + } + + val height = if (args.isEmpty) 3 else args(0).toInt + println("The chosen tree (of height " + height + ") is : \n" + print(chooseTree(height))) } } diff --git a/cp-runner b/cp-runner index efc327803..dc2795461 100755 --- a/cp-runner +++ b/cp-runner @@ -1,4 +1,4 @@ #!/bin/bash LD_LIBRARY_PATH=lib-bin \ -scala -classpath bin/purescala/purescala-definitions_2.8.1-1.0.jar:bin/funcheck/funcheck-plugin_2.8.1-1.0.jar:lib/z3.jar:bin/cp/constraint-programming-plugin_2.8.1-1.0.jar:out ${1} +scala -classpath bin/purescala/purescala-definitions_2.8.1-1.0.jar:bin/funcheck/funcheck-plugin_2.8.1-1.0.jar:lib/z3.jar:bin/cp/constraint-programming-plugin_2.8.1-1.0.jar:out ${@} diff --git a/src/cp/CPComponent.scala b/src/cp/CPComponent.scala index 0ce12c08f..a9804fc1b 100644 --- a/src/cp/CPComponent.scala +++ b/src/cp/CPComponent.scala @@ -45,16 +45,6 @@ class CPComponent(val global: Global, val pluginInstance: CPPlugin) transformCalls(unit, prog, progString, progId) println("Finished transformation") - - /* - try { - val recovered = readProgram(filename) - println - println("Recovered: " + recovered) - } catch { - case e => e.printStackTrace() - } - */ } } } diff --git a/src/cp/CallTransformation.scala b/src/cp/CallTransformation.scala index 5715bcde8..320504b31 100644 --- a/src/cp/CallTransformation.scala +++ b/src/cp/CallTransformation.scala @@ -126,6 +126,7 @@ trait CallTransformation } } +/** A collection of methods that are called on runtime */ object CallTransformation { /* Get list of assignments in the order specified by outputVars list */ def outputAssignments(outputVars: List[String], model: Map[Identifier, Expr]) : List[Any] = { diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala index f139f1582..f8fc276d6 100644 --- a/src/funcheck/CodeExtraction.scala +++ b/src/funcheck/CodeExtraction.scala @@ -19,17 +19,23 @@ trait CodeExtraction extends Extractors { private lazy val setTraitSym = definitions.getClass("scala.collection.immutable.Set") private lazy val multisetTraitSym = definitions.getClass("scala.collection.immutable.Multiset") - val varSubsts: scala.collection.mutable.Map[Symbol,Function0[Expr]] = + private val varSubsts: scala.collection.mutable.Map[Symbol,Function0[Expr]] = scala.collection.mutable.Map.empty[Symbol,Function0[Expr]] - val classesToClasses: scala.collection.mutable.Map[Symbol,ClassTypeDef] = + private val classesToClasses: scala.collection.mutable.Map[Symbol,ClassTypeDef] = scala.collection.mutable.Map.empty[Symbol,ClassTypeDef] private val defsToDefs: scala.collection.mutable.Map[Symbol,FunDef] = scala.collection.mutable.Map.empty[Symbol,FunDef] - val reverseVarSubsts: scala.collection.mutable.Map[Expr,Symbol] = + private val reverseVarSubsts_ : scala.collection.mutable.Map[Expr,Symbol] = scala.collection.mutable.Map.empty[Expr,Symbol] - val reverseClassesToClasses: scala.collection.mutable.Map[ClassTypeDef,Symbol] = + private val reverseClassesToClasses_ : scala.collection.mutable.Map[ClassTypeDef,Symbol] = scala.collection.mutable.Map.empty[ClassTypeDef,Symbol] + + def reverseVarSubsts: scala.collection.immutable.Map[Expr,Symbol] = + scala.collection.immutable.Map() ++ reverseVarSubsts_ + + def reverseClassesToClasses: scala.collection.immutable.Map[ClassTypeDef,Symbol] = + scala.collection.immutable.Map() ++ reverseClassesToClasses_ protected def stopIfErrors: Unit = { if(reporter.hasErrors) { @@ -271,8 +277,8 @@ trait CodeExtraction extends Extractors { stopIfErrors // Reverse map for Scala class symbols - reverseClassesToClasses ++= classesToClasses.map{ case (a, b) => (b, a) } - reverseVarSubsts ++= varSubsts.map{ case (a, b) => (b(), a) } + reverseClassesToClasses_ ++= classesToClasses.map{ case (a, b) => (b, a) } + reverseVarSubsts_ ++= varSubsts.map{ case (a, b) => (b(), a) } val programName: Identifier = unit.body match { case PackageDef(name, _) => FreshIdentifier(name.toString) -- GitLab