com-lihaoyi / upickle

uPickle: a simple, fast, dependency-free JSON & Binary (MessagePack) serialization library for Scala
https://com-lihaoyi.github.io/upickle
MIT License
707 stars 158 forks source link

Failing IR checks #27

Closed japgolly closed 9 years ago

japgolly commented 9 years ago

Hey Haoyi, check this out.

Excerpt of SBT settings in my project which depends on upickle:

    emitSourceMaps in fullOptJS := false,
    checkScalaJSIR in fullOptJS := true,
    inliningMode in fullOptJS := InliningMode.Batch,

And error message:

[info] Direct Optimizing /home/golly/xxxx/target/scala-2.11/xxxx-opt.js
[error] file:/Users/haoyi/Dropbox%20(Personal)/Workspace/upickle/js/shared/main/scala/upickle/Implicits.scala(139:16:Apply): Cannot call Scala method value__T on non-class type NullType
[error] file:/Users/haoyi/Dropbox%20(Personal)/Workspace/upickle/js/shared/main/scala/upickle/Implicits.scala(139:16:Apply): Cannot call Scala method value__T on non-class type NullType
java.lang.RuntimeException: There were 2 IR checking errors.
    at scala.sys.package$.error(package.scala:27)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer.scala$scalajs$tools$optimizer$ScalaJSOptimizer$$checkIR(ScalaJSOptimizer.scala:171)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer$$anonfun$3$$anonfun$apply$1.apply$mcV$sp(ScalaJSOptimizer.scala:106)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer$$anonfun$3$$anonfun$apply$1.apply(ScalaJSOptimizer.scala:105)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer$$anonfun$3$$anonfun$apply$1.apply(ScalaJSOptimizer.scala:105)
    at scala.scalajs.tools.optimizer.IncOptimizer$.logTime(IncOptimizer.scala:731)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer$$anonfun$3.apply(ScalaJSOptimizer.scala:104)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer$$anonfun$3.apply(ScalaJSOptimizer.scala:96)
    at scala.scalajs.tools.optimizer.IncOptimizer$.logTime(IncOptimizer.scala:731)
    at scala.scalajs.tools.optimizer.ScalaJSOptimizer.optimizeIR(ScalaJSOptimizer.scala:96)
    at scala.scalajs.tools.optimizer.ScalaJSClosureOptimizer.directOptimizeIR(ScalaJSClosureOptimizer.scala:88)
    at scala.scalajs.tools.optimizer.ScalaJSClosureOptimizer$$anonfun$directOptimizeCP$1.apply$mcV$sp(ScalaJSClosureOptimizer.scala:74)
    at scala.scalajs.tools.io.CacheUtils$.cached(CacheUtils.scala:41)
    at scala.scalajs.tools.optimizer.ScalaJSClosureOptimizer.directOptimizeCP(ScalaJSClosureOptimizer.scala:67)
    at scala.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$24$$anonfun$apply$6.apply(ScalaJSPluginInternal.scala:241)
    at scala.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$24$$anonfun$apply$6.apply(ScalaJSPluginInternal.scala:240)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:235)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Using sjs 0.5.4, Scala 2.11.2.

lihaoyi commented 9 years ago

Ah, I just saw this too, but haven't managed to reproduce it reliably (it went away after I cleaned). @sjrd do you have any idea what may be causing this? It seems like something's funky with caching since the problem goes away after clean, but I'm not sure.

sjrd commented 9 years ago

Hum, that's the IR checker being too restrictive. The code is actually valid (it is always valid to call any method on NullType, or NothingType for that matter), but the IR checker does not recognize it as such.

@japgolly You should just deactivate the IR checker. I'll fix this in 0.6.0.

sjrd commented 9 years ago

https://github.com/scala-js/scala-js/issues/1123