[Sol - Yul] Add support for built-in selfdestruct(..).

This commit is contained in:
Alexander Arlt 2020-04-24 17:03:41 -05:00
parent dd7aebe7f1
commit 2fa26f4e92
2 changed files with 12 additions and 4 deletions

View File

@ -812,6 +812,12 @@ void IRGeneratorForStatements::endVisit(FunctionCall const& _functionCall)
define(_functionCall) << "gas()\n"; define(_functionCall) << "gas()\n";
break; break;
} }
case FunctionType::Kind::Selfdestruct:
{
solAssert(arguments.size() == 1, "");
define(_functionCall) << "selfdestruct(" << expressionAsType(*arguments.front(), *parameterTypes.front()) << ")\n";
break;
}
default: default:
solUnimplemented("FunctionKind " + toString(static_cast<int>(functionType->kind())) + " not yet implemented"); solUnimplemented("FunctionKind " + toString(static_cast<int>(functionType->kind())) + " not yet implemented");
} }

View File

@ -1238,11 +1238,13 @@ BOOST_AUTO_TEST_CASE(selfdestruct)
} }
)"; )";
u256 amount(130); u256 amount(130);
compileAndRun(sourceCode, amount);
u160 address(23); u160 address(23);
ABI_CHECK(callContractFunction("a(address)", address), bytes()); ALSO_VIA_YUL(
BOOST_CHECK(!addressHasCode(m_contractAddress)); compileAndRun(sourceCode, amount);
BOOST_CHECK_EQUAL(balanceAt(address), amount); ABI_CHECK(callContractFunction("a(address)", address), bytes());
BOOST_CHECK(!addressHasCode(m_contractAddress));
BOOST_CHECK_EQUAL(balanceAt(address), amount);
)
} }
BOOST_AUTO_TEST_CASE(keccak256) BOOST_AUTO_TEST_CASE(keccak256)