mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
changes to redefine the token list, the scanner, and the parser and how they pass around variable types of different sizes
not ready for change to FixedPoint just yet made this more const correct and added a switch statement for easier reading
This commit is contained in:
parent
fca27b9ea0
commit
7b918a7bc7
@ -1394,7 +1394,7 @@ bool TypeChecker::visit(Identifier const& _identifier)
|
|||||||
|
|
||||||
void TypeChecker::endVisit(ElementaryTypeNameExpression const& _expr)
|
void TypeChecker::endVisit(ElementaryTypeNameExpression const& _expr)
|
||||||
{
|
{
|
||||||
_expr.annotation().type = make_shared<TypeType>(Type::fromElementaryTypeName(_expr.typeToken()));
|
_expr.annotation().type = make_shared<TypeType>(Type::fromElementaryTypeName(_expr.typeName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TypeChecker::endVisit(Literal const& _literal)
|
void TypeChecker::endVisit(Literal const& _literal)
|
||||||
|
@ -756,18 +756,17 @@ public:
|
|||||||
class ElementaryTypeName: public TypeName
|
class ElementaryTypeName: public TypeName
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ElementaryTypeName(SourceLocation const& _location, Token::Value _type):
|
ElementaryTypeName(SourceLocation const& _location, ElementaryTypeNameToken const& _elem):
|
||||||
TypeName(_location), m_type(_type)
|
TypeName(_location), m_type(_elem)
|
||||||
{
|
{}
|
||||||
solAssert(Token::isElementaryTypeName(_type), "");
|
|
||||||
}
|
|
||||||
virtual void accept(ASTVisitor& _visitor) override;
|
virtual void accept(ASTVisitor& _visitor) override;
|
||||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||||
|
|
||||||
Token::Value typeName() const { return m_type; }
|
ElementaryTypeNameToken const& typeName() const { return m_type; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Token::Value m_type;
|
ElementaryTypeNameToken m_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1408,18 +1407,16 @@ private:
|
|||||||
class ElementaryTypeNameExpression: public PrimaryExpression
|
class ElementaryTypeNameExpression: public PrimaryExpression
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ElementaryTypeNameExpression(SourceLocation const& _location, Token::Value _typeToken):
|
ElementaryTypeNameExpression(SourceLocation const& _location, ElementaryTypeNameToken const& _type):
|
||||||
PrimaryExpression(_location), m_typeToken(_typeToken)
|
PrimaryExpression(_location), m_typeToken(_type)
|
||||||
{
|
{}
|
||||||
solAssert(Token::isElementaryTypeName(_typeToken), "");
|
|
||||||
}
|
|
||||||
virtual void accept(ASTVisitor& _visitor) override;
|
virtual void accept(ASTVisitor& _visitor) override;
|
||||||
virtual void accept(ASTConstVisitor& _visitor) const override;
|
virtual void accept(ASTConstVisitor& _visitor) const override;
|
||||||
|
|
||||||
Token::Value typeToken() const { return m_typeToken; }
|
ElementaryTypeNameToken const& typeName() const { return m_typeToken; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Token::Value m_typeToken;
|
ElementaryTypeNameToken m_typeToken;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -139,7 +139,7 @@ bool ASTJsonConverter::visit(TypeName const&)
|
|||||||
|
|
||||||
bool ASTJsonConverter::visit(ElementaryTypeName const& _node)
|
bool ASTJsonConverter::visit(ElementaryTypeName const& _node)
|
||||||
{
|
{
|
||||||
addJsonNode("ElementaryTypeName", { make_pair("name", Token::toString(_node.typeName())) });
|
addJsonNode("ElementaryTypeName", { make_pair("name", _node.typeName().toString()) });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ bool ASTJsonConverter::visit(Identifier const& _node)
|
|||||||
bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node)
|
bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node)
|
||||||
{
|
{
|
||||||
addJsonNode("ElementaryTypenameExpression",
|
addJsonNode("ElementaryTypenameExpression",
|
||||||
{ make_pair("value", Token::toString(_node.typeToken())), make_pair("type", type(_node)) });
|
{ make_pair("value", _node.typeName().toString()), make_pair("type", type(_node)) });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ bool ASTPrinter::visit(TypeName const& _node)
|
|||||||
|
|
||||||
bool ASTPrinter::visit(ElementaryTypeName const& _node)
|
bool ASTPrinter::visit(ElementaryTypeName const& _node)
|
||||||
{
|
{
|
||||||
writeLine(string("ElementaryTypeName ") + Token::toString(_node.typeName()));
|
writeLine(string("ElementaryTypeName ") + _node.typeName().toString());
|
||||||
printSourcePart(_node);
|
printSourcePart(_node);
|
||||||
return goDeeper();
|
return goDeeper();
|
||||||
}
|
}
|
||||||
@ -331,7 +331,7 @@ bool ASTPrinter::visit(Identifier const& _node)
|
|||||||
|
|
||||||
bool ASTPrinter::visit(ElementaryTypeNameExpression const& _node)
|
bool ASTPrinter::visit(ElementaryTypeNameExpression const& _node)
|
||||||
{
|
{
|
||||||
writeLine(string("ElementaryTypeNameExpression ") + Token::toString(_node.typeToken()));
|
writeLine(string("ElementaryTypeNameExpression ") + _node.typeName().toString());
|
||||||
printType(_node);
|
printType(_node);
|
||||||
printSourcePart(_node);
|
printSourcePart(_node);
|
||||||
return goDeeper();
|
return goDeeper();
|
||||||
|
@ -115,51 +115,55 @@ u256 const& MemberList::storageSize() const
|
|||||||
return m_storageOffsets->storageSize();
|
return m_storageOffsets->storageSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
TypePointer Type::fromElementaryTypeName(Token::Value _typeToken)
|
TypePointer Type::fromElementaryTypeName(ElementaryTypeNameToken const& _type)
|
||||||
{
|
{
|
||||||
char const* tokenCstr = Token::toString(_typeToken);
|
string tokenString = _type.toString();
|
||||||
solAssert(Token::isElementaryTypeName(_typeToken),
|
solAssert(Token::isElementaryTypeName(_type.returnTok()),
|
||||||
"Expected an elementary type name but got " + ((tokenCstr) ? string(Token::toString(_typeToken)) : ""));
|
"Expected an elementary type name but got " + tokenString);
|
||||||
|
|
||||||
if (Token::Int <= _typeToken && _typeToken <= Token::Bytes32)
|
Token::Value token = _type.returnTok();
|
||||||
|
unsigned int M = _type.returnM();
|
||||||
|
|
||||||
|
switch (token)
|
||||||
{
|
{
|
||||||
int offset = _typeToken - Token::Int;
|
case Token::IntM:
|
||||||
int bytes = offset % 33;
|
return make_shared<IntegerType>(M, IntegerType::Modifier::Signed);
|
||||||
if (bytes == 0 && _typeToken != Token::Bytes1)
|
case Token::UIntM:
|
||||||
bytes = 32;
|
return make_shared<IntegerType>(M, IntegerType::Modifier::Unsigned);
|
||||||
int modifier = offset / 33;
|
case Token::BytesM:
|
||||||
switch(modifier)
|
return make_shared<FixedBytesType>(M);
|
||||||
{
|
case Token::Int:
|
||||||
case 0:
|
return make_shared<IntegerType>(256, IntegerType::Modifier::Signed);
|
||||||
return make_shared<IntegerType>(bytes * 8, IntegerType::Modifier::Signed);
|
case Token::UInt:
|
||||||
case 1:
|
return make_shared<IntegerType>(256, IntegerType::Modifier::Unsigned);
|
||||||
return make_shared<IntegerType>(bytes * 8, IntegerType::Modifier::Unsigned);
|
case Token::Byte:
|
||||||
case 2:
|
|
||||||
return make_shared<FixedBytesType>(bytes + 1);
|
|
||||||
default:
|
|
||||||
solAssert(false, "Unexpected modifier value. Should never happen");
|
|
||||||
return TypePointer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (_typeToken == Token::Byte)
|
|
||||||
return make_shared<FixedBytesType>(1);
|
return make_shared<FixedBytesType>(1);
|
||||||
else if (_typeToken == Token::Address)
|
case Token::Address:
|
||||||
return make_shared<IntegerType>(0, IntegerType::Modifier::Address);
|
return make_shared<IntegerType>(0, IntegerType::Modifier::Address);
|
||||||
else if (_typeToken == Token::Bool)
|
case Token::Bool:
|
||||||
return make_shared<BoolType>();
|
return make_shared<BoolType>();
|
||||||
else if (_typeToken == Token::Bytes)
|
case Token::Bytes:
|
||||||
return make_shared<ArrayType>(DataLocation::Storage);
|
return make_shared<ArrayType>(DataLocation::Storage);
|
||||||
else if (_typeToken == Token::String)
|
case Token::String:
|
||||||
return make_shared<ArrayType>(DataLocation::Storage, true);
|
return make_shared<ArrayType>(DataLocation::Storage, true);
|
||||||
else
|
//no types found
|
||||||
|
default:
|
||||||
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment(
|
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment(
|
||||||
"Unable to convert elementary typename " + string(Token::toString(_typeToken)) + " to type."
|
"Unable to convert elementary typename " + _type.toString() + " to type."
|
||||||
));
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TypePointer Type::fromElementaryTypeName(string const& _name)
|
TypePointer Type::fromElementaryTypeName(string const& _name)
|
||||||
{
|
{
|
||||||
return fromElementaryTypeName(Token::fromIdentifierOrKeyword(_name));
|
string keyword = _name.substr(0, _name.find_first_of("0123456789"));
|
||||||
|
string info = "";
|
||||||
|
if (_name.find_first_of("0123456789") != string::npos)
|
||||||
|
{
|
||||||
|
keyword += "M";
|
||||||
|
info = _name.substr(_name.find_first_of("0123456789"));
|
||||||
|
}
|
||||||
|
return fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword(keyword), info));
|
||||||
}
|
}
|
||||||
|
|
||||||
TypePointer Type::forLiteral(Literal const& _literal)
|
TypePointer Type::forLiteral(Literal const& _literal)
|
||||||
|
@ -140,7 +140,7 @@ public:
|
|||||||
/// @{
|
/// @{
|
||||||
/// @name Factory functions
|
/// @name Factory functions
|
||||||
/// Factory functions that convert an AST @ref TypeName to a Type.
|
/// Factory functions that convert an AST @ref TypeName to a Type.
|
||||||
static TypePointer fromElementaryTypeName(Token::Value _typeToken);
|
static TypePointer fromElementaryTypeName(ElementaryTypeNameToken const& _type);
|
||||||
static TypePointer fromElementaryTypeName(std::string const& _name);
|
static TypePointer fromElementaryTypeName(std::string const& _name);
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
@ -194,7 +194,8 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition(bool _isLibrary)
|
|||||||
expectToken(Token::LBrace);
|
expectToken(Token::LBrace);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Token::Value currentTokenValue= m_scanner->currentToken();
|
Token::Value currentTokenValue = m_scanner->currentToken();
|
||||||
|
string lit = m_scanner->currentLiteral();
|
||||||
if (currentTokenValue == Token::RBrace)
|
if (currentTokenValue == Token::RBrace)
|
||||||
break;
|
break;
|
||||||
else if (currentTokenValue == Token::Function)
|
else if (currentTokenValue == Token::Function)
|
||||||
@ -590,7 +591,8 @@ ASTPointer<TypeName> Parser::parseTypeName(bool _allowVar)
|
|||||||
Token::Value token = m_scanner->currentToken();
|
Token::Value token = m_scanner->currentToken();
|
||||||
if (Token::isElementaryTypeName(token))
|
if (Token::isElementaryTypeName(token))
|
||||||
{
|
{
|
||||||
type = ASTNodeFactory(*this).createNode<ElementaryTypeName>(token);
|
ElementaryTypeNameToken elemTypeName(token, m_scanner->currentTokenInfo());
|
||||||
|
type = ASTNodeFactory(*this).createNode<ElementaryTypeName>(elemTypeName);
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
}
|
}
|
||||||
else if (token == Token::Var)
|
else if (token == Token::Var)
|
||||||
@ -626,10 +628,12 @@ ASTPointer<Mapping> Parser::parseMapping()
|
|||||||
ASTNodeFactory nodeFactory(*this);
|
ASTNodeFactory nodeFactory(*this);
|
||||||
expectToken(Token::Mapping);
|
expectToken(Token::Mapping);
|
||||||
expectToken(Token::LParen);
|
expectToken(Token::LParen);
|
||||||
if (!Token::isElementaryTypeName(m_scanner->currentToken()))
|
|
||||||
fatalParserError(string("Expected elementary type name for mapping key type"));
|
|
||||||
ASTPointer<ElementaryTypeName> keyType;
|
ASTPointer<ElementaryTypeName> keyType;
|
||||||
keyType = ASTNodeFactory(*this).createNode<ElementaryTypeName>(m_scanner->currentToken());
|
if (Token::isElementaryTypeName(m_scanner->currentToken()))
|
||||||
|
keyType = ASTNodeFactory(*this).createNode<ElementaryTypeName>
|
||||||
|
(ElementaryTypeNameToken(m_scanner->currentToken(), m_scanner->currentTokenInfo()));
|
||||||
|
else
|
||||||
|
fatalParserError(string("Expected elementary type name for mapping key type"));
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
expectToken(Token::Arrow);
|
expectToken(Token::Arrow);
|
||||||
bool const allowVar = false;
|
bool const allowVar = false;
|
||||||
@ -815,12 +819,10 @@ ASTPointer<Statement> Parser::parseSimpleStatement(ASTPointer<ASTString> const&
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point, we have 'Identifier "["' or 'Identifier "." Identifier' or 'ElementoryTypeName "["'.
|
// At this point, we have 'Identifier "["' or 'Identifier "." Identifier' or 'ElementoryTypeName "["'.
|
||||||
// We parse '(Identifier ("." Identifier)* |ElementaryTypeName) ( "[" Expression "]" )+'
|
// We parse '(Identifier ("." Identifier)* |ElementaryTypeName) ( "[" Expression "]" )+'
|
||||||
// until we can decide whether to hand this over to ExpressionStatement or create a
|
// until we can decide whether to hand this over to ExpressionStatement or create a
|
||||||
// VariableDeclarationStatement out of it.
|
// VariableDeclarationStatement out of it.
|
||||||
|
|
||||||
vector<ASTPointer<PrimaryExpression>> path;
|
vector<ASTPointer<PrimaryExpression>> path;
|
||||||
bool startedWithElementary = false;
|
bool startedWithElementary = false;
|
||||||
if (m_scanner->currentToken() == Token::Identifier)
|
if (m_scanner->currentToken() == Token::Identifier)
|
||||||
@ -828,7 +830,8 @@ ASTPointer<Statement> Parser::parseSimpleStatement(ASTPointer<ASTString> const&
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
startedWithElementary = true;
|
startedWithElementary = true;
|
||||||
path.push_back(ASTNodeFactory(*this).createNode<ElementaryTypeNameExpression>(m_scanner->currentToken()));
|
ElementaryTypeNameToken elemToken(m_scanner->currentToken(), m_scanner->currentTokenInfo());
|
||||||
|
path.push_back(ASTNodeFactory(*this).createNode<ElementaryTypeNameExpression>(elemToken));
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
}
|
}
|
||||||
while (!startedWithElementary && m_scanner->currentToken() == Token::Period)
|
while (!startedWithElementary && m_scanner->currentToken() == Token::Period)
|
||||||
@ -1066,6 +1069,7 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
|
|||||||
ASTNodeFactory nodeFactory(*this);
|
ASTNodeFactory nodeFactory(*this);
|
||||||
Token::Value token = m_scanner->currentToken();
|
Token::Value token = m_scanner->currentToken();
|
||||||
ASTPointer<Expression> expression;
|
ASTPointer<Expression> expression;
|
||||||
|
|
||||||
switch (token)
|
switch (token)
|
||||||
{
|
{
|
||||||
case Token::TrueLiteral:
|
case Token::TrueLiteral:
|
||||||
@ -1134,8 +1138,8 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
|
|||||||
default:
|
default:
|
||||||
if (Token::isElementaryTypeName(token))
|
if (Token::isElementaryTypeName(token))
|
||||||
{
|
{
|
||||||
// used for casts
|
ElementaryTypeNameToken elementaryExpression(m_scanner->currentToken(), m_scanner->currentTokenInfo());
|
||||||
expression = nodeFactory.createNode<ElementaryTypeNameExpression>(token);
|
expression = nodeFactory.createNode<ElementaryTypeNameExpression>(elementaryExpression);
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1226,7 +1230,7 @@ ASTPointer<TypeName> Parser::typeNameIndexAccessStructure(
|
|||||||
if (auto typeName = dynamic_cast<ElementaryTypeNameExpression const*>(_path.front().get()))
|
if (auto typeName = dynamic_cast<ElementaryTypeNameExpression const*>(_path.front().get()))
|
||||||
{
|
{
|
||||||
solAssert(_path.size() == 1, "");
|
solAssert(_path.size() == 1, "");
|
||||||
type = nodeFactory.createNode<ElementaryTypeName>(typeName->typeToken());
|
type = nodeFactory.createNode<ElementaryTypeName>(typeName->typeName());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -82,13 +82,9 @@ bool isWhiteSpace(char c)
|
|||||||
{
|
{
|
||||||
return c == ' ' || c == '\n' || c == '\t' || c == '\r';
|
return c == ' ' || c == '\n' || c == '\t' || c == '\r';
|
||||||
}
|
}
|
||||||
bool isIdentifierStart(char c)
|
|
||||||
{
|
|
||||||
return c == '_' || c == '$' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
|
|
||||||
}
|
|
||||||
bool isIdentifierPart(char c)
|
bool isIdentifierPart(char c)
|
||||||
{
|
{
|
||||||
return isIdentifierStart(c) || isDecimalDigit(c);
|
return c == '_' || c == '$' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
|
||||||
}
|
}
|
||||||
|
|
||||||
int hexValue(char c)
|
int hexValue(char c)
|
||||||
@ -382,8 +378,12 @@ Token::Value Scanner::scanSlash()
|
|||||||
void Scanner::scanToken()
|
void Scanner::scanToken()
|
||||||
{
|
{
|
||||||
m_nextToken.literal.clear();
|
m_nextToken.literal.clear();
|
||||||
|
m_nextToken.extendedTokenInfo.clear();
|
||||||
m_nextSkippedComment.literal.clear();
|
m_nextSkippedComment.literal.clear();
|
||||||
|
m_nextSkippedComment.extendedTokenInfo.clear();
|
||||||
|
|
||||||
Token::Value token;
|
Token::Value token;
|
||||||
|
string tokenExtension = "";
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// Remember the position of the next token
|
// Remember the position of the next token
|
||||||
@ -550,8 +550,8 @@ void Scanner::scanToken()
|
|||||||
token = selectToken(Token::BitNot);
|
token = selectToken(Token::BitNot);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (isIdentifierStart(m_char))
|
if (isIdentifierPart(m_char))
|
||||||
token = scanIdentifierOrKeyword();
|
tie(token, tokenExtension) = scanIdentifierOrKeyword();
|
||||||
else if (isDecimalDigit(m_char))
|
else if (isDecimalDigit(m_char))
|
||||||
token = scanNumber();
|
token = scanNumber();
|
||||||
else if (skipWhitespace())
|
else if (skipWhitespace())
|
||||||
@ -568,6 +568,7 @@ void Scanner::scanToken()
|
|||||||
while (token == Token::Whitespace);
|
while (token == Token::Whitespace);
|
||||||
m_nextToken.location.end = sourcePos();
|
m_nextToken.location.end = sourcePos();
|
||||||
m_nextToken.token = token;
|
m_nextToken.token = token;
|
||||||
|
m_nextToken.extendedTokenInfo = tokenExtension;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Scanner::scanEscape()
|
bool Scanner::scanEscape()
|
||||||
@ -699,22 +700,34 @@ Token::Value Scanner::scanNumber(char _charSeen)
|
|||||||
// not be an identifier start or a decimal digit; see ECMA-262
|
// not be an identifier start or a decimal digit; see ECMA-262
|
||||||
// section 7.8.3, page 17 (note that we read only one decimal digit
|
// section 7.8.3, page 17 (note that we read only one decimal digit
|
||||||
// if the value is 0).
|
// if the value is 0).
|
||||||
if (isDecimalDigit(m_char) || isIdentifierStart(m_char))
|
if (isDecimalDigit(m_char) || isIdentifierPart(m_char))
|
||||||
return Token::Illegal;
|
return Token::Illegal;
|
||||||
literal.complete();
|
literal.complete();
|
||||||
return Token::Number;
|
return Token::Number;
|
||||||
}
|
}
|
||||||
|
|
||||||
Token::Value Scanner::scanIdentifierOrKeyword()
|
tuple<Token::Value, string> Scanner::scanIdentifierOrKeyword()
|
||||||
{
|
{
|
||||||
solAssert(isIdentifierStart(m_char), "");
|
solAssert(isIdentifierPart(m_char), "");
|
||||||
LiteralScope literal(this, LITERAL_TYPE_STRING);
|
LiteralScope literal(this, LITERAL_TYPE_STRING);
|
||||||
addLiteralCharAndAdvance();
|
addLiteralCharAndAdvance();
|
||||||
// Scan the rest of the identifier characters.
|
// Scan the rest of the identifier characters.
|
||||||
while (isIdentifierPart(m_char))
|
string keyword = "";
|
||||||
|
string description = "";
|
||||||
|
while (isIdentifierPart(m_char)) //get main keyword
|
||||||
|
addLiteralCharAndAdvance();
|
||||||
|
keyword = m_nextToken.literal;
|
||||||
|
while (isDecimalDigit(m_char) || isIdentifierPart(m_char)) //get the description
|
||||||
addLiteralCharAndAdvance();
|
addLiteralCharAndAdvance();
|
||||||
literal.complete();
|
literal.complete();
|
||||||
return Token::fromIdentifierOrKeyword(m_nextToken.literal);
|
if (m_nextToken.literal.find_first_of("0123456789") != string::npos)
|
||||||
|
{
|
||||||
|
description = m_nextToken.literal.substr(m_nextToken.literal.find_first_of("0123456789"));
|
||||||
|
keyword += "M";
|
||||||
|
if (description.find('x') != string::npos)
|
||||||
|
keyword += "xN";
|
||||||
|
}
|
||||||
|
return make_tuple(Token::fromIdentifierOrKeyword(keyword), description);
|
||||||
}
|
}
|
||||||
|
|
||||||
char CharStream::advanceAndGet(size_t _chars)
|
char CharStream::advanceAndGet(size_t _chars)
|
||||||
|
@ -122,6 +122,7 @@ public:
|
|||||||
|
|
||||||
SourceLocation currentLocation() const { return m_currentToken.location; }
|
SourceLocation currentLocation() const { return m_currentToken.location; }
|
||||||
std::string const& currentLiteral() const { return m_currentToken.literal; }
|
std::string const& currentLiteral() const { return m_currentToken.literal; }
|
||||||
|
std::string const& currentTokenInfo() const { return m_currentToken.extendedTokenInfo; }
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
///@{
|
///@{
|
||||||
@ -160,6 +161,7 @@ private:
|
|||||||
Token::Value token;
|
Token::Value token;
|
||||||
SourceLocation location;
|
SourceLocation location;
|
||||||
std::string literal;
|
std::string literal;
|
||||||
|
std::string extendedTokenInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
///@{
|
///@{
|
||||||
@ -190,7 +192,7 @@ private:
|
|||||||
|
|
||||||
void scanDecimalDigits();
|
void scanDecimalDigits();
|
||||||
Token::Value scanNumber(char _charSeen = 0);
|
Token::Value scanNumber(char _charSeen = 0);
|
||||||
Token::Value scanIdentifierOrKeyword();
|
std::tuple<Token::Value, std::string> scanIdentifierOrKeyword();
|
||||||
|
|
||||||
Token::Value scanString();
|
Token::Value scanString();
|
||||||
Token::Value scanSingleLineDocComment();
|
Token::Value scanSingleLineDocComment();
|
||||||
|
@ -50,6 +50,44 @@ namespace dev
|
|||||||
namespace solidity
|
namespace solidity
|
||||||
{
|
{
|
||||||
|
|
||||||
|
bool ElementaryTypeNameToken::isElementaryTypeName(Token::Value _baseType, string const& _info)
|
||||||
|
{
|
||||||
|
if (!Token::isElementaryTypeName(_baseType))
|
||||||
|
return false;
|
||||||
|
string baseType = Token::toString(_baseType);
|
||||||
|
if (baseType.find('M') == string::npos)
|
||||||
|
return true;
|
||||||
|
short m;
|
||||||
|
m = stoi(_info.substr(_info.find_first_of("0123456789")));
|
||||||
|
|
||||||
|
if (baseType == "bytesM")
|
||||||
|
return (0 < m && m <= 32) ? true : false;
|
||||||
|
else if (baseType == "uintM" || baseType == "intM")
|
||||||
|
return (0 < m && m <= 256 && m % 8 == 0) ? true : false;
|
||||||
|
else if (baseType == "ufixedMxN" || baseType == "fixedMxN")
|
||||||
|
{
|
||||||
|
short n;
|
||||||
|
m = stoi(_info.substr(_info.find_first_of("0123456789"), _info.find_last_of("x") - 1));
|
||||||
|
n = stoi(_info.substr(_info.find_last_of("x") + 1));
|
||||||
|
return (0 < n + m && n + m <= 256 && ((n % 8 == 0) && (m % 8 == 0)));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
tuple<string, unsigned int, unsigned int> ElementaryTypeNameToken::setTypes(Token::Value _baseType, string const& _toSet)
|
||||||
|
{
|
||||||
|
string baseType = Token::toString(_baseType);
|
||||||
|
if (_toSet.find_first_of("0123456789") == string::npos)
|
||||||
|
return make_tuple(baseType, 0, 0);
|
||||||
|
baseType = baseType.substr(0, baseType.find('M') - 1) + _toSet;
|
||||||
|
size_t index = _toSet.find('x') == string::npos ? string::npos : _toSet.find('x') - 1;
|
||||||
|
unsigned int m = stoi(_toSet.substr(0, index));
|
||||||
|
unsigned int n = 0;
|
||||||
|
if (baseType == "fixed" || baseType == "ufixed")
|
||||||
|
n = stoi(_toSet.substr(_toSet.find('x') + 1));
|
||||||
|
return make_tuple(baseType, m, n);
|
||||||
|
}
|
||||||
|
|
||||||
#define T(name, string, precedence) #name,
|
#define T(name, string, precedence) #name,
|
||||||
char const* const Token::m_name[NUM_TOKENS] =
|
char const* const Token::m_name[NUM_TOKENS] =
|
||||||
{
|
{
|
||||||
@ -80,7 +118,7 @@ char const Token::m_tokenType[] =
|
|||||||
{
|
{
|
||||||
TOKEN_LIST(KT, KK)
|
TOKEN_LIST(KT, KK)
|
||||||
};
|
};
|
||||||
Token::Value Token::fromIdentifierOrKeyword(const std::string& _name)
|
Token::Value Token::fromIdentifierOrKeyword(const string& _name)
|
||||||
{
|
{
|
||||||
// The following macros are used inside TOKEN_LIST and cause non-keyword tokens to be ignored
|
// The following macros are used inside TOKEN_LIST and cause non-keyword tokens to be ignored
|
||||||
// and keywords to be put inside the keywords variable.
|
// and keywords to be put inside the keywords variable.
|
||||||
|
@ -187,113 +187,21 @@ namespace solidity
|
|||||||
K(SubWeek, "weeks", 0) \
|
K(SubWeek, "weeks", 0) \
|
||||||
K(SubYear, "years", 0) \
|
K(SubYear, "years", 0) \
|
||||||
K(After, "after", 0) \
|
K(After, "after", 0) \
|
||||||
/* type keywords, keep them in this order, keep int as first keyword
|
/* type keywords*/ \
|
||||||
* the implementation in Types.cpp has to be synced to this here */\
|
|
||||||
K(Int, "int", 0) \
|
K(Int, "int", 0) \
|
||||||
K(Int8, "int8", 0) \
|
K(IntM, "intM", 0) \
|
||||||
K(Int16, "int16", 0) \
|
|
||||||
K(Int24, "int24", 0) \
|
|
||||||
K(Int32, "int32", 0) \
|
|
||||||
K(Int40, "int40", 0) \
|
|
||||||
K(Int48, "int48", 0) \
|
|
||||||
K(Int56, "int56", 0) \
|
|
||||||
K(Int64, "int64", 0) \
|
|
||||||
K(Int72, "int72", 0) \
|
|
||||||
K(Int80, "int80", 0) \
|
|
||||||
K(Int88, "int88", 0) \
|
|
||||||
K(Int96, "int96", 0) \
|
|
||||||
K(Int104, "int104", 0) \
|
|
||||||
K(Int112, "int112", 0) \
|
|
||||||
K(Int120, "int120", 0) \
|
|
||||||
K(Int128, "int128", 0) \
|
|
||||||
K(Int136, "int136", 0) \
|
|
||||||
K(Int144, "int144", 0) \
|
|
||||||
K(Int152, "int152", 0) \
|
|
||||||
K(Int160, "int160", 0) \
|
|
||||||
K(Int168, "int168", 0) \
|
|
||||||
K(Int176, "int176", 0) \
|
|
||||||
K(Int184, "int184", 0) \
|
|
||||||
K(Int192, "int192", 0) \
|
|
||||||
K(Int200, "int200", 0) \
|
|
||||||
K(Int208, "int208", 0) \
|
|
||||||
K(Int216, "int216", 0) \
|
|
||||||
K(Int224, "int224", 0) \
|
|
||||||
K(Int232, "int232", 0) \
|
|
||||||
K(Int240, "int240", 0) \
|
|
||||||
K(Int248, "int248", 0) \
|
|
||||||
K(Int256, "int256", 0) \
|
|
||||||
K(UInt, "uint", 0) \
|
K(UInt, "uint", 0) \
|
||||||
K(UInt8, "uint8", 0) \
|
K(UIntM, "uintM", 0) \
|
||||||
K(UInt16, "uint16", 0) \
|
|
||||||
K(UInt24, "uint24", 0) \
|
|
||||||
K(UInt32, "uint32", 0) \
|
|
||||||
K(UInt40, "uint40", 0) \
|
|
||||||
K(UInt48, "uint48", 0) \
|
|
||||||
K(UInt56, "uint56", 0) \
|
|
||||||
K(UInt64, "uint64", 0) \
|
|
||||||
K(UInt72, "uint72", 0) \
|
|
||||||
K(UInt80, "uint80", 0) \
|
|
||||||
K(UInt88, "uint88", 0) \
|
|
||||||
K(UInt96, "uint96", 0) \
|
|
||||||
K(UInt104, "uint104", 0) \
|
|
||||||
K(UInt112, "uint112", 0) \
|
|
||||||
K(UInt120, "uint120", 0) \
|
|
||||||
K(UInt128, "uint128", 0) \
|
|
||||||
K(UInt136, "uint136", 0) \
|
|
||||||
K(UInt144, "uint144", 0) \
|
|
||||||
K(UInt152, "uint152", 0) \
|
|
||||||
K(UInt160, "uint160", 0) \
|
|
||||||
K(UInt168, "uint168", 0) \
|
|
||||||
K(UInt176, "uint176", 0) \
|
|
||||||
K(UInt184, "uint184", 0) \
|
|
||||||
K(UInt192, "uint192", 0) \
|
|
||||||
K(UInt200, "uint200", 0) \
|
|
||||||
K(UInt208, "uint208", 0) \
|
|
||||||
K(UInt216, "uint216", 0) \
|
|
||||||
K(UInt224, "uint224", 0) \
|
|
||||||
K(UInt232, "uint232", 0) \
|
|
||||||
K(UInt240, "uint240", 0) \
|
|
||||||
K(UInt248, "uint248", 0) \
|
|
||||||
K(UInt256, "uint256", 0) \
|
|
||||||
K(Bytes1, "bytes1", 0) \
|
|
||||||
K(Bytes2, "bytes2", 0) \
|
|
||||||
K(Bytes3, "bytes3", 0) \
|
|
||||||
K(Bytes4, "bytes4", 0) \
|
|
||||||
K(Bytes5, "bytes5", 0) \
|
|
||||||
K(Bytes6, "bytes6", 0) \
|
|
||||||
K(Bytes7, "bytes7", 0) \
|
|
||||||
K(Bytes8, "bytes8", 0) \
|
|
||||||
K(Bytes9, "bytes9", 0) \
|
|
||||||
K(Bytes10, "bytes10", 0) \
|
|
||||||
K(Bytes11, "bytes11", 0) \
|
|
||||||
K(Bytes12, "bytes12", 0) \
|
|
||||||
K(Bytes13, "bytes13", 0) \
|
|
||||||
K(Bytes14, "bytes14", 0) \
|
|
||||||
K(Bytes15, "bytes15", 0) \
|
|
||||||
K(Bytes16, "bytes16", 0) \
|
|
||||||
K(Bytes17, "bytes17", 0) \
|
|
||||||
K(Bytes18, "bytes18", 0) \
|
|
||||||
K(Bytes19, "bytes19", 0) \
|
|
||||||
K(Bytes20, "bytes20", 0) \
|
|
||||||
K(Bytes21, "bytes21", 0) \
|
|
||||||
K(Bytes22, "bytes22", 0) \
|
|
||||||
K(Bytes23, "bytes23", 0) \
|
|
||||||
K(Bytes24, "bytes24", 0) \
|
|
||||||
K(Bytes25, "bytes25", 0) \
|
|
||||||
K(Bytes26, "bytes26", 0) \
|
|
||||||
K(Bytes27, "bytes27", 0) \
|
|
||||||
K(Bytes28, "bytes28", 0) \
|
|
||||||
K(Bytes29, "bytes29", 0) \
|
|
||||||
K(Bytes30, "bytes30", 0) \
|
|
||||||
K(Bytes31, "bytes31", 0) \
|
|
||||||
K(Bytes32, "bytes32", 0) \
|
|
||||||
K(Bytes, "bytes", 0) \
|
K(Bytes, "bytes", 0) \
|
||||||
|
K(BytesM, "bytesM", 0) \
|
||||||
K(Byte, "byte", 0) \
|
K(Byte, "byte", 0) \
|
||||||
K(String, "string", 0) \
|
K(String, "string", 0) \
|
||||||
K(Address, "address", 0) \
|
K(Address, "address", 0) \
|
||||||
K(Bool, "bool", 0) \
|
K(Bool, "bool", 0) \
|
||||||
K(Real, "real", 0) \
|
K(Fixed, "fixed", 0) \
|
||||||
K(UReal, "ureal", 0) \
|
K(FixedMxN, "fixedMxN", 0) \
|
||||||
|
K(UFixed, "ufixed", 0) \
|
||||||
|
K(UFixedMxN, "ufixedMxN", 0) \
|
||||||
T(TypesEnd, NULL, 0) /* used as type enum end marker */ \
|
T(TypesEnd, NULL, 0) /* used as type enum end marker */ \
|
||||||
\
|
\
|
||||||
/* Literals */ \
|
/* Literals */ \
|
||||||
@ -403,5 +311,29 @@ private:
|
|||||||
static char const m_tokenType[NUM_TOKENS];
|
static char const m_tokenType[NUM_TOKENS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ElementaryTypeNameToken
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ElementaryTypeNameToken(Token::Value token, std::string const& description)
|
||||||
|
{
|
||||||
|
solAssert(isElementaryTypeName(token, description), "");
|
||||||
|
std::tie(m_name, M, N) = setTypes(token, description);
|
||||||
|
tok = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string toString(bool const& tokValue = false) const& { return tokValue ? Token::toString(tok) : m_name; }
|
||||||
|
unsigned int const& returnM() const& { return M; }
|
||||||
|
unsigned int const& returnN() const& { return N; }
|
||||||
|
Token::Value const& returnTok() const& { return tok; }
|
||||||
|
static bool isElementaryTypeName(Token::Value _baseType, std::string const& _info);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Token::Value tok;
|
||||||
|
std::string m_name;
|
||||||
|
unsigned int M;
|
||||||
|
unsigned int N;
|
||||||
|
std::tuple<std::string, unsigned int, unsigned int> setTypes(Token::Value _baseType, std::string const& _toSet);
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -726,7 +726,7 @@ BOOST_AUTO_TEST_CASE(small_signed_types)
|
|||||||
BOOST_AUTO_TEST_CASE(strings)
|
BOOST_AUTO_TEST_CASE(strings)
|
||||||
{
|
{
|
||||||
char const* sourceCode = "contract test {\n"
|
char const* sourceCode = "contract test {\n"
|
||||||
" function fixed() returns(bytes32 ret) {\n"
|
" function fixedBytes() returns(bytes32 ret) {\n"
|
||||||
" return \"abc\\x00\\xff__\";\n"
|
" return \"abc\\x00\\xff__\";\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" function pipeThrough(bytes2 small, bool one) returns(bytes16 large, bool oneRet) {\n"
|
" function pipeThrough(bytes2 small, bool one) returns(bytes16 large, bool oneRet) {\n"
|
||||||
@ -735,7 +735,7 @@ BOOST_AUTO_TEST_CASE(strings)
|
|||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
compileAndRun(sourceCode);
|
compileAndRun(sourceCode);
|
||||||
BOOST_CHECK(callContractFunction("fixed()") == encodeArgs(string("abc\0\xff__", 7)));
|
BOOST_CHECK(callContractFunction("fixedBytes()") == encodeArgs(string("abc\0\xff__", 7)));
|
||||||
BOOST_CHECK(callContractFunction("pipeThrough(bytes2,bool)", string("\0\x02", 2), true) == encodeArgs(string("\0\x2", 2), true));
|
BOOST_CHECK(callContractFunction("pipeThrough(bytes2,bool)", string("\0\x02", 2), true) == encodeArgs(string("\0\x2", 2), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -927,13 +927,13 @@ BOOST_AUTO_TEST_CASE(modifier_returns_value)
|
|||||||
BOOST_AUTO_TEST_CASE(state_variable_accessors)
|
BOOST_AUTO_TEST_CASE(state_variable_accessors)
|
||||||
{
|
{
|
||||||
char const* text = "contract test {\n"
|
char const* text = "contract test {\n"
|
||||||
" function fun() {\n"
|
" function fun() {\n"
|
||||||
" uint64(2);\n"
|
" uint64(2);\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"uint256 public foo;\n"
|
"uint256 public foo;\n"
|
||||||
"mapping(uint=>bytes4) public map;\n"
|
"mapping(uint=>bytes4) public map;\n"
|
||||||
"mapping(uint=>mapping(uint=>bytes4)) public multiple_map;\n"
|
"mapping(uint=>mapping(uint=>bytes4)) public multiple_map;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
ASTPointer<SourceUnit> source;
|
ASTPointer<SourceUnit> source;
|
||||||
ContractDefinition const* contract;
|
ContractDefinition const* contract;
|
||||||
@ -1632,107 +1632,108 @@ BOOST_AUTO_TEST_CASE(storage_variable_initialization_with_incorrect_type_string)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_fromElementaryTypeName)
|
BOOST_AUTO_TEST_CASE(test_fromElementaryTypeName)
|
||||||
{
|
{
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int) == *make_shared<IntegerType>(256, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int8) == *make_shared<IntegerType>(8, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int16) == *make_shared<IntegerType>(16, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int24) == *make_shared<IntegerType>(24, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int32) == *make_shared<IntegerType>(32, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int40) == *make_shared<IntegerType>(40, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int48) == *make_shared<IntegerType>(48, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int56) == *make_shared<IntegerType>(56, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int64) == *make_shared<IntegerType>(64, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int72) == *make_shared<IntegerType>(72, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int80) == *make_shared<IntegerType>(80, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int88) == *make_shared<IntegerType>(88, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int96) == *make_shared<IntegerType>(96, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int104) == *make_shared<IntegerType>(104, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int112) == *make_shared<IntegerType>(112, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int120) == *make_shared<IntegerType>(120, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int128) == *make_shared<IntegerType>(128, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int136) == *make_shared<IntegerType>(136, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int144) == *make_shared<IntegerType>(144, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int152) == *make_shared<IntegerType>(152, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int160) == *make_shared<IntegerType>(160, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int168) == *make_shared<IntegerType>(168, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int176) == *make_shared<IntegerType>(176, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int184) == *make_shared<IntegerType>(184, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int192) == *make_shared<IntegerType>(192, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int200) == *make_shared<IntegerType>(200, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int208) == *make_shared<IntegerType>(208, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int216) == *make_shared<IntegerType>(216, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int224) == *make_shared<IntegerType>(224, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int232) == *make_shared<IntegerType>(232, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int240) == *make_shared<IntegerType>(240, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int248) == *make_shared<IntegerType>(248, IntegerType::Modifier::Signed));
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Int256) == *make_shared<IntegerType>(256, IntegerType::Modifier::Signed));
|
|
||||||
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt) == *make_shared<IntegerType>(256, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("int"), "")) == *make_shared<IntegerType>(256, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt8) == *make_shared<IntegerType>(8, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "8")) == *make_shared<IntegerType>(8, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt16) == *make_shared<IntegerType>(16, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "16")) == *make_shared<IntegerType>(16, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt24) == *make_shared<IntegerType>(24, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "24")) == *make_shared<IntegerType>(24, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt32) == *make_shared<IntegerType>(32, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "32")) == *make_shared<IntegerType>(32, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt40) == *make_shared<IntegerType>(40, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "40")) == *make_shared<IntegerType>(40, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt48) == *make_shared<IntegerType>(48, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "48")) == *make_shared<IntegerType>(48, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt56) == *make_shared<IntegerType>(56, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "56")) == *make_shared<IntegerType>(56, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt64) == *make_shared<IntegerType>(64, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "64")) == *make_shared<IntegerType>(64, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt72) == *make_shared<IntegerType>(72, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "72")) == *make_shared<IntegerType>(72, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt80) == *make_shared<IntegerType>(80, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "80")) == *make_shared<IntegerType>(80, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt88) == *make_shared<IntegerType>(88, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "88")) == *make_shared<IntegerType>(88, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt96) == *make_shared<IntegerType>(96, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "96")) == *make_shared<IntegerType>(96, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt104) == *make_shared<IntegerType>(104, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "104")) == *make_shared<IntegerType>(104, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt112) == *make_shared<IntegerType>(112, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "112")) == *make_shared<IntegerType>(112, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt120) == *make_shared<IntegerType>(120, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "120")) == *make_shared<IntegerType>(120, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt128) == *make_shared<IntegerType>(128, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "128")) == *make_shared<IntegerType>(128, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt136) == *make_shared<IntegerType>(136, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "136")) == *make_shared<IntegerType>(136, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt144) == *make_shared<IntegerType>(144, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "144")) == *make_shared<IntegerType>(144, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt152) == *make_shared<IntegerType>(152, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "152")) == *make_shared<IntegerType>(152, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt160) == *make_shared<IntegerType>(160, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "160")) == *make_shared<IntegerType>(160, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt168) == *make_shared<IntegerType>(168, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "168")) == *make_shared<IntegerType>(168, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt176) == *make_shared<IntegerType>(176, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "176")) == *make_shared<IntegerType>(176, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt184) == *make_shared<IntegerType>(184, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "184")) == *make_shared<IntegerType>(184, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt192) == *make_shared<IntegerType>(192, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "192")) == *make_shared<IntegerType>(192, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt200) == *make_shared<IntegerType>(200, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "200")) == *make_shared<IntegerType>(200, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt208) == *make_shared<IntegerType>(208, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "208")) == *make_shared<IntegerType>(208, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt216) == *make_shared<IntegerType>(216, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "216")) == *make_shared<IntegerType>(216, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt224) == *make_shared<IntegerType>(224, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "224")) == *make_shared<IntegerType>(224, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt232) == *make_shared<IntegerType>(232, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "232")) == *make_shared<IntegerType>(232, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt240) == *make_shared<IntegerType>(240, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "240")) == *make_shared<IntegerType>(240, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt248) == *make_shared<IntegerType>(248, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "248")) == *make_shared<IntegerType>(248, IntegerType::Modifier::Signed));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::UInt256) == *make_shared<IntegerType>(256, IntegerType::Modifier::Unsigned));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("intM"), "256")) == *make_shared<IntegerType>(256, IntegerType::Modifier::Signed));
|
||||||
|
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Byte) == *make_shared<FixedBytesType>(1));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uint"), "")) == *make_shared<IntegerType>(256, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes1) == *make_shared<FixedBytesType>(1));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "8")) == *make_shared<IntegerType>(8, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes2) == *make_shared<FixedBytesType>(2));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "16")) == *make_shared<IntegerType>(16, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes3) == *make_shared<FixedBytesType>(3));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "24")) == *make_shared<IntegerType>(24, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes4) == *make_shared<FixedBytesType>(4));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "32")) == *make_shared<IntegerType>(32, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes5) == *make_shared<FixedBytesType>(5));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "40")) == *make_shared<IntegerType>(40, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes6) == *make_shared<FixedBytesType>(6));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "48")) == *make_shared<IntegerType>(48, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes7) == *make_shared<FixedBytesType>(7));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "56")) == *make_shared<IntegerType>(56, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes8) == *make_shared<FixedBytesType>(8));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "64")) == *make_shared<IntegerType>(64, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes9) == *make_shared<FixedBytesType>(9));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "72")) == *make_shared<IntegerType>(72, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes10) == *make_shared<FixedBytesType>(10));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "80")) == *make_shared<IntegerType>(80, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes11) == *make_shared<FixedBytesType>(11));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "88")) == *make_shared<IntegerType>(88, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes12) == *make_shared<FixedBytesType>(12));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "96")) == *make_shared<IntegerType>(96, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes13) == *make_shared<FixedBytesType>(13));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "104")) == *make_shared<IntegerType>(104, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes14) == *make_shared<FixedBytesType>(14));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "112")) == *make_shared<IntegerType>(112, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes15) == *make_shared<FixedBytesType>(15));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "120")) == *make_shared<IntegerType>(120, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes16) == *make_shared<FixedBytesType>(16));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "128")) == *make_shared<IntegerType>(128, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes17) == *make_shared<FixedBytesType>(17));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "136")) == *make_shared<IntegerType>(136, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes18) == *make_shared<FixedBytesType>(18));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "144")) == *make_shared<IntegerType>(144, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes19) == *make_shared<FixedBytesType>(19));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "152")) == *make_shared<IntegerType>(152, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes20) == *make_shared<FixedBytesType>(20));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "160")) == *make_shared<IntegerType>(160, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes21) == *make_shared<FixedBytesType>(21));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "168")) == *make_shared<IntegerType>(168, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes22) == *make_shared<FixedBytesType>(22));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "176")) == *make_shared<IntegerType>(176, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes23) == *make_shared<FixedBytesType>(23));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "184")) == *make_shared<IntegerType>(184, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes24) == *make_shared<FixedBytesType>(24));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "192")) == *make_shared<IntegerType>(192, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes25) == *make_shared<FixedBytesType>(25));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "200")) == *make_shared<IntegerType>(200, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes26) == *make_shared<FixedBytesType>(26));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "208")) == *make_shared<IntegerType>(208, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes27) == *make_shared<FixedBytesType>(27));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "216")) == *make_shared<IntegerType>(216, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes28) == *make_shared<FixedBytesType>(28));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "224")) == *make_shared<IntegerType>(224, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes29) == *make_shared<FixedBytesType>(29));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "232")) == *make_shared<IntegerType>(232, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes30) == *make_shared<FixedBytesType>(30));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "240")) == *make_shared<IntegerType>(240, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes31) == *make_shared<FixedBytesType>(31));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "248")) == *make_shared<IntegerType>(248, IntegerType::Modifier::Unsigned));
|
||||||
BOOST_CHECK(*Type::fromElementaryTypeName(Token::Bytes32) == *make_shared<FixedBytesType>(32));
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "256")) == *make_shared<IntegerType>(256, IntegerType::Modifier::Unsigned));
|
||||||
|
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("byte"), "")) == *make_shared<FixedBytesType>(1));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "1")) == *make_shared<FixedBytesType>(1));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "2")) == *make_shared<FixedBytesType>(2));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "3")) == *make_shared<FixedBytesType>(3));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "4")) == *make_shared<FixedBytesType>(4));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "5")) == *make_shared<FixedBytesType>(5));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "6")) == *make_shared<FixedBytesType>(6));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "7")) == *make_shared<FixedBytesType>(7));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "8")) == *make_shared<FixedBytesType>(8));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "9")) == *make_shared<FixedBytesType>(9));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "10")) == *make_shared<FixedBytesType>(10));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "11")) == *make_shared<FixedBytesType>(11));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "12")) == *make_shared<FixedBytesType>(12));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "13")) == *make_shared<FixedBytesType>(13));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "14")) == *make_shared<FixedBytesType>(14));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "15")) == *make_shared<FixedBytesType>(15));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "16")) == *make_shared<FixedBytesType>(16));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "17")) == *make_shared<FixedBytesType>(17));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "18")) == *make_shared<FixedBytesType>(18));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "19")) == *make_shared<FixedBytesType>(19));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "20")) == *make_shared<FixedBytesType>(20));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "21")) == *make_shared<FixedBytesType>(21));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "22")) == *make_shared<FixedBytesType>(22));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "23")) == *make_shared<FixedBytesType>(23));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "24")) == *make_shared<FixedBytesType>(24));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "25")) == *make_shared<FixedBytesType>(25));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "26")) == *make_shared<FixedBytesType>(26));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "27")) == *make_shared<FixedBytesType>(27));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "28")) == *make_shared<FixedBytesType>(28));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "29")) == *make_shared<FixedBytesType>(29));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "30")) == *make_shared<FixedBytesType>(30));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "31")) == *make_shared<FixedBytesType>(31));
|
||||||
|
BOOST_CHECK(*Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("bytesM"), "32")) == *make_shared<FixedBytesType>(32));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(test_byte_is_alias_of_byte1)
|
BOOST_AUTO_TEST_CASE(test_byte_is_alias_of_byte1)
|
||||||
|
@ -37,9 +37,9 @@ BOOST_AUTO_TEST_SUITE(SolidityTypes)
|
|||||||
BOOST_AUTO_TEST_CASE(storage_layout_simple)
|
BOOST_AUTO_TEST_CASE(storage_layout_simple)
|
||||||
{
|
{
|
||||||
MemberList members(MemberList::MemberMap({
|
MemberList members(MemberList::MemberMap({
|
||||||
{string("first"), Type::fromElementaryTypeName("uint128")},
|
{string("first"), Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "128"))},
|
||||||
{string("second"), Type::fromElementaryTypeName("uint120")},
|
{string("second"), Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "120"))},
|
||||||
{string("wraps"), Type::fromElementaryTypeName("uint16")}
|
{string("wraps"), Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "16"))}
|
||||||
}));
|
}));
|
||||||
BOOST_REQUIRE_EQUAL(u256(2), members.storageSize());
|
BOOST_REQUIRE_EQUAL(u256(2), members.storageSize());
|
||||||
BOOST_REQUIRE(members.memberStorageOffset("first") != nullptr);
|
BOOST_REQUIRE(members.memberStorageOffset("first") != nullptr);
|
||||||
@ -53,15 +53,15 @@ BOOST_AUTO_TEST_CASE(storage_layout_simple)
|
|||||||
BOOST_AUTO_TEST_CASE(storage_layout_mapping)
|
BOOST_AUTO_TEST_CASE(storage_layout_mapping)
|
||||||
{
|
{
|
||||||
MemberList members(MemberList::MemberMap({
|
MemberList members(MemberList::MemberMap({
|
||||||
{string("first"), Type::fromElementaryTypeName("uint128")},
|
{string("first"), Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "128"))},
|
||||||
{string("second"), make_shared<MappingType>(
|
{string("second"), make_shared<MappingType>(
|
||||||
Type::fromElementaryTypeName("uint8"),
|
Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "8")),
|
||||||
Type::fromElementaryTypeName("uint8")
|
Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "8"))
|
||||||
)},
|
)},
|
||||||
{string("third"), Type::fromElementaryTypeName("uint16")},
|
{string("third"), Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "16"))},
|
||||||
{string("final"), make_shared<MappingType>(
|
{string("final"), make_shared<MappingType>(
|
||||||
Type::fromElementaryTypeName("uint8"),
|
Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "8")),
|
||||||
Type::fromElementaryTypeName("uint8")
|
Type::fromElementaryTypeName(ElementaryTypeNameToken(Token::fromIdentifierOrKeyword("uintM"), "8"))
|
||||||
)},
|
)},
|
||||||
}));
|
}));
|
||||||
BOOST_REQUIRE_EQUAL(u256(4), members.storageSize());
|
BOOST_REQUIRE_EQUAL(u256(4), members.storageSize());
|
||||||
|
Loading…
Reference in New Issue
Block a user