diff options
author | Paul Phillips <paulp@improving.org> | 2011-08-25 17:33:37 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-08-25 17:33:37 +0000 |
commit | fbb5b57d65d9c786ef618c92165ca1e3a72863ce (patch) | |
tree | e655741fdf826293613e9ff334fdcddeb5174ac3 | |
parent | 006cd779797b2ddd0af8a5fe5ad87671509f106f (diff) | |
download | scala-fbb5b57d65d9c786ef618c92165ca1e3a72863ce.tar.gz scala-fbb5b57d65d9c786ef618c92165ca1e3a72863ce.tar.bz2 scala-fbb5b57d65d9c786ef618c92165ca1e3a72863ce.zip |
Made -Xprompt more useful, less crashy and more...
Made -Xprompt more useful, less crashy and more open to showing you the
stack trace without aborting. For example, the following would resume
compilation after showing the trace.
% scala -deprecation -Xprompt -nc -e 'case class Foo' foo.scala:1:
warning: case classes without a parameter list have been deprecated;
use either case objects or case classes with `()' as parameter list.
case class Foo ^
a)bort, s)tack, r)esume: s
java.lang.Exception
[...]
at scala.tools.nsc.ast.parser.Parsers$UnitParser.deprecationWarning(Parsers.scala:207)
at scala.tools.nsc.ast.parser.Parsers$Parser.paramClauses(Parsers.scala:2058)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$classDef$1.apply(Parsers.scala:2557)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$classDef$1.apply(Parsers.scala:2545)
No review.
5 files changed, 21 insertions, 22 deletions
diff --git a/src/compiler/scala/tools/nsc/interpreter/ExprTyper.scala b/src/compiler/scala/tools/nsc/interpreter/ExprTyper.scala index 3e7593cd8c..115cef7f00 100644 --- a/src/compiler/scala/tools/nsc/interpreter/ExprTyper.scala +++ b/src/compiler/scala/tools/nsc/interpreter/ExprTyper.scala @@ -61,7 +61,7 @@ trait ExprTyper { else Some(trees) } } - def tokens(line: String) = codeParser.tokens(line) + def tokens(line: String) = beSilentDuring(codeParser.tokens(line)) // TODO: integrate these into a CodeHandler[Type]. diff --git a/src/compiler/scala/tools/nsc/interpreter/ILoop.scala b/src/compiler/scala/tools/nsc/interpreter/ILoop.scala index e9d36e0bdb..625bf2ae05 100644 --- a/src/compiler/scala/tools/nsc/interpreter/ILoop.scala +++ b/src/compiler/scala/tools/nsc/interpreter/ILoop.scala @@ -66,7 +66,7 @@ class ILoop(in0: Option[BufferedReader], protected val out: JPrintWriter) // Install a signal handler so we can be prodded. private val signallable = - if (isReplDebug && !settings.Yreplsync.value) + if (isReplDebug) Signallable("Dump repl state.")(dumpCommand()) else null diff --git a/src/compiler/scala/tools/nsc/interpreter/IMain.scala b/src/compiler/scala/tools/nsc/interpreter/IMain.scala index 9d042f2401..920367ce2e 100644 --- a/src/compiler/scala/tools/nsc/interpreter/IMain.scala +++ b/src/compiler/scala/tools/nsc/interpreter/IMain.scala @@ -1174,7 +1174,7 @@ class IMain(initialSettings: Settings, protected val out: JPrintWriter) extends prettyPrint(code) // old style - parse(code) foreach { ts => + beSilentDuring(parse(code)) foreach { ts => ts foreach { t => withoutUnwrapping(repldbg(asCompactString(t))) } diff --git a/src/compiler/scala/tools/nsc/interpreter/ReplReporter.scala b/src/compiler/scala/tools/nsc/interpreter/ReplReporter.scala index e181f98018..dac20ad348 100644 --- a/src/compiler/scala/tools/nsc/interpreter/ReplReporter.scala +++ b/src/compiler/scala/tools/nsc/interpreter/ReplReporter.scala @@ -9,7 +9,7 @@ package interpreter import reporters._ import IMain._ -class ReplReporter(intp: IMain) extends ConsoleReporter(intp.settings, null, new ReplStrippingWriter(intp)) { +class ReplReporter(intp: IMain) extends ConsoleReporter(intp.settings, Console.in, new ReplStrippingWriter(intp)) { override def printMessage(msg: String) { // Avoiding deadlock if the compiler starts logging before // the lazy val is complete. @@ -19,4 +19,9 @@ class ReplReporter(intp: IMain) extends ConsoleReporter(intp.settings, null, new } else Console.println("[init] " + msg) } + + override def displayPrompt() { + if (intp.totalSilence) () + else super.displayPrompt() + } } diff --git a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala index a6e661c4b4..967b582f11 100644 --- a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala +++ b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala @@ -93,27 +93,21 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr print(pos, msg, severity) } - def displayPrompt(): Unit = try { - var continue = true - while (continue) { - writer.print("r)esume, a)bort: ") - writer.flush() - var line = reader.readLine() - if (line ne null) { - line = line.toLowerCase() - if ("abort" startsWith line) - abort("user abort") - if ("resume" startsWith line) - continue = false + def displayPrompt(): Unit = { + writer.print("\na)bort, s)tack, r)esume: ") + writer.flush() + if (reader != null) { + val response = reader.read().asInstanceOf[Char].toLower + if (response == 'a' || response == 's') { + (new Exception).printStackTrace() + if (response == 'a') + sys exit 1 + + writer.print("\n") + writer.flush() } } } - catch { - case ex: IOException => { - ex.printStackTrace() - abort("input read error") - } - } private def abort(msg: String) = throw new Error(msg) override def flush() { writer.flush() } |