From 2c00ebbee1b40b66cfc96c65fc58e105bb41c776 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 30 Apr 2018 22:50:27 +0100 Subject: Change totalBits and fractionalDigits to unsigned in FixedPointType --- libsolidity/ast/Types.cpp | 6 +++--- libsolidity/ast/Types.h | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 11d7160c..56d41974 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -595,13 +595,13 @@ MemberList::MemberMap IntegerType::nativeMembers(ContractDefinition const*) cons return MemberList::MemberMap(); } -FixedPointType::FixedPointType(int _totalBits, int _fractionalDigits, FixedPointType::Modifier _modifier): +FixedPointType::FixedPointType(unsigned _totalBits, unsigned _fractionalDigits, FixedPointType::Modifier _modifier): m_totalBits(_totalBits), m_fractionalDigits(_fractionalDigits), m_modifier(_modifier) { solAssert( 8 <= m_totalBits && m_totalBits <= 256 && m_totalBits % 8 == 0 && - 0 <= m_fractionalDigits && m_fractionalDigits <= 80, - "Invalid bit number(s) for fixed type: " + + 0 <= m_fractionalDigits && m_fractionalDigits <= 80, + "Invalid bit number(s) for fixed type: " + dev::toString(_totalBits) + "x" + dev::toString(_fractionalDigits) ); } diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index ca6822c9..7e6a93b5 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -366,7 +366,7 @@ public: }; virtual Category category() const override { return Category::FixedPoint; } - explicit FixedPointType(int _totalBits, int _fractionalDigits, Modifier _modifier = Modifier::Unsigned); + explicit FixedPointType(unsigned _totalBits, unsigned _fractionalDigits, Modifier _modifier = Modifier::Unsigned); virtual std::string richIdentifier() const override; virtual bool isImplicitlyConvertibleTo(Type const& _convertTo) const override; @@ -386,9 +386,9 @@ public: virtual TypePointer interfaceType(bool) const override { return shared_from_this(); } /// Number of bits used for this type in total. - int numBits() const { return m_totalBits; } + unsigned numBits() const { return m_totalBits; } /// Number of decimal digits after the radix point. - int fractionalDigits() const { return m_fractionalDigits; } + unsigned fractionalDigits() const { return m_fractionalDigits; } bool isSigned() const { return m_modifier == Modifier::Signed; } /// @returns the largest integer value this type con hold. Note that this is not the /// largest value in general. @@ -401,8 +401,8 @@ public: std::shared_ptr asIntegerType() const; private: - int m_totalBits; - int m_fractionalDigits; + unsigned m_totalBits; + unsigned m_fractionalDigits; Modifier m_modifier; }; -- cgit From b34428249a24c29e17de8636c2d3011d95d052cc Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 30 Apr 2018 22:56:30 +0100 Subject: Change numBits to unsigned IntegerType --- libsolidity/analysis/TypeChecker.cpp | 3 ++- libsolidity/ast/Types.cpp | 10 +++++----- libsolidity/ast/Types.h | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 7ea10c5b..82421749 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -1200,8 +1200,9 @@ bool TypeChecker::visit(VariableDeclarationStatement const& _statement) string extension; if (auto type = dynamic_cast(var.annotation().type.get())) { - int numBits = type->numBits(); + unsigned numBits = type->numBits(); bool isSigned = type->isSigned(); + solAssert(numBits > 0, ""); string minValue; string maxValue; if (isSigned) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 56d41974..f41a4a37 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -425,14 +425,14 @@ bool isValidShiftAndAmountType(Token::Value _operator, Type const& _shiftAmountT } -IntegerType::IntegerType(int _bits, IntegerType::Modifier _modifier): +IntegerType::IntegerType(unsigned _bits, IntegerType::Modifier _modifier): m_bits(_bits), m_modifier(_modifier) { if (isAddress()) solAssert(m_bits == 160, ""); solAssert( m_bits > 0 && m_bits <= 256 && m_bits % 8 == 0, - "Invalid bit number for integer type: " + dev::toString(_bits) + "Invalid bit number for integer type: " + dev::toString(m_bits) ); } @@ -584,7 +584,7 @@ MemberList::MemberMap IntegerType::nativeMembers(ContractDefinition const*) cons { if (isAddress()) return { - {"balance", make_shared(256)}, + {"balance", make_shared(256)}, {"call", make_shared(strings(), strings{"bool"}, FunctionType::Kind::BareCall, true, StateMutability::Payable)}, {"callcode", make_shared(strings(), strings{"bool"}, FunctionType::Kind::BareCallCode, true, StateMutability::Payable)}, {"delegatecall", make_shared(strings(), strings{"bool"}, FunctionType::Kind::BareDelegateCall, true)}, @@ -696,7 +696,7 @@ TypePointer FixedPointType::binaryOperatorResult(Token::Value _operator, TypePoi std::shared_ptr FixedPointType::asIntegerType() const { - return std::make_shared(numBits(), isSigned() ? IntegerType::Modifier::Signed : IntegerType::Modifier::Unsigned); + return make_shared(numBits(), isSigned() ? IntegerType::Modifier::Signed : IntegerType::Modifier::Unsigned); } tuple RationalNumberType::parseRational(string const& _value) @@ -850,7 +850,7 @@ bool RationalNumberType::isImplicitlyConvertibleTo(Type const& _convertTo) const if (isFractional()) return false; IntegerType const& targetType = dynamic_cast(_convertTo); - int forSignBit = (targetType.isSigned() ? 1 : 0); + unsigned forSignBit = (targetType.isSigned() ? 1 : 0); if (m_value > rational(0)) { if (m_value.numerator() <= (u256(-1) >> (256 - targetType.numBits() + forSignBit))) diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index 7e6a93b5..d39c395a 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -319,7 +319,7 @@ public: }; virtual Category category() const override { return Category::Integer; } - explicit IntegerType(int _bits, Modifier _modifier = Modifier::Unsigned); + explicit IntegerType(unsigned _bits, Modifier _modifier = Modifier::Unsigned); virtual std::string richIdentifier() const override; virtual bool isImplicitlyConvertibleTo(Type const& _convertTo) const override; @@ -342,7 +342,7 @@ public: virtual TypePointer encodingType() const override { return shared_from_this(); } virtual TypePointer interfaceType(bool) const override { return shared_from_this(); } - int numBits() const { return m_bits; } + unsigned numBits() const { return m_bits; } bool isAddress() const { return m_modifier == Modifier::Address; } bool isSigned() const { return m_modifier == Modifier::Signed; } @@ -350,7 +350,7 @@ public: bigint maxValue() const; private: - int m_bits; + unsigned m_bits; Modifier m_modifier; }; -- cgit From aa1542a9e12177311e7d426b7606823ae45ee88e Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 30 Apr 2018 22:58:04 -0700 Subject: Change bytes to unsigned in FixedBytesType --- libsolidity/ast/Types.cpp | 5 ++--- libsolidity/ast/Types.h | 6 +++--- libsolidity/codegen/CompilerUtils.cpp | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index f41a4a37..dc548538 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -599,8 +599,7 @@ FixedPointType::FixedPointType(unsigned _totalBits, unsigned _fractionalDigits, m_totalBits(_totalBits), m_fractionalDigits(_fractionalDigits), m_modifier(_modifier) { solAssert( - 8 <= m_totalBits && m_totalBits <= 256 && m_totalBits % 8 == 0 && - 0 <= m_fractionalDigits && m_fractionalDigits <= 80, + 8 <= m_totalBits && m_totalBits <= 256 && m_totalBits % 8 == 0 && m_fractionalDigits <= 80, "Invalid bit number(s) for fixed type: " + dev::toString(_totalBits) + "x" + dev::toString(_fractionalDigits) ); @@ -1264,7 +1263,7 @@ bool StringLiteralType::isValidUTF8() const return dev::validateUTF8(m_value); } -FixedBytesType::FixedBytesType(int _bytes): m_bytes(_bytes) +FixedBytesType::FixedBytesType(unsigned _bytes): m_bytes(_bytes) { solAssert( m_bytes > 0 && m_bytes <= 32, diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index d39c395a..6defacfc 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -506,7 +506,7 @@ class FixedBytesType: public Type public: virtual Category category() const override { return Category::FixedBytes; } - explicit FixedBytesType(int _bytes); + explicit FixedBytesType(unsigned _bytes); virtual bool isImplicitlyConvertibleTo(Type const& _convertTo) const override; virtual bool isExplicitlyConvertibleTo(Type const& _convertTo) const override; @@ -524,10 +524,10 @@ public: virtual TypePointer encodingType() const override { return shared_from_this(); } virtual TypePointer interfaceType(bool) const override { return shared_from_this(); } - int numBytes() const { return m_bytes; } + unsigned numBytes() const { return m_bytes; } private: - int m_bytes; + unsigned m_bytes; }; /** diff --git a/libsolidity/codegen/CompilerUtils.cpp b/libsolidity/codegen/CompilerUtils.cpp index 48b77eb3..fc1ff0eb 100644 --- a/libsolidity/codegen/CompilerUtils.cpp +++ b/libsolidity/codegen/CompilerUtils.cpp @@ -688,7 +688,7 @@ void CompilerUtils::convertType( m_context << Instruction::POP << u256(0); else if (targetType.numBytes() > typeOnStack.numBytes() || _cleanupNeeded) { - int bytes = min(typeOnStack.numBytes(), targetType.numBytes()); + unsigned bytes = min(typeOnStack.numBytes(), targetType.numBytes()); m_context << ((u256(1) << (256 - bytes * 8)) - 1); m_context << Instruction::NOT << Instruction::AND; } @@ -796,7 +796,7 @@ void CompilerUtils::convertType( bytesConstRef data(value); if (targetTypeCategory == Type::Category::FixedBytes) { - int const numBytes = dynamic_cast(_targetType).numBytes(); + unsigned const numBytes = dynamic_cast(_targetType).numBytes(); solAssert(data.size() <= 32, ""); m_context << (h256::Arith(h256(data, h256::AlignLeft)) & (~(u256(-1) >> (8 * numBytes)))); } -- cgit