package vitry.prelude; import vitry.runtime.Function; import vitry.runtime.Module; import vitry.runtime.StandardFunction; import vitry.runtime.error.InvocationError; public class load extends StandardFunction { private Function compose; private Function parseFile; private Function eval; public load(Module prelude) { super(1, prelude); this.compose = (Function) getValue("(.)"); this.parseFile = (Function) getValue("parseFile"); this.eval = (Function) getValue("eval"); } public Object apply(Object a) throws InvocationError { Module m = (Module) ((Function) compose.apply(eval, parseFile)).apply(a); throw new ModuleLoaded(m); } } @SuppressWarnings("serial") final class ModuleLoaded extends RuntimeException { final Module module; public ModuleLoaded(Module module) { this.module = module; } public synchronized Throwable fillInStackTrace() { return this; } }