chore: move to new frontend

This commit is contained in:
Leonardo de Moura 2020-10-14 14:48:40 -07:00
parent c84a9f8a0b
commit 7be77fb189
2 changed files with 15 additions and 21 deletions

View file

@ -293,6 +293,4 @@ TODO
@[builtinTermElab] def elabsubst : TermElab := expandInfixOp infixR " ▸ " 75
-/
end Term
end Elab
end Lean
end Lean.Elab.Term

View file

@ -1,3 +1,4 @@
#lang lean4
/-
Copyright (c) 2020 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
@ -6,36 +7,31 @@ Authors: Leonardo de Moura, Sebastian Ullrich
import Lean.Util.CollectFVars
import Lean.Elab.Term
namespace Lean
namespace Elab
namespace Term
namespace Lean.Elab.Term
open Meta
def collectUsedFVars (e : Expr) : StateRefT CollectFVars.State TermElabM Unit := do
e ← instantiateMVars e;
let e ← instantiateMVars e
modify fun used => collectFVars used e
def collectUsedFVarsAtFVars (fvars : Array Expr) : StateRefT CollectFVars.State TermElabM Unit :=
fvars.forM fun fvar => do
fvarType ← inferType fvar;
let fvarType ← inferType fvar
collectUsedFVars fvarType
def removeUnused (vars : Array Expr) (used : CollectFVars.State) : TermElabM (LocalContext × LocalInstances × Array Expr) := do
localInsts ← getLocalInstances;
lctx ← getLCtx;
(lctx, localInsts, newVars, _) ← vars.foldrM
(fun var (result : LocalContext × LocalInstances × Array Expr × CollectFVars.State) =>
let (lctx, localInsts, newVars, used) := result;
if used.fvarSet.contains var.fvarId! then do
varType ← inferType var;
(_, used) ← (collectUsedFVars varType).run used;
let localInsts ← getLocalInstances
let lctx ← getLCtx
let (lctx, localInsts, newVars, _) ← vars.foldrM
(fun var (result : LocalContext × LocalInstances × Array Expr × CollectFVars.State) => do
let (lctx, localInsts, newVars, used) := result
if used.fvarSet.contains var.fvarId! then
let varType ← inferType var
let (_, used) ← (collectUsedFVars varType).run used
pure (lctx, localInsts, newVars.push var, used)
else
pure (lctx.erase var.fvarId!, localInsts.erase var.fvarId!, newVars, used))
(lctx, localInsts, #[], used);
(lctx, localInsts, #[], used)
pure (lctx, localInsts, newVars.reverse)
end Term
end Elab
end Lean
end Lean.Elab.Term