fix: Delayed MVars in MetaTranslate #110

Merged
aniva merged 4 commits from bug/frontend-translate-delayed-mvar into dev 2024-10-09 18:08:10 -07:00
1 changed files with 22 additions and 0 deletions
Showing only changes of commit 641f8c3883 - Show all commits

View File

@ -39,6 +39,25 @@ def resetFVarMap : MetaTranslateM Unit := do
modifyGet λ state => ((), { state with fvarMap := {} }) modifyGet λ state => ((), { state with fvarMap := {} })
mutual mutual
private partial def translateLevel (srcLevel: Level) : MetaTranslateM Level := do
let sourceMCtx ← getSourceMCtx
let (_, level) := instantiateLevelMVarsImp sourceMCtx srcLevel
match level with
| .zero => return .zero
| .succ inner => do
let inner' ← translateLevel inner
return .succ inner'
| .max l1 l2 => do
let l1' ← translateLevel l1
let l2' ← translateLevel l2
return .max l1' l2'
| .imax l1 l2 => do
let l1' ← translateLevel l1
let l2' ← translateLevel l2
return .imax l1' l2'
| .param p => return .param p
| .mvar _ =>
Meta.mkFreshLevelMVar
private partial def translateExpr (srcExpr: Expr) : MetaTranslateM Expr := do private partial def translateExpr (srcExpr: Expr) : MetaTranslateM Expr := do
let sourceMCtx ← getSourceMCtx let sourceMCtx ← getSourceMCtx
-- We want to create as few mvars as possible -- We want to create as few mvars as possible
@ -63,6 +82,9 @@ private partial def translateExpr (srcExpr: Expr) : MetaTranslateM Expr := do
let mvarId' ← translateMVarId mvarId let mvarId' ← translateMVarId mvarId
restoreFVarMap fvarMap restoreFVarMap fvarMap
return .done $ .mvar mvarId' return .done $ .mvar mvarId'
| .sort level => do
let level' ← translateLevel level
return .done $ .sort level'
| _ => return .continue | _ => return .continue
Meta.check result Meta.check result
return result return result