@@ -4,45 +4,27 @@ package transform
4
4
import TreeTransforms ._
5
5
import core .DenotTransformers ._
6
6
import core .Contexts ._
7
- import ast .Trees ._
8
7
import ast .tpd
9
- import core .Constants .Constant
10
- import core .StdNames ._
11
- import core .Symbols ._
12
-
13
8
9
+ /** This phase transforms wildcards in valdefs with their default value.
10
+ * In particular for every valdef that is declared:
11
+ * `val x : T = _` to `val x : T = <zero of T>`
12
+ *
13
+ */
14
14
class TransformWildcards extends MiniPhaseTransform with IdentityDenotTransformer { thisTransform =>
15
15
import tpd ._
16
16
17
17
override def phaseName = " transformWildcards"
18
18
19
19
override def checkPostCondition (tree : Tree )(implicit ctx : Context ): Unit = {
20
20
tree match {
21
- case ValDef (_, _, Ident (name)) => assert(name ne nme. WILDCARD )
21
+ case vDef : ValDef => assert(! tpd.isWildcardArg(vDef.rhs) )
22
22
case _ =>
23
23
}
24
24
}
25
25
26
26
override def transformValDef (tree : ValDef )(implicit ctx : Context , info : TransformerInfo ): Tree = {
27
- tree.rhs match {
28
- case Ident (nme.WILDCARD ) =>
29
- val literal = defaultValueLiteral(tree)
30
- cpy.ValDef (tree)(rhs = literal)
31
- case _ => tree
32
- }
33
- }
34
-
35
- def defaultValueLiteral (tree : ValDef )(implicit ctx : Context ) = {
36
- val t = tree.rhs.tpe.widenDealias.classSymbol
37
-
38
- if (t eq defn.DoubleClass ) Literal (Constant (0.0d ))
39
- else if (t eq defn.IntClass ) Literal (Constant (0 ))
40
- else if (t eq defn.CharClass ) Literal (Constant ('\u0000 ' ))
41
- else if (t eq defn.ByteClass ) Literal (Constant (0 : Byte ))
42
- else if (t eq defn.LongClass ) Literal (Constant (0L ))
43
- else if (t eq defn.FloatClass ) Literal (Constant (0f ))
44
- else if (t eq defn.UnitClass ) Literal (Constant (()))
45
- else if (t eq defn.BooleanClass ) Literal (Constant (false ))
46
- else Literal (Constant (null ))
27
+ if (ctx.owner.isClass) tree
28
+ else cpy.ValDef (tree)(rhs = tree.rhs.wildcardToDefault)
47
29
}
48
- }
30
+ }
0 commit comments