// // Copyright (c) 2006, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 4 Nov 06 Brian Frank Creation // using compiler ** ** FanScript is used to compiler a Fan script into ** memory and run it via reflection. ** class FanScript : Task { new make(BuildScript script, File file, Obj[]? args := null) : super(script) { this.file = file this.args = args ?: [,] } Pod compile() { try { return Sys.compile(file).pod } catch (CompilerErr err) { // all errors should already be logged by Compiler throw FatalBuildErr.make } catch (Err err) { err.trace throw fatal("Cannot load script [$file]") } } override Void run() { // run main on first type with specified args t := compile.types.first main := t.method("main") if (main.isStatic) main.callList(args) else main.callOn(t.make, args) } File file Obj[] args }