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!");
|
||||
|
||||
std::string const& literalString = _literal.value.str();
|
||||
yulAssert(isValidDecimal(literalString) || isValidHex(literalString), "Invalid number literal!");
|
||||
return u256(literalString);
|
||||
static map<YulString, u256> numberCache;
|
||||
static YulStringRepository::ResetCallback callback{[&] { numberCache.clear(); }};
|
||||
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user