diff options
-rw-r--r-- | src/dotty/tools/dotc/ast/tpd.scala | 3 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/ExpandSAMs.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/LazyVals.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/PatternMatcher.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/SyntheticMethods.scala | 3 |
5 files changed, 7 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/ast/tpd.scala b/src/dotty/tools/dotc/ast/tpd.scala index a38a238c8..c50567dd5 100644 --- a/src/dotty/tools/dotc/ast/tpd.scala +++ b/src/dotty/tools/dotc/ast/tpd.scala @@ -418,6 +418,9 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo { Thicket(valdef, clsdef) } + /** A `_' with given type */ + def Underscore(tp: Type)(implicit ctx: Context) = untpd.Ident(nme.WILDCARD).withType(tp) + def defaultValue(tpe: Types.Type)(implicit ctx: Context) = { val tpw = tpe.widen diff --git a/src/dotty/tools/dotc/transform/ExpandSAMs.scala b/src/dotty/tools/dotc/transform/ExpandSAMs.scala index bba42f403..2416e4624 100644 --- a/src/dotty/tools/dotc/transform/ExpandSAMs.scala +++ b/src/dotty/tools/dotc/transform/ExpandSAMs.scala @@ -74,7 +74,7 @@ class ExpandSAMs extends MiniPhaseTransform { thisTransformer => val defaultSym = ctx.newSymbol(isDefinedAtFn, nme.WILDCARD, Synthetic, selector.tpe.widen) val defaultCase = CaseDef( - Bind(defaultSym, untpd.Ident(nme.WILDCARD).withType(selector.tpe.widen)), + Bind(defaultSym, Underscore(selector.tpe.widen)), EmptyTree, Literal(Constant(false))) cpy.Match(applyRhs)(paramRef, cases.map(translateCase) :+ defaultCase) diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index 5b146a785..7d319bbb7 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -278,7 +278,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { CaseDef(computedState, EmptyTree, body) } - val default = CaseDef(untpd.Ident(nme.WILDCARD).withType(defn.LongType), EmptyTree, Literal(Constant(()))) + val default = CaseDef(Underscore(defn.LongType), EmptyTree, Literal(Constant(()))) val cases = Match(stateMask.appliedTo(ref(flagSymbol), Literal(Constant(ord))), List(compute, waitFirst, waitSecond, computed, default)) //todo: annotate with @switch diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala index 507dbb0ce..5fa17921f 100644 --- a/src/dotty/tools/dotc/transform/PatternMatcher.scala +++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala @@ -60,7 +60,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans val sel = Ident(selector.termRef).withPos(tree.pos) val rethrow = tpd.CaseDef(EmptyTree, EmptyTree, Throw(ref(selector))) val newCases = tpd.CaseDef( - Bind(selector,untpd.Ident(nme.WILDCARD).withPos(tree.pos).withType(selector.info)), + Bind(selector, Underscore(selector.info).withPos(tree.pos)), EmptyTree, transformMatch(tpd.Match(sel, tree.cases ::: rethrow :: Nil))) cpy.Try(tree)(tree.expr, newCases :: Nil, tree.finalizer) diff --git a/src/dotty/tools/dotc/transform/SyntheticMethods.scala b/src/dotty/tools/dotc/transform/SyntheticMethods.scala index 9d0aebe45..b33bbd6a4 100644 --- a/src/dotty/tools/dotc/transform/SyntheticMethods.scala +++ b/src/dotty/tools/dotc/transform/SyntheticMethods.scala @@ -105,8 +105,7 @@ class SyntheticMethods(thisTransformer: DenotTransformer) { */ def equalsBody(that: Tree)(implicit ctx: Context): Tree = { val thatAsClazz = ctx.newSymbol(ctx.owner, nme.x_0, Synthetic, clazzType, coord = ctx.owner.pos) // x$0 - def wildcardAscription(tp: Type) = - Typed(untpd.Ident(nme.WILDCARD).withType(tp), TypeTree(tp)) + def wildcardAscription(tp: Type) = Typed(Underscore(tp), TypeTree(tp)) val pattern = Bind(thatAsClazz, wildcardAscription(clazzType)) // x$0 @ (_: C) val comparisons = accessors map (accessor => This(clazz).select(accessor).select(defn.Any_==).appliedTo(ref(thatAsClazz).select(accessor))) |