42 lines
1.6 KiB
Text
42 lines
1.6 KiB
Text
/-
|
|
Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Leonardo de Moura
|
|
-/
|
|
prelude
|
|
import Lean.CoreM
|
|
|
|
namespace Lean
|
|
|
|
register_builtin_option debug.skipKernelTC : Bool := {
|
|
defValue := false
|
|
group := "debug"
|
|
descr := "skip kernel type checker. WARNING: setting this option to true may compromise soundness because your proofs will not be checked by the Lean kernel"
|
|
}
|
|
|
|
def Environment.addDecl (env : Environment) (opts : Options) (decl : Declaration)
|
|
(cancelTk? : Option IO.CancelToken := none) : Except KernelException Environment :=
|
|
if debug.skipKernelTC.get opts then
|
|
addDeclWithoutChecking env decl
|
|
else
|
|
addDeclCore env (Core.getMaxHeartbeats opts).toUSize decl cancelTk?
|
|
|
|
def Environment.addAndCompile (env : Environment) (opts : Options) (decl : Declaration)
|
|
(cancelTk? : Option IO.CancelToken := none) : Except KernelException Environment := do
|
|
let env ← addDecl env opts decl cancelTk?
|
|
compileDecl env opts decl
|
|
|
|
def addDecl (decl : Declaration) : CoreM Unit := do
|
|
profileitM Exception "type checking" (← getOptions) do
|
|
withTraceNode `Kernel (fun _ => return m!"typechecking declaration") do
|
|
if !(← MonadLog.hasErrors) && decl.hasSorry then
|
|
logWarning "declaration uses 'sorry'"
|
|
match (← getEnv).addDecl (← getOptions) decl (← read).cancelTk? with
|
|
| .ok env => setEnv env
|
|
| .error ex => throwKernelException ex
|
|
|
|
def addAndCompile (decl : Declaration) : CoreM Unit := do
|
|
addDecl decl
|
|
compileDecl decl
|
|
|
|
end Lean
|