Skip to content

Commit 996ba6b

Browse files
committed
Introduce option not to display definitions in repl driver
The reason for this change is that currently, statements in the JSR223 script engine are evaluated twice. Once when the "run" method is called, and once when the value of the result is extracted. The first one needs not be, it exists solely due to displayDefinitions being called. If we put it behind a flag, the problem is solved.
1 parent 13da159 commit 996ba6b

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ case class State(objectIndex: Int,
5353
/** Main REPL instance, orchestrating input, compilation and presentation */
5454
class ReplDriver(settings: Array[String],
5555
out: PrintStream = Console.out,
56-
classLoader: Option[ClassLoader] = None) extends Driver {
56+
classLoader: Option[ClassLoader] = None,
57+
display: Boolean = true) extends Driver {
5758

5859
/** Overridden to `false` in order to not have to give sources on the
5960
* commandline
@@ -227,7 +228,10 @@ class ReplDriver(settings: Array[String],
227228

228229
val warnings = newState.context.reporter.removeBufferedMessages(newState.context)
229230
displayErrors(warnings)(newState) // display warnings
230-
displayDefinitions(unit.tpdTree, newestWrapper)(newStateWithImports)
231+
if (display)
232+
displayDefinitions(unit.tpdTree, newestWrapper)(newStateWithImports)
233+
else
234+
newStateWithImports
231235
}
232236
)
233237
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import dotc.core.StdNames.str
1717
* println(e.eval("42"))
1818
*/
1919
class ScriptEngine extends AbstractScriptEngine {
20-
private[this] val driver = new ReplDriver(Array("-usejavacp", "-color:never"), Console.out, None)
20+
private[this] val driver = new ReplDriver(Array("-usejavacp", "-color:never"), Console.out, None, false)
2121
private[this] val rendering = new Rendering
2222
private[this] var state: State = driver.initialState
2323

sbt-bridge/src/xsbt/ConsoleInterface.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void run(
4040
completeArgsList.add(classpathString);
4141
String[] completeArgs = completeArgsList.toArray(args);
4242

43-
ReplDriver driver = new ReplDriver(completeArgs, System.out, Some.apply(loader));
43+
ReplDriver driver = new ReplDriver(completeArgs, System.out, Some.apply(loader), true);
4444

4545
State state = driver.initialState();
4646
assert bindNames.length == bindValues.length;

0 commit comments

Comments
 (0)