Error formatting.

This commit is contained in:
chriseth
2015-09-21 20:03:53 +02:00
parent 39d1e2bc06
commit 42c0009205
6 changed files with 64 additions and 51 deletions
+6 -1
View File
@@ -490,7 +490,12 @@ bool CommandLineInterface::processInput()
// TODO: Perhaps we should not compile unless requested
bool optimize = m_args.count("optimize") > 0;
unsigned runs = m_args["optimize-runs"].as<unsigned>();
m_compiler->compile(optimize, runs);
if (!m_compiler->compile(optimize, runs))
{
for (auto const& error: m_compiler->errors())
SourceReferenceFormatter::printExceptionInformation(cerr, *error, "Error", *m_compiler);
return false;
}
m_compiler->link(m_libraries);
}
catch (ParserError const& _exception)
+20 -14
View File
@@ -46,10 +46,7 @@ string formatError(Exception const& _exception, string const& _name, CompilerSta
{
ostringstream errorOutput;
SourceReferenceFormatter::printExceptionInformation(errorOutput, _exception, _name, _compiler);
Json::Value output(Json::objectValue);
output["error"] = errorOutput.str();
return Json::FastWriter().write(output);
return errorOutput.str();
}
Json::Value functionHashes(ContractDefinition const& _contract)
@@ -123,43 +120,52 @@ string compile(string _input, bool _optimize)
sources[""] = _input;
Json::Value output(Json::objectValue);
Json::Value errors(Json::arrayValue);
CompilerStack compiler;
try
{
compiler.compile(_input, _optimize);
if (!compiler.compile(_input, _optimize))
{
for (auto const& error: compiler.errors())
errors.append(formatError(*error, "Error", compiler));
}
}
catch (ParserError const& exception)
{
return formatError(exception, "Parser error", compiler);
errors.append(formatError(exception, "Parser error", compiler));
}
catch (DeclarationError const& exception)
{
return formatError(exception, "Declaration error", compiler);
errors.append(formatError(exception, "Declaration error", compiler));
}
catch (TypeError const& exception)
{
return formatError(exception, "Type error", compiler);
errors.append(formatError(exception, "Type error", compiler));
}
catch (CompilerError const& exception)
{
return formatError(exception, "Compiler error", compiler);
errors.append(formatError(exception, "Compiler error", compiler));
}
catch (InternalCompilerError const& exception)
{
return formatError(exception, "Internal compiler error", compiler);
errors.append(formatError(exception, "Internal compiler error", compiler));
}
catch (DocstringParsingError const& exception)
{
return formatError(exception, "Documentation parsing error", compiler);
errors.append(formatError(exception, "Documentation parsing error", compiler));
}
catch (Exception const& exception)
{
output["error"] = "Exception during compilation: " + boost::diagnostic_information(exception);
return Json::FastWriter().write(output);
errors.append("Exception during compilation: " + boost::diagnostic_information(exception));
}
catch (...)
{
output["error"] = "Unknown exception during compilation.";
errors.append("Unknown exception during compilation.");
}
if (errors.size() > 0)
{
output["errors"] = errors;
return Json::FastWriter().write(output);
}