feat: normalize free variable ids before saving LCNF code in the environment

This commit is contained in:
Leonardo de Moura 2022-09-29 12:48:21 -07:00
parent 8cca2ea24e
commit bb1e94de82
2 changed files with 12 additions and 2 deletions

View file

@ -76,7 +76,9 @@ def run (declNames : Array Name) : CompilerM (Array Decl) := withAtLeastMaxRecDe
withPhase pass.phase <| checkpoint pass.name decls
if (← Lean.isTracingEnabledFor `Compiler.result) then
for decl in decls do
Lean.addTrace `Compiler.result m!"size: {decl.size}\n{← ppDecl decl}"
-- We display the declaration saved in the environment because the names have been normalized
let some decl' ← getDeclAt? decl.name .base | unreachable!
Lean.addTrace `Compiler.result m!"size: {decl.size}\n{← ppDecl' decl'}"
return decls
end PassManager

View file

@ -54,8 +54,16 @@ def getDeclAt? (declName : Name) (phase : Phase) : CoreM (Option Decl) :=
def getDecl? (declName : Name) : CompilerM (Option Decl) := do
getDeclAt? declName (← getPhase)
def normalizeFVarIds (decl : Decl) : CoreM Decl := do
let ngenSaved ← getNGen
setNGen {}
try
CompilerM.run <| decl.internalize
finally
setNGen ngenSaved
def saveBase : Pass :=
.mkPerDeclaration `saveBase (fun decl => do decl.saveBase; return decl) .base
.mkPerDeclaration `saveBase (fun decl => do (← normalizeFVarIds decl).saveBase; return decl) .base
def forEachDecl (f : Decl → CoreM Unit) : CoreM Unit := do
let env ← getEnv