The FunCheck Scala Compiler Plugin
See also: funcheck for the general ideas.
Generation of a minimalistic symbol table from the CompilationUnits (and with storing pointers to the entries in the actual
scalac symbol table), where we store classes, objects, possibly traits, and their methods.
Application of pattern matching to recover the
ensuring contracts. (Does not need to be explicitely separated from the following phase.) We should stop if the contracts are not expressed in Pure Scala, and generate the proper Pure Scala trees otherwise.
Generation of VCs following the usual assume/guarantee principle. Additionally to pre/post-conditions, we can generate VCs for:
- pattern matching exhaustiveness (= runtime MatchException)
Call to an SMT solver, hopefully with a formula in a QF theory.
(Optionally) Counter-Example Generation