Skip to content

Commit c7f817f

Browse files
committed
Added some more methods as infix tree operations:
asInstance/isInstance/ensureConforms/and/or. They replace some former "mk..." methods.
1 parent b89c4af commit c7f817f

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

src/dotty/tools/dotc/ast/tpd.scala

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,21 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
405405

406406
def appliedToTypeTrees(targs: List[Tree])(implicit ctx: Context): Tree =
407407
if (targs.isEmpty) tree else TypeApply(tree, targs)
408+
409+
def isInstance(tp: Type)(implicit ctx: Context): Tree =
410+
tree.select(defn.Any_isInstanceOf).appliedToType(tp)
411+
412+
def asInstance(tp: Type)(implicit ctx: Context): Tree =
413+
tree.select(defn.Any_asInstanceOf).appliedToType(tp)
414+
415+
def ensureConforms(tp: Type)(implicit ctx: Context): Tree =
416+
if (tree.tpe <:< tp) tree else asInstance(tp)
417+
418+
def and(that: Tree)(implicit ctx: Context): Tree =
419+
tree.select(defn.Boolean_&&).appliedTo(that)
420+
421+
def or(that: Tree)(implicit ctx: Context): Tree =
422+
tree.select(defn.Boolean_||).appliedTo(that)
408423
}
409424

410425
implicit class ListOfTreeDecorator(val xs: List[tpd.Tree]) extends AnyVal {
@@ -648,15 +663,6 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
648663

649664
def runtimeCall(name: TermName, args: List[Tree])(implicit ctx: Context): Tree = ???
650665

651-
def mkAnd(tree1: Tree, tree2: Tree)(implicit ctx: Context) =
652-
tree1.select(defn.Boolean_and).appliedTo(tree2)
653-
654-
def mkAsInstanceOf(tree: Tree, pt: Type)(implicit ctx: Context): Tree =
655-
tree.select(defn.Any_asInstanceOf).appliedToType(pt)
656-
657-
def ensureConforms(tree: Tree, pt: Type)(implicit ctx: Context): Tree =
658-
if (tree.tpe <:< pt) tree else mkAsInstanceOf(tree, pt)
659-
660666
// ensure that constructors are fully applied?
661667
// ensure that normal methods are fully applied?
662668

src/dotty/tools/dotc/transform/Erasure.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ object Erasure {
157157
cast(runtimeCall(nme.toObjectArray, tree :: Nil), pt)
158158
case _ =>
159159
ctx.log(s"casting from ${tree.showSummary}: ${tree.tpe.show} to ${pt.show}")
160-
mkAsInstanceOf(tree, pt)
160+
tree.asInstance(pt)
161161
}
162162
}
163163

src/dotty/tools/dotc/transform/SuperAccessors.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ class SuperAccessors extends MacroTransform with IdentityDenotTransformer { this
276276
.installAfter(thisTransformer)
277277
val superAcc =
278278
Super(This(currentClass), tpnme.EMPTY, inConstrCall = false).select(alias)
279-
DefDef(sym, ensureConforms(superAcc, sym.info.widen))
279+
DefDef(sym, superAcc.ensureConforms(sym.info.widen))
280280
}
281281
return forwarder(ctx.withPhase(thisTransformer.next))
282282
}

src/dotty/tools/dotc/transform/TypeTestsCasts.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class TypeTestsCasts extends MiniPhaseTransform {
5959
case _ =>
6060
erased2 match {
6161
case Literal(Constant(true)) => erased1
62-
case _ => mkAnd(erased1, erased2)
62+
case _ => erased1 and erased2
6363
}
6464
}
6565
}
@@ -68,7 +68,7 @@ class TypeTestsCasts extends MiniPhaseTransform {
6868
runtimeCall(nme.isArray, arg :: Literal(Constant(ndims)) :: Nil)
6969
if (ndims == 1) isArrayTest(qual)
7070
else evalOnce(qual) { qual1 =>
71-
mkAnd(derivedTree(qual1, defn.Any_isInstanceOf, qual1.tpe), isArrayTest(qual1))
71+
derivedTree(qual1, defn.Any_isInstanceOf, qual1.tpe) and isArrayTest(qual1)
7272
}
7373
case _ =>
7474
derivedTree(expr, defn.Any_isInstanceOf, argType)

0 commit comments

Comments
 (0)