mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge remote-tracking branch 'ethereum/develop' into sol_overloadingFunctions
Conflicts: libsolidity/AST.cpp libsolidity/AST.h
This commit is contained in:
commit
8caf1f723f
@ -407,6 +407,39 @@ BOOST_AUTO_TEST_CASE(create_abstract_contract)
|
|||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(abstract_contract_constructor_args_optional)
|
||||||
|
{
|
||||||
|
ASTPointer<SourceUnit> sourceUnit;
|
||||||
|
char const* text = R"(
|
||||||
|
contract BaseBase { function BaseBase(uint j); }
|
||||||
|
contract base is BaseBase { function foo(); }
|
||||||
|
contract derived is base {
|
||||||
|
function derived(uint i) BaseBase(i){}
|
||||||
|
function foo() {}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
ETH_TEST_REQUIRE_NO_THROW(parseTextAndResolveNames(text), "Parsing and name resolving failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(abstract_contract_constructor_args_not_provided)
|
||||||
|
{
|
||||||
|
ASTPointer<SourceUnit> sourceUnit;
|
||||||
|
char const* text = R"(
|
||||||
|
contract BaseBase { function BaseBase(uint j); }
|
||||||
|
contract base is BaseBase { function foo(); }
|
||||||
|
contract derived is base {
|
||||||
|
function derived(uint i) {}
|
||||||
|
function foo() {}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
ETH_TEST_REQUIRE_NO_THROW(sourceUnit = parseTextAndResolveNames(text), "Parsing and name resolving failed");
|
||||||
|
std::vector<ASTPointer<ASTNode>> nodes = sourceUnit->getNodes();
|
||||||
|
BOOST_CHECK_EQUAL(nodes.size(), 3);
|
||||||
|
ContractDefinition* derived = dynamic_cast<ContractDefinition*>(nodes[2].get());
|
||||||
|
BOOST_CHECK(derived);
|
||||||
|
BOOST_CHECK(!derived->isFullyImplemented());
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(redeclare_implemented_abstract_function_as_abstract)
|
BOOST_AUTO_TEST_CASE(redeclare_implemented_abstract_function_as_abstract)
|
||||||
{
|
{
|
||||||
ASTPointer<SourceUnit> sourceUnit;
|
ASTPointer<SourceUnit> sourceUnit;
|
||||||
@ -665,7 +698,7 @@ BOOST_AUTO_TEST_CASE(missing_base_constructor_arguments)
|
|||||||
contract A { function A(uint a) { } }
|
contract A { function A(uint a) { } }
|
||||||
contract B is A { }
|
contract B is A { }
|
||||||
)";
|
)";
|
||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
ETH_TEST_CHECK_NO_THROW(parseTextAndResolveNames(text), "Parsing and Name Resolving Failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
|
BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
|
||||||
@ -674,7 +707,7 @@ BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
|
|||||||
contract A { function A(uint a) { } }
|
contract A { function A(uint a) { } }
|
||||||
contract B is A { }
|
contract B is A { }
|
||||||
)";
|
)";
|
||||||
BOOST_CHECK_THROW(parseTextAndResolveNames(text), TypeError);
|
ETH_TEST_CHECK_NO_THROW(parseTextAndResolveNames(text), "Parsing and Name Resolving Failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(implicit_derived_to_base_conversion)
|
BOOST_AUTO_TEST_CASE(implicit_derived_to_base_conversion)
|
||||||
|
@ -123,7 +123,7 @@ json_spirit::mObject& ImportTest::makeAllFieldsHex(json_spirit::mObject& _o)
|
|||||||
{
|
{
|
||||||
static const set<string> hashes {"bloom" , "coinbase", "hash", "mixHash", "parentHash", "receiptTrie",
|
static const set<string> hashes {"bloom" , "coinbase", "hash", "mixHash", "parentHash", "receiptTrie",
|
||||||
"stateRoot", "transactionsTrie", "uncleHash", "currentCoinbase",
|
"stateRoot", "transactionsTrie", "uncleHash", "currentCoinbase",
|
||||||
"previousHash", "to", "address", "caller", "origin", "secretKey"};
|
"previousHash", "to", "address", "caller", "origin", "secretKey", "data"};
|
||||||
|
|
||||||
for (auto& i: _o)
|
for (auto& i: _o)
|
||||||
{
|
{
|
||||||
@ -140,7 +140,7 @@ json_spirit::mObject& ImportTest::makeAllFieldsHex(json_spirit::mObject& _o)
|
|||||||
str = value.get_str();
|
str = value.get_str();
|
||||||
else continue;
|
else continue;
|
||||||
|
|
||||||
_o[key] = (str.substr(0, 2) == "0x") ? str : "0x" + toHex(toCompactBigEndian(toInt(str)));
|
_o[key] = (str.substr(0, 2) == "0x") ? str : "0x" + toHex(toCompactBigEndian(toInt(str), 1));
|
||||||
}
|
}
|
||||||
return _o;
|
return _o;
|
||||||
}
|
}
|
||||||
@ -363,8 +363,8 @@ json_spirit::mObject fillJsonWithState(State _state)
|
|||||||
for (auto const& a: _state.addresses())
|
for (auto const& a: _state.addresses())
|
||||||
{
|
{
|
||||||
json_spirit::mObject o;
|
json_spirit::mObject o;
|
||||||
o["balance"] = "0x" + toHex(toCompactBigEndian(_state.balance(a.first)));
|
o["balance"] = "0x" + toHex(toCompactBigEndian(_state.balance(a.first), 1));
|
||||||
o["nonce"] = "0x" + toHex(toCompactBigEndian(_state.transactionsFrom(a.first)));
|
o["nonce"] = "0x" + toHex(toCompactBigEndian(_state.transactionsFrom(a.first), 1));
|
||||||
{
|
{
|
||||||
json_spirit::mObject store;
|
json_spirit::mObject store;
|
||||||
for (auto const& s: _state.storage(a.first))
|
for (auto const& s: _state.storage(a.first))
|
||||||
|
@ -625,11 +625,11 @@ void writeBlockHeaderToJson(mObject& _o, BlockInfo const& _bi)
|
|||||||
_o["transactionsTrie"] = toString(_bi.transactionsRoot);
|
_o["transactionsTrie"] = toString(_bi.transactionsRoot);
|
||||||
_o["receiptTrie"] = toString(_bi.receiptsRoot);
|
_o["receiptTrie"] = toString(_bi.receiptsRoot);
|
||||||
_o["bloom"] = toString(_bi.logBloom);
|
_o["bloom"] = toString(_bi.logBloom);
|
||||||
_o["difficulty"] = "0x" + toHex(toCompactBigEndian(_bi.difficulty));
|
_o["difficulty"] = "0x" + toHex(toCompactBigEndian(_bi.difficulty), 1);
|
||||||
_o["number"] = "0x" + toHex(toCompactBigEndian(_bi.number));
|
_o["number"] = "0x" + toHex(toCompactBigEndian(_bi.number), 1);
|
||||||
_o["gasLimit"] = "0x" + toHex(toCompactBigEndian(_bi.gasLimit));
|
_o["gasLimit"] = "0x" + toHex(toCompactBigEndian(_bi.gasLimit), 1);
|
||||||
_o["gasUsed"] = "0x" + toHex(toCompactBigEndian(_bi.gasUsed));
|
_o["gasUsed"] = "0x" + toHex(toCompactBigEndian(_bi.gasUsed), 1);
|
||||||
_o["timestamp"] = "0x" + toHex(toCompactBigEndian(_bi.timestamp));
|
_o["timestamp"] = "0x" + toHex(toCompactBigEndian(_bi.timestamp), 1);
|
||||||
_o["extraData"] ="0x" + toHex(_bi.extraData);
|
_o["extraData"] ="0x" + toHex(_bi.extraData);
|
||||||
_o["mixHash"] = toString(_bi.mixHash);
|
_o["mixHash"] = toString(_bi.mixHash);
|
||||||
_o["nonce"] = toString(_bi.nonce);
|
_o["nonce"] = toString(_bi.nonce);
|
||||||
|
@ -60,7 +60,7 @@ BOOST_AUTO_TEST_CASE(Complex)
|
|||||||
CanonBlockChain bc;
|
CanonBlockChain bc;
|
||||||
cout << bc;
|
cout << bc;
|
||||||
|
|
||||||
State s(stateDB, BaseState::Empty, myMiner.address());
|
State s(stateDB, BaseState::CanonGenesis, myMiner.address());
|
||||||
cout << s;
|
cout << s;
|
||||||
|
|
||||||
// Sync up - this won't do much until we use the last state.
|
// Sync up - this won't do much until we use the last state.
|
||||||
@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE(Complex)
|
|||||||
cout << s;
|
cout << s;
|
||||||
|
|
||||||
// Inject a transaction to transfer funds from miner to me.
|
// Inject a transaction to transfer funds from miner to me.
|
||||||
Transaction t(1000, 10000, 10000, me.address(), bytes(), s.transactionsFrom(myMiner.address()), myMiner.secret());
|
Transaction t(1000, 10000, 100000, me.address(), bytes(), s.transactionsFrom(myMiner.address()), myMiner.secret());
|
||||||
assert(t.sender() == myMiner.address());
|
assert(t.sender() == myMiner.address());
|
||||||
s.execute(bc.lastHashes(), t);
|
s.execute(bc.lastHashes(), t);
|
||||||
|
|
||||||
|
@ -434,11 +434,12 @@ class WebThreeStubClient : public jsonrpc::Client
|
|||||||
else
|
else
|
||||||
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
throw jsonrpc::JsonRpcException(jsonrpc::Errors::ERROR_CLIENT_INVALID_RESPONSE, result.toStyledString());
|
||||||
}
|
}
|
||||||
bool eth_submitWork(const std::string& param1, const std::string& param2) throw (jsonrpc::JsonRpcException)
|
bool eth_submitWork(const std::string& param1, const std::string& param2, const std::string& param3) throw (jsonrpc::JsonRpcException)
|
||||||
{
|
{
|
||||||
Json::Value p;
|
Json::Value p;
|
||||||
p.append(param1);
|
p.append(param1);
|
||||||
p.append(param2);
|
p.append(param2);
|
||||||
|
p.append(param3);
|
||||||
Json::Value result = this->CallMethod("eth_submitWork",p);
|
Json::Value result = this->CallMethod("eth_submitWork",p);
|
||||||
if (result.isBool())
|
if (result.isBool())
|
||||||
return result.asBool();
|
return result.asBool();
|
||||||
|
Loading…
Reference in New Issue
Block a user