From 6d072557808220d3eedb9209cc2b90d29b34357a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Doeraene?= Date: Thu, 25 Jan 2024 14:51:03 +0100 Subject: [PATCH] Do not put `O` (`jl.Object`) in the `ancestors` dictionaries. It is never read, because all the functions that would read it are special-cased, so these are wasted bytes. --- .../org/scalajs/linker/backend/emitter/ClassEmitter.scala | 2 +- .../org/scalajs/linker/backend/emitter/CoreJSLib.scala | 3 +-- .../test/scala/org/scalajs/linker/LibrarySizeTest.scala | 6 +++--- project/Build.scala | 8 ++++---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala b/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala index 144672a471..ad953d86ef 100644 --- a/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala +++ b/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/ClassEmitter.scala @@ -865,7 +865,7 @@ private[emitter] final class ClassEmitter(sjsGen: SJSGen) { } val ancestorsRecord = js.ObjectConstr( - ancestors.map(ancestor => (js.Ident(genName(ancestor)), js.IntLiteral(1)))) + ancestors.withFilter(_ != ObjectClass).map(ancestor => (js.Ident(genName(ancestor)), js.IntLiteral(1)))) val isInstanceFunWithGlobals: WithGlobals[js.Tree] = { if (globalKnowledge.isAncestorOfHijackedClass(className)) { diff --git a/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/CoreJSLib.scala b/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/CoreJSLib.scala index 8a04956ad8..6bfac4a983 100644 --- a/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/CoreJSLib.scala +++ b/linker/shared/src/main/scala/org/scalajs/linker/backend/emitter/CoreJSLib.scala @@ -1687,7 +1687,6 @@ private[emitter] object CoreJSLib { else Skip(), privateFieldSet("ancestors", ObjectConstr(List( - Ident(genName(ObjectClass)) -> 1, Ident(genName(CloneableClass)) -> 1, Ident(genName(SerializableClass)) -> 1 ))), @@ -2066,7 +2065,7 @@ private[emitter] object CoreJSLib { extractWithGlobals( globalVarDef(VarField.d, ObjectClass, New(globalVar(VarField.TypeData, CoreVar), Nil))) ::: List( - privateFieldSet("ancestors", ObjectConstr(List((Ident(genName(ObjectClass)) -> 1)))), + privateFieldSet("ancestors", ObjectConstr(Nil)), privateFieldSet("arrayEncodedName", str("L" + fullName + ";")), privateFieldSet("isAssignableFromFun", { genArrowFunction(paramList(that), { diff --git a/linker/shared/src/test/scala/org/scalajs/linker/LibrarySizeTest.scala b/linker/shared/src/test/scala/org/scalajs/linker/LibrarySizeTest.scala index 9dcc074647..aa851ca438 100644 --- a/linker/shared/src/test/scala/org/scalajs/linker/LibrarySizeTest.scala +++ b/linker/shared/src/test/scala/org/scalajs/linker/LibrarySizeTest.scala @@ -70,9 +70,9 @@ class LibrarySizeTest { ) testLinkedSizes( - expectedFastLinkSize = 150339, - expectedFullLinkSizeWithoutClosure = 130884, - expectedFullLinkSizeWithClosure = 21394, + expectedFastLinkSize = 150063, + expectedFullLinkSizeWithoutClosure = 130664, + expectedFullLinkSizeWithClosure = 21325, classDefs, moduleInitializers = MainTestModuleInitializers ) diff --git a/project/Build.scala b/project/Build.scala index 758975e8f0..f9d72c08e0 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1967,16 +1967,16 @@ object Build { scalaVersion.value match { case `default212Version` => Some(ExpectedSizes( - fastLink = 770000 to 771000, - fullLink = 145000 to 146000, + fastLink = 768000 to 769000, + fullLink = 144000 to 145000, fastLinkGz = 90000 to 91000, fullLinkGz = 35000 to 36000, )) case `default213Version` => Some(ExpectedSizes( - fastLink = 479000 to 480000, - fullLink = 102000 to 103000, + fastLink = 478000 to 479000, + fullLink = 101000 to 102000, fastLinkGz = 62000 to 63000, fullLinkGz = 27000 to 28000, ))