/** * @author Martin Bravenboer <martin@cs.uu.nl> */ module dryad/components imports liblib libstratego-sglr dryad/util/option dryad/reclassify/Main dryad/type-check/Main dryad/lib-ext/log signature constructors StartLineColumn : Int * Int -> PosInfo /** * Apply the front-end of Dryad to a list of Java sources */ strategies /** * @todo Should the tc conditional be here? * @type List(FILE) -> List(CompilationUnit) */ dryad-front = id ; log-timed(parse-java | "parsing sources", 0) ; map(define-compilation-unit) ; log-timed( dryad-reclassify | "reclassifying", 0) ; if-switch(!"tc", log-timed( map(dryad-type-checker) | "type checking", 0) ) ; map(get-ast) /** * Parse Java code */ strategies /** * @type List(FILE) -> List(CompilationUnit) */ parse-java = where(<get-java-parse-table> "CompilationUnit" => tbl) ; map({input: ?input ; ( parse-xtc-file(|tbl) <+ <report-parse-error> input ; fail) }) annotate-start-line-column = dryad-add-pos-info external dryad-add-pos-info(|) /** * @type FILE -> FILE */ report-parse-error = where( if get-parse-error => error then report-error(|error) else <perror> "dryad: could not read Java source file" end ) strategies /** * @type List(FILE) -> List(FILE) */ do-dryad-simplify = map(xtc-transform(!"dryad-simplify", pass-verbose)) /** do-dryad-emit = profile'(<printnl> (stderr, ["code emission: " | <id>]), map(xtc-io-transform(dryad-emit)) ) */ /** * @type List(FILE) -> List(FILE) * @obsolete Use write-class-file instead. */ do-dryad-aterm2class = map(xtc-transform(!"aterm2class", pass-verbose))