summaryrefslogtreecommitdiff
path: root/src/repl
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-08-20 10:41:16 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-08-20 10:41:16 -0700
commit738441cf58136bd4af9985886dd0cd38ccda0777 (patch)
treeda84b26f5ba64c2890b8a9333f6beab9a6f45740 /src/repl
parent38d5b203745e799d819759ccce2f96655085f537 (diff)
parent470c69928fe2bbf41c3142ac066c49fb7a0ee7c9 (diff)
downloadscala-738441cf58136bd4af9985886dd0cd38ccda0777.tar.gz
scala-738441cf58136bd4af9985886dd0cd38ccda0777.tar.bz2
scala-738441cf58136bd4af9985886dd0cd38ccda0777.zip
Merge pull request #2824 from qerub/ticket/7740
SI-7740 Trim stack trace before printing in REPL
Diffstat (limited to 'src/repl')
-rw-r--r--src/repl/scala/tools/nsc/interpreter/IMain.scala16
-rw-r--r--src/repl/scala/tools/nsc/interpreter/Naming.scala2
2 files changed, 14 insertions, 4 deletions
diff --git a/src/repl/scala/tools/nsc/interpreter/IMain.scala b/src/repl/scala/tools/nsc/interpreter/IMain.scala
index 1723344306..9596a360a9 100644
--- a/src/repl/scala/tools/nsc/interpreter/IMain.scala
+++ b/src/repl/scala/tools/nsc/interpreter/IMain.scala
@@ -7,6 +7,8 @@ package scala
package tools.nsc
package interpreter
+import PartialFunction.cond
+
import scala.language.implicitConversions
import scala.collection.mutable
@@ -20,7 +22,7 @@ import scala.reflect.internal.util.{ BatchSourceFile, SourceFile }
import scala.tools.util.PathResolver
import scala.tools.nsc.io.AbstractFile
import scala.tools.nsc.typechecker.{ TypeStrings, StructuredTypeStrings }
-import scala.tools.nsc.util.{ ScalaClassLoader, stringFromWriter }
+import scala.tools.nsc.util.{ ScalaClassLoader, stringFromWriter, stackTracePrefixString }
import scala.tools.nsc.util.Exceptional.unwrap
import javax.script.{AbstractScriptEngine, Bindings, ScriptContext, ScriptEngine, ScriptEngineFactory, ScriptException, CompiledScript, Compilable}
@@ -718,10 +720,18 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set
throw t
val unwrapped = unwrap(t)
+
+ // Example input: $line3.$read$$iw$$iw$
+ val classNameRegex = (naming.lineRegex + ".*").r
+ def isWrapperInit(x: StackTraceElement) = cond(x.getClassName) {
+ case classNameRegex() if x.getMethodName == nme.CONSTRUCTOR.decoded => true
+ }
+ val stackTrace = util.stackTracePrefixString(unwrapped)(!isWrapperInit(_))
+
withLastExceptionLock[String]({
directBind[Throwable]("lastException", unwrapped)(StdReplTags.tagOfThrowable, classTag[Throwable])
- util.stackTraceString(unwrapped)
- }, util.stackTraceString(unwrapped))
+ stackTrace
+ }, stackTrace)
}
// TODO: split it out into a package object and a regular
diff --git a/src/repl/scala/tools/nsc/interpreter/Naming.scala b/src/repl/scala/tools/nsc/interpreter/Naming.scala
index 7f577b3a8b..cf38a2ae3a 100644
--- a/src/repl/scala/tools/nsc/interpreter/Naming.scala
+++ b/src/repl/scala/tools/nsc/interpreter/Naming.scala
@@ -40,7 +40,7 @@ trait Naming {
// $line3.$read$$iw$$iw$Bippy@4a6a00ca
private def noMeta(s: String) = "\\Q" + s + "\\E"
- private lazy val lineRegex = {
+ lazy val lineRegex = {
val sn = sessionNames
val members = List(sn.read, sn.eval, sn.print) map noMeta mkString ("(?:", "|", ")")
debugging("lineRegex")(noMeta(sn.line) + """\d+[./]""" + members + """[$.]""")