@@ -13,25 +13,38 @@ abbrev DeclExtState := PHashMap Name Decl
1313private abbrev declLt (a b : Decl) :=
1414 Name.quickLt a.name b.name
1515
16- private abbrev sortDecls (decls : Array Decl) : Array Decl :=
16+ private def sortedDecls (s : DeclExtState) : Array Decl :=
17+ let decls := s.foldl (init := #[]) fun ps _ v => ps.push v
1718 decls.qsort declLt
1819
1920private abbrev findAtSorted? (decls : Array Decl) (declName : Name) : Option Decl :=
2021 let tmpDecl : Decl := default
2122 let tmpDecl := { tmpDecl with name := declName }
2223 decls.binSearch tmpDecl declLt
2324
24- abbrev DeclExt := SimplePersistentEnvExtension Decl DeclExtState
25-
26- def mkDeclExt (name : Name := by exact decl_name%) : IO DeclExt := do
27- registerSimplePersistentEnvExtension {
28- name := name
29- addImportedFn := fun _ => {}
30- addEntryFn := fun decls decl => decls.insert decl.name decl
31- toArrayFn := (sortDecls ·.toArray)
32- asyncMode := .sync -- compilation is non-parallel anyway
33- replay? := some <| SimplePersistentEnvExtension.replayOfFilter
34- (fun s d => !s.contains d.name) (fun decls decl => decls.insert decl.name decl)
25+ def DeclExt := PersistentEnvExtension Decl Decl DeclExtState
26+
27+ instance : Inhabited DeclExt :=
28+ inferInstanceAs (Inhabited (PersistentEnvExtension Decl Decl DeclExtState))
29+
30+ def mkDeclExt (name : Name := by exact decl_name%) : IO DeclExt :=
31+ registerPersistentEnvExtension {
32+ name,
33+ mkInitial := pure {},
34+ addImportedFn := fun _ => pure {},
35+ addEntryFn := fun s decl => s.insert decl.name decl
36+ exportEntriesFn := sortedDecls
37+ saveEntriesFn := sortedDecls
38+ statsFn := fun s =>
39+ let numEntries := s.foldl (init := 0 ) (fun count _ _ => count + 1 )
40+ format "number of local entries: " ++ format numEntries
41+ asyncMode := .sync,
42+ replay? := some <| fun oldState newState _ otherState =>
43+ newState.foldl (init := otherState) fun otherState k v =>
44+ if oldState.contains k then
45+ otherState
46+ else
47+ otherState.insert k v
3548 }
3649
3750builtin_initialize baseExt : DeclExt ← mkDeclExt
0 commit comments