Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash in REPL when for-case is used #8098

Closed
abgruszecki opened this issue Jan 27, 2020 · 1 comment
Closed

Crash in REPL when for-case is used #8098

abgruszecki opened this issue Jan 27, 2020 · 1 comment

Comments

@abgruszecki
Copy link
Contributor

Minimized code

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> 
@joroKr21
Copy link
Member

Sounds like a duplicate of #7934

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants