Merge pull request #3349 from federicobond/number-improv

Avoid output messages size blow-up using huge bignums literals
This commit is contained in:
Alex Beregszaszi
2018-02-13 12:36:05 +00:00
committed by GitHub
4 changed files with 23 additions and 4 deletions
+16 -2
View File
@@ -949,11 +949,25 @@ bool RationalNumberType::operator==(Type const& _other) const
return m_value == other.m_value;
}
string RationalNumberType::bigintToReadableString(dev::bigint const& _num)
{
string str = _num.str();
if (str.size() > 32)
{
int omitted = str.size() - 8;
str = str.substr(0, 4) + "...(" + to_string(omitted) + " digits omitted)..." + str.substr(str.size() - 4, 4);
}
return str;
}
string RationalNumberType::toString(bool) const
{
if (!isFractional())
return "int_const " + m_value.numerator().str();
return "rational_const " + m_value.numerator().str() + '/' + m_value.denominator().str();
return "int_const " + bigintToReadableString(m_value.numerator());
string numerator = bigintToReadableString(m_value.numerator());
string denominator = bigintToReadableString(m_value.denominator());
return "rational_const " + numerator + " / " + denominator;
}
u256 RationalNumberType::literalValue(Literal const*) const
+4
View File
@@ -437,6 +437,10 @@ private:
/// @returns true if the literal is a valid rational number.
static std::tuple<bool, rational> parseRational(std::string const& _value);
/// @returns a truncated readable representation of the bigint keeping only
/// up to 4 leading and 4 trailing digits.
static std::string bigintToReadableString(dev::bigint const& num);
};
/**