1313package scala .tools .nsc .transform .async
1414
1515import scala .collection .mutable .ListBuffer
16- import scala .reflect .internal . Flags
16+ import scala .reflect .NameTransformer
1717
1818trait AsyncAnalysis extends TransformUtils {
1919 import global ._
@@ -35,8 +35,8 @@ trait AsyncAnalysis extends TransformUtils {
3535 reportUnsupportedAwait(classDef, s " nested $kind" )
3636 }
3737
38- override def nestedModule ( module : ModuleDef ): Unit = {
39- reportUnsupportedAwait(module , " nested object" )
38+ override def nestedModuleClass ( moduleClass : ClassDef ): Unit = {
39+ reportUnsupportedAwait(moduleClass , " nested object" )
4040 }
4141
4242 override def nestedMethod (defDef : DefDef ): Unit = {
@@ -50,24 +50,19 @@ trait AsyncAnalysis extends TransformUtils {
5050 override def function (function : Function ): Unit = {
5151 reportUnsupportedAwait(function, " nested function" )
5252 }
53-
54- override def patMatFunction (tree : Match ): Unit = {
55- reportUnsupportedAwait(tree, " nested function" )
53+ override def function (expandedFunction : ClassDef ): Unit = {
54+ reportUnsupportedAwait(expandedFunction, " nested function" )
5655 }
5756
5857 override def traverse (tree : Tree ): Unit = {
5958 tree match {
6059 case Try (_, _, _) if containsAwait(tree) =>
6160 reportUnsupportedAwait(tree, " try/catch" )
6261 super .traverse(tree)
63- case Return (_) =>
62+ case Throw ( Apply (fun, Ident (name) :: _)) if fun.symbol.isConstructor && fun.symbol.owner == definitions. NonLocalReturnControlClass && name.startsWith(nme. NON_LOCAL_RETURN_KEY_STRING ) =>
6463 global.reporter.error(tree.pos, " return is illegal within a async block" )
65- case DefDef (mods, _, _, _, _, _) if mods.hasFlag(Flags .LAZY ) && containsAwait(tree) =>
66- reportUnsupportedAwait(tree, " lazy val initializer" )
67- case ValDef (mods, _, _, _) if mods.hasFlag(Flags .LAZY ) && containsAwait(tree) =>
64+ case DefDef (mods, _, _, _, _, _) if tree.symbol.name.endsWith(nme.LAZY_SLOW_SUFFIX ) && containsAwait(tree) =>
6865 reportUnsupportedAwait(tree, " lazy val initializer" )
69- case CaseDef (_, guard, _) if guard exists isAwait =>
70- reportUnsupportedAwait(tree, " pattern guard" )
7166 case _ =>
7267 super .traverse(tree)
7368 }
@@ -91,7 +86,7 @@ trait AsyncAnalysis extends TransformUtils {
9186 traverser(tree)
9287 badAwaits foreach {
9388 tree =>
94- reportError(tree.pos, s " await must not be used under a $whyUnsupported. " )
89+ reportError(tree.pos, s " ${currentTransformState. Async_await .decodedName} must not be used under a $whyUnsupported. " )
9590 }
9691 badAwaits.nonEmpty
9792 }
0 commit comments