Skip to content

Instantly share code, notes, and snippets.

@bblfish
Last active December 11, 2015 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bblfish/4673272 to your computer and use it in GitHub Desktop.
Save bblfish/4673272 to your computer and use it in GitHub Desktop.
This code crahes the scala 2.10.0 compiler on OSX with java "1.7.0_11"
//Using library from "net.sf.uadetector" % "uadetector-resources" % "2012.12"
import net.sf.uadetector.service._
import net.sf.uadetector.UserAgentFamily._
import net.sf.uadetector.UserAgent
val agentParser = UADetectorServiceFactory.getResourceModuleParser
val UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.45 Safari/53.22"
val agent = agentParser.parse(UA)
//this must function crashes the compiler. getFamily returns a java Enum
def must(agent: UserAgent) = agent.getFamily() match {
case CURL => true
case JAVA => true
case SAFARI => true
case OPERA => true
case _ => false
}
running last bit in the console creates the following error:
// Exiting paste mode, now interpreting.
error:
while compiling: <console>
during phase: patmat
library version: version 2.10.0
compiler version: version 2.10.0
reconstructed args: -encoding utf8 -deprecation -bootclasspath /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/lib/JObjC.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/classes:/Volumes/Dev/Programming/Scala/rww-play/Play20/framework/sbt/boot/scala-2.10.0/lib/scala-library.jar -classpath /Volumes/Dev/Programming/Scala/rww-play/lib/WebID.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/local/play/play_2.10/2.1-SNAPSHOT/jars/play_2.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/local/play/sbt-link/2.1-SNAPSHOT/jars/sbt-link.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.javassist/javassist/jars/javassist-3.16.1-GA.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/local/play/play-exceptions/2.1-SNAPSHOT/jars/play-exceptions.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/local/play/templates_2.10/2.1-SNAPSHOT/jars/templates_2.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.github.scala-incubator.io/scala-io-file_2.10/jars/scala-io-file_2.10-0.4.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.github.scala-incubator.io/scala-io-core_2.10/jars/scala-io-core_2.10-0.4.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.jsuereth/scala-arm_2.10/jars/scala-arm_2.10-1.3.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scala-stm/scala-stm_2.10.0/jars/scala-stm_2.10.0-0.6.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.typesafe/config/bundles/config-1.0.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/io.netty/netty/bundles/netty-3.5.9.Final.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.slf4j/jul-to-slf4j/jars/jul-to-slf4j-1.6.6.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.6.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/ch.qos.logback/logback-core/jars/logback-core-1.0.7.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.0.7.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.typesafe.akka/akka-actor_2.10/bundles/akka-actor_2.10-2.1.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.typesafe.akka/akka-slf4j_2.10/bundles/akka-slf4j_2.10-2.1.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/joda-time/joda-time/jars/joda-time-2.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.joda/joda-convert/jars/joda-convert-1.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.commons/commons-lang3/jars/commons-lang3-3.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.ning/async-http-client/jars/async-http-client-1.7.6.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/oauth.signpost/signpost-core/jars/signpost-core-1.2.1.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/oauth.signpost/signpost-commonshttp4/jars/signpost-commonshttp4-1.2.1.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.codehaus.jackson/jackson-core-asl/jars/jackson-core-asl-1.9.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.codehaus.jackson/jackson-mapper-asl/jars/jackson-mapper-asl-1.9.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/net.sf.ehcache/ehcache-core/jars/ehcache-core-2.6.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/javax.transaction/jta/jars/jta-1.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scalatest/scalatest_2.10.0-RC5/jars/scalatest_2.10.0-RC5-2.0.M5-B1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.w3/banana-jena_2.10/jars/banana-jena_2.10-2013_01_16-SNAPSHOT.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.w3/banana-rdf_2.10/jars/banana-rdf_2.10-2013_01_16-SNAPSHOT.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.github.scala-incubator.io/scala-io-core_2.10.0-RC1/jars/scala-io-core_2.10.0-RC1-0.4.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.jsuereth/scala-arm_2.10.0-RC1/jars/scala-arm_2.10.0-RC1-1.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.github.scala-incubator.io/scala-io-file_2.10.0-RC1/jars/scala-io-file_2.10.0-RC1-0.4.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scalaz/scalaz-core_2.10/bundles/scalaz-core_2.10-7.0.0-M7.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.jena/jena-arq/jars/jena-arq-2.9.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.jena/jena-core/jars/jena-core-2.7.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.jena/jena-iri/jars/jena-iri-0.9.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.4.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/log4j/log4j/bundles/log4j-1.2.16.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/xerces/xercesImpl/jars/xercesImpl-2.10.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/xml-apis/xml-apis/jars/xml-apis-1.4.01.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/commons-codec/commons-codec/jars/commons-codec-1.5.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.1.2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.httpcomponents/httpcore/jars/httpcore-4.1.3.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.apache.jena/jena-tdb/jars/jena-tdb-0.9.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.fasterxml/aalto-xml/bundles/aalto-xml-0.9.7.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.codehaus.woodstox/stax2-api/jars/stax2-api-3.0.3.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/javax.xml.stream/stax-api/jars/stax-api-1.0-2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.w3/banana-sesame_2.10/jars/banana-sesame_2.10-2013_01_16-SNAPSHOT.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-sail-memory/jars/sesame-sail-memory-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-sail-api/jars/sesame-sail-api-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-query/jars/sesame-query-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-model/jars/sesame-model-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-util/jars/sesame-util-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-rio-api/jars/sesame-rio-api-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryalgebra-model/jars/sesame-queryalgebra-model-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-sail-inferencer/jars/sesame-sail-inferencer-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryparser-api/jars/sesame-queryparser-api-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryalgebra-evaluation/jars/sesame-queryalgebra-evaluation-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-repository-sparql/jars/sesame-repository-sparql-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-repository-api/jars/sesame-repository-api-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-http-client/jars/sesame-http-client-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-http-protocol/jars/sesame-http-protocol-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-rio-ntriples/jars/sesame-rio-ntriples-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryresultio-api/jars/sesame-queryresultio-api-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/commons-httpclient/commons-httpclient/jars/commons-httpclient-3.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryresultio-sparqlxml/jars/sesame-queryresultio-sparqlxml-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-sail-nativerdf/jars/sesame-sail-nativerdf-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-rio-turtle/jars/sesame-rio-turtle-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-rio-rdfxml/jars/sesame-rio-rdfxml-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryparser-sparql/jars/sesame-queryparser-sparql-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryresultio-sparqljson/jars/sesame-queryresultio-sparqljson-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-repository-sail/jars/sesame-repository-sail-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.openrdf.sesame/sesame-queryparser-serql/jars/sesame-queryparser-serql-2.6.10.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.w3/plantain_2.10/jars/plantain_2.10-2013_01_16-SNAPSHOT.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.typesafe.akka/akka-transactor_2.10/bundles/akka-transactor_2.10-2.1.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scala-stm/scala-stm_2.10/jars/scala-stm_2.10-0.7.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/play/play-iteratees_2.10/jars/play-iteratees_2.10-2.1-RC2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/net.rootdev/java-rdfa/bundles/java-rdfa-0.4.2-RC2.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.hp.hpl.jena/iri/jars/iri-0.8.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/com.ibm.icu/icu4j/jars/icu4j-3.4.4.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/nu.validator.htmlparser/htmlparser/jars/htmlparser-1.2.1.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.bouncycastle/bcprov-jdk15on/jars/bcprov-jdk15on-1.47.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/org.scala-lang/scala-actors/jars/scala-actors-2.10.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/net.sf.uadetector/uadetector-resources/bundles/uadetector-resources-2012.12.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/repository/cache/net.sf.uadetector/uadetector-core/bundles/uadetector-core-0.9.0.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/framework/sbt/boot/scala-2.10.0/lib/scala-compiler.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/framework/sbt/boot/scala-2.10.0/lib/jline.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/framework/sbt/boot/scala-2.10.0/lib/scala-reflect.jar:/Volumes/Dev/Programming/Scala/rww-play/Play20/framework/sbt/boot/scala-2.10.0/lib/jansi.jar -unchecked -Yrepl-sync
last tree to typer: TypeTree(class Boolean)
symbol: class Boolean in package scala (flags: final abstract)
symbol definition: final abstract class Boolean extends AnyVal
tpe: Boolean
symbol owners: class Boolean -> package scala
context owners: value agent -> method must -> object $iw -> object $iw -> object $iw -> object $iw -> object $iw -> object $iw -> object $read -> package $line35
== Enclosing template or block ==
DefDef( // def must(agent: net.sf.uadetector.UserAgent): Boolean
<method>
"must"
[]
// 1 parameter list
ValDef( // agent: net.sf.uadetector.UserAgent
<param> <triedcooking>
"agent"
<tpt> // tree.tpe=net.sf.uadetector.UserAgent
<empty>
)
<tpt> // tree.tpe=Boolean
Match( // tree.tpe=Boolean
Apply( // def getFamily(): net.sf.uadetector.UserAgentFamily in class UserAgent, tree.tpe=net.sf.uadetector.UserAgentFamily
"agent"."getFamily" // def getFamily(): net.sf.uadetector.UserAgentFamily in class UserAgent, tree.tpe=()net.sf.uadetector.UserAgentFamily
Nil
)
// 5 cases
CaseDef( // tree.tpe=Boolean(true)
CURL
true
)
CaseDef( // tree.tpe=Boolean(true)
JAVA
true
)
CaseDef( // tree.tpe=Boolean(true)
SAFARI
true
)
CaseDef( // tree.tpe=Boolean(true)
OPERA
true
)
CaseDef( // tree.tpe=Boolean(false)
"_" // tree.tpe=net.sf.uadetector.UserAgentFamily
false
)
)
)
== Expanded type of tree ==
TypeRef(TypeSymbol(final abstract class Boolean extends AnyVal))
uncaught exception during compilation: java.lang.StackOverflowError
java.lang.StackOverflowError
at scala.tools.nsc.typechecker.PatternMatching$Logic$And.equals(PatternMatching.scala:1901)
at scala.tools.nsc.typechecker.PatternMatching$Logic$And.equals(PatternMatching.scala:1901)
at scala.tools.nsc.typechecker.PatternMatching$Logic$And.equals(PatternMatching.scala:1901)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment