File tree Expand file tree Collapse file tree 1 file changed +9
-8
lines changed
src/main/scala/scala/async/internal Expand file tree Collapse file tree 1 file changed +9
-8
lines changed Original file line number Diff line number Diff line change 11package scala .async .internal
22
3- import java .util
4-
53object AsyncMacro {
6- private val nameCache = new util.WeakHashMap [Object , AsyncNames [_]]()
74 def apply (c0 : reflect.macros.Context , base : AsyncBase )(body0 : c0.Tree ): AsyncMacro { val c : c0.type } = {
85 import language .reflectiveCalls
9- val asyncNames0 = nameCache.synchronized [AsyncNames [_]] {
10- nameCache.computeIfAbsent(c0.universe, new java.util.function.Function [Object , AsyncNames [_]] {
11- override def apply (t : Object ): AsyncNames [_] = new AsyncNames [c0.universe.type ](c0.universe)
12- })
6+
7+ // Use an attachment on RootClass as a sneaky place for a per-Global cache
8+ val att = c0.internal.attachments(c0.universe.rootMirror.RootClass )
9+ val names = att.get[AsyncNames [_]].getOrElse {
10+ val names = new AsyncNames [c0.universe.type ](c0.universe)
11+ att.update(names)
12+ names
1313 }
14+
1415 new AsyncMacro { self =>
1516 val c : c0.type = c0
16- val asyncNames : AsyncNames [c.universe.type ] = asyncNames0 .asInstanceOf [AsyncNames [c.universe.type ]]
17+ val asyncNames : AsyncNames [c.universe.type ] = names .asInstanceOf [AsyncNames [c.universe.type ]]
1718 val body : c.Tree = body0
1819 // This member is required by `AsyncTransform`:
1920 val asyncBase : AsyncBase = base
You can’t perform that action at this time.
0 commit comments