Skip to content

Commit 2c3f6c9

Browse files
committed
Keep constants when prining erased trees
1 parent 21a9bf0 commit 2c3f6c9

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

compiler/src/dotty/tools/dotc/transform/PruneErasedDefs.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import DenotTransformers.SymTransformer
77
import Flags._
88
import SymDenotations._
99
import Symbols._
10+
import Types._
1011
import typer.RefChecks
1112
import MegaPhase.MiniPhase
1213
import ast.tpd
@@ -34,19 +35,26 @@ class PruneErasedDefs extends MiniPhase with SymTransformer { thisTransform =>
3435

3536
override def transformApply(tree: Apply)(implicit ctx: Context): Tree =
3637
if (tree.fun.tpe.widen.isErasedMethod)
37-
cpy.Apply(tree)(tree.fun, tree.args.map(arg => ref(defn.Predef_undefined)))
38+
cpy.Apply(tree)(tree.fun, tree.args.map(trivialErasedTree))
3839
else tree
3940

4041
override def transformValDef(tree: ValDef)(implicit ctx: Context): Tree =
41-
if (tree.symbol.isEffectivelyErased && !tree.rhs.isEmpty && !tree.symbol.is(Inline))
42-
cpy.ValDef(tree)(rhs = ref(defn.Predef_undefined))
42+
if (tree.symbol.isEffectivelyErased && !tree.rhs.isEmpty)
43+
cpy.ValDef(tree)(rhs = trivialErasedTree(tree))
4344
else tree
4445

4546
override def transformDefDef(tree: DefDef)(implicit ctx: Context): Tree =
4647
if (tree.symbol.isEffectivelyErased && !tree.rhs.isEmpty)
47-
cpy.DefDef(tree)(rhs = ref(defn.Predef_undefined))
48+
cpy.DefDef(tree)(rhs = trivialErasedTree(tree))
4849
else tree
50+
51+
private def trivialErasedTree(tree: Tree)(using Context): Tree =
52+
tree.tpe.widenTermRefExpr.dealias match
53+
case ConstantType(c) => Literal(c)
54+
case _ => ref(defn.Predef_undefined)
55+
4956
}
57+
5058
object PruneErasedDefs {
5159
val name: String = "pruneErasedDefs"
5260
}

0 commit comments

Comments
 (0)