feat: add ScopedEnvExtension.addLocalEntry

This commit is contained in:
Leonardo de Moura 2020-12-05 06:54:03 -08:00
parent 2463371a25
commit 4d428c8660
2 changed files with 10 additions and 2 deletions

View file

@ -495,8 +495,8 @@ private def ParserAttribute.add (attrName : Name) (catName : Name) (declName : N
match addParser categories catName declName leading parser prio, kind with
| Except.error ex, _ => throwError ex
| Except.ok _, AttributeKind.global => modifyEnv fun env => parserExtension.addEntry env entry
| Except.ok _, AttributeKind.scoped => modifyEnv fun env => parserExtension.addScopedEntry env (← getCurrNamespace) entry
| Except.ok _, AttributeKind.local => throwError! "local parsers have not been implemented yet"
| Except.ok _, AttributeKind.scoped => modifyEnv fun env => parserExtension.addScopedEntry env (← getCurrNamespace) entry
| Except.ok _, AttributeKind.local => modifyEnv fun env => parserExtension.addLocalEntry env entry
runParserAttributeHooks catName declName (builtin := false)
def mkParserAttributeImpl (attrName : Name) (catName : Name) : AttributeImpl where

View file

@ -142,6 +142,14 @@ def ScopedEnvExtension.addEntry (ext : ScopedEnvExtension α β σ) (env : Envir
def ScopedEnvExtension.addScopedEntry (ext : ScopedEnvExtension α β σ) (env : Environment) (namespaceName : Name) (b : β) : Environment :=
ext.ext.addEntry env (Entry.«scoped» namespaceName b)
def ScopedEnvExtension.addLocalEntry (ext : ScopedEnvExtension α β σ) (env : Environment) (b : β) : Environment :=
let s := ext.ext.getState env
match s.stateStack with
| [] => env
| top :: states =>
let top := { top with state := ext.descr.addEntry top.state b }
ext.ext.setState env { s with stateStack := top :: states }
def ScopedEnvExtension.getState [Inhabited σ] (ext : ScopedEnvExtension α β σ) (env : Environment) : σ :=
match ext.ext.getState env |>.stateStack with
| top :: _ => top.state