From 7e46861932a7bc4682eab575d0521bd512ab13d7 Mon Sep 17 00:00:00 2001 From: EnzeXing Date: Fri, 30 Aug 2024 21:33:11 -0400 Subject: [PATCH 1/2] adds special treatment to Predef.classOf --- compiler/src/dotty/tools/dotc/transform/init/Objects.scala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala index 1050fbe85ef2..a3360b8d51a6 100644 --- a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala +++ b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala @@ -702,6 +702,9 @@ class Objects(using Context @constructorOnly): val arr = OfArray(State.currentObject, summon[Regions.Data]) Heap.writeJoin(arr.addr, args.map(_.value).join) arr + else if target.equals(defn.Predef_classOf) then + // Predef.classOf is a stub method in tasty and is replaced in backend + Bottom else if target.hasSource then val cls = target.owner.enclosingClass.asClass val ddef = target.defTree.asInstanceOf[DefDef] @@ -1707,6 +1710,7 @@ class Objects(using Context @constructorOnly): tpl.body.foreach { case vdef : ValDef if !vdef.symbol.is(Flags.Lazy) && !vdef.rhs.isEmpty => val sym = vdef.symbol + if klass.name.toString.contains("BitVector$") || klass.name.toString.contains("ByteVector$") then println("Begin initializing field " + sym + " in " + klass) val res = if (whiteList.contains(sym)) Bottom else eval(vdef.rhs, thisV, klass) if sym.is(Flags.Mutable) then val addr = Heap.fieldVarAddr(summon[Regions.Data], sym, State.currentObject) @@ -1714,6 +1718,7 @@ class Objects(using Context @constructorOnly): Heap.writeJoin(addr, res) else thisV.initVal(sym, res) + if klass.name.toString.contains("BitVector$") || klass.name.toString.contains("ByteVector$") then println("Finished initializing field " + sym + " in " + klass) case _: MemberDef => From d3984575bb13371c7df1711608e58d13928cd900 Mon Sep 17 00:00:00 2001 From: EnzeXing Date: Sat, 31 Aug 2024 15:54:10 -0400 Subject: [PATCH 2/2] Address comment --- compiler/src/dotty/tools/dotc/transform/init/Objects.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala index a3360b8d51a6..0f96440f343f 100644 --- a/compiler/src/dotty/tools/dotc/transform/init/Objects.scala +++ b/compiler/src/dotty/tools/dotc/transform/init/Objects.scala @@ -1710,7 +1710,6 @@ class Objects(using Context @constructorOnly): tpl.body.foreach { case vdef : ValDef if !vdef.symbol.is(Flags.Lazy) && !vdef.rhs.isEmpty => val sym = vdef.symbol - if klass.name.toString.contains("BitVector$") || klass.name.toString.contains("ByteVector$") then println("Begin initializing field " + sym + " in " + klass) val res = if (whiteList.contains(sym)) Bottom else eval(vdef.rhs, thisV, klass) if sym.is(Flags.Mutable) then val addr = Heap.fieldVarAddr(summon[Regions.Data], sym, State.currentObject) @@ -1718,7 +1717,6 @@ class Objects(using Context @constructorOnly): Heap.writeJoin(addr, res) else thisV.initVal(sym, res) - if klass.name.toString.contains("BitVector$") || klass.name.toString.contains("ByteVector$") then println("Finished initializing field " + sym + " in " + klass) case _: MemberDef =>