Skip to content

Commit 50eca90

Browse files
Joe Hendrixkim-em
authored andcommitted
fix: Use partial cache
1 parent 23b74b4 commit 50eca90

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/Lean/Meta/LazyDiscrTree.lean

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -700,35 +700,42 @@ private structure ImportFailure where
700700

701701
/-- Information generation from imported modules. -/
702702
private structure ImportData where
703-
cache : IO.Ref (Lean.Meta.Cache)
704703
errors : IO.Ref (Array ImportFailure)
705704

706705
private def ImportData.new : BaseIO ImportData := do
707-
let cache ← IO.mkRef {}
708706
let errors ← IO.mkRef #[]
709-
pure { cache, errors }
707+
pure { errors }
708+
709+
structure Cache where
710+
ngen : NameGenerator
711+
core : Lean.Core.Cache
712+
meta : Lean.Meta.Cache
713+
714+
def Cache.empty (ngen : NameGenerator) : Cache := { ngen := ngen, core := {}, meta := {} }
710715

711716
private def addConstImportData
712717
(env : Environment)
713718
(modName : Name)
714719
(d : ImportData)
720+
(cacheRef : IO.Ref Cache)
715721
(tree : PreDiscrTree α)
716722
(act : Name → ConstantInfo → MetaM (Array (InitEntry α)))
717723
(name : Name) (constInfo : ConstantInfo) : BaseIO (PreDiscrTree α) := do
718724
if constInfo.isUnsafe then return tree
719725
if !allowCompletion env name then return tree
720-
let mstate : Meta.State := { cache := ←d.cache.get }
721-
d.cache.set {}
726+
let { ngen, core := core_cache, meta := meta_cache } ← cacheRef.get
727+
let mstate : Meta.State := { cache := meta_cache }
728+
cacheRef.set (Cache.empty ngen)
722729
let ctx : Meta.Context := { config := { transparency := .reducible } }
723730
let cm := (act name constInfo).run ctx mstate
724731
let cctx : Core.Context := {
725732
fileName := default,
726733
fileMap := default
727734
}
728-
let cstate : Core.State := {env}
735+
let cstate : Core.State := {env, cache := core_cache, ngen}
729736
match ←(cm.run cctx cstate).toBaseIO with
730-
| .ok ((a, ms), _) =>
731-
d.cache.set ms.cache
737+
| .ok ((a, ms), cs) =>
738+
cacheRef.set { ngen := cs.ngen, core := cs.cache, meta := ms.cache }
732739
pure <| a.foldl (fun t e => t.push e.key e.entry) tree
733740
| .error e =>
734741
let i : ImportFailure := {
@@ -771,28 +778,30 @@ private def toFlat (d : ImportData) (tree : PreDiscrTree α) :
771778
private partial def loadImportedModule (env : Environment)
772779
(act : Name → ConstantInfo → MetaM (Array (InitEntry α)))
773780
(d : ImportData)
781+
(cacheRef : IO.Ref Cache)
774782
(tree : PreDiscrTree α)
775783
(mname : Name)
776784
(mdata : ModuleData)
777785
(i : Nat := 0) : BaseIO (PreDiscrTree α) := do
778786
if h : i < mdata.constNames.size then
779787
let name := mdata.constNames[i]
780788
let constInfo := mdata.constants[i]!
781-
let tree ← addConstImportData env mname d tree act name constInfo
782-
loadImportedModule env act d tree mname mdata (i+1)
789+
let tree ← addConstImportData env mname d cacheRef tree act name constInfo
790+
loadImportedModule env act d cacheRef tree mname mdata (i+1)
783791
else
784792
pure tree
785793

786794
private def createImportedEnvironmentSeq (env : Environment)
787795
(act : Name → ConstantInfo → MetaM (Array (InitEntry α)))
788-
(start stop : Nat) : BaseIO (InitResults α) :=
789-
do go (← ImportData.new) {} start stop
790-
where go d (tree : PreDiscrTree α) (start stop : Nat) : BaseIO _ := do
796+
(start stop : Nat) : BaseIO (InitResults α) := do
797+
let cacheRef ← IO.mkRef (Cache.empty {})
798+
go (← ImportData.new) cacheRef {} start stop
799+
where go d cacheRef (tree : PreDiscrTree α) (start stop : Nat) : BaseIO _ := do
791800
if start < stop then
792801
let mname := env.header.moduleNames[start]!
793802
let mdata := env.header.moduleData[start]!
794-
let tree ← loadImportedModule env act d tree mname mdata
795-
go d tree (start+1) stop
803+
let tree ← loadImportedModule env act d cacheRef tree mname mdata
804+
go d cacheRef tree (start+1) stop
796805
else
797806
toFlat d tree
798807
termination_by stop - start

0 commit comments

Comments
 (0)