mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use LazyInit for cached contract compilations
This commit is contained in:
parent
cffd1eaff1
commit
24dfa89ee7
@ -24,9 +24,12 @@
|
|||||||
#include <test/contracts/ContractInterface.h>
|
#include <test/contracts/ContractInterface.h>
|
||||||
#include <test/EVMHost.h>
|
#include <test/EVMHost.h>
|
||||||
|
|
||||||
|
#include <libsolutil/LazyInit.h>
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace solidity;
|
using namespace solidity;
|
||||||
@ -212,17 +215,18 @@ contract GlobalRegistrar is Registrar, AuctionSystem {
|
|||||||
}
|
}
|
||||||
)DELIMITER";
|
)DELIMITER";
|
||||||
|
|
||||||
static unique_ptr<bytes> s_compiledRegistrar;
|
static LazyInit<bytes> s_compiledRegistrar;
|
||||||
|
|
||||||
class AuctionRegistrarTestFramework: public SolidityExecutionFramework
|
class AuctionRegistrarTestFramework: public SolidityExecutionFramework
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void deployRegistrar()
|
void deployRegistrar()
|
||||||
{
|
{
|
||||||
if (!s_compiledRegistrar)
|
bytes const& compiled = s_compiledRegistrar.init([&]{
|
||||||
s_compiledRegistrar = make_unique<bytes>(compileContract(registrarCode, "GlobalRegistrar"));
|
return compileContract(registrarCode, "GlobalRegistrar");
|
||||||
|
});
|
||||||
|
|
||||||
sendMessage(*s_compiledRegistrar, true);
|
sendMessage(compiled, true);
|
||||||
BOOST_REQUIRE(m_transactionSuccessful);
|
BOOST_REQUIRE(m_transactionSuccessful);
|
||||||
BOOST_REQUIRE(!m_output.empty());
|
BOOST_REQUIRE(!m_output.empty());
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,11 @@
|
|||||||
* Tests for a fixed fee registrar contract.
|
* Tests for a fixed fee registrar contract.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libsolutil/LazyInit.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
@ -122,17 +125,18 @@ contract FixedFeeRegistrar is Registrar {
|
|||||||
}
|
}
|
||||||
)DELIMITER";
|
)DELIMITER";
|
||||||
|
|
||||||
static unique_ptr<bytes> s_compiledRegistrar;
|
static LazyInit<bytes> s_compiledRegistrar;
|
||||||
|
|
||||||
class RegistrarTestFramework: public SolidityExecutionFramework
|
class RegistrarTestFramework: public SolidityExecutionFramework
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
void deployRegistrar()
|
void deployRegistrar()
|
||||||
{
|
{
|
||||||
if (!s_compiledRegistrar)
|
bytes const& compiled = s_compiledRegistrar.init([&]{
|
||||||
s_compiledRegistrar = make_unique<bytes>(compileContract(registrarCode, "FixedFeeRegistrar"));
|
return compileContract(registrarCode, "FixedFeeRegistrar");
|
||||||
|
});
|
||||||
|
|
||||||
sendMessage(*s_compiledRegistrar, true);
|
sendMessage(compiled, true);
|
||||||
BOOST_REQUIRE(m_transactionSuccessful);
|
BOOST_REQUIRE(m_transactionSuccessful);
|
||||||
BOOST_REQUIRE(!m_output.empty());
|
BOOST_REQUIRE(!m_output.empty());
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,11 @@
|
|||||||
* Tests for a (comparatively) complex multisig wallet contract.
|
* Tests for a (comparatively) complex multisig wallet contract.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <libsolutil/LazyInit.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
@ -435,7 +438,7 @@ contract Wallet is multisig, multiowned, daylimit {
|
|||||||
}
|
}
|
||||||
)DELIMITER";
|
)DELIMITER";
|
||||||
|
|
||||||
static unique_ptr<bytes> s_compiledWallet;
|
static LazyInit<bytes> s_compiledWallet;
|
||||||
|
|
||||||
class WalletTestFramework: public SolidityExecutionFramework
|
class WalletTestFramework: public SolidityExecutionFramework
|
||||||
{
|
{
|
||||||
@ -447,11 +450,12 @@ protected:
|
|||||||
u256 _dailyLimit = 0
|
u256 _dailyLimit = 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!s_compiledWallet)
|
bytes const& compiled = s_compiledWallet.init([&]{
|
||||||
s_compiledWallet = make_unique<bytes>(compileContract(walletCode, "Wallet"));
|
return compileContract(walletCode, "Wallet");
|
||||||
|
});
|
||||||
|
|
||||||
bytes args = encodeArgs(u256(0x60), _required, _dailyLimit, u256(_owners.size()), _owners);
|
bytes args = encodeArgs(u256(0x60), _required, _dailyLimit, u256(_owners.size()), _owners);
|
||||||
sendMessage(*s_compiledWallet + args, true, _value);
|
sendMessage(compiled + args, true, _value);
|
||||||
BOOST_REQUIRE(m_transactionSuccessful);
|
BOOST_REQUIRE(m_transactionSuccessful);
|
||||||
BOOST_REQUIRE(!m_output.empty());
|
BOOST_REQUIRE(!m_output.empty());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user