feat: check if "has already been declared" at the beginning

This commit is contained in:
Leonardo de Moura 2020-04-09 15:29:10 -07:00
parent 360cebf680
commit 596a3af1a0
2 changed files with 6 additions and 0 deletions

View file

@ -116,6 +116,11 @@ match modifiers.visibility with
pure declName
| _ => pure declName
def checkNotAlreadyDeclared (ref : Syntax) (declName : Name) : CommandElabM Unit := do
env ← getEnv;
when (env.contains declName) $
throwError ref ("'" ++ declName ++ "' has already been declared")
def applyAttributes (ref : Syntax) (declName : Name) (attrs : Array Attribute) (applicationTime : AttributeApplicationTime) : CommandElabM Unit :=
attrs.forM $ fun attr => do
env ← getEnv;

View file

@ -145,6 +145,7 @@ def elabDefLike (view : DefView) : CommandElabM Unit :=
let ref := view.ref;
withDeclId view.declId $ fun name => do
declName ← mkDeclName view.modifiers name;
checkNotAlreadyDeclared ref declName;
applyAttributes ref declName view.modifiers.attrs AttributeApplicationTime.beforeElaboration;
explictLevelNames ← getLevelNames;
decl? ← runTermElabM declName $ fun vars => Term.elabBinders view.binders.getArgs $ fun xs =>