Skip to content

Commit

Permalink
Parse macroBody lazy
Browse files Browse the repository at this point in the history
  • Loading branch information
dima74 committed Sep 15, 2020
1 parent 55e81b0 commit b7ec7cf
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
8 changes: 4 additions & 4 deletions src/main/kotlin/org/rust/lang/core/macros/MacroExpander.kt
Expand Up @@ -121,12 +121,12 @@ private class NestingState(
var atTheEnd: Boolean = false
)

class RsMacroData(val macroBodyStubbed: RsMacroBody?) {
constructor(def: RsMacro): this(def.macroBodyStubbed)
class RsMacroData(val macroBody: Lazy<RsMacroBody?>) {
constructor(def: RsMacro) : this(lazy(LazyThreadSafetyMode.PUBLICATION) { def.macroBodyStubbed })
}

class RsMacroCallData(val macroBody: String?) {
constructor(call: RsMacroCall): this(call.macroBody)
constructor(call: RsMacroCall) : this(call.macroBody)
}

class MacroExpander(val project: Project) {
Expand Down Expand Up @@ -160,7 +160,7 @@ class MacroExpander(val project: Project) {
val (macroCallBody, ranges) = project.createAdaptedRustPsiBuilder(call.macroBody ?: return null).lowerDocComments()
macroCallBody.eof() // skip whitespace
var start = macroCallBody.mark()
val macroCaseList = def.macroBodyStubbed?.macroCaseList ?: return null
val macroCaseList = def.macroBody.value?.macroCaseList ?: return null

for (case in macroCaseList) {
val subst = case.pattern.match(macroCallBody)
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/org/rust/lang/core/resolve2/DefCollector.kt
Expand Up @@ -334,7 +334,6 @@ class DefCollector(
val defItem = perNs.resolvedDef.macros ?: return false
defMap.defDatabase.getMacroInfo(defItem)
}
// todo передавать `def.body` лениво, так как скорее всего оно не будет использоваться (если результат будет из кеша)
val defData = RsMacroDataWithHash(RsMacroData(def.body), def.bodyHash)
val callData = RsMacroCallDataWithHash(RsMacroCallData(call.body), call.bodyHash)

Expand Down Expand Up @@ -555,7 +554,8 @@ class MacroDefInfo(
project: Project,
) {
// todo profile & optimize (`lazy` overhead & RsPsiFactory creation)
val body: RsMacroBody? by lazy {
/** Lazy because usually it should not be used (thanks to macro expansion cache) */
val body: Lazy<RsMacroBody?> = lazy(LazyThreadSafetyMode.PUBLICATION) {
val psiFactory = RsPsiFactory(project, markGenerated = false)
psiFactory.createMacroBody(bodyText)
}
Expand Down

0 comments on commit b7ec7cf

Please sign in to comment.