From 5980f3ef7a1cf4ea59c719783f65d6d186f0a182 Mon Sep 17 00:00:00 2001 From: Ben Elliott Date: Sat, 12 Oct 2019 19:36:13 -0600 Subject: [PATCH] Partial fix for lampepfl#7113: Fix Scala.js codegen for BoxedUnit.TYPE - `scala.runtime.BoxedUnit.TYPE` is now intercepted by `JSCodeGen` as a primitive for `ClassOf(ClassRef("V"))`, which Scala.js recognizes as `java.lang.Void` - Enable the javalib/lang/ClassTest for Scala.js, which contains a test that uses `BoxedUnit.TYPE` --- compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala | 2 ++ compiler/src/dotty/tools/dotc/core/Definitions.scala | 1 + project/Build.scala | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala b/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala index 3d5ce72020f4..edc1c07e3785 100644 --- a/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala +++ b/compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala @@ -2732,6 +2732,8 @@ class JSCodeGen()(implicit ctx: Context) { if (sym == defn.BoxedUnit_UNIT) { js.Undefined() + } else if (sym == defn.BoxedUnit_TYPE) { + js.ClassOf(jstpe.ClassRef("V")) } else { val inst = genLoadModule(sym.owner) val method = encodeStaticMemberSym(sym) diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala index 5d1d25378c86..29ede1a187c2 100644 --- a/compiler/src/dotty/tools/dotc/core/Definitions.scala +++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala @@ -466,6 +466,7 @@ class Definitions { @tu lazy val BoxedUnitClass: ClassSymbol = ctx.requiredClass("scala.runtime.BoxedUnit") def BoxedUnit_UNIT(given Context): TermSymbol = BoxedUnitClass.linkedClass.requiredValue("UNIT") + def BoxedUnit_TYPE(given Context): TermSymbol = BoxedUnitClass.linkedClass.requiredValue("TYPE") @tu lazy val BoxedBooleanClass: ClassSymbol = ctx.requiredClass("java.lang.Boolean") @tu lazy val BoxedByteClass : ClassSymbol = ctx.requiredClass("java.lang.Byte") diff --git a/project/Build.scala b/project/Build.scala index d227cddb3ad4..c36b77a8161c 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -978,7 +978,7 @@ object Build { val dir = fetchScalaJSSource.value / "test-suite" ( (dir / "shared/src/test/scala/org/scalajs/testsuite/compiler" ** (("*.scala":FileFilter) -- "RegressionTest.scala" -- "ReflectiveCallTest.scala")).get - ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/lang" ** (("*.scala": FileFilter) -- "ClassTest.scala" -- "StringTest.scala")).get + ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/lang" ** (("*.scala": FileFilter) -- "StringTest.scala")).get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/io" ** (("*.scala": FileFilter) -- "ByteArrayInputStreamTest.scala" -- "ByteArrayOutputStreamTest.scala" -- "DataInputStreamTest.scala" -- "DataOutputStreamTest.scala" -- "InputStreamTest.scala" -- "OutputStreamWriterTest.scala" -- "PrintStreamTest.scala" -- "CommonStreamsTests.scala")).get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/math" ** "*.scala").get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/net" ** (("*.scala": FileFilter) -- "URITest.scala")).get