diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala index 432e2d08d5920d27e031c2b03873401d48fb1002..1563e5251bb87a62d8b1ae3127f4eb2795719168 100644 --- a/src/funcheck/CodeExtraction.scala +++ b/src/funcheck/CodeExtraction.scala @@ -16,8 +16,16 @@ trait CodeExtraction extends Extractors { import ExpressionExtractors._ def extractCode(unit: CompilationUnit): Program = { + def s2ps(tree: Tree): Expr = toPureScala(unit)(tree) match { + case Some(ex) => ex + case None => stopIfErrors; throw new Error("unreachable") + } + def trav(tree: Tree): Unit = tree match { - case d @ DefDef(mods, name, tparams, vparamss, tpt, body) if !d.symbol.isConstructor => { + case t : Tree if t.symbol != null && t.symbol.hasFlag(symtab.Flags.SYNTHETIC) => { + println("Synth! " + t) + } + case d @ DefDef(mods, name, tparams, vparamss, tpt, body) if !(d.symbol.hasFlag(symtab.Flags.SYNTHETIC) || d.symbol.isConstructor) => { println("In: " + name) println(d.symbol) println(d.mods) @@ -30,8 +38,15 @@ trait CodeExtraction extends Extractors { case _ => ; } - // (new ForeachTreeTraverser(trav)).traverse(unit.body) + // Finds all vals in a template + + // Finds all defs in a template + + // Finds all class definitions in a template + + // Finds all assertions in a template + // Extraction of the program. val program = unit.body match { case p @ PackageDef(name, lst) if lst.size == 0 => { unit.error(p.pos, "No top-level definition found.") @@ -53,6 +68,7 @@ trait CodeExtraction extends Extractors { } } + (new ForeachTreeTraverser(trav)).traverse(unit.body) stopIfErrors program.get