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 require
and 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 Light Scala (or, for now, Pure Scala) trees from the scalac
AST.
Generation of VCs following the usual assume/guarantee principle. Additionally to pre/post-conditions, we can generate VCs for:
Call to an SMT solver, hopefully with a formula in a QF theory.
Unclear.