Assume that enums always take 1-byte in the codegen and type system

This commit is contained in:
Kamil Śliwak 2020-11-10 14:26:29 +01:00
parent 1bf700e088
commit ade71d58f8
2 changed files with 6 additions and 8 deletions

View File

@ -2629,7 +2629,8 @@ vector<Type const*> StructType::decomposition() const
TypePointer EnumType::encodingType() const TypePointer EnumType::encodingType() const
{ {
return TypeProvider::uint(8 * storageBytes()); solAssert(numberOfMembers() <= 256, "");
return TypeProvider::uint(8);
} }
TypeResult EnumType::unaryOperatorResult(Token _operator) const TypeResult EnumType::unaryOperatorResult(Token _operator) const
@ -2652,11 +2653,8 @@ bool EnumType::operator==(Type const& _other) const
unsigned EnumType::storageBytes() const unsigned EnumType::storageBytes() const
{ {
size_t elements = numberOfMembers(); solAssert(numberOfMembers() <= 256, "");
if (elements <= 1) return 1;
return 1;
else
return util::bytesRequired(elements - 1);
} }
string EnumType::toString(bool) const string EnumType::toString(bool) const

View File

@ -203,8 +203,8 @@ string YulUtilFunctions::leftAlignFunction(Type const& _type)
break; break;
case Type::Category::Enum: case Type::Category::Enum:
{ {
unsigned storageBytes = dynamic_cast<EnumType const&>(_type).storageBytes(); solAssert(dynamic_cast<EnumType const&>(_type).storageBytes() == 1, "");
templ("body", "aligned := " + leftAlignFunction(IntegerType(8 * storageBytes)) + "(value)"); templ("body", "aligned := " + leftAlignFunction(IntegerType(8)) + "(value)");
break; break;
} }
case Type::Category::InaccessibleDynamic: case Type::Category::InaccessibleDynamic: