From bd13037f94aaafec11fdf4dc6117a6e529fe1008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Wed, 20 Jul 2022 17:37:58 +0200 Subject: [PATCH 1/3] Fix #15419: Handle Unit parameters with default values in JS types. Both at call site (for native and non-native JS types) and at definition sites (for non-native JS types). Forward port of https://github.com/scala-js/scala-js/commit/1de54d7ce714d9ab627417516416a25567bf193e --- compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala | 10 +++++++++- .../src/dotty/tools/backend/sjs/JSExportsGen.scala | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala b/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala index 745e53693c83..96608a565adc 100644 --- a/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala +++ b/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala @@ -1829,7 +1829,15 @@ class JSCodeGen()(using genCtx: Context) { } case Block(stats, expr) => - js.Block(stats.map(genStat) :+ genStatOrExpr(expr, isStat)) + // #15419 Collapse { ; BoxedUnit } to + val genStatsAndExpr0 = stats.map(genStat(_)) :+ genStatOrExpr(expr, isStat) + val genStatsAndExpr = genStatsAndExpr0 match { + case (undefParam @ js.Transient(UndefinedParam)) :: js.Undefined() :: Nil => + undefParam :: Nil + case _ => + genStatsAndExpr0 + } + js.Block(genStatsAndExpr) case Typed(expr, _) => expr match { diff --git a/compiler/src/dotty/tools/backend/sjs/JSExportsGen.scala b/compiler/src/dotty/tools/backend/sjs/JSExportsGen.scala index a163915d8d75..0884ec19b53e 100644 --- a/compiler/src/dotty/tools/backend/sjs/JSExportsGen.scala +++ b/compiler/src/dotty/tools/backend/sjs/JSExportsGen.scala @@ -761,7 +761,7 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) { // Pass previous arguments to defaultGetter val defaultGetterArgs = previousArgsValues(defaultGetter.info.paramInfoss.head.size) - if (targetSym.isJSType) { + val callGetter = if (targetSym.isJSType) { if (defaultGetter.owner.isNonNativeJSClass) { if (defaultGetter.hasAnnotation(jsdefn.JSOptionalAnnot)) js.Undefined() @@ -784,6 +784,12 @@ final class JSExportsGen(jsCodeGen: JSCodeGen)(using Context) { } else { genApplyMethod(targetTree, defaultGetter, defaultGetterArgs) } + + // #15419 If the getter returns void, we must "box" it by returning undefined + if (callGetter.tpe == jstpe.NoType) + js.Block(callGetter, js.Undefined()) + else + callGetter } private def targetSymForDefaultGetter(sym: Symbol): Symbol = From 52fda90c6b3b01b13cc3b94188fec64a8c427323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 21 Jul 2022 11:24:50 +0200 Subject: [PATCH 2/3] Use a temporary fork of play-json that upgrades to Scala.js 1.10.1. This cherry-picks recent commits from play-json's main, to support Scala.js 1.10.1. --- community-build/community-projects/play-json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community-build/community-projects/play-json b/community-build/community-projects/play-json index 8a221e6465b5..1ca0fab05b44 160000 --- a/community-build/community-projects/play-json +++ b/community-build/community-projects/play-json @@ -1 +1 @@ -Subproject commit 8a221e6465b5139f46e63dd20957e5dcb2c73019 +Subproject commit 1ca0fab05b449580dc591da32bfce680e2e0705e From ad8eaf71a42f5e4db10dd697039236e5bbadf797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Wed, 20 Jul 2022 17:46:32 +0200 Subject: [PATCH 3/3] Upgrade to Scala.js 1.10.1. It is fine to do this in a patch version, because * The IR version was not changed in 1.10.x. * There was no change in the scalajs-library API. --- project/Build.scala | 1 + project/plugins.sbt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index fb5dabf25080..453b34901807 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1220,6 +1220,7 @@ object Build { ++ (dir / "js/src/test/require-2.12" ** "*.scala").get ++ (dir / "js/src/test/require-sam" ** "*.scala").get ++ (dir / "js/src/test/scala-new-collections" ** "*.scala").get + ++ (dir / "js/src/test/require-no-modules" ** "*.scala").get ) }, ) diff --git a/project/plugins.sbt b/project/plugins.sbt index bb43d75d44da..b6bc5f1184b6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,7 +2,7 @@ // // e.g. addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.1.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.9.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.10")