aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/tpd.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-08-11 10:32:48 +0200
committerMartin Odersky <odersky@gmail.com>2014-08-11 10:41:23 +0200
commitc7f817f80d7a07c5d3a15eac03e4520097d81ecb (patch)
tree3424278acf49ed9802a4f67f7bc02bf4a8793ab2 /src/dotty/tools/dotc/ast/tpd.scala
parentb89c4afca19cb77e17c059e75982c537094f1ec8 (diff)
downloaddotty-c7f817f80d7a07c5d3a15eac03e4520097d81ecb.tar.gz
dotty-c7f817f80d7a07c5d3a15eac03e4520097d81ecb.tar.bz2
dotty-c7f817f80d7a07c5d3a15eac03e4520097d81ecb.zip
Added some more methods as infix tree operations:
asInstance/isInstance/ensureConforms/and/or. They replace some former "mk..." methods.
Diffstat (limited to 'src/dotty/tools/dotc/ast/tpd.scala')
-rw-r--r--src/dotty/tools/dotc/ast/tpd.scala24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/ast/tpd.scala b/src/dotty/tools/dotc/ast/tpd.scala
index d38d4695e..81f48cd37 100644
--- a/src/dotty/tools/dotc/ast/tpd.scala
+++ b/src/dotty/tools/dotc/ast/tpd.scala
@@ -405,6 +405,21 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
def appliedToTypeTrees(targs: List[Tree])(implicit ctx: Context): Tree =
if (targs.isEmpty) tree else TypeApply(tree, targs)
+
+ def isInstance(tp: Type)(implicit ctx: Context): Tree =
+ tree.select(defn.Any_isInstanceOf).appliedToType(tp)
+
+ def asInstance(tp: Type)(implicit ctx: Context): Tree =
+ tree.select(defn.Any_asInstanceOf).appliedToType(tp)
+
+ def ensureConforms(tp: Type)(implicit ctx: Context): Tree =
+ if (tree.tpe <:< tp) tree else asInstance(tp)
+
+ def and(that: Tree)(implicit ctx: Context): Tree =
+ tree.select(defn.Boolean_&&).appliedTo(that)
+
+ def or(that: Tree)(implicit ctx: Context): Tree =
+ tree.select(defn.Boolean_||).appliedTo(that)
}
implicit class ListOfTreeDecorator(val xs: List[tpd.Tree]) extends AnyVal {
@@ -648,15 +663,6 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
def runtimeCall(name: TermName, args: List[Tree])(implicit ctx: Context): Tree = ???
- def mkAnd(tree1: Tree, tree2: Tree)(implicit ctx: Context) =
- tree1.select(defn.Boolean_and).appliedTo(tree2)
-
- def mkAsInstanceOf(tree: Tree, pt: Type)(implicit ctx: Context): Tree =
- tree.select(defn.Any_asInstanceOf).appliedToType(pt)
-
- def ensureConforms(tree: Tree, pt: Type)(implicit ctx: Context): Tree =
- if (tree.tpe <:< pt) tree else mkAsInstanceOf(tree, pt)
-
// ensure that constructors are fully applied?
// ensure that normal methods are fully applied?