Improve handling of `:named` attributes (#6549)
authorAndres Noetzli <andres.noetzli@gmail.com>
Wed, 19 May 2021 01:27:09 +0000 (18:27 -0700)
committerGitHub <noreply@github.com>
Wed, 19 May 2021 01:27:09 +0000 (01:27 +0000)
commit4e6e168a5eb578df2bfd12becf7732cbdd23bc3a
tree1126450ad3e6d5dd453cb64c274ed5798d82588d
parent9ee8b184d9e97ae241ff079803b82859ed014dfa
Improve handling of `:named` attributes (#6549)

Currently, when a :named attribute is used in a binder, the parser
complains about an illegal argument. This is because an argument check
in the SymbolManager fails. This is not very user friendly. This
commit makes the error message clearer for the user:

Cannot name a term in a binder (e.g., quantifiers, definitions)

To do this, the commit changes the return type for
SymbolManager::setExpressionName to include more information that can
then be used by the parser to generate an appropriate error message.

The commit also changes define-fun to not push/pop the local scope
if it has zero arguments because it is semantically equivalent to a
define-const, which allows :named terms.
src/expr/symbol_manager.cpp
src/expr/symbol_manager.h
src/parser/smt2/Smt2.g
src/parser/smt2/smt2.cpp
test/regress/CMakeLists.txt
test/regress/regress0/parser/named-attr-error.smt2 [new file with mode: 0644]
test/regress/regress0/parser/named-attr.smt2 [new file with mode: 0644]