File tree 1 file changed +15
-8
lines changed
commons-macros/src/main/scala/com/avsystem/commons/macros/rpc
1 file changed +15
-8
lines changed Original file line number Diff line number Diff line change @@ -136,29 +136,36 @@ class RpcMacros(ctx: blackbox.Context) extends RpcMacroCommons(ctx)
136
136
}
137
137
138
138
val constructor = new RpcMetadataConstructor (metadataTpe)
139
+ // separate object for cached implicits so that lazy vals are members instead of local variables
140
+ val depsObj = c.freshName(TermName (" deps" ))
141
+ val selfName = c.freshName(TermName (" self" ))
139
142
140
143
typedCompanionOf(metadataTpe) match {
141
144
case Some (comp) =>
142
145
// short circuit recursive implicit searches for M.Lazy[Real]
143
146
val lazyMetadataTpe = getType(tq " $comp.Lazy[ ${realRpc.tpe}] " )
144
- val selfName = c.freshName(TermName (" self" ))
145
147
val lazySelfName = c.freshName(TermName (" lazySelf" ))
146
148
registerImplicit(lazyMetadataTpe, lazySelfName)
147
149
val tree = constructor.materializeFor(realRpc)
148
150
149
151
q """
150
- var $selfName = null.asInstanceOf[ $metadataTpe]
151
- val $lazySelfName = $comp.Lazy( $selfName)
152
- .. $cachedImplicitDeclarations
153
- $selfName = $tree
154
- $selfName
152
+ object $depsObj {
153
+ var $selfName: $metadataTpe = _
154
+ private val $lazySelfName = $comp.Lazy( $selfName)
155
+ .. $cachedImplicitDeclarations
156
+ $selfName = $tree
157
+ }
158
+ $depsObj. $selfName
155
159
"""
156
160
157
161
case None =>
158
162
val tree = constructor.materializeFor(realRpc)
159
163
q """
160
- .. $cachedImplicitDeclarations
161
- $tree
164
+ object $depsObj {
165
+ .. $cachedImplicitDeclarations
166
+ val $selfName = $tree
167
+ }
168
+ $depsObj. $selfName
162
169
"""
163
170
}
164
171
}
You can’t perform that action at this time.
0 commit comments