summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/internal/TreeInfo.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2012-03-30 10:12:40 +0200
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-04-13 19:08:08 +0200
commit2286d7b43180f3018a041163dc0cfa951c0397a4 (patch)
tree573575567b3889f4a8b57a6de8341bba6e0b4129 /src/compiler/scala/reflect/internal/TreeInfo.scala
parent48b0a7360e8d0a7bbd7f8e1bbd3c3a239b5aaa16 (diff)
downloadscala-2286d7b43180f3018a041163dc0cfa951c0397a4.tar.gz
scala-2286d7b43180f3018a041163dc0cfa951c0397a4.tar.bz2
scala-2286d7b43180f3018a041163dc0cfa951c0397a4.zip
implement SIP Type Dynamic
Diffstat (limited to 'src/compiler/scala/reflect/internal/TreeInfo.scala')
-rw-r--r--src/compiler/scala/reflect/internal/TreeInfo.scala15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/internal/TreeInfo.scala b/src/compiler/scala/reflect/internal/TreeInfo.scala
index ed22cad730..a8cca1625f 100644
--- a/src/compiler/scala/reflect/internal/TreeInfo.scala
+++ b/src/compiler/scala/reflect/internal/TreeInfo.scala
@@ -532,6 +532,21 @@ abstract class TreeInfo {
}
}
+ def isApplyDynamicName(name: Name) = (name == nme.updateDynamic) || (name == nme.selectDynamic) || (name == nme.applyDynamic) || (name == nme.applyDynamicNamed)
+
+ class DynamicApplicationExtractor(nameTest: Name => Boolean) {
+ def unapply(tree: Tree) = tree match {
+ case Apply(TypeApply(Select(qual, oper), _), List(Literal(Constant(name)))) if nameTest(oper) => Some((qual, name))
+ case Apply(Select(qual, oper), List(Literal(Constant(name)))) if nameTest(oper) => Some((qual, name))
+ case Apply(Ident(oper), List(Literal(Constant(name)))) if nameTest(oper) => Some((EmptyTree, name))
+ case _ => None
+ }
+ }
+ object DynamicUpdate extends DynamicApplicationExtractor(_ == nme.updateDynamic)
+ object DynamicApplication extends DynamicApplicationExtractor(isApplyDynamicName)
+ object DynamicApplicationNamed extends DynamicApplicationExtractor(_ == nme.applyDynamicNamed)
+
+
// domain-specific extractors for reification
import definitions._