From 1083e6da683b9624b1bb6cc2b3cc3831504dfc57 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Tue, 14 Feb 2017 16:36:22 +0000 Subject: Support negative exponent --- libsolidity/ast/Types.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'libsolidity/ast') diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index aecf830d..39760353 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -584,8 +584,7 @@ tuple RationalNumberType::isValidLiteral(Literal const& _literal if (expPoint != _literal.value().end()) { if ( - !all_of(_literal.value().begin(), expPoint, ::isdigit) || - !all_of(expPoint + 1, _literal.value().end(), ::isdigit) + !all_of(_literal.value().begin(), expPoint, ::isdigit) ) return make_tuple(false, rational(0)); @@ -595,10 +594,16 @@ tuple RationalNumberType::isValidLiteral(Literal const& _literal return make_tuple(false, rational(0)); x = bigint(string(_literal.value().begin(), expPoint)); - x *= boost::multiprecision::pow( - bigint(10), - exp.convert_to() - ); + if (exp < 0) + x /= boost::multiprecision::pow( + bigint(10), + abs(exp).convert_to() + ); + else + x *= boost::multiprecision::pow( + bigint(10), + exp.convert_to() + ); } else if (radixPoint != _literal.value().end()) { -- cgit