Skip to content

Commit e67ac03

Browse files
committed
Eliminate a hot closure in Reporter
1 parent e8b9503 commit e67ac03

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

compiler/src/dotty/tools/dotc/reporting/Reporter.scala

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,12 @@ object Reporter {
3131
def doReport(m: MessageContainer)(implicit ctx: Context): Unit = ()
3232
override def report(m: MessageContainer)(implicit ctx: Context): Unit = ()
3333
}
34-
}
3534

35+
type ErrorHandler = (MessageContainer, Context) => Unit
36+
37+
private val defaultIncompleteHandler: ErrorHandler =
38+
(mc, ctx) => ctx.reporter.report(mc)(ctx)
39+
}
3640

3741
trait Reporting { this: Context =>
3842

@@ -138,6 +142,7 @@ trait Reporting { this: Context =>
138142
* error messages.
139143
*/
140144
abstract class Reporter extends interfaces.ReporterResult {
145+
import Reporter._
141146

142147
/** Report a diagnostic */
143148
def doReport(m: MessageContainer)(implicit ctx: Context): Unit
@@ -155,8 +160,8 @@ abstract class Reporter extends interfaces.ReporterResult {
155160
finally _truncationOK = saved
156161
}
157162

158-
type ErrorHandler = MessageContainer => Context => Unit
159-
private[this] var incompleteHandler: ErrorHandler = d => c => report(d)(c)
163+
private[this] var incompleteHandler: ErrorHandler = defaultIncompleteHandler
164+
160165
def withIncompleteHandler[T](handler: ErrorHandler)(op: => T): T = {
161166
val saved = incompleteHandler
162167
incompleteHandler = handler
@@ -204,7 +209,7 @@ abstract class Reporter extends interfaces.ReporterResult {
204209
}
205210

206211
def incomplete(m: MessageContainer)(implicit ctx: Context): Unit =
207-
incompleteHandler(m)(ctx)
212+
incompleteHandler(m, ctx)
208213

209214
/** Summary of warnings and errors */
210215
def summary: String = {

compiler/src/dotty/tools/repl/ParseResult.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ object ParseResult {
157157
case _ => {
158158
val reporter = newStoreReporter
159159
var needsMore = false
160-
reporter.withIncompleteHandler(_ => _ => needsMore = true) {
160+
reporter.withIncompleteHandler((_, _) => needsMore = true) {
161161
parseStats(sourceCode)(ctx.fresh.setReporter(reporter))
162162
!reporter.hasErrors && needsMore
163163
}

0 commit comments

Comments
 (0)