aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-12-01 18:44:31 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-12-16 13:15:01 +0100
commit7b29889e0a2fdace25ebb5d0f15c102a807e86ee (patch)
tree517fafc10b9d7ab1a91c49332cee55b6d27f54c0 /src/dotty/tools/backend/jvm/DottyBackendInterface.scala
parent20e9051eed5bc875d2d84dfee71ff958b8914edb (diff)
downloaddotty-7b29889e0a2fdace25ebb5d0f15c102a807e86ee.tar.gz
dotty-7b29889e0a2fdace25ebb5d0f15c102a807e86ee.tar.bz2
dotty-7b29889e0a2fdace25ebb5d0f15c102a807e86ee.zip
Support LabelDef's with Arguments. Fixes tailrec.
Diffstat (limited to 'src/dotty/tools/backend/jvm/DottyBackendInterface.scala')
-rw-r--r--src/dotty/tools/backend/jvm/DottyBackendInterface.scala21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
index e91880cd1..461d4aa79 100644
--- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
+++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala
@@ -265,7 +265,26 @@ class DottyBackendInterface()(implicit ctx: Context) extends BackendInterface{
def isQualifierSafeToElide(qual: Tree): Boolean = false // todo: implement
- def getLabelDefOwners(t: Tree): Map[Tree, List[LabelDef]] = Map.empty
+ def getLabelDefOwners(tree: Tree): Map[Tree, List[LabelDef]] = {
+ // for each rhs of a defdef returns LabelDefs inside this DefDef
+ val res = new collection.mutable.HashMap[Tree, List[LabelDef]]()
+
+ val t = new TreeTraverser {
+ var outerRhs: Tree = tree
+
+ def traverse(tree: tpd.Tree): Unit = tree match {
+ case t: DefDef =>
+ if (t.symbol is Flags.Label)
+ res.put(outerRhs, t :: res.getOrElse(outerRhs, Nil))
+ else outerRhs = t
+ traverseChildren(t)
+ case _ => traverseChildren(tree)
+ }
+ }
+
+ t.traverse(tree)
+ res.toMap
+ }
// todo: remove
def isMaybeBoxed(sym: Symbol) = {