From faec4680d94716e895bb0c2181a7ca8f4bb9682c Mon Sep 17 00:00:00 2001 From: Ben Elliott Date: Sun, 6 Oct 2019 20:36:32 -0600 Subject: [PATCH] Partial fix for lampepfl#7113: Fix Scala.js codegen for Null/Nothing types - Fix the encoding of the `NullClass` and `NothingClass` in `JSEncoding` to correctly map to the corresponding Scala.js IR Symbols - Enable the `javalib/net/URITest` for Scala.js, which uses default arguments with `null` values, which in turn are used as the return type of the default getters. --- .../src/dotty/tools/backend/sjs/JSEncoding.scala | 13 +++++++++++-- project/Build.scala | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/compiler/src/dotty/tools/backend/sjs/JSEncoding.scala b/compiler/src/dotty/tools/backend/sjs/JSEncoding.scala index 38d79db76d2c..038b51906479 100644 --- a/compiler/src/dotty/tools/backend/sjs/JSEncoding.scala +++ b/compiler/src/dotty/tools/backend/sjs/JSEncoding.scala @@ -398,8 +398,17 @@ object JSEncoding { paramAndResultTypeNames.mkString(SignatureSep, SignatureSep, "") /** Computes the internal name for a type. */ - private def internalName(tpe: Type)(implicit ctx: Context): String = - encodeTypeRef(toTypeRef(tpe)) + private def internalName(tpe: Type)(implicit ctx: Context): String = { + val typeRef = toTypeRef(tpe) + + val safeTypeRef: jstpe.TypeRef = typeRef match { + case jstpe.ClassRef("s_Null") => jstpe.ClassRef(ir.Definitions.NullClass) + case jstpe.ClassRef("s_Nothing") => jstpe.ClassRef(ir.Definitions.NothingClass) + case otherTypeRef => otherTypeRef + } + + encodeTypeRef(safeTypeRef) + } /** Encodes a [[Types.TypeRef]], such as in an encoded method signature. */ diff --git a/project/Build.scala b/project/Build.scala index b0b86a1d3d34..afb120f27241 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -981,7 +981,7 @@ object Build { ++ (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/io" ** (("*.scala": FileFilter) -- "ByteArrayInputStreamTest.scala" -- "ByteArrayOutputStreamTest.scala" -- "DataInputStreamTest.scala" -- "DataOutputStreamTest.scala" -- "InputStreamTest.scala" -- "OutputStreamWriterTest.scala" -- "PrintStreamTest.scala" -- "ReadersTest.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 + ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/net" ** "*.scala").get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/security" ** "*.scala").get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/util/regex" ** "*.scala").get ++ (dir / "shared/src/test/scala/org/scalajs/testsuite/javalib/util/concurrent" ** (("*.scala": FileFilter) -- "ConcurrentHashMapTest.scala" -- "ConcurrentLinkedQueueTest.scala" -- "ConcurrentMapTest.scala" -- "ConcurrentSkipListSetTest.scala" -- "CopyOnWriteArrayListTest.scala")).get