Merge pull request #5427 from ethereum/liblangutil

Factor out langutil, a new static library that is shared between libyul/libsolidity
This commit is contained in:
chriseth
2018-11-22 00:31:01 +01:00
committed by GitHub
155 changed files with 1164 additions and 830 deletions
+3
View File
@@ -5,6 +5,8 @@ file(GLOB contracts_sources "contracts/*.cpp")
file(GLOB contracts_headers "contracts/*.h")
file(GLOB libdevcore_sources "libdevcore/*.cpp")
file(GLOB libdevcore_headers "libdevcore/*.h")
file(GLOB liblangutil_sources "liblangutil/*.cpp")
file(GLOB liblangutil_headers "liblangutil/*.h")
file(GLOB libevmasm_sources "libevmasm/*.cpp")
file(GLOB libevmasm_headers "libevmasm/*.h")
file(GLOB libyul_sources "libyul/*.cpp")
@@ -19,6 +21,7 @@ file(GLOB libsolidity_headers "libsolidity/*.h")
add_executable(soltest ${sources} ${headers}
${contracts_sources} ${contracts_headers}
${libdevcore_sources} ${libdevcore_headers}
${liblangutil_sources} ${liblangutil_headers}
${libevmasm_sources} ${libevmasm_headers}
${libyul_sources} ${libyul_headers}
${liblll_sources} ${liblll_headers}
+1 -1
View File
@@ -25,7 +25,7 @@
#include <test/Options.h>
#include <test/RPCSession.h>
#include <libsolidity/interface/EVMVersion.h>
#include <liblangutil/EVMVersion.h>
#include <libdevcore/FixedHash.h>
#include <libdevcore/Keccak256.h>
+2 -2
View File
@@ -23,8 +23,8 @@
#include <test/Common.h>
#include <libsolidity/interface/EVMVersion.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/EVMVersion.h>
#include <liblangutil/Exceptions.h>
#include <boost/test/framework.hpp>
#include <boost/filesystem.hpp>
+1 -1
View File
@@ -19,7 +19,7 @@
#pragma once
#include <libsolidity/interface/EVMVersion.h>
#include <liblangutil/EVMVersion.h>
#include <boost/test/unit_test.hpp>
#include <boost/filesystem.hpp>
+1 -1
View File
@@ -23,7 +23,7 @@
#include <test/Options.h>
#include <libsolidity/interface/EVMVersion.h>
#include <liblangutil/EVMVersion.h>
#include <libdevcore/CommonData.h>
+1
View File
@@ -30,6 +30,7 @@
#include <memory>
using namespace std;
using namespace langutil;
using namespace dev::eth;
namespace dev
+1
View File
@@ -36,6 +36,7 @@
#include <memory>
using namespace std;
using namespace langutil;
using namespace dev::eth;
namespace dev
@@ -20,13 +20,11 @@
* Unit tests for the SourceLocation class.
*/
#include <libevmasm/SourceLocation.h>
#include <liblangutil/SourceLocation.h>
#include <test/Options.h>
namespace dev
{
namespace solidity
namespace langutil
{
namespace test
{
@@ -45,6 +43,5 @@ BOOST_AUTO_TEST_CASE(test_fail)
BOOST_AUTO_TEST_SUITE_END()
}
}
} // end namespaces
+1 -1
View File
@@ -22,7 +22,7 @@
#include <string>
#include <tuple>
#include <boost/test/unit_test.hpp>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <test/libsolidity/SolidityExecutionFramework.h>
#include <test/libsolidity/ABITestsCommon.h>
+1 -1
View File
@@ -22,7 +22,7 @@
#include <string>
#include <tuple>
#include <boost/test/unit_test.hpp>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <test/libsolidity/SolidityExecutionFramework.h>
#include <test/libsolidity/ABITestsCommon.h>
+3 -2
View File
@@ -27,7 +27,7 @@
#include <libsolidity/ast/AST.h>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libdevcore/Keccak256.h>
@@ -35,6 +35,7 @@
using namespace std;
using namespace dev;
using namespace langutil;
using namespace dev::solidity;
using namespace dev::solidity::test;
@@ -127,7 +128,7 @@ string AnalysisFramework::formatError(Error const& _error) const
return SourceReferenceFormatter::formatExceptionInformation(
_error,
(_error.type() == Error::Type::Warning) ? "Warning" : "Error",
[&](std::string const& _sourceName) -> solidity::Scanner const& { return m_compiler.scanner(_sourceName); }
[&](std::string const& _sourceName) -> Scanner const& { return m_compiler.scanner(_sourceName); }
);
}
+4 -4
View File
@@ -45,7 +45,7 @@ class AnalysisFramework
{
protected:
virtual std::pair<SourceUnit const*, ErrorList>
virtual std::pair<SourceUnit const*, langutil::ErrorList>
parseAnalyseAndReturnError(
std::string const& _source,
bool _reportWarnings = false,
@@ -56,10 +56,10 @@ protected:
SourceUnit const* parseAndAnalyse(std::string const& _source);
bool success(std::string const& _source);
ErrorList expectError(std::string const& _source, bool _warning = false, bool _allowMultiple = false);
langutil::ErrorList expectError(std::string const& _source, bool _warning = false, bool _allowMultiple = false);
std::string formatErrors() const;
std::string formatError(Error const& _error) const;
std::string formatError(langutil::Error const& _error) const;
static ContractDefinition const* retrieveContractByName(SourceUnit const& _source, std::string const& _name);
static FunctionTypePointer retrieveFunctionBySignature(
@@ -68,7 +68,7 @@ protected:
);
// filter out the warnings in m_warningsToFilter or all warnings if _includeWarnings is false
ErrorList filterErrors(ErrorList const& _errorList, bool _includeWarnings) const;
langutil::ErrorList filterErrors(langutil::ErrorList const& _errorList, bool _includeWarnings) const;
std::vector<std::string> m_warningsToFilter = {"This is a pre-release compiler version"};
dev::solidity::CompilerStack m_compiler;
+4 -3
View File
@@ -22,16 +22,16 @@
#include <test/Options.h>
#include <libevmasm/SourceLocation.h>
#include <liblangutil/SourceLocation.h>
#include <libevmasm/Assembly.h>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/parsing/Parser.h>
#include <libsolidity/analysis/NameAndTypeResolver.h>
#include <libsolidity/codegen/Compiler.h>
#include <libsolidity/ast/AST.h>
#include <libsolidity/analysis/TypeChecker.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <liblangutil/ErrorReporter.h>
#include <boost/test/unit_test.hpp>
@@ -39,6 +39,7 @@
#include <iostream>
using namespace std;
using namespace langutil;
using namespace dev::eth;
namespace dev
+1
View File
@@ -27,6 +27,7 @@
using namespace std;
using namespace dev;
using namespace langutil;
using namespace dev::solidity;
namespace
+3 -3
View File
@@ -21,7 +21,7 @@
#pragma once
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <vector>
#include <tuple>
@@ -30,10 +30,10 @@ namespace dev
{
namespace solidity
{
bool searchErrorMessage(Error const& _err, std::string const& _substr);
bool searchErrorMessage(langutil::Error const& _err, std::string const& _substr);
/// Checks that all provided errors are of the given type and have a given substring in their
/// description.
/// If the expectations are not met, returns a nonempty description, otherwise an empty string.
std::string searchErrors(ErrorList const& _errors, std::vector<std::pair<Error::Type, std::string>> const& _expectations);
std::string searchErrors(langutil::ErrorList const& _errors, std::vector<std::pair<langutil::Error::Type, std::string>> const& _expectations);
}
}
+1
View File
@@ -29,6 +29,7 @@
#include <libsolidity/interface/SourceReferenceFormatter.h>
using namespace std;
using namespace langutil;
using namespace dev::eth;
using namespace dev::solidity;
using namespace dev::test;
+1 -1
View File
@@ -23,7 +23,7 @@
#include <test/libsolidity/ErrorCheck.h>
#include <test/Options.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <libsolidity/interface/CompilerStack.h>
#include <boost/test/unit_test.hpp>
+3 -2
View File
@@ -23,8 +23,8 @@
#include <test/Options.h>
#include <libsolidity/interface/AssemblyStack.h>
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Scanner.h>
#include <liblangutil/Exceptions.h>
#include <libsolidity/ast/AST.h>
#include <test/libsolidity/ErrorCheck.h>
#include <libevmasm/Assembly.h>
@@ -36,6 +36,7 @@
#include <memory>
using namespace std;
using namespace langutil;
namespace dev
{
+1
View File
@@ -25,6 +25,7 @@
#include <string>
using namespace std;
using namespace langutil;
namespace dev
{
+2 -1
View File
@@ -23,11 +23,12 @@
#include <string>
#include <vector>
#include <tuple>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/analysis/SemVerHandler.h>
#include <test/Options.h>
using namespace std;
using namespace langutil;
namespace dev
{
+2 -2
View File
@@ -25,8 +25,8 @@
#include <test/Options.h>
#include <libsolidity/interface/Exceptions.h>
#include <libsolidity/interface/EVMVersion.h>
#include <liblangutil/Exceptions.h>
#include <liblangutil/EVMVersion.h>
#include <libevmasm/Assembly.h>
@@ -27,7 +27,7 @@
#include <test/ExecutionFramework.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <libsolidity/interface/SourceReferenceFormatter.h>
namespace dev
@@ -72,13 +72,13 @@ public:
m_compiler.setOptimiserSettings(m_optimize, m_optimizeRuns);
if (!m_compiler.compile())
{
auto scannerFromSourceName = [&](std::string const& _sourceName) -> solidity::Scanner const& { return m_compiler.scanner(_sourceName); };
auto scannerFromSourceName = [&](std::string const& _sourceName) -> langutil::Scanner const& { return m_compiler.scanner(_sourceName); };
SourceReferenceFormatter formatter(std::cerr, scannerFromSourceName);
for (auto const& error: m_compiler.errors())
formatter.printExceptionInformation(
*error,
(error->type() == Error::Type::Warning) ? "Warning" : "Error"
(error->type() == langutil::Error::Type::Warning) ? "Warning" : "Error"
);
BOOST_ERROR("Compiling contract failed");
}
@@ -22,17 +22,18 @@
#include <string>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/parsing/Parser.h>
#include <libsolidity/analysis/NameAndTypeResolver.h>
#include <libsolidity/codegen/CompilerContext.h>
#include <libsolidity/codegen/ExpressionCompiler.h>
#include <libsolidity/ast/AST.h>
#include <libsolidity/analysis/TypeChecker.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <liblangutil/ErrorReporter.h>
#include <test/Options.h>
using namespace std;
using namespace langutil;
namespace dev
{
@@ -33,6 +33,7 @@
#include <string>
using namespace std;
using namespace langutil;
namespace dev
{
+3 -1
View File
@@ -24,9 +24,11 @@
#include <string>
#include <libdevcore/JSON.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <libdevcore/Exceptions.h>
using namespace langutil;
namespace dev
{
namespace solidity
+3 -2
View File
@@ -22,13 +22,14 @@
#include <string>
#include <memory>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/parsing/Parser.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <liblangutil/ErrorReporter.h>
#include <test/Options.h>
#include <test/libsolidity/ErrorCheck.h>
using namespace std;
using namespace langutil;
namespace dev
{
+2 -1
View File
@@ -20,10 +20,11 @@
* Unit tests for the solidity scanner.
*/
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <boost/test/unit_test.hpp>
using namespace std;
using namespace langutil;
namespace dev
{
+1
View File
@@ -26,6 +26,7 @@
#include <boost/test/unit_test.hpp>
using namespace std;
using namespace langutil;
namespace dev
{
+1
View File
@@ -25,6 +25,7 @@
#include <stdexcept>
using namespace dev;
using namespace langutil;
using namespace solidity;
using namespace dev::solidity::test;
using namespace dev::solidity::test::formatting;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <test/libsolidity/AnalysisFramework.h>
#include <test/libsolidity/FormattedScope.h>
#include <test/libsolidity/TestCase.h>
#include <libsolidity/interface/Exceptions.h>
#include <liblangutil/Exceptions.h>
#include <iosfwd>
#include <string>
+1
View File
@@ -28,6 +28,7 @@
#include <tuple>
using namespace std;
using namespace langutil;
namespace dev
{
+3 -2
View File
@@ -25,18 +25,19 @@
#include <libyul/optimiser/Disambiguator.h>
#include <libsolidity/parsing/Scanner.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/inlineasm/AsmParser.h>
#include <libsolidity/inlineasm/AsmAnalysis.h>
#include <libsolidity/inlineasm/AsmPrinter.h>
#include <libsolidity/interface/SourceReferenceFormatter.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <liblangutil/ErrorReporter.h>
#include <boost/test/unit_test.hpp>
using namespace std;
using namespace langutil;
using namespace dev::yul;
using namespace dev::solidity;
+8 -4
View File
@@ -27,13 +27,17 @@
#include <vector>
#include <memory>
namespace dev
{
namespace solidity
namespace langutil
{
class Scanner;
class Error;
using ErrorList = std::vector<std::shared_ptr<Error const>>;
}
namespace dev
{
namespace solidity
{
namespace assembly
{
struct AsmAnalysisInfo;
@@ -44,7 +48,7 @@ namespace yul
namespace test
{
void printErrors(solidity::ErrorList const& _errors, solidity::Scanner const& _scanner);
void printErrors(langutil::ErrorList const& _errors, langutil::Scanner const& _scanner);
std::pair<std::shared_ptr<solidity::assembly::Block>, std::shared_ptr<solidity::assembly::AsmAnalysisInfo>>
parse(std::string const& _source, bool _yul = true);
solidity::assembly::Block disambiguate(std::string const& _source, bool _yul = true);
+3 -2
View File
@@ -26,8 +26,8 @@
#include <libsolidity/inlineasm/AsmParser.h>
#include <libsolidity/inlineasm/AsmAnalysis.h>
#include <libsolidity/inlineasm/AsmAnalysisInfo.h>
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <liblangutil/Scanner.h>
#include <liblangutil/ErrorReporter.h>
#include <boost/optional.hpp>
#include <boost/algorithm/string/replace.hpp>
@@ -36,6 +36,7 @@
#include <memory>
using namespace std;
using namespace langutil;
namespace dev
{
+4 -2
View File
@@ -21,6 +21,9 @@
#include <test/Options.h>
#include <liblangutil/ErrorReporter.h>
#include <liblangutil/Scanner.h>
#include <libyul/optimiser/BlockFlattener.h>
#include <libyul/optimiser/VarDeclPropagator.h>
#include <libyul/optimiser/Disambiguator.h>
@@ -41,12 +44,10 @@
#include <libyul/optimiser/RedundantAssignEliminator.h>
#include <libyul/optimiser/Suite.h>
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/inlineasm/AsmPrinter.h>
#include <libsolidity/inlineasm/AsmParser.h>
#include <libsolidity/inlineasm/AsmAnalysis.h>
#include <libsolidity/interface/SourceReferenceFormatter.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <boost/test/unit_test.hpp>
#include <boost/algorithm/string.hpp>
@@ -54,6 +55,7 @@
#include <fstream>
using namespace dev;
using namespace langutil;
using namespace dev::yul;
using namespace dev::yul::test;
using namespace dev::solidity;
+7 -4
View File
@@ -19,14 +19,17 @@
#include <test/libsolidity/TestCase.h>
namespace langutil
{
class Scanner;
class Error;
using ErrorList = std::vector<std::shared_ptr<Error const>>;
}
namespace dev
{
namespace solidity
{
class Scanner;
class Error;
using ErrorList = std::vector<std::shared_ptr<Error const>>;
namespace assembly
{
struct AsmAnalysisInfo;
@@ -58,7 +61,7 @@ private:
bool parse(std::ostream& _stream, std::string const& _linePrefix, bool const _formatted);
void disambiguate();
static void printErrors(std::ostream& _stream, solidity::ErrorList const& _errors, solidity::Scanner const& _scanner);
static void printErrors(std::ostream& _stream, langutil::ErrorList const& _errors, langutil::Scanner const& _scanner);
std::string m_source;
bool m_yul = false;
+3 -2
View File
@@ -19,15 +19,15 @@
*/
#include <libdevcore/CommonIO.h>
#include <liblangutil/ErrorReporter.h>
#include <liblangutil/Scanner.h>
#include <libsolidity/inlineasm/AsmAnalysis.h>
#include <libsolidity/inlineasm/AsmAnalysisInfo.h>
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/parsing/Parser.h>
#include <libsolidity/inlineasm/AsmData.h>
#include <libsolidity/inlineasm/AsmParser.h>
#include <libsolidity/inlineasm/AsmPrinter.h>
#include <libsolidity/interface/SourceReferenceFormatter.h>
#include <libsolidity/interface/ErrorReporter.h>
#include <libyul/optimiser/BlockFlattener.h>
#include <libyul/optimiser/Disambiguator.h>
@@ -58,6 +58,7 @@
using namespace std;
using namespace dev;
using namespace langutil;
using namespace dev::solidity;
using namespace dev::solidity::assembly;
using namespace dev::yul;