From f587ec7c8f616d80f1a115fdb21a5b7f7da8ebf7 Mon Sep 17 00:00:00 2001 From: Lex Spoon Date: Tue, 12 Jun 2007 15:28:59 +0000 Subject: Replaced -Xscript by -script, so that script files can be compiled into a user-specified object wrapper --- src/compiler/scala/tools/nsc/ScriptRunner.scala | 57 ++++++++++++++++++++----- 1 file changed, 47 insertions(+), 10 deletions(-) (limited to 'src/compiler/scala/tools/nsc/ScriptRunner.scala') diff --git a/src/compiler/scala/tools/nsc/ScriptRunner.scala b/src/compiler/scala/tools/nsc/ScriptRunner.scala index 2f0a0fdd4c..7afc0f5b5c 100644 --- a/src/compiler/scala/tools/nsc/ScriptRunner.scala +++ b/src/compiler/scala/tools/nsc/ScriptRunner.scala @@ -43,6 +43,15 @@ import scala.tools.nsc.util.{CompoundSourceFile, SourceFile, SourceFileFragment} * of stdout... */ object ScriptRunner { + /** Default name to use for the wrapped script */ + val defaultScriptMain = "Main" + + /** Pick a main object name from the specified settings */ + def scriptMain(settings: Settings) = + if (settings.script.value == "") + defaultScriptMain + else + settings.script.value /** Choose a jar filename to hold the compiled version * of a script @@ -127,18 +136,39 @@ object ScriptRunner { return matcher.end } + /** Split a fully qualified object name into a + * package and an unqualified object name */ + private def splitObjectName(fullname: String): + (Option[String],String) = + { + val idx = fullname.lastIndexOf('.') + if (idx < 0) + (None, fullname) + else + (Some(fullname.substring(0,idx)), fullname.substring(idx+1)) + } + + /** Wrap a script file into a runnable object named * scala.scripting.Main. - * - * @param filename ... - * @param getSourceFile ... - * @return ... */ - def wrappedScript(filename: String, getSourceFile: PlainFile => SourceFile): SourceFile = { + def wrappedScript( + objectName: String, + filename: String, + getSourceFile: PlainFile => SourceFile): SourceFile = + { + val (maybePack, objName) = splitObjectName(objectName) + + val packageDecl = + maybePack match { + case Some(pack) => "package " + pack + "\n" + case None => "" + } + val preamble = new SourceFile("