Scala.js 1.4.0 breaks linking of fields with type Nothing
See original GitHub issueThis Scala 3 code compiles and links using ScalaJS 1.3.1 and the latest Dotty nightly build, but fails to link using ScalaJS 1.4.0:
package problem
object Other:
lazy val a = "hello"
// this line causes linking to fail with ScalaJS 1.4.0, but not with 1.3.1
lazy val b = ???
object Main:
val view = Other.a
def main(args: Array[String]): Unit = ()
Output of Sbt build using ScalaJS 1.4.0 under Windows 10 20H2:
[info] welcome to sbt 1.4.6 (AdoptOpenJDK Java 11.0.9)
[info] loading global plugins from C:\Users\djn\.sbt\1.0\plugins
[info] loading settings for project muve-build from plugins.sbt ...
[info] loading project definition from C:\Git\Muve\project
[info] loading settings for project muve from build.sbt ...
Fetching latest Dotty nightly version...
Latest Dotty nightly build version: 3.0.0-RC1-bin-20210111-0f1d350-NIGHTLY
[info] set current project to ScalaJS Linker Problem (in build file:/C:/Git/Muve/)
[info] sbt server started at local:sbt-server-23257b54281723eb2d64
[info] started sbt server
sbt:ScalaJS Linker Problem> clean
[success] Total time: 0 s, completed 13 Jan 2021, 00:32:35
sbt:ScalaJS Linker Problem> fastLinkJS
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[info] compiling 1 Scala source to C:\Git\Muve\target\scala-3.0.0-RC1\classes ...
[info] Fast optimizing C:\Git\Muve\target\scala-3.0.0-RC1\scalajs-linker-problem-fastopt
[error] stack trace is suppressed; run last Compile / fastLinkJS for the full output
[error] (Compile / fastLinkJS) java.lang.IllegalArgumentException: cannot generate a zero for NothingType
[error] Total time: 6 s, completed 13 Jan 2021, 00:32:43
Full exception output:
sbt:ScalaJS Linker Problem> last Compile / fastLinkJS
[info] Fast optimizing C:\Git\Muve\target\scala-3.0.0-RC1\scalajs-linker-problem-fastopt
[debug] Linker: Compute reachability: 130613 us
[debug] Linker: Assemble LinkedClasses: 14873 us
[debug] Linker: 189468 us
[debug] Optimizer: Batch mode: true
[debug] Optimizer: Incremental part: 52768 us
[debug] Optimizer: Optimizing 211 methods.
[debug] Optimizer: Optimizer part: 144326 us
[debug] Optimizer: 201273 us
[debug] Refiner: Compute reachability: 17781 us
[debug] Refiner: Assemble LinkedClasses: 2146 us
[debug] Refiner: 103948 us
[debug] Module Splitter: Calculate Dependency Info: 3563 us
[debug] Module Splitter: Analyze Modules: 793 us
[debug] Module Splitter: Assemble Modules: 7452 us
[debug] Module Splitter: 13887 us
[debug] Emitter: Class tree cache stats: reused: 0 -- invalidated: 9
[debug] Emitter: Method tree cache stats: reused: 0 -- invalidated: 11
[error] java.lang.IllegalArgumentException: cannot generate a zero for NothingType
[error] at org.scalajs.linker.backend.emitter.SJSGen.genZeroOfPrim(SJSGen.scala:79)
[error] at org.scalajs.linker.backend.emitter.SJSGen.genZeroOf(SJSGen.scala:48)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.$anonfun$genFieldDefsOfScalaClass$2(ClassEmitter.scala:407)
[error] at scala.collection.TraversableLike$WithFilter.$anonfun$map$2(TraversableLike.scala:874)
[error] at scala.collection.immutable.List.foreach(List.scala:431)
[error] at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:873)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.genFieldDefsOfScalaClass(ClassEmitter.scala:401)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.$anonfun$genJSConstructorFun$1(ClassEmitter.scala:351)
[error] at scala.collection.immutable.List.flatMap(List.scala:366)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.genJSConstructorFun(ClassEmitter.scala:350)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.genES5Constructor(ClassEmitter.scala:225)
[error] at org.scalajs.linker.backend.emitter.ClassEmitter.genConstructor(ClassEmitter.scala:186)
[error] at org.scalajs.linker.backend.emitter.Emitter.$anonfun$genClass$10(Emitter.scala:438)
[error] at org.scalajs.linker.backend.emitter.Emitter$MethodCache.getOrElseUpdate(Emitter.scala:668)
[error] at org.scalajs.linker.backend.emitter.Emitter.genClass(Emitter.scala:438)
[error] at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$4(Emitter.scala:180)
[error] at scala.collection.immutable.List.map(List.scala:297)
[error] at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$2(Emitter.scala:180)
[error] at scala.collection.immutable.List.map(List.scala:293)
[error] at org.scalajs.linker.backend.emitter.Emitter.$anonfun$emitOnce$1(Emitter.scala:177)
[error] at org.scalajs.logging.Logger.time(Logger.scala:42)
[error] at org.scalajs.logging.Logger.time$(Logger.scala:40)
[error] at org.scalajs.sbtplugin.Loggers$SbtLoggerWrapper.time(Loggers.scala:19)
[error] at org.scalajs.linker.backend.emitter.Emitter.emitOnce(Emitter.scala:181)
[error] at org.scalajs.linker.backend.emitter.Emitter.emitAvoidGlobalClash(Emitter.scala:151)
[error] at org.scalajs.linker.backend.emitter.Emitter.emitInternal(Emitter.scala:127)
[error] at org.scalajs.linker.backend.emitter.Emitter.emit(Emitter.scala:79)
[error] at org.scalajs.linker.backend.BasicLinkerBackend.$anonfun$emit$1(BasicLinkerBackend.scala:57)
[error] at org.scalajs.logging.Logger.time(Logger.scala:42)
[error] at org.scalajs.logging.Logger.time$(Logger.scala:40)
[error] at org.scalajs.sbtplugin.Loggers$SbtLoggerWrapper.time(Loggers.scala:19)
[error] at org.scalajs.linker.backend.BasicLinkerBackend.emit(BasicLinkerBackend.scala:57)
[error] at org.scalajs.linker.standard.StandardLinkerImpl.$anonfun$link$2(StandardLinkerImpl.scala:47)
[error] at scala.concurrent.Future.$anonfun$flatMap$1(Future.scala:307)
[error] at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
[error] at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
[error] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
[error] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
[error] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
[error] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
[error] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
[error] (Compile / fastLinkJS) java.lang.IllegalArgumentException: cannot generate a zero for NothingType
Sbt, JDK, and Dotty versions are shown in the above output. Other relevant files are shown below:
plugins.sbt
:
addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.5.1")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.4.0")
build.sbt
:
enablePlugins(ScalaJSPlugin)
name := "ScalaJS Linker Problem"
scalaVersion := dottyLatestNightlyBuild.get
scalaJSUseMainModuleInitializer := true
Issue Analytics
- State:
- Created 3 years ago
- Comments:7 (7 by maintainers)
Top Results From Across the Web
Announcing Scala.js 1.5.0
Notably, this allows to declare types for JS functions with varargs. ... #4370 Scala.js 1.4.0 breaks linking of fields with type Nothing ......
Read more >Unexpected error when compiling root after upgrading to 1.4.0
I killed the bloop process listed by ps aux | grep bloop. I removed the .bloop folder. I ran sbt bloopInstall on a...
Read more >Hands-on Scala.js - Haoyi's Programming Blog
js is a compiler that compiles Scala source code to equivalent Javascript code. That lets you write Scala code that you can run...
Read more >IO tools (text, CSV, HDF5, …) — pandas 1.5.2 documentation
Deprecated since version 1.4.0: Append .squeeze("columns") to the call to {func_name} to squeeze ... dtypeType name or dict of column -> type, default...
Read more >Backbone.js
Backbone.js gives structure to web applications by providing models with ... In a finished Backbone app, you don't have to write the glue...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Workaround
Give an appropriate explicit type to the
lazy val
if its rhs makes it infer asNothing
:Thank you for the report!