From 57ee977291ca6ea533b05b83540c0b27014ec2ba Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Mon, 17 Feb 2020 11:28:50 -0800 Subject: [PATCH] feat: add helper functions --- src/Init/Lean/Data/KVMap.lean | 3 +++ src/Init/Lean/Expr.lean | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/Init/Lean/Data/KVMap.lean b/src/Init/Lean/Data/KVMap.lean index e1abed5267..8b0623cac4 100644 --- a/src/Init/Lean/Data/KVMap.lean +++ b/src/Init/Lean/Data/KVMap.lean @@ -65,6 +65,9 @@ def empty : KVMap := def isEmpty : KVMap → Bool | ⟨m⟩ => m.isEmpty +def size (m : KVMap) : Nat := +m.entries.length + def findCore : List (Name × DataValue) → Name → Option DataValue | [], k' => none | (k,v)::m, k' => if k == k' then some v else findCore m k' diff --git a/src/Init/Lean/Expr.lean b/src/Init/Lean/Expr.lean index a5ef75052b..f8b4d33ca6 100644 --- a/src/Init/Lean/Expr.lean +++ b/src/Init/Lean/Expr.lean @@ -905,5 +905,13 @@ private partial def getParamSubstArray (ps : Array Name) (us : Array Level) (p' def instantiateLevelParamsArray (e : Expr) (paramNames : Array Name) (lvls : Array Level) : Expr := instantiateLevelParamsCore (fun p => getParamSubstArray paramNames lvls p 0) e +def mkAnnotation (kind : Name) (e : Expr) : Expr := +mkMData (KVMap.empty.insert kind (DataValue.ofBool true)) e + +def isAnnotation? (kind : Name) (e : Expr) : Option Expr := +match e with +| Expr.mdata d e _ => if d.size == 1 && d.getBool kind false then some e else none +| _ => none + end Expr end Lean