diff options
Diffstat (limited to 'src/smt/smt_engine.cpp')
-rw-r--r-- | src/smt/smt_engine.cpp | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index 97e3f0215..ca01ccd8e 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -1304,8 +1304,8 @@ void SmtEngine::setDefaults() { // Language-based defaults if (!options::bitvectorDivByZeroConst.wasSetByUser()) { - options::bitvectorDivByZeroConst.set(options::inputLanguage() - == language::input::LANG_SMTLIB_V2_6); + options::bitvectorDivByZeroConst.set( + language::isInputLang_smt2_6(options::inputLanguage())); } if (options::inputLanguage() == language::input::LANG_SYGUS) { @@ -2262,44 +2262,40 @@ void SmtEngine::setInfo(const std::string& key, const CVC4::SExpr& value) d_filename = value.getValue(); return; } else if(key == "smt-lib-version") { + language::input::Language ilang = language::input::LANG_AUTO; if( (value.isInteger() && value.getIntegerValue() == Integer(2)) || (value.isRational() && value.getRationalValue() == Rational(2)) || value.getValue() == "2" || value.getValue() == "2.0" ) { - options::inputLanguage.set(language::input::LANG_SMTLIB_V2_0); - - // supported SMT-LIB version - if(!options::outputLanguage.wasSetByUser() && - ( options::outputLanguage() == language::output::LANG_SMTLIB_V2_5 || options::outputLanguage() == language::output::LANG_SMTLIB_V2_6 )) { - options::outputLanguage.set(language::output::LANG_SMTLIB_V2_0); - *options::out() << language::SetLanguage(language::output::LANG_SMTLIB_V2_0); - } - return; + ilang = language::input::LANG_SMTLIB_V2_0; } else if( (value.isRational() && value.getRationalValue() == Rational(5, 2)) || value.getValue() == "2.5" ) { - options::inputLanguage.set(language::input::LANG_SMTLIB_V2_5); - - // supported SMT-LIB version - if(!options::outputLanguage.wasSetByUser() && - options::outputLanguage() == language::output::LANG_SMTLIB_V2_0) { - options::outputLanguage.set(language::output::LANG_SMTLIB_V2_5); - *options::out() << language::SetLanguage(language::output::LANG_SMTLIB_V2_5); - } - return; + ilang = language::input::LANG_SMTLIB_V2_5; } else if( (value.isRational() && value.getRationalValue() == Rational(13, 5)) || value.getValue() == "2.6" ) { - options::inputLanguage.set(language::input::LANG_SMTLIB_V2_6); - - // supported SMT-LIB version - if(!options::outputLanguage.wasSetByUser() && - options::outputLanguage() == language::output::LANG_SMTLIB_V2_0) { - options::outputLanguage.set(language::output::LANG_SMTLIB_V2_6); - *options::out() << language::SetLanguage(language::output::LANG_SMTLIB_V2_6); + ilang = language::input::LANG_SMTLIB_V2_6; + } + else if (value.getValue() == "2.6.1") + { + ilang = language::input::LANG_SMTLIB_V2_6_1; + } + else + { + Warning() << "Warning: unsupported smt-lib-version: " << value << endl; + throw UnrecognizedOptionException(); + } + options::inputLanguage.set(ilang); + // also update the output language + if (!options::outputLanguage.wasSetByUser()) + { + language::output::Language olang = language::toOutputLanguage(ilang); + if (options::outputLanguage() != olang) + { + options::outputLanguage.set(olang); + *options::out() << language::SetLanguage(olang); } - return; } - Warning() << "Warning: unsupported smt-lib-version: " << value << endl; - throw UnrecognizedOptionException(); + return; } else if(key == "status") { string s; if(value.isAtom()) { |