diff --git a/project/build/funcheck.scala b/project/build/funcheck.scala index d649b73b58147e2f806da2774bf0d645502243ec..0ef9fb71aef6c1eef440e5334ade8f1db3f763e7 100644 --- a/project/build/funcheck.scala +++ b/project/build/funcheck.scala @@ -5,12 +5,13 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT override def dependencyPath = "lib" override def shouldCheckOutputDirectories = false - lazy val purescala = project(".", "PureScala Definitions", new PureScalaProject(_)) - lazy val plugin = project(".", "FunCheck Plugin", new PluginProject(_), purescala) - lazy val multisets = project(".", "Multiset Solver", new MultisetsProject(_), plugin, purescala) - lazy val orderedsets = project(".", "Ordered Sets Solver", new OrderedSetsProject(_), plugin, purescala) + lazy val purescala = project(".", "PureScala Definitions", new PureScalaProject(_)) + lazy val plugin = project(".", "FunCheck Plugin", new PluginProject(_), purescala) + lazy val multisets = project(".", "Multiset Solver", new MultisetsProject(_), plugin, purescala) + lazy val orderedsets = project(".", "Ordered Sets Solver", new OrderedSetsProject(_), plugin, purescala) + lazy val setconstraints = project(".", "Type inference with set constraints", new SetConstraintsProject(_), plugin, purescala) - lazy val extensionJars : List[Path] = multisets.jarPath :: orderedsets.jarPath :: Nil + lazy val extensionJars : List[Path] = multisets.jarPath :: orderedsets.jarPath :: setconstraints.jarPath :: Nil val scriptPath: Path = "." / "scalac-funcheck" @@ -89,4 +90,9 @@ class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) with FileT override def mainScalaSourcePath = "src" / "orderedsets" override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath } + class SetConstraintsProject(info: ProjectInfo) extends PersonalizedProject(info) { + override def outputPath = "bin" / "setconstraints" + override def mainScalaSourcePath = "src" / "setconstraints" + override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath + } } diff --git a/src/funcheck/FunCheckPlugin.scala b/src/funcheck/FunCheckPlugin.scala index 97b26656377462d4e42f7f1d5793ba1053f452ab..63ecdb8eb0282fc6bb411d52ed6db0adea85ba44 100644 --- a/src/funcheck/FunCheckPlugin.scala +++ b/src/funcheck/FunCheckPlugin.scala @@ -17,7 +17,7 @@ class FunCheckPlugin(val global: Global) extends Plugin { override val optionsHelp: Option[String] = Some( " -P:funcheck:uniqid When pretty-printing funcheck trees, show identifiers IDs" + "\n" + " -P:funcheck:with-code Allows the compiler to keep running after the static analysis" + "\n" + - " -P:funcheck:extensions=ex1,... Specifies a list of qualified class names of extensions to be loaded" + " -P:funcheck:extensions=ex1:... Specifies a list of qualified class names of extensions to be loaded" ) /** Processes the command-line options. */ diff --git a/src/purescala/Extensions.scala b/src/purescala/Extensions.scala index 0a3d96c004afbb815ef65ae7e45074f820d1b94f..1ba2efa3fceca7c137265a290042e43797056a8a 100644 --- a/src/purescala/Extensions.scala +++ b/src/purescala/Extensions.scala @@ -17,14 +17,14 @@ object Extensions { abstract class Analyser(reporter: Reporter) extends Extension(reporter) { // Does whatever the analysis should. Uses the reporter to // signal results and/or errors. - def analyze(program: Program) : Unit + def analyse(program: Program) : Unit } // the following is for dynamically loading extensions type AnyClass = Class[_] def loadAll(reporter: Reporter) : Seq[Extension] = { - val allNames = Settings.extensionNames.split(':') + val allNames: Seq[String] = Settings.extensionNames.split(':').map(_.trim).filter(!_.isEmpty) if(!allNames.isEmpty) { val classLoader = Extensions.getClass.getClassLoader diff --git a/src/setconstraints/Main.scala b/src/setconstraints/Main.scala new file mode 100644 index 0000000000000000000000000000000000000000..14ef5594d01a4e419450c3cfe9be498aa0bd6902 --- /dev/null +++ b/src/setconstraints/Main.scala @@ -0,0 +1,14 @@ +package setconstraints + +import purescala.Extensions._ +import purescala.Definitions._ +import purescala.Trees._ +import purescala.Reporter + +class Main(reporter: Reporter) extends Analyser(reporter) { + val description: String = "Analyser for advanced type inference based on set constraints" + + def analyse(program: Program) : Unit = { + reporter.info("Nothing to do in this analysis.") + } +}