Merge pull request #51 from leanprover/compiler-attrs

More compiler related attributes.
main
Henrik Böving 2022-04-19 20:32:56 +02:00 committed by GitHub
commit fc48deaf81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 8 deletions

View File

@ -31,7 +31,9 @@ instance : ValueAttr ParametricAttribute where
abbrev EnumAttrWrapper := ValueAttrWrapper EnumAttributes abbrev EnumAttrWrapper := ValueAttrWrapper EnumAttributes
abbrev ParametricAttrWrapper := ValueAttrWrapper ParametricAttribute abbrev ParametricAttrWrapper := ValueAttrWrapper ParametricAttribute
def tagAttributes : Array TagAttribute := #[IR.UnboxResult.unboxAttr, neverExtractAttr, Elab.Term.elabWithoutExpectedTypeAttr, SynthInstance.inferTCGoalsRLAttr, matchPatternAttr] def tagAttributes : Array TagAttribute :=
#[IR.UnboxResult.unboxAttr, neverExtractAttr, Elab.Term.elabWithoutExpectedTypeAttr,
SynthInstance.inferTCGoalsRLAttr, matchPatternAttr]
deriving instance Repr for Compiler.InlineAttributeKind deriving instance Repr for Compiler.InlineAttributeKind
deriving instance Repr for Compiler.SpecializeAttributeKind deriving instance Repr for Compiler.SpecializeAttributeKind
@ -68,7 +70,7 @@ instance : ToString ExternEntry where
instance : ToString ExternAttrData where instance : ToString ExternAttrData where
toString data := (data.arity?.map toString |>.getD "") ++ " " ++ String.intercalate " " (data.entries.map toString) toString data := (data.arity?.map toString |>.getD "") ++ " " ++ String.intercalate " " (data.entries.map toString)
def parametricAttributes : Array ParametricAttrWrapper := #[⟨externAttr⟩, ⟨Compiler.implementedByAttr⟩] def parametricAttributes : Array ParametricAttrWrapper := #[⟨externAttr⟩, ⟨Compiler.implementedByAttr⟩, ⟨exportAttr⟩]
def getTags (decl : Name) : MetaM (Array String) := do def getTags (decl : Name) : MetaM (Array String) := do
let env ← getEnv let env ← getEnv
@ -96,15 +98,36 @@ def getDefaultInstance (decl : Name) (className : Name) : MetaM (Option String)
return some $ s!"defaultInstance {prio}" return some $ s!"defaultInstance {prio}"
pure none pure none
def hasSimp (decl : Name) : MetaM (Bool) := do def hasSimp (decl : Name) : MetaM (Option String) := do
let thms ← simpExtension.getTheorems let thms ← simpExtension.getTheorems
pure $ thms.isLemma decl pure $
if thms.isLemma decl then
some "simp"
else
none
def hasCsimp (decl : Name) : MetaM (Option String) := do
let env ← getEnv
pure $
if Compiler.hasCSimpAttribute env decl then
some "csimp"
else
none
def customAttrs := #[hasSimp, hasCsimp]
def getCustomAttrs (decl : Name) : MetaM (Array String) := do
let mut values := #[]
for attr in customAttrs do
if let some value ← attr decl then
values := values.push value
pure values
def getAllAttributes (decl : Name) : MetaM (Array String) := do def getAllAttributes (decl : Name) : MetaM (Array String) := do
let tags ← getTags decl let tags ← getTags decl
let enums ← getEnumValues decl let enums ← getEnumValues decl
let parametric ← getParametricValues decl let parametric ← getParametricValues decl
let simp := if ←hasSimp decl then #["simp"] else #[] let customs ← getCustomAttrs decl
pure $ simp ++ tags ++ enums ++ parametric pure $ customs ++ tags ++ enums ++ parametric
end DocGen4 end DocGen4

View File

@ -142,7 +142,8 @@ def prettyPrintTerm (expr : Expr) : MetaM CodeWithInfos := do
options := ← getOptions options := ← getOptions
currNamespace := ← getCurrNamespace currNamespace := ← getCurrNamespace
openDecls := ← getOpenDecls openDecls := ← getOpenDecls
fileMap := default fileMap := default,
ngen := ← getNGen
} }
pure $ tagExprInfos ctx infos tt pure $ tagExprInfos ctx infos tt

View File

@ -1 +1 @@
leanprover/lean4:nightly-2022-04-04 leanprover/lean4:nightly-2022-04-16