Only generate sort/search code when interface functions exist

This commit is contained in:
Mathias Baumann
2018-12-17 21:24:37 +01:00
committed by chriseth
parent 7d3727bbf7
commit 1b8570f829
4 changed files with 90 additions and 15 deletions
+5 -5
View File
@@ -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)) +
+43
View File
@@ -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()
}