/* 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 Liana * @date 2015 * Solidity exception hierarchy. */ #include #include using namespace std; using namespace dev; using namespace dev::solidity; Error::Error(Type _type, SourceLocation const& _location, string const& _description): m_type(_type) { switch(m_type) { case Type::DeclarationError: m_typeName = "Declaration Error"; break; case Type::DocstringParsingError: m_typeName = "Docstring Parsing Error"; break; case Type::ParserError: m_typeName = "Parser Error"; break; case Type::SyntaxError: m_typeName = "Syntax Error"; break; case Type::TypeError: m_typeName = "Type Error"; break; case Type::Why3TranslatorError: m_typeName = "Why3 Translator Error"; break; case Type::Warning: m_typeName = "Warning"; break; default: solAssert(false, ""); break; } if (!_location.isEmpty()) *this << errinfo_sourceLocation(_location); if (!_description.empty()) *this << errinfo_comment(_description); } Error::Error(Error::Type _type, const std::string& _description, const SourceLocation& _location): Error(_type) { if (!_location.isEmpty()) *this << errinfo_sourceLocation(_location); *this << errinfo_comment(_description); } string Exception::lineInfo() const { char const* const* file = boost::get_error_info(*this); int const* line = boost::get_error_info(*this); string ret; if (file) ret += *file; ret += ':'; if (line) ret += boost::lexical_cast(*line); return ret; }