mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Unify preamble handling between AnalysisFramework and SolidityExecutionFramework
This commit is contained in:
parent
18db62cf41
commit
ec92685bcb
@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include <test/libsolidity/SolidityExecutionFramework.h>
|
||||
#include <test/libsolidity/util/Common.h>
|
||||
|
||||
#include <liblangutil/DebugInfoSelection.h>
|
||||
#include <liblangutil/Exceptions.h>
|
||||
@ -48,12 +49,12 @@ bytes SolidityExecutionFramework::multiSourceCompileContract(
|
||||
{
|
||||
if (_mainSourceName.has_value())
|
||||
solAssert(_sourceCode.find(_mainSourceName.value()) != _sourceCode.end(), "");
|
||||
map<string, string> sourcesWithPreamble = _sourceCode;
|
||||
for (auto& entry: sourcesWithPreamble)
|
||||
entry.second = addPreamble(entry.second);
|
||||
|
||||
m_compiler.reset();
|
||||
m_compiler.setSources(sourcesWithPreamble);
|
||||
m_compiler.setSources(withPreamble(
|
||||
_sourceCode,
|
||||
solidity::test::CommonOptions::get().useABIEncoderV1 // _addAbicoderV1Pragma
|
||||
));
|
||||
m_compiler.setLibraries(_libraryAddresses);
|
||||
m_compiler.setRevertStringBehaviour(m_revertStrings);
|
||||
m_compiler.setEVMVersion(m_evmVersion);
|
||||
@ -141,18 +142,3 @@ bytes SolidityExecutionFramework::compileContract(
|
||||
_libraryAddresses
|
||||
);
|
||||
}
|
||||
|
||||
string SolidityExecutionFramework::addPreamble(string const& _sourceCode)
|
||||
{
|
||||
// Silence compiler version warning
|
||||
string preamble = "pragma solidity >=0.0;\n";
|
||||
if (_sourceCode.find("SPDX-License-Identifier:") == string::npos)
|
||||
preamble += "// SPDX-License-Identifier: unlicensed\n";
|
||||
if (
|
||||
solidity::test::CommonOptions::get().useABIEncoderV1 &&
|
||||
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos &&
|
||||
_sourceCode.find("pragma abicoder") == string::npos
|
||||
)
|
||||
preamble += "pragma abicoder v1;\n";
|
||||
return preamble + _sourceCode;
|
||||
}
|
||||
|
@ -79,9 +79,6 @@ public:
|
||||
std::map<std::string, solidity::test::Address> const& _libraryAddresses = {}
|
||||
);
|
||||
|
||||
/// Returns @param _sourceCode prefixed with the version pragma and the abi coder v1 pragma,
|
||||
/// the latter only if it is forced.
|
||||
static std::string addPreamble(std::string const& _sourceCode);
|
||||
protected:
|
||||
using CompilerStack = solidity::frontend::CompilerStack;
|
||||
std::optional<uint8_t> m_eofVersion;
|
||||
|
@ -22,25 +22,30 @@ using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::frontend;
|
||||
|
||||
string test::withPreamble(string const& _sourceCode)
|
||||
string test::withPreamble(string const& _sourceCode, bool _addAbicoderV1Pragma)
|
||||
{
|
||||
static string const versionPragma = "pragma solidity >=0.0;\n";
|
||||
static string const licenseComment = "// SPDX-License-Identifier: GPL-3.0\n";
|
||||
static string const abicoderPragma = "pragma abicoder v1;\n";
|
||||
|
||||
// NOTE: this check is intentionally loose to match weird cases.
|
||||
// NOTE: These checks are intentionally loose to match weird cases.
|
||||
// We can manually adjust a test case where this causes problem.
|
||||
bool licenseMissing = _sourceCode.find("SPDX-License-Identifier:") == string::npos;
|
||||
bool abicoderMissing =
|
||||
_sourceCode.find("pragma experimental ABIEncoderV2;") == string::npos &&
|
||||
_sourceCode.find("pragma abicoder") == string::npos;
|
||||
|
||||
return
|
||||
versionPragma +
|
||||
(licenseMissing ? licenseComment : "") +
|
||||
(abicoderMissing && _addAbicoderV1Pragma ? abicoderPragma : "") +
|
||||
_sourceCode;
|
||||
}
|
||||
|
||||
StringMap test::withPreamble(StringMap _sources)
|
||||
StringMap test::withPreamble(StringMap _sources, bool _addAbicoderV1Pragma)
|
||||
{
|
||||
for (auto&& [sourceName, source]: _sources)
|
||||
source = withPreamble(source);
|
||||
source = withPreamble(source, _addAbicoderV1Pragma);
|
||||
|
||||
return _sources;
|
||||
}
|
||||
|
@ -26,9 +26,10 @@ namespace solidity::frontend::test
|
||||
{
|
||||
|
||||
/// @returns @p _sourceCode prefixed with the version pragma and the SPDX license identifier.
|
||||
std::string withPreamble(std::string const& _sourceCode);
|
||||
/// Can optionally also insert an abicoder pragma when missing.
|
||||
std::string withPreamble(std::string const& _sourceCode, bool _addAbicoderV1Pragma = false);
|
||||
|
||||
/// @returns a copy of @p _sources with preamble prepended to all sources.
|
||||
StringMap withPreamble(StringMap _sources);
|
||||
StringMap withPreamble(StringMap _sources, bool _addAbicoderV1Pragma = false);
|
||||
|
||||
} // namespace solidity::frontend::test
|
||||
|
Loading…
Reference in New Issue
Block a user