File tree 1 file changed +9
-8
lines changed
src/main/scala/scala/async/internal
1 file changed +9
-8
lines changed Original file line number Diff line number Diff line change 1
1
package scala .async .internal
2
2
3
- import java .util
4
-
5
3
object AsyncMacro {
6
- private val nameCache = new util.WeakHashMap [Object , AsyncNames [_]]()
7
4
def apply (c0 : reflect.macros.Context , base : AsyncBase )(body0 : c0.Tree ): AsyncMacro { val c : c0.type } = {
8
5
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
13
13
}
14
+
14
15
new AsyncMacro { self =>
15
16
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 ]]
17
18
val body : c.Tree = body0
18
19
// This member is required by `AsyncTransform`:
19
20
val asyncBase : AsyncBase = base
You can’t perform that action at this time.
0 commit comments