diff options
Diffstat (limited to 'src/main/scala/scala/async/AsyncAnalysis.scala')
-rw-r--r-- | src/main/scala/scala/async/AsyncAnalysis.scala | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/main/scala/scala/async/AsyncAnalysis.scala b/src/main/scala/scala/async/AsyncAnalysis.scala index 7aca269..9184960 100644 --- a/src/main/scala/scala/async/AsyncAnalysis.scala +++ b/src/main/scala/scala/async/AsyncAnalysis.scala @@ -7,8 +7,7 @@ package scala.async import scala.reflect.macros.Context import scala.collection.mutable -private[async] final case class AsyncAnalysis[C <: Context](c: C) { - +private[async] final case class AsyncAnalysis[C <: Context](c: C, asyncBase: AsyncBase) { import c.universe._ val utils = TransformUtils[c.type](c) @@ -21,8 +20,10 @@ private[async] final case class AsyncAnalysis[C <: Context](c: C) { * * Must be called on the original tree, not on the ANF transformed tree. */ - def reportUnsupportedAwaits(tree: Tree) { - new UnsupportedAwaitAnalyzer().traverse(tree) + def reportUnsupportedAwaits(tree: Tree): Boolean = { + val analyzer = new UnsupportedAwaitAnalyzer + analyzer.traverse(tree) + analyzer.hasUnsupportedAwaits } /** @@ -40,6 +41,8 @@ private[async] final case class AsyncAnalysis[C <: Context](c: C) { } private class UnsupportedAwaitAnalyzer extends AsyncTraverser { + var hasUnsupportedAwaits = false + override def nestedClass(classDef: ClassDef) { val kind = if (classDef.symbol.asClass.isTrait) "trait" else "class" if (!reportUnsupportedAwait(classDef, s"nested $kind")) { @@ -96,10 +99,16 @@ private[async] final case class AsyncAnalysis[C <: Context](c: C) { } badAwaits foreach { tree => - c.error(tree.pos, s"await must not be used under a $whyUnsupported.") + reportError(tree.pos, s"await must not be used under a $whyUnsupported.") } badAwaits.nonEmpty } + + private def reportError(pos: Position, msg: String) { + hasUnsupportedAwaits = true + if (!asyncBase.fallbackEnabled) + c.error(pos, msg) + } } private class AsyncDefinitionUseAnalyzer extends AsyncTraverser { |