mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Cache literal to number conversion.
This commit is contained in:
parent
ce18dddd20
commit
c42d577fc0
@ -91,9 +91,17 @@ u256 solidity::yul::valueOfNumberLiteral(Literal const& _literal)
|
|||||||
{
|
{
|
||||||
yulAssert(_literal.kind == LiteralKind::Number, "Expected number literal!");
|
yulAssert(_literal.kind == LiteralKind::Number, "Expected number literal!");
|
||||||
|
|
||||||
std::string const& literalString = _literal.value.str();
|
static map<YulString, u256> numberCache;
|
||||||
yulAssert(isValidDecimal(literalString) || isValidHex(literalString), "Invalid number literal!");
|
static YulStringRepository::ResetCallback callback{[&] { numberCache.clear(); }};
|
||||||
return u256(literalString);
|
|
||||||
|
auto&& [it, isNew] = numberCache.try_emplace(_literal.value, 0);
|
||||||
|
if (isNew)
|
||||||
|
{
|
||||||
|
std::string const& literalString = _literal.value.str();
|
||||||
|
yulAssert(isValidDecimal(literalString) || isValidHex(literalString), "Invalid number literal!");
|
||||||
|
it->second = u256(literalString);
|
||||||
|
}
|
||||||
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
u256 solidity::yul::valueOfStringLiteral(Literal const& _literal)
|
u256 solidity::yul::valueOfStringLiteral(Literal const& _literal)
|
||||||
|
Loading…
Reference in New Issue
Block a user