diff options
author | chriseth <chris@ethereum.org> | 2018-11-26 19:44:25 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-26 19:44:25 +0800 |
commit | 0b474d52994028392402ca1e7f56b613ab365dec (patch) | |
tree | 86b2096c12771148d49fe9cb468531b7d6d1610a /liblangutil/SourceReferenceFormatter.h | |
parent | bc137c2eeb6920cf33eea1ceaab49df3dfddad07 (diff) | |
parent | aeb66905de3f65ca7a63addb6c9d05108986dbeb (diff) | |
download | dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar.gz dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar.bz2 dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar.lz dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar.xz dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.tar.zst dexon-solidity-0b474d52994028392402ca1e7f56b613ab365dec.zip |
Merge pull request #5497 from ethereum/langutil-SourceReferenceFormatter
Moving SourceReferenceFormatter into langutil namespace.
Diffstat (limited to 'liblangutil/SourceReferenceFormatter.h')
-rw-r--r-- | liblangutil/SourceReferenceFormatter.h | 76 |
1 files changed, 76 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. +*/ +/** + * @author Christian <c@ethdev.com> + * @date 2014 + * Formatting functions for errors referencing positions and locations in the source. + */ + +#pragma once + +#include <ostream> +#include <sstream> +#include <functional> + +namespace dev +{ +struct Exception; // forward +} + +namespace langutil +{ +struct SourceLocation; +class Scanner; + +class SourceReferenceFormatter +{ +public: + using ScannerFromSourceNameFun = std::function<langutil::Scanner const&(std::string const&)>; + + 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; +}; + +} |