From 73975d7491bc413b5f19022ff1df92d6e0ce3c24 Mon Sep 17 00:00:00 2001 From: Matei Zaharia Date: Tue, 31 May 2011 22:05:24 -0700 Subject: Further fixes to interpreter (adding in some code generation changes I missed before and setting SparkEnv properly on the threads that execute each line in the 2.9 interpreter). --- repl/src/main/scala/spark/repl/SparkILoop.scala | 4 +++- repl/src/main/scala/spark/repl/SparkIMain.scala | 11 ++++++++++- repl/src/main/scala/spark/repl/SparkImports.scala | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) (limited to 'repl') diff --git a/repl/src/main/scala/spark/repl/SparkILoop.scala b/repl/src/main/scala/spark/repl/SparkILoop.scala index bfbc66ebdd..aec398b965 100644 --- a/repl/src/main/scala/spark/repl/SparkILoop.scala +++ b/repl/src/main/scala/spark/repl/SparkILoop.scala @@ -842,6 +842,9 @@ class SparkILoop(in0: Option[BufferedReader], val out: PrintWriter, val master: } def process(settings: Settings): Boolean = { + printWelcome() + echo("Initializing interpreter...") + this.settings = settings createInterpreter() @@ -856,7 +859,6 @@ class SparkILoop(in0: Option[BufferedReader], val out: PrintWriter, val master: if (intp.reporter.hasErrors) return false - printWelcome() try { // this is about the illusion of snappiness. We call initialize() // which spins off a separate thread, then print the prompt and try diff --git a/repl/src/main/scala/spark/repl/SparkIMain.scala b/repl/src/main/scala/spark/repl/SparkIMain.scala index 49d0a27030..14e6eb3455 100644 --- a/repl/src/main/scala/spark/repl/SparkIMain.scala +++ b/repl/src/main/scala/spark/repl/SparkIMain.scala @@ -29,6 +29,7 @@ import SparkIMain._ import spark.HttpServer import spark.Utils +import spark.SparkEnv /** An interpreter for Scala code. * @@ -879,7 +880,15 @@ class SparkIMain(val settings: Settings, protected val out: PrintWriter) extends } try { - val execution = lineManager.set(originalLine)(lineRep call "$export") + val execution = lineManager.set(originalLine) { + // MATEI: set the right SparkEnv for our SparkContext, because + // this execution will happen in a separate thread + val sc = spark.repl.Main.interp.sparkContext + if (sc != null && sc.env != null) + SparkEnv.set(sc.env) + // Execute the line + lineRep call "$export" + } execution.await() execution.state match { diff --git a/repl/src/main/scala/spark/repl/SparkImports.scala b/repl/src/main/scala/spark/repl/SparkImports.scala index bd28395f2e..6ccd3cf1f0 100644 --- a/repl/src/main/scala/spark/repl/SparkImports.scala +++ b/repl/src/main/scala/spark/repl/SparkImports.scala @@ -144,8 +144,8 @@ trait SparkImports { // add code for a new object to hold some imports def addWrapper() { val impname = nme.INTERPRETER_IMPORT_WRAPPER - code append "object %s {\n".format(impname) - trailingBraces append "}\n" + code append "class %sC extends Serializable {\n".format(impname) + trailingBraces append "}\nval " + impname + " = new " + impname + "C;\n" accessPath append ("." + impname) currentImps.clear -- cgit v1.2.3