diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-12-01 18:44:31 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-12-16 13:15:01 +0100 |
commit | 7b29889e0a2fdace25ebb5d0f15c102a807e86ee (patch) | |
tree | 517fafc10b9d7ab1a91c49332cee55b6d27f54c0 /src/dotty/tools/backend/jvm/DottyBackendInterface.scala | |
parent | 20e9051eed5bc875d2d84dfee71ff958b8914edb (diff) | |
download | dotty-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.scala | 21 |
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) = { |