From ae91a3ca236df18eb304179e52013129c6b51227 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Wed, 17 Jun 2020 15:36:23 +1000 Subject: [PATCH] Address review comments (remove dead/debug code, +comments) --- src/compiler/scala/tools/nsc/Global.scala | 5 ++--- .../scala/tools/nsc/backend/jvm/opt/BoxUnbox.scala | 1 - src/compiler/scala/tools/nsc/transform/UnCurry.scala | 1 - .../tools/nsc/transform/async/AsyncAnalysis.scala | 1 - .../scala/tools/nsc/transform/async/AsyncPhase.scala | 1 + .../scala/tools/nsc/typechecker/Implicits.scala | 5 +---- src/compiler/scala/tools/reflect/FastTrack.scala | 3 --- .../scala/tools/partest/async/Async.scala | 1 - .../tools/partest/async/CompletableFutureAwait.scala | 1 - .../scala/tools/partest/async/OutputAwait.scala | 1 - src/reflect/scala/reflect/api/Internals.scala | 11 +++++++++++ src/reflect/scala/reflect/internal/Phase.scala | 1 - .../scala/reflect/internal/StdAttachments.scala | 2 -- src/reflect/scala/reflect/internal/TreeInfo.scala | 1 - src/reflect/scala/reflect/internal/Trees.scala | 10 +--------- .../scala/reflect/runtime/JavaUniverseForce.scala | 1 - 16 files changed, 16 insertions(+), 30 deletions(-) diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala index 74b96d2f09c1..cc15208bc866 100644 --- a/src/compiler/scala/tools/nsc/Global.scala +++ b/src/compiler/scala/tools/nsc/Global.scala @@ -579,7 +579,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter) object async extends { val global: Global.this.type = Global.this val runsAfter = List("posterasure") - val runsRightAfter = Some("posterasure") + val runsRightAfter = None } with AsyncPhase // phaseName = "lambdalift" @@ -1013,7 +1013,7 @@ class Global(var currentSettings: Settings, reporter0: Reporter) definitions.isDefinitionsInitialized && rootMirror.isMirrorInitialized ) - override def isPastTyper = globalPhase != null && isPast(currentRun.typerPhase) + override def isPastTyper = isPast(currentRun.typerPhase) def isPast(phase: Phase) = ( (curRun ne null) && isGlobalInitialized // defense against init order issues @@ -1350,7 +1350,6 @@ class Global(var currentSettings: Settings, reporter0: Reporter) def runIsAt(ph: Phase) = globalPhase.id == ph.id def runIsAtOptimiz = runIsAt(jvmPhase) - firstPhase.iterator.foreach(_.init()) isDefined = true // ----------- Units and top-level classes and objects -------- diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/BoxUnbox.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/BoxUnbox.scala index 1311257b69ca..b5bd0546c2a5 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/opt/BoxUnbox.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/BoxUnbox.scala @@ -21,7 +21,6 @@ import scala.tools.asm.Opcodes._ import scala.tools.asm.Type import scala.tools.asm.tree._ import scala.tools.nsc.backend.jvm.BTypes.InternalName -import scala.tools.nsc.backend.jvm.analysis.BackendUtils import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._ abstract class BoxUnbox { diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala index ec1f14ebdf02..4aa269385c4c 100644 --- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala +++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala @@ -20,7 +20,6 @@ import scala.collection.mutable import scala.collection.mutable.ListBuffer import scala.reflect.internal.util.ListOfNil import PartialFunction.cond -import scala.reflect.NameTransformer /* */ /** - uncurry all symbol and tree types (@see UnCurryPhase) -- this includes normalizing all proper types. diff --git a/src/compiler/scala/tools/nsc/transform/async/AsyncAnalysis.scala b/src/compiler/scala/tools/nsc/transform/async/AsyncAnalysis.scala index 3ce724817552..2fae40c492e1 100644 --- a/src/compiler/scala/tools/nsc/transform/async/AsyncAnalysis.scala +++ b/src/compiler/scala/tools/nsc/transform/async/AsyncAnalysis.scala @@ -13,7 +13,6 @@ package scala.tools.nsc.transform.async import scala.collection.mutable.ListBuffer -import scala.reflect.NameTransformer trait AsyncAnalysis extends TransformUtils { import global._ diff --git a/src/compiler/scala/tools/nsc/transform/async/AsyncPhase.scala b/src/compiler/scala/tools/nsc/transform/async/AsyncPhase.scala index f2f089b21028..7a0deeaf2de2 100644 --- a/src/compiler/scala/tools/nsc/transform/async/AsyncPhase.scala +++ b/src/compiler/scala/tools/nsc/transform/async/AsyncPhase.scala @@ -35,6 +35,7 @@ abstract class AsyncPhase extends Transform with TypingTransformers with AnfTran /** * Mark the given method as requiring an async transform. + * Refer to documentation in the public API that forwards to this method in src/reflect/scala/reflect/api/Internals.scala */ final def markForAsyncTransform(owner: Symbol, method: DefDef, awaitMethod: Symbol, config: Map[String, AnyRef]): DefDef = { diff --git a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala index 864ba4c55a98..c2322dc5cb7c 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Implicits.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Implicits.scala @@ -327,10 +327,7 @@ trait Implicits { */ def memberWildcardType(name: Name, tp: Type) = { val result = refinedType(List(WildcardType), NoSymbol) - val owner = result.typeSymbol orElse { // TODO async (when after erasure?)... - val clazz = NoSymbol.newRefinementClass(NoPosition) - clazz setInfo RefinedType(Nil, newScope, clazz) - } + val owner = result.typeSymbol (name match { case x: TermName => owner.newMethod(x) case x: TypeName => owner.newAbstractType(x) diff --git a/src/compiler/scala/tools/reflect/FastTrack.scala b/src/compiler/scala/tools/reflect/FastTrack.scala index 014d7308191d..3bdd34be6e01 100644 --- a/src/compiler/scala/tools/reflect/FastTrack.scala +++ b/src/compiler/scala/tools/reflect/FastTrack.scala @@ -44,9 +44,6 @@ class FastTrack[MacrosAndAnalyzer <: Macros with Analyzer](val macros: MacrosAnd private def makeWhitebox(sym: Symbol)(pf: PartialFunction[Applied, MacroContext => Tree]) = sym -> new FastTrackEntry(pf, isBlackbox = false) - private def makeBlackBoxIfExists(sym_pf: (Symbol, PartialFunction[Applied, MacroContext => Tree])) = - sym_pf match { case (sym, _) if !sym.exists => Map.empty case (sym, pf) => Map(makeBlackbox(sym)(pf))} - final class FastTrackEntry(pf: PartialFunction[Applied, MacroContext => Tree], val isBlackbox: Boolean) extends (MacroArgs => Any) { def validate(tree: Tree) = pf isDefinedAt Applied(tree) def apply(margs: MacroArgs): margs.c.Expr[Nothing] = { diff --git a/src/partest-extras/scala/tools/partest/async/Async.scala b/src/partest-extras/scala/tools/partest/async/Async.scala index e1c1b9d643e6..3fa64a92f845 100644 --- a/src/partest-extras/scala/tools/partest/async/Async.scala +++ b/src/partest-extras/scala/tools/partest/async/Async.scala @@ -18,7 +18,6 @@ import scala.language.experimental.macros import scala.annotation.compileTimeOnly import scala.concurrent.{ExecutionContext, Future, Promise} import scala.reflect.macros.blackbox -import scala.tools.nsc.transform.async.StateAssigner import scala.util.{Failure, Success, Try} object Async { diff --git a/src/partest-extras/scala/tools/partest/async/CompletableFutureAwait.scala b/src/partest-extras/scala/tools/partest/async/CompletableFutureAwait.scala index 7b1b4532a119..4327722b01e9 100644 --- a/src/partest-extras/scala/tools/partest/async/CompletableFutureAwait.scala +++ b/src/partest-extras/scala/tools/partest/async/CompletableFutureAwait.scala @@ -19,7 +19,6 @@ import java.util.function.BiConsumer import scala.annotation.compileTimeOnly import scala.language.experimental.macros import scala.reflect.macros.blackbox -import scala.tools.nsc.transform.async.StateAssigner import scala.util.{Failure, Success, Try} object CompletableFutureAwait { diff --git a/src/partest-extras/scala/tools/partest/async/OutputAwait.scala b/src/partest-extras/scala/tools/partest/async/OutputAwait.scala index ca7657d199fa..a026d9ba9a04 100644 --- a/src/partest-extras/scala/tools/partest/async/OutputAwait.scala +++ b/src/partest-extras/scala/tools/partest/async/OutputAwait.scala @@ -17,7 +17,6 @@ import scala.collection.immutable.HashMap import scala.collection.mutable import scala.language.experimental.macros import scala.reflect.macros.blackbox -import scala.tools.nsc.transform.async.StateAssigner object OutputAwait { def writing[T](body: T): Output[T] = macro impl diff --git a/src/reflect/scala/reflect/api/Internals.scala b/src/reflect/scala/reflect/api/Internals.scala index b52d84103904..cfd853e70213 100644 --- a/src/reflect/scala/reflect/api/Internals.scala +++ b/src/reflect/scala/reflect/api/Internals.scala @@ -374,6 +374,17 @@ trait Internals { self: Universe => */ def boundedWildcardType(bounds: TypeBounds): BoundedWildcardType + /** Mark the given `DefDef` for later processing by the `async` phase of the compiler + * + * @param owner current owner the owner of the call site being transformed into an async state machine + * @param method A method of the form `def $name($paramName: $ParamType): $T = $CODE`, where calls to `$CODE` + * `awaitSymbol` in `$CODE` mark continuation points. + * @param awaitSymbol The `await` method, of a typically of a type like `[T](Future[T): T` + * @param config Untyped channel for additional configuration parameters. This currently allows + * - "postAnfTransform" : A function from `Block => Block` + * - "stateDiagram" : A function from `(Symbol, Tree) => Option[String => Unit]` that can + * opt to receive a .dot diagram of the state machine. + */ def markForAsyncTransform(owner: Symbol, method: DefDef, awaitSymbol: Symbol, config: Map[String, AnyRef]): DefDef = method /** Syntactic conveniences for additional internal APIs for trees, symbols and types */ diff --git a/src/reflect/scala/reflect/internal/Phase.scala b/src/reflect/scala/reflect/internal/Phase.scala index c0b4cdcb33b6..f6cf8dd5d938 100644 --- a/src/reflect/scala/reflect/internal/Phase.scala +++ b/src/reflect/scala/reflect/internal/Phase.scala @@ -64,7 +64,6 @@ abstract class Phase(val prev: Phase) extends Ordered[Phase] { * overridden to false in parser, namer, typer, and erasure. (And NoPhase.) */ def keepsTypeParams = true - def init(): Unit = () def run(): Unit override def toString() = name diff --git a/src/reflect/scala/reflect/internal/StdAttachments.scala b/src/reflect/scala/reflect/internal/StdAttachments.scala index 0ae72e6abf53..a44626c1e7a7 100644 --- a/src/reflect/scala/reflect/internal/StdAttachments.scala +++ b/src/reflect/scala/reflect/internal/StdAttachments.scala @@ -122,6 +122,4 @@ trait StdAttachments { // When typing a Def with this attachment, change the owner of its RHS from origalOwner to the symbol of the Def case class ChangeOwnerAttachment(originalOwner: Symbol) - - case object SuppressPureExpressionWarning extends PlainAttachment } diff --git a/src/reflect/scala/reflect/internal/TreeInfo.scala b/src/reflect/scala/reflect/internal/TreeInfo.scala index bd289932ac6c..0fa233dd6eb8 100644 --- a/src/reflect/scala/reflect/internal/TreeInfo.scala +++ b/src/reflect/scala/reflect/internal/TreeInfo.scala @@ -232,7 +232,6 @@ abstract class TreeInfo { ( !tree.isErrorTyped && (isExprSafeToInline(tree) || isWarnableRefTree) && isWarnableSymbol - && !tree.hasAttachment[SuppressPureExpressionWarning.type] ) } diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala index f5aae5010beb..71d0ff0579b4 100644 --- a/src/reflect/scala/reflect/internal/Trees.scala +++ b/src/reflect/scala/reflect/internal/Trees.scala @@ -478,14 +478,7 @@ trait Trees extends api.Trees { case class ArrayValue(elemtpt: Tree, elems: List[Tree]) extends TermTree case class Function(vparams: List[ValDef], body: Tree) - extends SymTree with TermTree with FunctionApi { - - override def tpe_=(tp: Type): Unit = { - if (!definitions.isFunctionType(tp)) - new Throwable().printStackTrace() - super.setType(tp) - } - } + extends SymTree with TermTree with FunctionApi object Function extends FunctionExtractor case class Assign(lhs: Tree, rhs: Tree) @@ -1538,7 +1531,6 @@ trait Trees extends api.Trees { } class ChangeOwnerTraverser(val oldowner: Symbol, val newowner: Symbol) extends Traverser { - assert(newowner != NoSymbol, oldowner) final def change(sym: Symbol) = { if (sym != NoSymbol && sym.owner == oldowner) { sym.owner = newowner diff --git a/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala b/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala index 93e8bfd0839b..d3f27147dfe9 100644 --- a/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala +++ b/src/reflect/scala/reflect/runtime/JavaUniverseForce.scala @@ -64,7 +64,6 @@ trait JavaUniverseForce { self: runtime.JavaUniverse => this.TypeParamVarargsAttachment this.KnownDirectSubclassesCalled this.ChangeOwnerAttachment - this.SuppressPureExpressionWarning this.noPrint this.typeDebug // inaccessible: this.posAssigner