/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. solidity is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with solidity. If not, see . */ /** * @author Rhett * @date 2017 * Error helper class. */ #include #include #include using namespace std; using namespace dev; using namespace dev::solidity; ErrorReporter& ErrorReporter::operator=(ErrorReporter const& _errorReporter) { if (&_errorReporter == this) return *this; m_errorList = _errorReporter.m_errorList; return *this; } void ErrorReporter::warning(string const& _description) { error(Error::Type::Warning, SourceLocation(), _description); } void ErrorReporter::warning(SourceLocation const& _location, string const& _description) { error(Error::Type::Warning, _location, _description); } void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, string const& _description) { auto err = make_shared(_type); *err << errinfo_sourceLocation(_location) << errinfo_comment(_description); m_errorList.push_back(err); } void ErrorReporter::error(Error::Type _type, SourceLocation const& _location, SecondarySourceLocation const& _secondaryLocation, string const& _description) { auto err = make_shared(_type); *err << errinfo_sourceLocation(_location) << errinfo_secondarySourceLocation(_secondaryLocation) << errinfo_comment(_description); m_errorList.push_back(err); } void ErrorReporter::fatalError(Error::Type _type, SourceLocation const& _location, string const& _description) { error(_type, _location, _description); BOOST_THROW_EXCEPTION(FatalError()); } ErrorList const& ErrorReporter::errors() const { return m_errorList; } void ErrorReporter::clear() { m_errorList.clear(); } void ErrorReporter::declarationError(SourceLocation const& _location, SecondarySourceLocation const&_secondaryLocation, string const& _description) { error( Error::Type::DeclarationError, _location, _secondaryLocation, _description ); } void ErrorReporter::declarationError(SourceLocation const& _location, string const& _description) { error( Error::Type::DeclarationError, _location, _description ); } void ErrorReporter::fatalDeclarationError(SourceLocation const& _location, std::string const& _description) { fatalError( Error::Type::DeclarationError, _location, _description); } void ErrorReporter::parserError(SourceLocation const& _location, string const& _description) { error( Error::Type::ParserError, _location, _description ); } void ErrorReporter::fatalParserError(SourceLocation const& _location, string const& _description) { fatalError( Error::Type::ParserError, _location, _description ); } void ErrorReporter::syntaxError(SourceLocation const& _location, string const& _description) { error( Error::Type::SyntaxError, _location, _description ); } void ErrorReporter::typeError(SourceLocation const& _location, string const& _description) { error( Error::Type::TypeError, _location, _description ); } void ErrorReporter::fatalTypeError(SourceLocation const& _location, string const& _description) { fatalError(Error::Type::TypeError, _location, _description ); } void ErrorReporter::docstringParsingError(string const& _description) { error( Error::Type::DocstringParsingError, SourceLocation(), _description ); } void ErrorReporter::why3TranslatorError(ASTNode const& _location, std::string const& _description) { error( Error::Type::Why3TranslatorError, _location.location(), _description ); } void ErrorReporter::fatalWhy3TranslatorError(ASTNode const& _location, std::string const& _description) { fatalError( Error::Type::Why3TranslatorError, _location.location(), _description ); }