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/EVMHost.h>
|
||||
|
||||
#include <libsolutil/LazyInit.h>
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <optional>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
@ -212,17 +215,18 @@ contract GlobalRegistrar is Registrar, AuctionSystem {
|
||||
}
|
||||
)DELIMITER";
|
||||
|
||||
static unique_ptr<bytes> s_compiledRegistrar;
|
||||
static LazyInit<bytes> s_compiledRegistrar;
|
||||
|
||||
class AuctionRegistrarTestFramework: public SolidityExecutionFramework
|
||||
{
|
||||
protected:
|
||||
void deployRegistrar()
|
||||
{
|
||||
if (!s_compiledRegistrar)
|
||||
s_compiledRegistrar = make_unique<bytes>(compileContract(registrarCode, "GlobalRegistrar"));
|
||||
bytes const& compiled = s_compiledRegistrar.init([&]{
|
||||
return compileContract(registrarCode, "GlobalRegistrar");
|
||||
});
|
||||
|
||||
sendMessage(*s_compiledRegistrar, true);
|
||||
sendMessage(compiled, true);
|
||||
BOOST_REQUIRE(m_transactionSuccessful);
|
||||
BOOST_REQUIRE(!m_output.empty());
|
||||
}
|
||||
|
@ -20,8 +20,11 @@
|
||||
* Tests for a fixed fee registrar contract.
|
||||
*/
|
||||
|
||||
#include <libsolutil/LazyInit.h>
|
||||
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <optional>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
@ -122,17 +125,18 @@ contract FixedFeeRegistrar is Registrar {
|
||||
}
|
||||
)DELIMITER";
|
||||
|
||||
static unique_ptr<bytes> s_compiledRegistrar;
|
||||
static LazyInit<bytes> s_compiledRegistrar;
|
||||
|
||||
class RegistrarTestFramework: public SolidityExecutionFramework
|
||||
{
|
||||
protected:
|
||||
void deployRegistrar()
|
||||
{
|
||||
if (!s_compiledRegistrar)
|
||||
s_compiledRegistrar = make_unique<bytes>(compileContract(registrarCode, "FixedFeeRegistrar"));
|
||||
bytes const& compiled = s_compiledRegistrar.init([&]{
|
||||
return compileContract(registrarCode, "FixedFeeRegistrar");
|
||||
});
|
||||
|
||||
sendMessage(*s_compiledRegistrar, true);
|
||||
sendMessage(compiled, true);
|
||||
BOOST_REQUIRE(m_transactionSuccessful);
|
||||
BOOST_REQUIRE(!m_output.empty());
|
||||
}
|
||||
|
@ -20,8 +20,11 @@
|
||||
* Tests for a (comparatively) complex multisig wallet contract.
|
||||
*/
|
||||
|
||||
#include <libsolutil/LazyInit.h>
|
||||
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <optional>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
@ -435,7 +438,7 @@ contract Wallet is multisig, multiowned, daylimit {
|
||||
}
|
||||
)DELIMITER";
|
||||
|
||||
static unique_ptr<bytes> s_compiledWallet;
|
||||
static LazyInit<bytes> s_compiledWallet;
|
||||
|
||||
class WalletTestFramework: public SolidityExecutionFramework
|
||||
{
|
||||
@ -447,11 +450,12 @@ protected:
|
||||
u256 _dailyLimit = 0
|
||||
)
|
||||
{
|
||||
if (!s_compiledWallet)
|
||||
s_compiledWallet = make_unique<bytes>(compileContract(walletCode, "Wallet"));
|
||||
bytes const& compiled = s_compiledWallet.init([&]{
|
||||
return compileContract(walletCode, "Wallet");
|
||||
});
|
||||
|
||||
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_output.empty());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user