This commit also removes Array.hmap. Motivation: I wanted to use Array.hmap as an example in the paper, but I found it would be too distracting to explain why we had `Array.hmap` and `Array.map`. cc @kha
60 lines
1.8 KiB
Text
60 lines
1.8 KiB
Text
/-
|
||
Copyright (c) 2019 Microsoft Corporation. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Leonardo de Moura
|
||
-/
|
||
prelude
|
||
import init.lean.compiler.ir.basic
|
||
import init.lean.compiler.ir.format
|
||
import init.lean.compiler.ir.compilerm
|
||
import init.lean.compiler.ir.pushproj
|
||
import init.lean.compiler.ir.elimdead
|
||
import init.lean.compiler.ir.simpcase
|
||
import init.lean.compiler.ir.resetreuse
|
||
import init.lean.compiler.ir.normids
|
||
import init.lean.compiler.ir.checker
|
||
import init.lean.compiler.ir.borrow
|
||
import init.lean.compiler.ir.boxing
|
||
import init.lean.compiler.ir.rc
|
||
import init.lean.compiler.ir.expandresetreuse
|
||
import init.lean.compiler.ir.emitcpp
|
||
|
||
namespace Lean
|
||
namespace IR
|
||
|
||
private def compileAux (decls : Array Decl) : CompilerM Unit :=
|
||
do
|
||
logDecls `init decls,
|
||
checkDecls decls,
|
||
let decls := decls.map Decl.pushProj,
|
||
logDecls `push_proj decls,
|
||
let decls := decls.map Decl.insertResetReuse,
|
||
logDecls `reset_reuse decls,
|
||
let decls := decls.map Decl.elimDead,
|
||
logDecls `elim_dead decls,
|
||
let decls := decls.map Decl.simpCase,
|
||
logDecls `simp_case decls,
|
||
let decls := decls.map Decl.normalizeIds,
|
||
decls ← inferBorrow decls,
|
||
logDecls `borrow decls,
|
||
decls ← explicitBoxing decls,
|
||
logDecls `boxing decls,
|
||
decls ← explicitRC decls,
|
||
logDecls `rc decls,
|
||
let decls := decls.map Decl.expandResetReuse,
|
||
logDecls `expand_reset_reuse decls,
|
||
let decls := decls.map Decl.pushProj,
|
||
logDecls `push_proj decls,
|
||
logDecls `result decls,
|
||
checkDecls decls,
|
||
addDecls decls,
|
||
pure ()
|
||
|
||
@[export lean.ir.compile_core]
|
||
def compile (env : Environment) (opts : Options) (decls : Array Decl) : Log × (Except String Environment) :=
|
||
match (compileAux decls opts).run { env := env } with
|
||
| EState.Result.ok _ s := (s.log, Except.ok s.env)
|
||
| EState.Result.error msg s := (s.log, Except.error msg)
|
||
|
||
end IR
|
||
end Lean
|