Skip to content

Commit e4241d5

Browse files
committed
Only evaluate side-effecty expression once
1 parent 1efb41a commit e4241d5

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

repl/src/dotty/tools/repl/render.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ import dotc.core.Symbols.Symbol
1212
object Rendering {
1313
/** Load the value of the symbol using reflection */
1414
private[this] def valueOf(sym: Symbol, classLoader: ClassLoader)(implicit ctx: Context): String = {
15+
val defn = ctx.definitions
1516
val objectName = sym.owner.fullName.encode.toString
1617
val resObj: Class[_] = Class.forName(objectName, true, classLoader)
17-
val objInstance = resObj.newInstance()
18-
objInstance
19-
.getClass()
20-
.getDeclaredMethods.find(_.getName == sym.name.encode.toString).get
21-
.invoke(objInstance).toString
18+
19+
if (!sym.is(Flags.Method) && sym.info == defn.UnitType) "()"
20+
else {
21+
resObj
22+
.getDeclaredMethods.find(_.getName == sym.name.encode.toString).get
23+
.invoke(null).toString
24+
}
2225
}
2326

2427
def renderMethod(d: Denotation)(implicit ctx: Context): String = {

0 commit comments

Comments
 (0)