mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Only generate sort/search code when interface functions exist
This commit is contained in:
committed by
chriseth
parent
7d3727bbf7
commit
1b8570f829
@@ -165,14 +165,14 @@ BOOST_AUTO_TEST_CASE(location_test)
|
||||
auto codegenCharStream = make_shared<CharStream>("", "--CODEGEN--");
|
||||
|
||||
vector<SourceLocation> locations =
|
||||
vector<SourceLocation>(hasShifts ? 21 : 22, SourceLocation(2, 82, sourceCode)) +
|
||||
vector<SourceLocation>(2, SourceLocation(20, 79, sourceCode)) +
|
||||
vector<SourceLocation>(1, SourceLocation(8, 17, codegenCharStream)) +
|
||||
vector<SourceLocation>(3, SourceLocation(5, 7, codegenCharStream)) +
|
||||
vector<SourceLocation>(4, SourceLocation(2, 82, sourceCode)) +
|
||||
vector<SourceLocation>(1, SourceLocation(8, 17, codegenCharStream)) +
|
||||
vector<SourceLocation>(3, SourceLocation(5, 7, codegenCharStream)) +
|
||||
vector<SourceLocation>(1, SourceLocation(30, 31, codegenCharStream)) +
|
||||
vector<SourceLocation>(1, SourceLocation(27, 28, codegenCharStream)) +
|
||||
vector<SourceLocation>(1, SourceLocation(20, 32, codegenCharStream)) +
|
||||
vector<SourceLocation>(1, SourceLocation(5, 7, codegenCharStream)) +
|
||||
vector<SourceLocation>(1, SourceLocation(5, 7, codegenCharStream)) +
|
||||
vector<SourceLocation>(hasShifts ? 19 : 20, SourceLocation(2, 82, sourceCode)) +
|
||||
vector<SourceLocation>(24, SourceLocation(20, 79, sourceCode)) +
|
||||
vector<SourceLocation>(1, SourceLocation(49, 58, sourceCode)) +
|
||||
vector<SourceLocation>(1, SourceLocation(72, 74, sourceCode)) +
|
||||
|
||||
@@ -82,6 +82,49 @@ BOOST_AUTO_TEST_CASE(string_storage)
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(single_callvaluecheck)
|
||||
{
|
||||
string sourceCode = R"(
|
||||
// All functions nonpayable, we can check callvalue at the beginning
|
||||
contract Nonpayable {
|
||||
address a;
|
||||
function f(address b) public {
|
||||
a = b;
|
||||
}
|
||||
function f1(address b) public pure returns (uint c) {
|
||||
return uint(b) + 2;
|
||||
}
|
||||
function f2(address b) public pure returns (uint) {
|
||||
return uint(b) + 8;
|
||||
}
|
||||
function f3(address, uint c) pure public returns (uint) {
|
||||
return c - 5;
|
||||
}
|
||||
}
|
||||
// At least on payable function, we cannot do the optimization.
|
||||
contract Payable {
|
||||
address a;
|
||||
function f(address b) public {
|
||||
a = b;
|
||||
}
|
||||
function f1(address b) public pure returns (uint c) {
|
||||
return uint(b) + 2;
|
||||
}
|
||||
function f2(address b) public pure returns (uint) {
|
||||
return uint(b) + 8;
|
||||
}
|
||||
function f3(address, uint c) payable public returns (uint) {
|
||||
return c - 5;
|
||||
}
|
||||
}
|
||||
)";
|
||||
compileAndRun(sourceCode);
|
||||
size_t bytecodeSizeNonpayable = m_compiler.object("Nonpayable").bytecode.size();
|
||||
size_t bytecodeSizePayable = m_compiler.object("Payable").bytecode.size();
|
||||
|
||||
BOOST_CHECK_EQUAL(bytecodeSizePayable - bytecodeSizeNonpayable, 26);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user