@@ -13,25 +13,37 @@ 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+ statsFn := fun s =>
38+ let numEntries := s.foldl (init := 0 ) (fun count _ _ => count + 1 )
39+ format "number of local entries: " ++ format numEntries
40+ asyncMode := .sync,
41+ replay? := some <| fun oldState newState _ otherState =>
42+ newState.foldl (init := otherState) fun otherState k v =>
43+ if oldState.contains k then
44+ otherState
45+ else
46+ otherState.insert k v
3547 }
3648
3749builtin_initialize baseExt : DeclExt ← mkDeclExt
0 commit comments