File tree 1 file changed +12
-4
lines changed
compiler/src/dotty/tools/dotc/transform
1 file changed +12
-4
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import DenotTransformers.SymTransformer
7
7
import Flags ._
8
8
import SymDenotations ._
9
9
import Symbols ._
10
+ import Types ._
10
11
import typer .RefChecks
11
12
import MegaPhase .MiniPhase
12
13
import ast .tpd
@@ -34,19 +35,26 @@ class PruneErasedDefs extends MiniPhase with SymTransformer { thisTransform =>
34
35
35
36
override def transformApply (tree : Apply )(implicit ctx : Context ): Tree =
36
37
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 ))
38
39
else tree
39
40
40
41
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 ))
43
44
else tree
44
45
45
46
override def transformDefDef (tree : DefDef )(implicit ctx : Context ): Tree =
46
47
if (tree.symbol.isEffectivelyErased && ! tree.rhs.isEmpty)
47
- cpy.DefDef (tree)(rhs = ref(defn. Predef_undefined ))
48
+ cpy.DefDef (tree)(rhs = trivialErasedTree(tree ))
48
49
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
+
49
56
}
57
+
50
58
object PruneErasedDefs {
51
59
val name : String = " pruneErasedDefs"
52
60
}
You can’t perform that action at this time.
0 commit comments