30 lines
829 B
Text
30 lines
829 B
Text
/-
|
|
Copyright (c) 2021 Microsoft Corporation. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Leonardo de Moura
|
|
-/
|
|
import Lean.Expr
|
|
|
|
namespace Lean
|
|
|
|
private def recAppKey := `_recApp
|
|
|
|
/--
|
|
We store the syntax at recursive applications to be able to generate better error messages
|
|
when performing well-founded and structural recursion.
|
|
-/
|
|
def mkRecAppWithSyntax (e : Expr) (stx : Syntax) : Expr :=
|
|
mkMData (KVMap.empty.insert recAppKey (DataValue.ofSyntax stx)) e
|
|
|
|
/--
|
|
Retrieve (if available) the syntax object attached to a recursive application.
|
|
-/
|
|
def getRecAppSyntax? (e : Expr) : Option Syntax :=
|
|
match e with
|
|
| Expr.mdata d _ =>
|
|
match d.find recAppKey with
|
|
| some (DataValue.ofSyntax stx) => some stx
|
|
| _ => none
|
|
| _ => none
|
|
|
|
end Lean
|