summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/Parsing.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-06-26 11:21:15 +0200
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-07-17 15:41:27 +0200
commit64ebac245d58221814f9c9375927e3f2e7a2d4f0 (patch)
treea64a148be77a7dd629fb1cefad955c123fc42fc8 /src/compiler/scala/tools/nsc/Parsing.scala
parent638b4c3f5b5721b68a6af97e237b4f056c2da7ed (diff)
downloadscala-64ebac245d58221814f9c9375927e3f2e7a2d4f0.tar.gz
scala-64ebac245d58221814f9c9375927e3f2e7a2d4f0.tar.bz2
scala-64ebac245d58221814f9c9375927e3f2e7a2d4f0.zip
Move more parsing hooks out of reporting.
Create a trait Parsing, which, like Reporting, factors our functionality from Global (aka. "the cake"), that is related to global aspects of configuring parsing.
Diffstat (limited to 'src/compiler/scala/tools/nsc/Parsing.scala')
-rw-r--r--src/compiler/scala/tools/nsc/Parsing.scala36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/Parsing.scala b/src/compiler/scala/tools/nsc/Parsing.scala
new file mode 100644
index 0000000000..4dd3c3f378
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/Parsing.scala
@@ -0,0 +1,36 @@
+/* NSC -- new Scala compiler
+ * Copyright 2005-2014 LAMP/EPFL, Typesafe Inc.
+ * @author Adriaan Moors
+ */
+
+package scala
+package tools.nsc
+
+import scala.reflect.internal.Positions
+import scala.tools.nsc.reporters.Reporter
+
+/** Similar to Reporting: gather global functionality specific to parsing.
+ */
+trait Parsing { self : Positions with Reporting =>
+ def currentRun: RunParsing
+
+ trait RunParsing {
+ val parsing: PerRunParsing = new PerRunParsing
+ }
+
+ class PerRunParsing {
+ // for repl
+ private[this] var incompleteHandler: (Position, String) => Unit = null
+ def withIncompleteHandler[T](handler: (Position, String) => Unit)(thunk: => T) = {
+ val saved = incompleteHandler
+ incompleteHandler = handler
+ try thunk
+ finally incompleteHandler = saved
+ }
+
+ def incompleteHandled = incompleteHandler != null
+ def incompleteInputError(pos: Position, msg: String): Unit =
+ if (incompleteHandled) incompleteHandler(pos, msg)
+ else reporter.error(pos, msg)
+ }
+} \ No newline at end of file