summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-08-25 17:33:37 +0000
committerPaul Phillips <paulp@improving.org>2011-08-25 17:33:37 +0000
commitfbb5b57d65d9c786ef618c92165ca1e3a72863ce (patch)
treee655741fdf826293613e9ff334fdcddeb5174ac3
parent006cd779797b2ddd0af8a5fe5ad87671509f106f (diff)
downloadscala-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.
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/ExprTyper.scala2
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/ILoop.scala2
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/IMain.scala2
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/ReplReporter.scala7
-rw-r--r--src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala30
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() }