Turn usage of callcode into an error as experimental 0.5.0 feature

This commit is contained in:
Alex Beregszaszi 2017-07-11 19:08:11 +02:00
parent 7454a766b3
commit 10677125ae
3 changed files with 23 additions and 4 deletions

View File

@ -1,6 +1,7 @@
### 0.4.19 (unreleased)
Features:
* Syntax Checker: Turn the usage of ``callcode`` into an error as experimental 0.5.0 feature.
Bugfixes:

View File

@ -150,10 +150,18 @@ bool StaticAnalyzer::visit(MemberAccess const& _memberAccess)
if (_memberAccess.memberName() == "callcode")
if (auto const* type = dynamic_cast<FunctionType const*>(_memberAccess.annotation().type.get()))
if (type->kind() == FunctionType::Kind::BareCallCode)
m_errorReporter.warning(
_memberAccess.location(),
"\"callcode\" has been deprecated in favour of \"delegatecall\"."
);
{
if (m_currentContract->sourceUnit().annotation().experimentalFeatures.count(ExperimentalFeature::V050))
m_errorReporter.typeError(
_memberAccess.location(),
"\"callcode\" has been deprecated in favour of \"delegatecall\"."
);
else
m_errorReporter.warning(
_memberAccess.location(),
"\"callcode\" has been deprecated in favour of \"delegatecall\"."
);
}
if (m_constructor && m_currentContract)
if (ContractType const* type = dynamic_cast<ContractType const*>(_memberAccess.expression().annotation().type.get()))

View File

@ -4783,6 +4783,16 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode)
}
)";
CHECK_WARNING(text, "\"callcode\" has been deprecated in favour of \"delegatecall\"");
text = R"(
pragma experimental "v0.5.0";
contract test {
function f() pure public {
var x = address(0x12).callcode;
x;
}
}
)";
CHECK_ERROR(text, TypeError, "\"callcode\" has been deprecated in favour of \"delegatecall\"");
}
BOOST_AUTO_TEST_CASE(no_warn_about_callcode_as_function)