/* sbt -- Simple Build Tool * Copyright 2008, 2009 Mark Harrah */ package xsbt import xsbti.Logger import dotty.tools.dotc.core.Contexts.Context import dotty.tools.dotc.repl.REPL import dotty.tools.dotc.repl.REPL.Config class ConsoleInterface { def commandArguments( args: Array[String], bootClasspathString: String, classpathString: String, log: Logger ): Array[String] = args def run(args: Array[String], bootClasspathString: String, classpathString: String, initialCommands: String, cleanupCommands: String, loader: ClassLoader, bindNames: Array[String], bindValues: Array[Any], log: Logger ): Unit = { val completeArgs = args :+ "-bootclasspath" :+ bootClasspathString :+ "-classpath" :+ classpathString println("Starting dotty interpreter...") val repl = ConsoleInterface.customRepl( initialCommands :: Nil, cleanupCommands :: Nil, bindNames zip bindValues, loader ) repl.process(completeArgs) } } object ConsoleInterface { def customConfig( initCmds: List[String], cleanupCmds: List[String], boundVals: Array[(String, Any)], loader: ClassLoader ) = new Config { override val initialCommands: List[String] = initCmds override val cleanupCommands: List[String] = cleanupCmds override val boundValues: Array[(String, Any)] = boundVals override val classLoader: Option[ClassLoader] = Option(loader) } def customRepl(cfg: Config): REPL = new REPL { override lazy val config = cfg } def customRepl( initCmds: List[String], cleanupCmds: List[String], boundVals: Array[(String, Any)], loader: ClassLoader ): REPL = customRepl(customConfig(initCmds, cleanupCmds, boundVals, loader)) }