From 8d886ca8fbf6e55fc1ab360e460df0c54c9bd53b Mon Sep 17 00:00:00 2001 From: michelou Date: Thu, 24 Jan 2008 15:09:09 +0000 Subject: made println platform-independent in interpreter --- src/compiler/scala/tools/nsc/Interpreter.scala | 25 +++++++++++++--------- src/compiler/scala/tools/nsc/InterpreterLoop.scala | 11 +++++----- .../tools/nsc/reporters/AbstractReporter.scala | 11 +++++----- .../scala/tools/nsc/reporters/Reporter.scala | 10 ++++----- .../scala/tools/nsc/typechecker/Contexts.scala | 23 ++++++++++---------- 5 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/compiler/scala/tools/nsc/Interpreter.scala b/src/compiler/scala/tools/nsc/Interpreter.scala index 07b029c1fe..46420c4b6d 100644 --- a/src/compiler/scala/tools/nsc/Interpreter.scala +++ b/src/compiler/scala/tools/nsc/Interpreter.scala @@ -6,7 +6,7 @@ package scala.tools.nsc -import java.io.{File, PrintWriter, StringWriter} +import java.io.{File, PrintWriter, StringWriter, Writer} import java.lang.{Class, ClassLoader} import java.net.{URL, URLClassLoader} @@ -62,7 +62,7 @@ class Interpreter(val settings: Settings, out: PrintWriter) { /* If the interpreter is running on pre-jvm-1.5 JVM, it is necessary to force the target setting to jvm-1.4 */ - val major = System.getProperty("java.class.version").split("\\.")(0) + private val major = System.getProperty("java.class.version").split("\\.")(0) if (major.toInt < 49) { this.settings.target.value = "jvm-1.4" } @@ -83,7 +83,7 @@ class Interpreter(val settings: Settings, out: PrintWriter) { /** construct an interpreter that reports to Console */ def this(settings: Settings) = this(settings, - new PrintWriter(new ConsoleWriter, true)) + new NewLinePrintWriter(new ConsoleWriter, true)) /** whether to print out result lines */ private var printResults: Boolean = true @@ -115,7 +115,8 @@ class Interpreter(val settings: Settings, out: PrintWriter) { settings.outdir.value = classfilePath.getPath object reporter extends ConsoleReporter(settings, null, out) { - override def printMessage(msg: String) = out.println(clean(msg)) + //override def printMessage(msg: String) { out.println(clean(msg)) } + override def printMessage(msg: String) { out.print(clean(msg) + "\n"); out.flush() } } /** Instantiate a compiler. Subclasses can override this to @@ -156,7 +157,6 @@ class Interpreter(val settings: Settings, out: PrintWriter) { Thread.currentThread.setContextClassLoader(classLoader) } - /** XXX Let's get rid of this. I believe the Eclipse plugin is * the only user of it, so this should be doable. */ protected def parentClassLoader: ClassLoader = null @@ -188,7 +188,7 @@ class Interpreter(val settings: Settings, out: PrintWriter) { /** generate a string using a routine that wants to write on a stream */ private def stringFrom(writer: PrintWriter => Unit): String = { val stringWriter = new StringWriter() - val stream = new PrintWriter(stringWriter) + val stream = new NewLinePrintWriter(stringWriter) writer(stream) stream.close stringWriter.toString @@ -223,14 +223,14 @@ class Interpreter(val settings: Settings, out: PrintWriter) { stringFrom(str => for (line <- code.lines) { - str.print(spaces) - str.println(line) + str.print(spaces) + str.print(line + "\n") + str.flush() }) } implicit def name2string(name: Name) = name.toString - /** Compute imports that allow definitions from previous * requests to be visible in a new request. Returns * three pieces of related code: @@ -303,7 +303,6 @@ class Interpreter(val settings: Settings, out: PrintWriter) { select(prevRequests.toList.reverse, wanted).reverse } - val code = new StringBuffer val trailingBraces = new StringBuffer val accessPath = new StringBuffer @@ -929,6 +928,12 @@ class Interpreter(val settings: Settings, out: PrintWriter) { } } + class NewLinePrintWriter(out: Writer, autoFlush: Boolean) + extends PrintWriter(out, autoFlush) { + def this(out: Writer) = this(out, false) + override def println() { print("\n"); flush() } + } + /** Utility methods for the Interpreter. */ object Interpreter { diff --git a/src/compiler/scala/tools/nsc/InterpreterLoop.scala b/src/compiler/scala/tools/nsc/InterpreterLoop.scala index 50973bfb71..aa9e583355 100644 --- a/src/compiler/scala/tools/nsc/InterpreterLoop.scala +++ b/src/compiler/scala/tools/nsc/InterpreterLoop.scala @@ -1,18 +1,17 @@ /* NSC -- new Scala compiler - * Copyright 2005-2007 LAMP/EPFL + * Copyright 2005-2008 LAMP/EPFL * @author Alexander Spoon */ // $Id$ package scala.tools.nsc -import java.lang.{ClassLoader, System} -import java.io.{BufferedReader, InputStreamReader, File, FileReader, PrintWriter} +import java.io.{BufferedReader, File, FileReader, PrintWriter} import java.io.IOException +import java.lang.{ClassLoader, System} -import scala.tools.nsc.util.{ClassPath, Position} -import nsc.{InterpreterResults=>IR} -import nsc.interpreter._ +import scala.tools.nsc.{InterpreterResults => IR} +import scala.tools.nsc.interpreter._ /** The * Scala diff --git a/src/compiler/scala/tools/nsc/reporters/AbstractReporter.scala b/src/compiler/scala/tools/nsc/reporters/AbstractReporter.scala index b2732df204..53cbbddcc7 100644 --- a/src/compiler/scala/tools/nsc/reporters/AbstractReporter.scala +++ b/src/compiler/scala/tools/nsc/reporters/AbstractReporter.scala @@ -1,5 +1,5 @@ /* NSC -- new Scala compiler - * Copyright 2002-2007 LAMP/EPFL + * Copyright 2002-2008 LAMP/EPFL * @author Martin Odersky */ // $Id$ @@ -7,8 +7,8 @@ package scala.tools.nsc.reporters import scala.collection.mutable.HashSet +import scala.tools.nsc.Settings import scala.tools.nsc.util.Position -import nsc.Settings /** * This reporter implements filtering. @@ -26,7 +26,7 @@ abstract class AbstractReporter extends Reporter { def display(pos: Position, msg: String, severity: Severity): Unit def displayPrompt: Unit - protected def info0(pos: Position, msg: String, severity: Severity, force: Boolean): Unit = + protected def info0(pos: Position, msg: String, severity: Severity, force: Boolean) { severity match { case INFO => if (force || settings.verbose.value) display(pos, msg, severity) @@ -41,6 +41,7 @@ abstract class AbstractReporter extends Reporter { if (!hidden || settings.prompt.value) display(pos, msg, severity) if (settings.prompt.value) displayPrompt } + } /** Logs a position and returns true if it was already logged. * @@ -51,10 +52,8 @@ abstract class AbstractReporter extends Reporter { if (pos eq null) return false if (pos.offset.isEmpty) return false if (positions contains pos) return true - //Console.println("ERROR @ " + pos + " into " + positions) positions += pos - - return false + false } } diff --git a/src/compiler/scala/tools/nsc/reporters/Reporter.scala b/src/compiler/scala/tools/nsc/reporters/Reporter.scala index 3b1f42b86d..aaecb06332 100644 --- a/src/compiler/scala/tools/nsc/reporters/Reporter.scala +++ b/src/compiler/scala/tools/nsc/reporters/Reporter.scala @@ -1,5 +1,5 @@ /* NSC -- new Scala compiler - * Copyright 2002-2007 LAMP/EPFL + * Copyright 2002-2008 LAMP/EPFL * @author Martin Odersky */ // $Id$ @@ -15,7 +15,7 @@ import scala.tools.nsc.util._ abstract class Reporter { object severity extends Enumeration abstract class Severity extends severity.Value { - var count : Int = 0 + var count: Int = 0 } object INFO extends Severity { def id = 0 } object WARNING extends Severity { def id = 1 } @@ -37,9 +37,9 @@ abstract class Reporter { protected def info0(pos: Position, msg: String, severity: Severity, force: Boolean): Unit - private var source : SourceFile = _ - def setSource(source : SourceFile) : Unit = this.source = source - def getSource : SourceFile = source + private var source: SourceFile = _ + def setSource(source: SourceFile) { this.source = source } + def getSource: SourceFile = source def info(pos: Position, msg: String, force: Boolean): Unit = info0(pos, msg, INFO, force) def warning(pos: Position, msg: String ): Unit = info0(pos, msg, WARNING, false) diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala index 782c003b25..c80c9ecf82 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala @@ -1,5 +1,5 @@ /* NSC -- new Scala compiler - * Copyright 2005-2007 LAMP/EPFL + * Copyright 2005-2008 LAMP/EPFL * @author Martin Odersky */ // $Id$ @@ -36,9 +36,7 @@ trait Contexts { self: Analyzer => * a root context. This list is sensitive to the * compiler settings. */ - protected def rootImports(unit: CompilationUnit, tree: Tree) - :List[Symbol] = - { + protected def rootImports(unit: CompilationUnit, tree: Tree) :List[Symbol] = { import definitions._ val imps = new ListBuffer[Symbol] if (!settings.noimports.value) { @@ -65,7 +63,7 @@ trait Contexts { self: Analyzer => Import(qual, List((nme.WILDCARD, null))) .setSymbol(NoSymbol.newImport(NoPosition).setFlag(SYNTHETIC).setInfo(ImportType(qual))) .setType(NoType)) - sc.depth = sc.depth + 1 + sc.depth += 1 } for (imp <- rootImports(unit, tree)) addImport(imp) @@ -87,8 +85,8 @@ trait Contexts { self: Analyzer => } } // IDE hooks - protected def sanitize(tree : Tree) : Tree = tree - protected def scopeFor(old : Scope, tree : Tree) : Scope = newScope(old) + protected def sanitize(tree: Tree): Tree = tree + protected def scopeFor(old: Scope, tree: Tree): Scope = newScope(old) class Context private[typechecker] { var unit: CompilationUnit = _ var tree: Tree = _ // Tree associated with this context @@ -116,7 +114,6 @@ trait Contexts { self: Analyzer => var savedTypeBounds: List[(Symbol, Type)] = List() - def intern0 : Context = { if (this eq NoContext) return this val txt = new Context @@ -145,11 +142,13 @@ trait Contexts { self: Analyzer => txt.savedTypeBounds = savedTypeBounds txt } - override def equals(that : Any) : Boolean = that match { - case that : AnyRef if (this eq that) => true - case that if !inIDE => super.equals(that) + override def equals(that: Any): Boolean = that match { + case that: AnyRef if (this eq that) => + true + case that if !inIDE => + super.equals(that) //case NoContext => false - case that : Context => + case that: Context => if (that eq NoContext) return this eq NoContext assert(that ne NoContext) if (this eq NoContext) return false -- cgit v1.2.3