Merge pull request #2098 from ethereum/sourceformatter

Introduce formatExceptionInformation
This commit is contained in:
Alex Beregszaszi 2017-04-10 14:46:59 +01:00 committed by GitHub
commit bd48f181b5
2 changed files with 17 additions and 17 deletions

View File

@ -23,6 +23,7 @@
#pragma once #pragma once
#include <ostream> #include <ostream>
#include <sstream>
#include <functional> #include <functional>
#include <libevmasm/SourceLocation.h> #include <libevmasm/SourceLocation.h>
@ -53,6 +54,16 @@ public:
std::string const& _name, std::string const& _name,
ScannerFromSourceNameFun const& _scannerFromSourceName ScannerFromSourceNameFun const& _scannerFromSourceName
); );
static std::string formatExceptionInformation(
Exception const& _exception,
std::string const& _name,
ScannerFromSourceNameFun const& _scannerFromSourceName
)
{
std::ostringstream errorOutput;
printExceptionInformation(errorOutput, _exception, _name, _scannerFromSourceName);
return errorOutput.str();
}
private: private:
/// Prints source name if location is given. /// Prints source name if location is given.
static void printSourceName( static void printSourceName(

View File

@ -50,17 +50,6 @@ extern "C" {
typedef void (*CStyleReadFileCallback)(char const* _path, char** o_contents, char** o_error); typedef void (*CStyleReadFileCallback)(char const* _path, char** o_contents, char** o_error);
} }
string formatError(
Exception const& _exception,
string const& _name,
function<Scanner const&(string const&)> const& _scannerFromSourceName
)
{
ostringstream errorOutput;
SourceReferenceFormatter::printExceptionInformation(errorOutput, _exception, _name, _scannerFromSourceName);
return errorOutput.str();
}
Json::Value functionHashes(ContractDefinition const& _contract) Json::Value functionHashes(ContractDefinition const& _contract)
{ {
Json::Value functionHashes(Json::objectValue); Json::Value functionHashes(Json::objectValue);
@ -170,7 +159,7 @@ string compile(StringMap const& _sources, bool _optimize, CStyleReadFileCallback
for (auto const& error: compiler.errors()) for (auto const& error: compiler.errors())
{ {
auto err = dynamic_pointer_cast<Error const>(error); auto err = dynamic_pointer_cast<Error const>(error);
errors.append(formatError( errors.append(SourceReferenceFormatter::formatExceptionInformation(
*error, *error,
(err->type() == Error::Type::Warning) ? "Warning" : "Error", (err->type() == Error::Type::Warning) ? "Warning" : "Error",
scannerFromSourceName scannerFromSourceName
@ -180,19 +169,19 @@ string compile(StringMap const& _sources, bool _optimize, CStyleReadFileCallback
} }
catch (Error const& error) catch (Error const& error)
{ {
errors.append(formatError(error, error.typeName(), scannerFromSourceName)); errors.append(SourceReferenceFormatter::formatExceptionInformation(error, error.typeName(), scannerFromSourceName));
} }
catch (CompilerError const& exception) catch (CompilerError const& exception)
{ {
errors.append(formatError(exception, "Compiler error (" + exception.lineInfo() + ")", scannerFromSourceName)); errors.append(SourceReferenceFormatter::formatExceptionInformation(exception, "Compiler error (" + exception.lineInfo() + ")", scannerFromSourceName));
} }
catch (InternalCompilerError const& exception) catch (InternalCompilerError const& exception)
{ {
errors.append(formatError(exception, "Internal compiler error (" + exception.lineInfo() + ")", scannerFromSourceName)); errors.append(SourceReferenceFormatter::formatExceptionInformation(exception, "Internal compiler error (" + exception.lineInfo() + ")", scannerFromSourceName));
} }
catch (UnimplementedFeatureError const& exception) catch (UnimplementedFeatureError const& exception)
{ {
errors.append(formatError(exception, "Unimplemented feature (" + exception.lineInfo() + ")", scannerFromSourceName)); errors.append(SourceReferenceFormatter::formatExceptionInformation(exception, "Unimplemented feature (" + exception.lineInfo() + ")", scannerFromSourceName));
} }
catch (Exception const& exception) catch (Exception const& exception)
{ {
@ -245,7 +234,7 @@ string compile(StringMap const& _sources, bool _optimize, CStyleReadFileCallback
{ {
Json::Value errors(Json::arrayValue); Json::Value errors(Json::arrayValue);
for (auto const& error: formalErrors) for (auto const& error: formalErrors)
errors.append(formatError( errors.append(SourceReferenceFormatter::formatExceptionInformation(
*error, *error,
(error->type() == Error::Type::Warning) ? "Warning" : "Error", (error->type() == Error::Type::Warning) ? "Warning" : "Error",
scannerFromSourceName scannerFromSourceName