A crash occurs when the following code is _the first line_ entered into the REPL:
scala> for case Some(i) <- Option(0).filter(_ != 1) yield i
Exception in thread "main" java.lang.NullPointerException
Stack trace
Exception in thread "main" java.lang.NullPointerException
at dotty.tools.dotc.core.NameKinds$UniqueNameKind.fresh(NameKinds.scala:218)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2202)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$7(Parsers.scala:2169)
at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2153)
at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2014)
at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1888)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$5(Parsers.scala:1867)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$8(Parsers.scala:2320)
at dotty.tools.dotc.parsing.Parsers$Parser.tokenSeparated(Parsers.scala:601)
at dotty.tools.dotc.parsing.Parsers$Parser.commaSeparated(Parsers.scala:609)
at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs$$anonfun$1(Parsers.scala:2306)
at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:569)
at dotty.tools.dotc.parsing.Parsers$Parser.inParens(Parsers.scala:576)
at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs(Parsers.scala:2307)
at dotty.tools.dotc.parsing.Parsers$Parser.argumentExprs(Parsers.scala:2313)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2261)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2254)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2262)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2246)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$7(Parsers.scala:2169)
at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2153)
at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2014)
at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1888)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:1869)
at dotty.tools.dotc.parsing.Parsers$Parser.subPart(Parsers.scala:646)
at dotty.tools.dotc.parsing.Parsers$Parser.subExpr(Parsers.scala:1871)
at dotty.tools.dotc.parsing.Parsers$Parser.generatorRest(Parsers.scala:2443)
at dotty.tools.dotc.parsing.Parsers$Parser.generator(Parsers.scala:2434)
at dotty.tools.dotc.parsing.Parsers$Parser.enumerators(Parsers.scala:2405)
at dotty.tools.dotc.parsing.Parsers$Parser.$anonfun$39(Parsers.scala:2499)
at dotty.tools.dotc.parsing.Parsers$Parser.inSepRegion(Parsers.scala:613)
at dotty.tools.dotc.parsing.Parsers$Parser.forExpr$$anonfun$1(Parsers.scala:2499)
at dotty.tools.dotc.parsing.Scanners$Scanner.endMarkerScope(Scanners.scala:338)
at dotty.tools.dotc.parsing.Parsers$Parser.forExpr(Parsers.scala:2527)
at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:1984)
at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1888)
at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq$$anonfun$1(Parsers.scala:3888)
at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:510)
at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq(Parsers.scala:3900)
at dotty.tools.dotc.parsing.Parsers$Parser.block(Parsers.scala:2378)
at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr$$anonfun$1(Parsers.scala:2370)
at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:569)
at dotty.tools.dotc.parsing.Parsers$Parser.inBraces(Parsers.scala:577)
at dotty.tools.dotc.parsing.Parsers$Parser.inBracesOrIndented(Parsers.scala:590)
at dotty.tools.dotc.parsing.Parsers$Parser.inDefScopeBraces(Parsers.scala:594)
at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr(Parsers.scala:2371)
at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2211)
at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$7(Parsers.scala:2169)
at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2153)
at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2014)
at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1888)
at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq$$anonfun$1(Parsers.scala:3888)
at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:510)
at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq(Parsers.scala:3900)
at dotty.tools.repl.ParseResult$.parseStats(ParseResult.scala:113)
at dotty.tools.repl.ParseResult$.isIncomplete$$anonfun$2(ParseResult.scala:165)
at dotty.tools.dotc.reporting.Reporter.withIncompleteHandler(Reporter.scala:221)
at dotty.tools.repl.ParseResult$.isIncomplete(ParseResult.scala:166)
at dotty.tools.repl.JLineTerminal$Parser.acceptLine$1(JLineTerminal.scala:130)
at dotty.tools.repl.JLineTerminal$Parser.parse(JLineTerminal.scala:134)
at org.jline.reader.impl.LineReaderImpl.acceptLine(LineReaderImpl.java:2731)
at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:585)
at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:404)
at dotty.tools.repl.JLineTerminal.readLine(JLineTerminal.scala:68)
at dotty.tools.repl.ReplDriver.readLine$1(ReplDriver.scala:115)
at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:125)
at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:130)
at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:148)
at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:130)
at dotty.tools.repl.Main$.main(Main.scala:6)
at dotty.tools.repl.Main.main(Main.scala)
The same crash occurs with multi-line editing as follows:
scala> for
| case Some(i) <- Option(0).filter(_ != 1)
Exception in thread "main" java.lang.NullPointerException
As far as I can tell, entering a single line beforehand stops the crash from happening:
scala> 5
val res0: Int = 5
scala> for case Some(i) <- Option(0).filter(_ != 1) yield i
1 |for case Some(i) <- Option(0).filter(_ != 1) yield i
| ^^^^^^^
| cannot test if value types are references
scala>
Sounds like a duplicate of #7934
Most helpful comment
Sounds like a duplicate of #7934