Skip to content

Commit 2e5bbf4

Browse files
authored
fix: #guard should work with the module system (#10535)
This PR ensures that `#guard` can be called under the module system without issues.
1 parent 00b74e0 commit 2e5bbf4

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/Lean/Elab/Tactic/Guard.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def evalGuardCmd : Lean.Elab.Command.CommandElab
160160
let e ← instantiateMVars e
161161
let mvars ← getMVars e
162162
if mvars.isEmpty then
163-
let v ← unsafe evalExpr Bool (mkConst ``Bool) e
163+
let v ← unsafe evalExpr (checkMeta := false) Bool (mkConst ``Bool) e
164164
unless v do
165165
throwError "Expression{indentExpr e}\ndid not evaluate to `true`"
166166
else

src/Lean/Meta/Eval.lean

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public section
1414

1515
namespace Lean.Meta
1616

17-
unsafe def evalExprCore (α) (value : Expr) (checkType : Expr → MetaM Unit) (safety := DefinitionSafety.safe) : MetaM α :=
17+
unsafe def evalExprCore (α) (value : Expr) (checkType : Expr → MetaM Unit)
18+
(safety := DefinitionSafety.safe) (checkMeta : Bool := true) : MetaM α :=
1819
withoutModifyingEnv do
1920
-- Avoid waiting for all prior compilation if only imported constants are referenced. This is a
2021
-- very common case for tactic configurations (`Lean.Elab.Tactic.Config`).
@@ -39,16 +40,18 @@ unsafe def evalExprCore (α) (value : Expr) (checkType : Expr → MetaM Unit) (s
3940
-- `Task.get` blocking debug code
4041
withOptions (Elab.async.set · false) do
4142
addAndCompile decl
42-
evalConst α name
43+
evalConst (checkMeta := checkMeta) α name
4344

44-
unsafe def evalExpr' (α) (typeName : Name) (value : Expr) (safety := DefinitionSafety.safe) : MetaM α :=
45-
evalExprCore (safety := safety) α value fun type => do
45+
unsafe def evalExpr' (α) (typeName : Name) (value : Expr) (safety := DefinitionSafety.safe)
46+
(checkMeta : Bool := true) : MetaM α :=
47+
evalExprCore (safety := safety) (checkMeta := checkMeta) α value fun type => do
4648
let type ← whnfD type
4749
unless type.isConstOf typeName do
4850
throwError "unexpected type at evalExpr{indentExpr type}"
4951

50-
unsafe def evalExpr (α) (expectedType : Expr) (value : Expr) (safety := DefinitionSafety.safe) : MetaM α :=
51-
evalExprCore (safety := safety) α value fun type => do
52+
unsafe def evalExpr (α) (expectedType : Expr) (value : Expr) (safety := DefinitionSafety.safe)
53+
(checkMeta : Bool := true) : MetaM α :=
54+
evalExprCore (safety := safety) (checkMeta := checkMeta) α value fun type => do
5255
unless ← isDefEq type expectedType do
5356
throwError "unexpected type at `evalExpr` {← mkHasTypeButIsExpectedMsg type expectedType}"
5457

0 commit comments

Comments
 (0)