#include <tools/solidityUpgrade/Upgrade070.h>
#include <tools/solidityUpgrade/SourceTransform.h>
using namespace solidity::frontend;
using namespace solidity::tools;
void DotSyntax::endVisit(FunctionCall const& _functionCall)
{
Type const* type = _functionCall.annotation().type;
if (auto const funcType = dynamic_cast<FunctionType const*>(type))
{
if (funcType->valueSet())
m_changes.emplace_back(
UpgradeChange::Level::Safe,
_functionCall.location(),
SourceTransform{m_charStreamProvider}.valueUpdate(_functionCall.location())
);
if (funcType->gasSet())
m_changes.emplace_back(
UpgradeChange::Level::Safe,
_functionCall.location(),
SourceTransform{m_charStreamProvider}.gasUpdate(_functionCall.location())
);
}
}
void NowKeyword::endVisit(Identifier const& _identifier)
{
IdentifierAnnotation& annotation = _identifier.annotation();
if (
MagicVariableDeclaration const* magicVar =
dynamic_cast<MagicVariableDeclaration const*>(annotation.referencedDeclaration)
)
if (magicVar->type()->category() == Type::Category::Integer)
{
solAssert(_identifier.name() == "now", "");
m_changes.emplace_back(
UpgradeChange::Level::Safe,
_identifier.location(),
SourceTransform{m_charStreamProvider}.nowUpdate(_identifier.location())
);
}
}
void ConstructorVisibility::endVisit(ContractDefinition const& _contract)
{
if (!_contract.abstract())
for (FunctionDefinition const* function: _contract.definedFunctions())
if (
function->isConstructor() &&
!function->noVisibilitySpecified() &&
function->visibility() == Visibility::Internal
)
m_changes.emplace_back(
UpgradeChange::Level::Safe,
_contract.location(),
SourceTransform{m_charStreamProvider}.insertBeforeKeyword(_contract.location(), "contract", "abstract")
);
for (FunctionDefinition const* function: _contract.definedFunctions())
if (function->isConstructor() && !function->noVisibilitySpecified())
m_changes.emplace_back(
UpgradeChange::Level::Safe,
function->location(),
SourceTransform{m_charStreamProvider}.removeVisibility(function->location())
);
}