From aeb66905de3f65ca7a63addb6c9d05108986dbeb Mon Sep 17 00:00:00 2001 From: Christian Parpart Date: Sat, 24 Nov 2018 12:33:36 +0100 Subject: Moving SourceReferenceFormatter into langutil namespace. --- liblangutil/SourceReferenceFormatter.h | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 liblangutil/SourceReferenceFormatter.h (limited to 'liblangutil/SourceReferenceFormatter.h') diff --git a/liblangutil/SourceReferenceFormatter.h b/liblangutil/SourceReferenceFormatter.h new file mode 100644 index 00000000..0ef3ca00 --- /dev/null +++ b/liblangutil/SourceReferenceFormatter.h @@ -0,0 +1,76 @@ +/* + 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 Christian + * @date 2014 + * Formatting functions for errors referencing positions and locations in the source. + */ + +#pragma once + +#include +#include +#include + +namespace dev +{ +struct Exception; // forward +} + +namespace langutil +{ +struct SourceLocation; +class Scanner; + +class SourceReferenceFormatter +{ +public: + using ScannerFromSourceNameFun = std::function; + + explicit SourceReferenceFormatter( + std::ostream& _stream, + ScannerFromSourceNameFun _scannerFromSourceName + ): + m_stream(_stream), + m_scannerFromSourceName(std::move(_scannerFromSourceName)) + {} + + /// Prints source location if it is given. + void printSourceLocation(langutil::SourceLocation const* _location); + void printExceptionInformation(dev::Exception const& _exception, std::string const& _name); + + static std::string formatExceptionInformation( + dev::Exception const& _exception, + std::string const& _name, + ScannerFromSourceNameFun const& _scannerFromSourceName + ) + { + std::ostringstream errorOutput; + + SourceReferenceFormatter formatter(errorOutput, _scannerFromSourceName); + formatter.printExceptionInformation(_exception, _name); + return errorOutput.str(); + } +private: + /// Prints source name if location is given. + void printSourceName(langutil::SourceLocation const* _location); + + std::ostream& m_stream; + ScannerFromSourceNameFun m_scannerFromSourceName; +}; + +} -- cgit